From: Justin Ruggles <[email protected]>

Signed-off-by: Luca Barbato <[email protected]>
---

Updated a little, is being really useful to debug QSV.

 avplay.c        | 35 ++++++++++++++++++++++++++++++-----
 doc/avplay.texi |  4 ++++
 2 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/avplay.c b/avplay.c
index 00becbe..18c6364 100644
--- a/avplay.c
+++ b/avplay.c
@@ -231,6 +231,8 @@ static int screen_width  = 0;
 static int screen_height = 0;
 static int audio_disable;
 static int video_disable;
+static const char *acodec_name;
+static const char *vcodec_name;
 static int wanted_stream[AVMEDIA_TYPE_NB] = {
     [AVMEDIA_TYPE_AUDIO]    = -1,
     [AVMEDIA_TYPE_VIDEO]    = -1,
@@ -2024,10 +2026,11 @@ static int stream_component_open(VideoState *is, int 
stream_index)
 {
     AVFormatContext *ic = is->ic;
     AVCodecContext *avctx;
-    AVCodec *codec;
+    AVCodec *codec = NULL;
     SDL_AudioSpec wanted_spec, spec;
     AVDictionary *opts;
     AVDictionaryEntry *t = NULL;
+    enum AVMediaType codec_type;

     if (stream_index < 0 || stream_index >= ic->nb_streams)
         return -1;
@@ -2035,7 +2038,26 @@ static int stream_component_open(VideoState *is, int 
stream_index)

     opts = filter_codec_opts(codec_opts, avctx->codec_id, ic, 
ic->streams[stream_index], NULL);

-    codec = avcodec_find_decoder(avctx->codec_id);
+    codec_type = avcodec_get_type(avctx->codec_id);
+    if (acodec_name && codec_type == AVMEDIA_TYPE_AUDIO ||
+        vcodec_name && codec_type == AVMEDIA_TYPE_VIDEO) {
+        const char *name;
+        if (codec_type == AVMEDIA_TYPE_AUDIO)
+            name = acodec_name;
+        else
+            name = vcodec_name;
+
+        codec = avcodec_find_decoder_by_name(name);
+        if (!codec) {
+            av_log(NULL, AV_LOG_FATAL, "Unknown decoder '%s'\n", name);
+        } else if (codec->type != codec_type) {
+            av_log(NULL, AV_LOG_FATAL, "Invalid decoder type '%s'\n", name);
+            codec = NULL;
+        }
+    } else {
+        codec = avcodec_find_decoder(avctx->codec_id);
+    }
+
     avctx->debug_mv          = debug_mv;
     avctx->workaround_bugs   = workaround_bugs;
     avctx->idct_algo         = idct;
@@ -2315,9 +2337,6 @@ static int decode_thread(void *arg)
                                  st_index[AVMEDIA_TYPE_AUDIO] :
                                  st_index[AVMEDIA_TYPE_VIDEO]),
                                 NULL, 0);
-    if (show_status) {
-        av_dump_format(ic, 0, is->filename, 0);
-    }

     /* open the streams */
     if (st_index[AVMEDIA_TYPE_AUDIO] >= 0) {
@@ -2344,6 +2363,10 @@ static int decode_thread(void *arg)
         goto fail;
     }

+    if (show_status) {
+        av_dump_format(ic, 0, is->filename, 0);
+    }
+
     for (;;) {
         if (is->abort_request)
             break;
@@ -2860,6 +2883,8 @@ static const OptionDef options[] = {
     { "rdftspeed", OPT_INT | HAS_ARG| OPT_AUDIO | OPT_EXPERT, { &rdftspeed }, 
"rdft speed", "msecs" },
     { "default", HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, { opt_default 
}, "generic catch all option", "" },
     { "i", 0, { NULL }, "avconv compatibility dummy option", ""},
+    { "ac", HAS_ARG | OPT_STRING, { &acodec_name }, "audio codec name", "" },
+    { "vc", HAS_ARG | OPT_STRING, { &vcodec_name }, "video codec name", "" },
     { NULL, },
 };

diff --git a/doc/avplay.texi b/doc/avplay.texi
index b856f9b..08117de 100644
--- a/doc/avplay.texi
+++ b/doc/avplay.texi
@@ -69,6 +69,10 @@ also sources and sinks).

 @section Advanced options
 @table @option
+@item -ac @var{codec}
+Select the audio decoder to be used.
+@item -vc @var{codec}
+Select the video decoder to be used.
 @item -pix_fmt @var{format}
 This option has been removed. Use private options for specifying the
 input pixel format. For example with the rawvideo demuxer you need to specify
--
1.8.3.2

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to