examples: demuxing: print ffplay command even if sample format is planar
authorwm4 <nfxjfg@googlemail.com>
Thu, 18 Jul 2013 13:45:37 +0000 (15:45 +0200)
committerStefano Sabatini <stefasab@gmail.com>
Fri, 19 Jul 2013 10:14:54 +0000 (12:14 +0200)
Adjust the code so that a working ffplay command is printed in the
planar audio case.

doc/examples/demuxing.c

index acd2d41..e459cf0 100644 (file)
@@ -302,13 +302,25 @@ int main (int argc, char **argv)
     }
 
     if (audio_stream) {
+        enum AVSampleFormat sfmt = audio_dec_ctx->sample_fmt;
+        int n_channels = audio_dec_ctx->channels;
         const char *fmt;
 
-        if ((ret = get_format_from_sample_fmt(&fmt, audio_dec_ctx->sample_fmt)) < 0)
+        if (av_sample_fmt_is_planar(sfmt)) {
+            const char *packed = av_get_sample_fmt_name(sfmt);
+            printf("Warning: the sample format the decoder produced is planar "
+                   "(%s). This example will output the first channel only.\n",
+                   packed ? packed : "?");
+            sfmt = av_get_packed_sample_fmt(sfmt);
+            n_channels = 1;
+        }
+
+        if ((ret = get_format_from_sample_fmt(&fmt, sfmt)) < 0)
             goto end;
+
         printf("Play the output audio file with the command:\n"
                "ffplay -f %s -ac %d -ar %d %s\n",
-               fmt, audio_dec_ctx->channels, audio_dec_ctx->sample_rate,
+               fmt, n_channels, audio_dec_ctx->sample_rate,
                audio_dst_filename);
     }