From 3efbc894b064d36cd71875e00c906c3db089cd57 Mon Sep 17 00:00:00 2001 From: michael Date: Sun, 2 Jun 2002 12:48:55 +0000 Subject: [PATCH] workaround bugs & error resilience ffmpeg decoder options git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6266 b3059339-0415-0410-9bf9-f77b7e298cf2 --- cfg-common.h | 7 +++++++ libmpcodecs/vd_ffmpeg.c | 21 +++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/cfg-common.h b/cfg-common.h index 6d6148323b..5a28a65c45 100644 --- a/cfg-common.h +++ b/cfg-common.h @@ -125,6 +125,9 @@ {"flip", &flip, CONF_TYPE_FLAG, 0, -1, 1, NULL}, {"noflip", &flip, CONF_TYPE_FLAG, 0, -1, 0, NULL}, +#ifdef USE_LIBAVCODEC + {"lavdopts", lavc_decode_opts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, +#endif // ------------------------- subtitles options -------------------- #ifdef USE_SUB @@ -236,4 +239,8 @@ struct config mfopts_conf[]={ extern char** vo_plugin_args; +#ifdef USE_LIBAVCODEC +extern struct config lavc_decode_opts_conf[]; +#endif + #endif diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c index 7080ebf428..db0d257d8a 100644 --- a/libmpcodecs/vd_ffmpeg.c +++ b/libmpcodecs/vd_ffmpeg.c @@ -51,6 +51,19 @@ typedef struct { //unsigned int lavc_pp=0; //#endif +#include "cfgparser.h" + +static int lavc_param_workaround_bugs=0; +static int lavc_param_error_resilience=0; + +struct config lavc_decode_opts_conf[]={ +#if LIBAVCODEC_BUILD >= 4611 + {"bug", &lavc_param_workaround_bugs, CONF_TYPE_INT, CONF_RANGE, 0, 99, NULL}, + {"ver", &lavc_param_error_resilience, CONF_TYPE_INT, CONF_RANGE, -1, 99, NULL}, +#endif + {NULL, NULL, 0, 0, 0, 0, NULL} +}; + // to set/get/query special features/parameters static int control(sh_video_t *sh,int cmd,void* arg,...){ vd_ffmpeg_ctx *ctx = sh->context; @@ -97,6 +110,11 @@ static int init(sh_video_t *sh){ avctx->width = sh->disp_w; avctx->height= sh->disp_h; +#if LIBAVCODEC_BUILD >= 4611 + avctx->workaround_bugs= lavc_param_workaround_bugs; + avctx->error_resilience= lavc_param_error_resilience; +#endif + mp_dbg(MSGT_DECVIDEO,MSGL_DBG2,"libavcodec.size: %d x %d\n",avctx->width,avctx->height); if (sh->format == mmioFOURCC('R', 'V', '1', '3')) avctx->sub_id = 3; @@ -199,10 +217,9 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){ ret = avcodec_decode_video(avctx, &lavc_picture, &got_picture, data, len); - if(ret<0) mp_msg(MSGT_DECVIDEO,MSGL_WARN, "Error while decoding frame!\n"); if(!got_picture) return NULL; // skipped image - + if (avctx->aspect_ratio_info != ctx->last_aspect || avctx->width != sh->disp_w || avctx->height != sh->disp_h ||