From 58f821e096392e27994102f6de6f8f76c63e38e1 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 3 Nov 2012 15:57:40 +0100 Subject: 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. --- cfg-mplayer.h | 2 ++ defaultopts.c | 1 - libmpcodecs/vd_ffmpeg.c | 2 +- options.h | 1 + 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; -- cgit v1.2.3