1. 09 Sep, 2008 9 commits
  2. 08 Sep, 2008 12 commits
  3. 07 Sep, 2008 19 commits
    • Max Kellermann's avatar
      output: replace audio_output.*Func with audio_output.plugin · a0103dd0
      Max Kellermann authored
      Instead of copying all that stuff from the audio output plugin to the
      audio output structure, store a pointer to the plugin.
      a0103dd0
    • Max Kellermann's avatar
      output: renamed typedef AudioOutput to struct audio_output · 3b09c54b
      Max Kellermann authored
      Also rename AudioOutputPlugin to struct audio_output_plugin, and use
      forward declarations to reduce include dependencies.
      3b09c54b
    • Max Kellermann's avatar
      output: added output_api.h · bed2a49f
      Max Kellermann authored
      Just like decoder_api.h, output_api.h provides the audio output API
      which is used by the plugins.
      bed2a49f
    • Max Kellermann's avatar
      pack the struct audio_format · dc7c6bd1
      Max Kellermann authored
      Due to clumsy layout, the audio_format struct took 12 bytes.  Move the
      "channels" to the end, so it can be merged into the same 32 bit slot
      as "bits", which reduces the struct size to 8 bytes.
      dc7c6bd1
    • Max Kellermann's avatar
      audio_format: converted typedef AudioFormat to struct audio_format · f1dd9c20
      Max Kellermann authored
      Get rid of CamelCase, and don't use a typedef, so we can
      forward-declare it, and unclutter the include dependencies.
      f1dd9c20
    • Max Kellermann's avatar
      playlist: return -1 after assert(0) · bd81fd8b
      Max Kellermann authored
      print_playlist_result() had an assert(0) at the end, in case there was
      an invalid result value.  With NDEBUG, this resulted in a function not
      returning a value - add a dummy "return -1" at the end to keep gcc
      quiet.
      bd81fd8b
    • Max Kellermann's avatar
      playlist: replaced song_id_exists() with song_id_to_position() · 3553ed2f
      Max Kellermann authored
      Since all callers of song_id_exists() will map it to a song position
      after the check, introduce a new function called song_id_to_position()
      which performs both the check and the map lookup, including nice
      assertions.
      3553ed2f
    • Max Kellermann's avatar
      command: use client_[gs]et_permission() · 1ce5f4d7
      Max Kellermann authored
      Don't pass a pointer to client->permission to processCommand(), better
      let the code in command.c use the new permission getter/setter
      functions.
      1ce5f4d7
    • Max Kellermann's avatar
      client: added client_[gs]et_permission() · 2835e376
      Max Kellermann authored
      The code in command.c shouldn't mess with a pointer to
      client->permission.  Provide an API for accessing this value.
      2835e376
    • Max Kellermann's avatar
      command: don't pass permission as pointer where appropriate · bf6994d8
      Max Kellermann authored
      Some functions don't want to modify a client's permission set.  Pass
      the permissions to them by value, not by reference.
      bf6994d8
    • Eric Wong's avatar
      audio_format: volatile removal · 18fc10a9
      Eric Wong authored
      volatile provides absolutely no guarantee thread-safety in SMP
      environments.  volatile was designed to access memory locations
      in peripheral hardware directly; not for SMP.  If volatile is
      needed to work properly on SMP, then it is only hiding subtle
      bugs.
      
      volatile only prevents the /compiler/ from making optimizations
      when accessing variables.  CPUs do their own optimizations at
      runtime so it cannot guarantee registers of CPUs are flushed
      to memory cache-coherent access on different CPUs.
      
      Furthermore, the thread-communication via condition variables
      between threads sharing audio formats already results in memory
      barriers.
      18fc10a9
    • Eric Wong's avatar
      tag: oops, of course items is now ** and not * · a5f68b3c
      Eric Wong authored
      Gah, it seems like doing sizeof here either way is error
      prone.  Too easy to leave out a '*' character we can
      forget.
      a5f68b3c
    • Eric Wong's avatar
      tag: lock all accesses to tag_pool · 3c4de5b5
      Eric Wong authored
      The tag pool is a shared global resource that is infrequently
      modified.  However, it can occasionally be modified by several
      threads, especially by the metadata_pipe for streaming metadata
      (both reading/writing).
      
      The bulk tag_item pool is NOT locked as currently only the
      update thread uses it.
      3c4de5b5
    • Eric Wong's avatar
      tag: introduce handy items_size() function · 194c8c3c
      Eric Wong authored
      Trying to read or remember
        "tag->numOfItems * sizeof(*tag->items)"
      requires too much thinking and mental effort on my part.
      
      Also, favor "sizeof(struct mpd_tag)" over "sizeof(*tag->items)"
      because the former is easier to read and follow, even though
      the latter is easier to modify if the items member changes
      to a different type.
      194c8c3c
    • Max Kellermann's avatar
      fix -Wcast-qual -Wwrite-strings warnings · 4dd9d4b2
      Max Kellermann authored
      The previous patch enabled these warnings.  In Eric's branch, they
      were worked around with a generic deconst_ptr() function.  There are
      several places where we can add "const" to pointers, and in others,
      libraries want non-const strings.  In the latter, convert string
      literals to "static char[]" variables - this takes the same space, and
      seems safer than deconsting a string literal.
      4dd9d4b2
    • Eric Wong's avatar
      build: enable -Wcast-qual -Wwrite-strings CFLAGS · b67bb05d
      Eric Wong authored
      We're pretty careful about using const these days, so
      enable these warnings to keep us that way.
      b67bb05d
    • Max Kellermann's avatar
      removed fdprintf() and client_print() · 86d261bd
      Max Kellermann authored
      All callers of fdprintf() have been converted to client_printf() or
      fprintf(); it is time to remove this clumsy hack now.  We can also
      remove client_print() which took a file descriptor as parameter.
      86d261bd
    • Max Kellermann's avatar
      client: removed client_get_fd() · 322e9088
      Max Kellermann authored
      Now that we have removed all invocations of client_get_fd(), we can
      safely remove this transitional function.  All access to the file
      descriptor is now hidden behind the interface declared in client.h.
      322e9088
    • Max Kellermann's avatar
      audio: don't pass "fd" to printAudioDevices() · 4d8438e6
      Max Kellermann authored
      Pass the client struct instead.
      4d8438e6