changeset 19598:4cff22c91b39

added lavfdopts to pass options to libavformat
author nicodvb
date Wed, 30 Aug 2006 22:25:40 +0000
parents 02907229ccb4
children 0d42130331b2
files cfg-common.h libmpdemux/demux_lavf.c
diffstat 2 files changed, 26 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/cfg-common.h	Wed Aug 30 22:25:26 2006 +0000
+++ b/cfg-common.h	Wed Aug 30 22:25:40 2006 +0000
@@ -239,6 +239,9 @@
 #ifdef USE_LIBAVCODEC
 	{"lavdopts", lavc_decode_opts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
 #endif
+#if defined(USE_LIBAVFORMAT) ||  defined(USE_LIBAVFORMAT_SO)
+        {"lavfdopts",  lavfdopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
+#endif
 #if defined(HAVE_XVID3) || defined(HAVE_XVID4)
 	{"xvidopts", xvid_dec_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
 #endif
@@ -471,6 +474,10 @@
 extern m_config_t dvbin_opts_conf[];
 #endif
 
+#if defined(USE_LIBAVFORMAT) ||  defined(USE_LIBAVFORMAT_SO)
+extern m_option_t lavfdopts_conf[];
+#endif
+
 #ifdef  USE_FRIBIDI
 extern char *fribidi_charset;
 extern int flip_hebrew;
--- a/libmpdemux/demux_lavf.c	Wed Aug 30 22:25:26 2006 +0000
+++ b/libmpdemux/demux_lavf.c	Wed Aug 30 22:25:40 2006 +0000
@@ -27,17 +27,27 @@
 #include "stream.h"
 #include "demuxer.h"
 #include "stheader.h"
+#include "m_option.h"
 
 #ifdef USE_LIBAVFORMAT_SO
 #include <ffmpeg/avformat.h>
+#include <ffmpeg/opt.h>
 #else
 #include "avformat.h"
 #include "avi.h"
+#include "opt.h"
 #endif
 
 #define PROBE_BUF_SIZE 2048
 
 extern char *audio_lang;
+static unsigned int opt_probesize = 0;
+
+m_option_t lavfdopts_conf[] = {
+	{"probesize", &(opt_probesize), CONF_TYPE_INT, CONF_RANGE, 32, INT_MAX, NULL},
+	{NULL, NULL, 0, 0, 0, 0, NULL}
+};
+
 
 typedef struct lavf_priv_t{
     AVInputFormat *avif;
@@ -136,6 +146,7 @@
 static demuxer_t* demux_open_lavf(demuxer_t *demuxer){
     AVFormatContext *avfc;
     AVFormatParameters ap;
+    AVOption *opt;
     lavf_priv_t *priv= demuxer->priv;
     int i,g;
     char mp_filename[256]="mp:";
@@ -146,6 +157,14 @@
 
     register_protocol(&mp_protocol);
 
+    avfc = av_alloc_format_context();
+    ap.prealloced_context = 1;
+    if(opt_probesize) {
+        double d = (double) opt_probesize;
+        opt = av_set_double(avfc, "probesize", opt_probesize);
+        if(!opt) mp_msg(MSGT_HEADER,MSGL_ERR, "demux_lavf, couldn't set option probesize to %.3f\r\n", d);
+    }
+
     if(demuxer->stream->url)
         strncpy(mp_filename + 3, demuxer->stream->url, sizeof(mp_filename)-3);
     else