summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/en/options.rst5
-rw-r--r--options/options.c1
-rw-r--r--options/options.h1
-rw-r--r--video/decode/vd_lavc.c10
4 files changed, 17 insertions, 0 deletions
diff --git a/DOCS/man/en/options.rst b/DOCS/man/en/options.rst
index b2f9d30b68..7803e98b5c 100644
--- a/DOCS/man/en/options.rst
+++ b/DOCS/man/en/options.rst
@@ -2631,6 +2631,11 @@ OPTIONS
``--vd--lavc-o=debug=pict``
+``--vd-lavc-show-all=<yes|no>``
+ Show even broken/corrupt frames (default: yes). If this option is set to
+ no, libavcodec won't output frames that were either decoded before an
+ initial keyframe was decoded, or frames that are recognized as corrupted.
+
``--vd-lavc-skiploopfilter=<skipvalue> (H.264 only)``
Skips the loop filter (AKA deblocking) during H.264 decoding. Since
the filtered frame is supposed to be used as reference for decoding
diff --git a/options/options.c b/options/options.c
index f53f33245e..a92ace3ec0 100644
--- a/options/options.c
+++ b/options/options.c
@@ -755,6 +755,7 @@ const struct MPOpts mp_default_opts = {
.allow_mimetype = 1,
},
.lavc_param = {
+ .show_all = 1,
.check_hw_profile = 1,
},
.input = {
diff --git a/options/options.h b/options/options.h
index 6e44dc838c..b4366a2f2e 100644
--- a/options/options.h
+++ b/options/options.h
@@ -228,6 +228,7 @@ typedef struct MPOpts {
struct lavc_param {
int fast;
+ int show_all;
char *skip_loop_filter_str;
char *skip_idct_str;
char *skip_frame_str;
diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c
index 7530eb0fa5..dcd208ad10 100644
--- a/video/decode/vd_lavc.c
+++ b/video/decode/vd_lavc.c
@@ -73,6 +73,7 @@ static void uninit(struct dec_video *vd);
const m_option_t lavc_decode_opts_conf[] = {
OPT_FLAG_CONSTANTS("fast", lavc_param.fast, 0, 0, CODEC_FLAG2_FAST),
+ OPT_FLAG("show-all", lavc_param.show_all, 0),
OPT_STRING("skiploopfilter", lavc_param.skip_loop_filter_str, 0),
OPT_STRING("skipidct", lavc_param.skip_idct_str, 0),
OPT_STRING("skipframe", lavc_param.skip_frame_str, 0),
@@ -421,6 +422,15 @@ static void init_avctx(struct dec_video *vd, const char *decoder,
avctx->flags |= lavc_param->bitexact;
avctx->flags2 |= lavc_param->fast;
+ if (lavc_param->show_all) {
+#ifdef CODEC_FLAG2_SHOW_ALL
+ avctx->flags2 |= CODEC_FLAG2_SHOW_ALL; // ffmpeg only?
+#endif
+#ifdef CODEC_FLAG_OUTPUT_CORRUPT
+ avctx->flags |= CODEC_FLAG_OUTPUT_CORRUPT; // added with Libav 10
+#endif
+ }
+
avctx->skip_loop_filter = str2AVDiscard(vd, lavc_param->skip_loop_filter_str);
avctx->skip_idct = str2AVDiscard(vd, lavc_param->skip_idct_str);
avctx->skip_frame = str2AVDiscard(vd, lavc_param->skip_frame_str);