Merge branch 't/flac'
authorAndre Noll <maan@systemlinux.org>
Tue, 29 Nov 2011 07:36:49 +0000 (08:36 +0100)
committerAndre Noll <maan@systemlinux.org>
Tue, 29 Nov 2011 07:41:33 +0000 (08:41 +0100)
1  2 
NEWS
aft.c

diff --combined NEWS
--- 1/NEWS
--- 2/NEWS
+++ b/NEWS
@@@ -2,6 -2,6 +2,10 @@@
  0.4.9 (to be announced) "hybrid causality"
  ------------------------------------------
  
++Support for another audio format and many small improvements/fixes
++all over the place.
++
++      - Support for flac, the free lossless audio codec.
        - Fix for an endless loop in the mp3 decoder for certain
          (corrupt) mp3 files.
        - autogen.sh now detects a distcc setup and adjusts the
          communication between para_server and para_audiod.
        - The alsa writer eats up less CPU cycles when configured to
          use the DMIX plugin.
 +      - Simplified and unified receiver code.
 +      - Makefile cleanups.
 +      - Commands which print a list of matching audio files now
 +        emit a meaningful error message if no audio file matched the
 +        given pattern(s).
  
  --------------------------------------
  0.4.8 (2011-08-19) "nested assignment"
diff --combined aft.c
--- 1/aft.c
--- 2/aft.c
+++ b/aft.c
@@@ -107,6 -107,8 +107,8 @@@ struct ls_widths 
        unsigned short num_played_width;
        /** size of the amp field. */
        unsigned short amp_width;
+       /** size of the audio format field. */
+       unsigned short audio_format_width;
  };
  
  /** Data passed from the ls command handler to its callback function. */
@@@ -902,7 -904,7 +904,7 @@@ static int print_list_item(struct ls_da
                        "%*d "  /* image_id  */
                        "%*d "  /* lyrics_id */
                        "%*d "  /* bitrate */
-                       "%s "   /* audio format */
+                       "%*s "  /* audio format */
                        "%*d "  /* frequency */
                        "%d "   /* channels */
                        "%s "   /* duration */
                        w->image_id_width, afsi->image_id,
                        w->lyrics_id_width, afsi->lyrics_id,
                        w->bitrate_width, afhi->bitrate,
+                       w->audio_format_width,
                        audio_format_name(afsi->audio_format_id),
                        w->frequency_width, afhi->frequency,
                        afhi->channels,
@@@ -1328,6 -1331,8 +1331,8 @@@ static int prepare_ls_row(struct osl_ro
        w->duration_width = PARA_MAX(w->duration_width, num_digits);
        GET_NUM_DIGITS(d->afsi.amp, &num_digits);
        w->amp_width = PARA_MAX(w->amp_width, num_digits);
+       num_digits = strlen(audio_format_name(d->afsi.audio_format_id));
+       w->audio_format_width = PARA_MAX(w->audio_format_width, num_digits);
        if (options->flags & LS_FLAG_ADMISSIBLE_ONLY) {
                GET_NUM_DIGITS(score, &num_digits);
                num_digits++; /* add one for the sign (space or "-") */
@@@ -1364,11 -1369,8 +1369,11 @@@ static void com_ls_callback(int fd, con
                        prepare_ls_row));
        if (ret < 0)
                goto out;
 -      if (!opts->num_matching_paths)
 +      if (opts->num_matching_paths == 0) {
 +              if (opts->num_patterns > 0)
 +                      para_printf(&b, "no matches\n");
                goto out;
 +      }
        ret = sort_matching_paths(opts);
        if (ret < 0)
                goto out;
@@@ -2023,6 -2025,8 +2028,6 @@@ struct touch_action_data 
        struct com_touch_options *cto;
        /** Message buffer. */
        struct para_buffer pb;
 -      /** How many audio files matched the given pattern. */
 -      unsigned num_matches;
  };
  
  static int touch_audio_file(__a_unused struct osl_table *table,
                if (tad->cto->amp >= 0)
                        new_afsi.amp = tad->cto->amp;
        }
 -      tad->num_matches++;
        save_afsi(&new_afsi, &obj); /* in-place update */
        aced.aft_row = row;
        aced.old_afsi = &old_afsi;
@@@ -2100,8 -2105,9 +2105,8 @@@ static void com_touch_callback(int fd, 
        ret = for_each_matching_row(&pmd);
        if (ret < 0)
                ret2 = para_printf(&tad.pb, "%s\n", para_strerror(-ret));
 -      else
 -              if (!tad.num_matches)
 -                      ret2 = para_printf(&tad.pb, "no matches\n");
 +      else if (pmd.num_matches == 0)
 +              ret2 = para_printf(&tad.pb, "no matches\n");
        if (ret2 >= 0 && tad.pb.offset)
                pass_buffer_as_shm(tad.pb.buf, tad.pb.offset, &fd);
        free(tad.pb.buf);
@@@ -2197,6 -2203,8 +2202,6 @@@ struct com_rm_action_data 
        uint32_t flags;
        /** Message buffer. */
        struct para_buffer pb;
 -      /** Number of audio files removed. */
 -      unsigned num_removed;
  };
  
  static int remove_audio_file(__a_unused struct osl_table *table,
        ret = osl(osl_del_row(audio_file_table, row));
        if (ret < 0)
                para_printf(&crd->pb, "%s: %s\n", name, para_strerror(-ret));
 -      else
 -              crd->num_removed++;
        return ret;
  }
  
@@@ -2243,11 -2253,11 +2248,11 @@@ static void com_rm_callback(int fd, con
                para_printf(&crd.pb, "%s\n", para_strerror(-ret));
                return;
        }
 -      if (!crd.num_removed && !(crd.flags & RM_FLAG_FORCE))
 +      if ((pmd.num_matches == 0) && !(crd.flags & RM_FLAG_FORCE))
                ret = para_printf(&crd.pb, "no matches -- nothing removed\n");
 -      else {
 -              if (crd.flags & RM_FLAG_VERBOSE)
 -                      ret = para_printf(&crd.pb, "removed %u files\n", crd.num_removed);
 +      else if (crd.flags & RM_FLAG_VERBOSE) {
 +              ret = para_printf(&crd.pb, "removed %u files\n",
 +                      pmd.num_matches);
        }
        if (ret >= 0 && crd.pb.offset)
                pass_buffer_as_shm(crd.pb.buf, crd.pb.offset, &fd);
@@@ -2316,6 -2326,8 +2321,6 @@@ enum cpsi_flags 
  struct cpsi_action_data {
        /** command line flags (see \ref cpsi_flags). */
        unsigned flags;
 -      /** Number of audio files changed. */
 -      unsigned num_copied;
        /** Message buffer. */
        struct para_buffer pb;
        /** Values are copied from here. */
@@@ -2347,6 -2359,7 +2352,6 @@@ static int copy_selector_info(__a_unuse
        if (cad->flags & CPSI_FLAG_COPY_ATTRIBUTES)
                target_afsi.attributes = cad->source_afsi.attributes;
        save_afsi(&target_afsi, &target_afsi_obj); /* in-place update */
 -      cad->num_copied++;
        if (cad->flags & CPSI_FLAG_VERBOSE) {
                ret = para_printf(&cad->pb, "copied afsi to %s\n", name);
                if (ret < 0)
@@@ -2389,9 -2402,9 +2394,9 @@@ out
        if (ret < 0)
                para_printf(&cad.pb, "%s\n", para_strerror(-ret));
        else if (cad.flags & CPSI_FLAG_VERBOSE) {
 -              if (cad.num_copied)
 +              if (pmd.num_matches > 0)
                        para_printf(&cad.pb, "copied requested afsi from %s "
 -                              "to %u files\n", source_path, cad.num_copied);
 +                              "to %u files\n", source_path, pmd.num_matches);
                else
                        para_printf(&cad.pb, "nothing copied\n");
        }