1. 06 Oct, 2008 13 commits
    • Eric Wong's avatar
      Add .gitignore · 09c78663
      Eric Wong authored
      These patterns have been sitting in my private .git/info/exclude
      files since 2005 because we used to use SVN.
      09c78663
    • Eric Wong's avatar
      song: stop storing song_type · f1c53fe0
      Eric Wong authored
      We already know if a song is a URL or not based on whether it
      has parentDir defined or not.  Hopefully one day in the future
      we can drop HTTP support from MPD entirely when an HTTP
      filesystem comes along and we can access streams via open(2).
      f1c53fe0
    • Max Kellermann's avatar
      song: don't make the struct packed · 22e40b61
      Max Kellermann authored
      The "packed" attribute may have negative side effects on performance.
      Remove the "packed" attribute, and increase the size of "song.url" to
      a multiple of the machine word size.
      22e40b61
    • Eric Wong's avatar
      song: use flex arrays to store song->url · 267b2cd6
      Eric Wong authored
      Reduce the number of allocations we make, so there's less
      pressure on the allocator and less overhead to keep track
      of the allocations in.
      267b2cd6
    • Eric Wong's avatar
      song: get rid of newNullSong() · 43761441
      Eric Wong authored
      It didn't save us any lines of code nor did it do anything
      useful since we would overwrite everything anyways.
      43761441
    • Eric Wong's avatar
      song: call freeJustSong if newSong fails · dc245f38
      Eric Wong authored
      There's no reason to scan the playlist for a song we
      just allocated.
      dc245f38
    • Eric Wong's avatar
      command: fix return status · d51da61b
      Eric Wong authored
      This got broken when listHandlerFunc was removed.  Since we no
      longer need it and it's confusing, remove processCommandInternal
      and just use process_command.
      d51da61b
    • Eric Wong's avatar
      directory: reuse existing directory if found on update · 836dcc28
      Eric Wong authored
      Instead of allocating a new one, just reuse an existing
      one if one is found when rereading the DB.  This is a small
      makes the previous commit work on subdirectories
      of the root music directory.
      
      [1] "song: better handling of existing songs when rereading DB"
      836dcc28
    • Eric Wong's avatar
      tag: merge clearMpdTag into tag_free · fb4d55c5
      Eric Wong authored
      avoid some redundant clearing logic as well, since the tag is
      getting freed.
      fb4d55c5
    • Eric Wong's avatar
      command: get rid of specialized list handlers · 8faf6487
      Eric Wong authored
      commands should really not behave differently if they're issued
      inside a command list or not; so stop having special handler
      functions to deal with them.  "update" was the only command
      that used this functionality and I changed that in the last
      commit to serialize access.
      8faf6487
    • Eric Wong's avatar
      directory: simplify list update handling logic · 37a8239f
      Eric Wong authored
      Now the "update" command can be issued multiple times regardless
      of whether the client is in list mode or not.
      
      We serialize the update tasks to prevent updates from trampling
      over each other and will spawn another update task
      once the current one is finished updating and reaped.
      
      Right now we cap the queue size to 32 which is probably enough (I
      bet most people usually run update with no argument anyways);
      but we can make it grow/shrink dynamically if needed.  There'll
      still be a hard-coded limit to prevent DoS attacks, though.
      37a8239f
    • Eric Wong's avatar
      main_notify: define main_task so we can use it for assertions · 700f18ee
      Eric Wong authored
      It'll be easier to keep track of what code runs in what
      task/thread this way.
      700f18ee
    • Eric Wong's avatar
      directory: streamline deletes · 19a4803b
      Eric Wong authored
      Instead of relying on the shortname, just pass the song pointer
      to prevent redundant lookups during deletes.
      19a4803b
  2. 29 Sep, 2008 27 commits
    • Max Kellermann's avatar
      pcm_utils: 24 bit support · 6aec6163
      Max Kellermann authored
      Add support for 24 bit PCM samples to all functions.  Note that
      pcm_convertAudioFormat() converts 24 bit samples to 16 bit; to
      preserve full quality, support for "real" 24 bit conversion should be
      added.
      6aec6163
    • Max Kellermann's avatar
      pcm_utils: moved code to special 8/16 bit functions · ac6bc76c
      Max Kellermann authored
      Moved code into separate bit specific functions:
      - pcm_volumeChange() -> pcm_volume_change_X()
      - pcm_add() -> pcm_add_X()
      - pcm_convertTo16bit() -> pcm_convert_8_to_16()
      ac6bc76c
    • Max Kellermann's avatar
      pcm_utils: pass only one buffer size to pcm_mix() · c85b570a
      Max Kellermann authored
      pcm_mix() might overflow the destination buffer if it is smaller than
      the second buffer.  This is ok because the physical buffer size passed
      by cross_fade_apply() is always big enough, but clutters pcm_mix()
      with complicated length checks and contains a dangerous buffer
      overflow pitfall.  Simplify pcm_mix()/pcm_add() and pass only the
      smaller buffer size; let cross_fade_apply() do the memcpy().
      c85b570a
    • Max Kellermann's avatar
      audio_output: added method pause() · 6e21e24c
      Max Kellermann authored
      pause() puts the audio output into pause mode: if supported, it may
      perform a special action, which keeps the device open, but does not
      play anything.  Output plugins like "shout" might want to play silence
      during pause, so their clients won't be disconnected.  Plugins which
      do not support pausing will simply be closed, and have to be reopened
      when unpaused.
      
      This pach includes an implementation for the shout plugin, which
      sends silence chunks.
      6e21e24c
    • Max Kellermann's avatar
      audio_output: added function audio_output_is_pending() · c13e8b51
      Max Kellermann authored
      The function audio_output_is_pending() returns whether there is a
      pending command.  This is useful for output plugins as a break
      condition for longer loops.
      c13e8b51
    • Max Kellermann's avatar
      use C99 struct initializers · de7cda1d
      Max Kellermann authored
      The old struct initializers are error prone and don't allow moving
      elements around.  Since we are going to overhaul some of the APIs
      soon, it's easier to have all implementations use C99 initializers.
      de7cda1d
    • Max Kellermann's avatar
      decoder: renamed plugin methods · 21d3d300
      Max Kellermann authored
      Why have a "_func" prefix on all method names?  Also don't typedef the
      methods, there is no advantage in that.
      21d3d300
    • Max Kellermann's avatar
      assume stdint.h and stddef.h are available · a7651b9d
      Max Kellermann authored
      Since we use a C99 compiler now, we can assert that the C99 standard
      headers are available, no need for complicated compile time checks.
      Kill mpd_types.h.
      a7651b9d
    • Max Kellermann's avatar
      song: converted "type" to enum · 35d51962
      Max Kellermann authored
      Having an enum type is much nicer than an anonymous integer plus CPP
      macros.  Note that the old code didn't save any space by declaring the
      variable 8 bit, due to padding.
      35d51962
    • Max Kellermann's avatar
      removed union const_hack · e8e94382
      Max Kellermann authored
      The union const_hack is only used at one place in the shout plugin.
      Remove its global type declaration.
      e8e94382
    • Max Kellermann's avatar
      require a C99 compiler · 798eeeee
      Max Kellermann authored
      C99 will soon have its 10th birthday.  Let's not beat the dead C89
      horse, and raise the compiler requirements.  From now on, we need a
      C99 compiler.  This adds "-std=gnu99" to the GCC compiler options, in
      case GCC is used.
      798eeeee
    • Max Kellermann's avatar
      switch to C99 types, part II · 226d52b3
      Max Kellermann authored
      Do full C99 integer type conversion in all modules which were not
      touched by Eric's merged patch.
      226d52b3
    • Eric Wong's avatar
      Switch to C99 types (retaining compat with old compilers) · 0352766d
      Eric Wong authored
      Seeing the "mpd_" prefix _everywhere_ is mind-numbing as the
      mind needs to retrain itself to skip over the first 4 tokens of
      a type to get to its meaning.  So avoid having extra characters
      on my terminal to make it easier to follow code at 2:30 am in
      the morning.
      
      Please report any new issues you may come across on Free
      toolchains.  I realize how difficult it can be to build/maintain
      cross-compiling toolchains and I have no intention of forcing
      people to upgrade their toolchains to build mpd.
      
      Tested with gcc 2.95.4 and and gcc 4.3.1 on x86-32.
      0352766d
    • Eric Wong's avatar
      allow searching for albums with an empty tag · a4019f7d
      Eric Wong authored
      tfing wrote:
      > I have quite some files with an empty album tag as they do not come
      > from a particular album.
      >
      > If I want to look for those files and browse them, this happens:
      > :: nc localhost 6600
      > OK MPD 0.12.0
      > find album ""
      > ACK [2@0] {find} too few arguments for "find"
      >
      > I'd like to be able to browse those files in a client like gmpc.
      > So these 2 items would have to be developed:
      > - list album should report that some files have an empty tag
      > - it should be possible to search for an empty tag with the find command
      
      Patch-by: Marc Pavot
      ref: http://musicpd.org/mantis/view.php?id=464
      a4019f7d
    • Eric Wong's avatar
      command: don't clobber next list value when preparsing · 5f0ed72c
      Eric Wong authored
      This only breaks "update" under list command mode and
      no other commands.  This can be done more optimally
      without the extra heap allocation via xstrdup(); but is
      uncommon enough to not matter.
      5f0ed72c
    • Eric Wong's avatar
      directory: isRootDirectory() is a one-liner · 11245dc1
      Eric Wong authored
      Improving the signal to noise ratio...
      11245dc1
    • Eric Wong's avatar
      directory: writeDirectoryInfo propagates errors · da79498a
      Eric Wong authored
      If a write failed, it's a good sign subsequent writes will fail,
      too, so propgate errors all the way up the stack.
      da79498a
    • Eric Wong's avatar
      directory: make it clear that DIRECTORY_MTIME is deprecated · 4e15e292
      Eric Wong authored
      A long time ago in an mpd far away...
      4e15e292
    • Eric Wong's avatar
      directory: remove "Mp3" references · a0364d38
      Eric Wong authored
      MPD has supported more audio formats than just MP3
      for over five years...
      a0364d38
    • Eric Wong's avatar
      playlist: deleteASongFromPlaylist takes a const Song * · 9819890f
      Eric Wong authored
      We don't change the song pointer there, either.
      9819890f
    • Eric Wong's avatar
      songvec: songvec_delete takes a const Song pointer · 554f4a9f
      Eric Wong authored
      We don't modify the Song when we delete it
      554f4a9f
    • Eric Wong's avatar
      directory: remove shortname arguments everywhere · 71b33260
      Eric Wong authored
      It was a huge confusing mess of parameter passing around
      and around.  Add a few extra assertions to ensure we're
      handling parent/child relationships properly.
      71b33260
    • Eric Wong's avatar
      path: add mpd_basename() function · 8bb96d46
      Eric Wong authored
      This is like basename(3) but with predictable semantics independent
      of C library or build options used.  This is also much more strict
      and does not account for trailing slashes (mpd should never deal with
      trailing slashes on internal functions).
      8bb96d46
    • Eric Wong's avatar
      directory.h: remove directory_sigChldHandler decl · 5c516b84
      Eric Wong authored
      We no longer fork for directory updates, so we
      no longer have children to reap.
      5c516b84
    • Eric Wong's avatar
      directory: replace DirectoryList with dirvec · 3b8bc33a
      Eric Wong authored
      Small memory reduction compared to songvec since most users have
      much fewer dirs than songs, but still nice to have.
      3b8bc33a
    • Eric Wong's avatar
      directory: remove unused CPP defines · 029f607e
      Eric Wong authored
      We no longer for for updates
      029f607e
    • Eric Wong's avatar
      songvec_free => songvec_destroy · 6075119f
      Eric Wong authored
      "free" implies the songvec structure itself is freed,
      which is not the case.
      6075119f