summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-11-03 15:57:40 +0100
committerwm4 <wm4@nowhere>2012-11-07 23:29:55 +0100
commit58f821e096392e27994102f6de6f8f76c63e38e1 (patch)
tree3afdabf9addc8ba44923cca4a1f4d96413c61886
parenta20c9576be916f8e0bad66bd474c5241d05852e4 (diff)
downloadmpv-58f821e096392e27994102f6de6f8f76c63e38e1.tar.bz2
mpv-58f821e096392e27994102f6de6f8f76c63e38e1.tar.xz
vd_ffmpeg: disable codec direct rendering and slices by default
This caused failures when doing single threaded decoding in some cases. It's unknown what exactly the reasons are for these failures, but direct rendering is probably worthless anyway. Disable slices by default as well, just to be sure not to invoke broken code paths. Multithreading disables these too. The old behavior can be restored by passing the -dr1 -slices command line options. (-dr1 is left undocumented intentionally.) Multithreaded decoding worked fine, because vd_ffmpeg.c automatically disables direct rendering in this case.
-rw-r--r--cfg-mplayer.h2
-rw-r--r--defaultopts.c1
-rw-r--r--libmpcodecs/vd_ffmpeg.c2
-rw-r--r--options.h1
4 files changed, 4 insertions, 2 deletions
diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index 48f44a6fde..c0f4c91a9c 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -489,6 +489,8 @@ const m_option_t common_opts[] = {
// draw by slices or whole frame (useful with libmpeg2/libavcodec)
OPT_MAKE_FLAGS("slices", vd_use_slices, 0),
+ // use (probably completely broken) decoder direct rendering
+ OPT_MAKE_FLAGS("dr1", vd_use_dr1, 0),
{"field-dominance", &field_dominance, CONF_TYPE_INT, CONF_RANGE, -1, 1, NULL},
{"lavdopts", (void *) lavc_decode_opts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
diff --git a/defaultopts.c b/defaultopts.c
index 072bf606d1..1d3abf932c 100644
--- a/defaultopts.c
+++ b/defaultopts.c
@@ -48,7 +48,6 @@ void set_default_mplayer_options(struct MPOpts *opts)
.drc_level = 1.,
.movie_aspect = -1.,
.flip = -1,
- .vd_use_slices = 1,
.sub_auto = 1,
#ifdef CONFIG_ASS
.ass_enabled = 1,
diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c
index 21ecdfaa82..e078de4419 100644
--- a/libmpcodecs/vd_ffmpeg.c
+++ b/libmpcodecs/vd_ffmpeg.c
@@ -174,7 +174,7 @@ static int init(sh_video_t *sh)
&& lavc_codec->id != CODEC_ID_INTERPLAY_VIDEO
&& lavc_codec->id != CODEC_ID_ROQ && lavc_codec->id != CODEC_ID_VP8
&& lavc_codec->id != CODEC_ID_LAGARITH)
- ctx->do_dr1 = 1;
+ ctx->do_dr1 = sh->opts->vd_use_dr1;
ctx->ip_count = ctx->b_count = 0;
ctx->pic = avcodec_alloc_frame();
diff --git a/options.h b/options.h
index 11537c3ed9..ade419d74e 100644
--- a/options.h
+++ b/options.h
@@ -100,6 +100,7 @@ typedef struct MPOpts {
float screen_size_xy;
int flip;
int vd_use_slices;
+ int vd_use_dr1;
char **sub_name;
char **sub_paths;
int sub_auto;