changeset 6265:f49ec39ab0c6

workaround bugs & error resilience ffmpeg decoder options
author michael
date Sun, 02 Jun 2002 12:48:55 +0000
parents db49a8c56da1
children 6bc87a7619ab
files cfg-common.h libmpcodecs/vd_ffmpeg.c
diffstat 2 files changed, 26 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/cfg-common.h	Sun Jun 02 12:44:04 2002 +0000
+++ b/cfg-common.h	Sun Jun 02 12:48:55 2002 +0000
@@ -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 @@
 						
 extern char** vo_plugin_args;
 
+#ifdef USE_LIBAVCODEC
+extern struct config lavc_decode_opts_conf[];
 #endif
+
+#endif
--- a/libmpcodecs/vd_ffmpeg.c	Sun Jun 02 12:44:04 2002 +0000
+++ b/libmpcodecs/vd_ffmpeg.c	Sun Jun 02 12:48:55 2002 +0000
@@ -51,6 +51,19 @@
 //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 @@
     
     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 @@
 
     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 ||