summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-08-09 00:35:25 +0200
committerwm4 <wm4@nowhere>2014-08-09 00:35:35 +0200
commit8dfe0c73c9293dbbbfae096e0fbd6e59ecbd3896 (patch)
treed6b1564e806304bf49f784a9bb5a4ed58200c672
parent91be5e5c3163efe185fa4883887a60a0db16728b (diff)
downloadmpv-8dfe0c73c9293dbbbfae096e0fbd6e59ecbd3896.tar.bz2
mpv-8dfe0c73c9293dbbbfae096e0fbd6e59ecbd3896.tar.xz
video: remove "hard" framedrop mode
Completely useless, and could accidentally be enabled by cycling framedrop modes. Just get rid of it. But still allow triggering the old code with --vd-lavc-framedrop, in case someone asks for it. If nobody does, this new option will be removed eventually.
-rw-r--r--DOCS/man/options.rst12
-rw-r--r--options/options.c3
-rw-r--r--player/video.c2
-rw-r--r--video/decode/vd_lavc.c15
4 files changed, 20 insertions, 12 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index eaab0c48e7..81da53baa7 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -430,12 +430,12 @@ Video
Do not sleep when outputting video frames. Useful for benchmarks when used
with ``--no-audio.``
-``--framedrop=<no|yes|hard>``
+``--framedrop=<no|yes>``
Skip displaying some frames to maintain A/V sync on slow systems. Video
filters are not applied to such frames. For B-frames even decoding is
- skipped completely. May produce unwatchably choppy output. With ``hard``,
- decoding and output of any frame can be skipped, and will lead to an even
- worse playback experience.
+ skipped completely. May produce unwatchably choppy output.
+
+ The ``--vd-lavc-framedrop`` option controls what frames to drop.
.. note::
@@ -705,6 +705,10 @@ Video
Skips decoding of frames completely. Big speedup, but jerky motion and
sometimes bad artifacts (see skiploopfilter for available skip values).
+``--vd-lavc-framedrop=<skipvalue>``
+ Set framedropping mode used with ``--framedrop`` (see skiploopfilter for
+ available skip values).
+
``--vd-lavc-threads=<0-16>``
Number of threads to use for decoding. Whether threading is actually
supported depends on codec. 0 means autodetect number of cores on the
diff --git a/options/options.c b/options/options.c
index ff817bdc1f..b5578218d3 100644
--- a/options/options.c
+++ b/options/options.c
@@ -457,8 +457,7 @@ const m_option_t mp_opts[] = {
OPT_CHOICE("framedrop", frame_dropping, 0,
({"no", 0},
- {"yes", 1},
- {"hard", 2})),
+ {"yes", 1})),
OPT_FLAG("untimed", untimed, M_OPT_FIXED),
diff --git a/player/video.c b/player/video.c
index 21101f501a..538008302c 100644
--- a/player/video.c
+++ b/player/video.c
@@ -377,7 +377,7 @@ static int decode_image(struct MPContext *mpctx)
}
bool hrseek = mpctx->hrseek_active && mpctx->video_status == STATUS_SYNCING;
int framedrop_type = hrseek && mpctx->hrseek_framedrop ?
- 1 : check_framedrop(mpctx, -1);
+ 2 : check_framedrop(mpctx, -1);
d_video->waiting_decoded_mpi =
video_decode(d_video, pkt, framedrop_type);
bool had_packet = !!pkt;
diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c
index 75f66ce1f1..de5c1eb672 100644
--- a/video/decode/vd_lavc.c
+++ b/video/decode/vd_lavc.c
@@ -75,6 +75,7 @@ struct vd_lavc_params {
int skip_loop_filter;
int skip_idct;
int skip_frame;
+ int framedrop;
int threads;
int bitexact;
int check_hw_profile;
@@ -101,6 +102,7 @@ const struct m_sub_options vd_lavc_conf = {
OPT_DISCARD("skiploopfilter", skip_loop_filter, 0),
OPT_DISCARD("skipidct", skip_idct, 0),
OPT_DISCARD("skipframe", skip_frame, 0),
+ OPT_DISCARD("framedrop", framedrop, 0),
OPT_INTRANGE("threads", threads, 0, 0, 16),
OPT_FLAG("bitexact", bitexact, 0),
OPT_FLAG("check-hw-profile", check_hw_profile, 0),
@@ -114,6 +116,7 @@ const struct m_sub_options vd_lavc_conf = {
.skip_loop_filter = AVDISCARD_DEFAULT,
.skip_idct = AVDISCARD_DEFAULT,
.skip_frame = AVDISCARD_DEFAULT,
+ .framedrop = AVDISCARD_NONREF,
},
};
@@ -592,14 +595,16 @@ static int decode(struct dec_video *vd, struct demux_packet *packet,
int ret;
vd_ffmpeg_ctx *ctx = vd->priv;
AVCodecContext *avctx = ctx->avctx;
+ struct vd_lavc_params *lavc_param = ctx->opts->vd_lavc_params;
AVPacket pkt;
- if (flags & 2)
- avctx->skip_frame = AVDISCARD_ALL;
- else if (flags & 1)
- avctx->skip_frame = AVDISCARD_NONREF;
- else
+ if (flags) {
+ // hr-seek framedrop vs. normal framedrop
+ avctx->skip_frame = flags == 2 ? AVDISCARD_NONREF : lavc_param->framedrop;
+ } else {
+ // normal playback
avctx->skip_frame = ctx->skip_frame;
+ }
mp_set_av_packet(&pkt, packet, NULL);