summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlgb <lgb@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-07-06 21:17:22 +0000
committerlgb <lgb@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-07-06 21:17:22 +0000
commit52430859d457c2441d45a9db669efb7e451ff47f (patch)
treee40bb0dea63be3961b20bc84201b7d383c922fcb
parentb5933be0d73f543f430059aa5a7ed3c7e303d5c6 (diff)
downloadmpv-52430859d457c2441d45a9db669efb7e451ff47f.tar.bz2
mpv-52430859d457c2441d45a9db669efb7e451ff47f.tar.xz
-vcodec option (maybe some other name would be better though) to select between driver types without editing codecs.conf. mplayer will default to normal codec search loop if it does not find codec for the specified driver type. config range checking for the parameter (an integer) should be cleaned, IMHO
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1286 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--cfg-mplayer.h3
-rw-r--r--mplayer.c11
2 files changed, 14 insertions, 0 deletions
diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index 19b160fcfc..2f8d82d55b 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -40,6 +40,8 @@ extern int ao_pcm_waveheader;
extern char *mDisplayName;
#endif
+extern int force_vcodec;
+
struct config conf[]={
/* name, pointer, type, flags, min, max */
{"include", cfg_include, CONF_TYPE_FUNC_PARAM, 0, 0, 0}, /* this must be the first!!! */
@@ -55,6 +57,7 @@ struct config conf[]={
{"display", &mDisplayName, CONF_TYPE_STRING, 0, 0, 0},
#endif
{"osdlevel", &osd_level, CONF_TYPE_INT, CONF_RANGE, 0, 2 },
+ {"vcodec", &force_vcodec, CONF_TYPE_INT, CONF_RANGE, 1, 5 },
#ifdef HAVE_LIBCSS
{"dvdauth", &dvd_auth_device, CONF_TYPE_STRING, 0, 0, 0},
{"dvdkey", &dvdimportkey, CONF_TYPE_STRING, 0, 0, 0},
diff --git a/mplayer.c b/mplayer.c
index 578054dfc4..b4428f03c8 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -317,6 +317,8 @@ int has_audio=1;
//int has_video=1;
int audio_format=0; // override
+int force_vcodec=-1;
+
#ifdef USE_DIRECTSHOW
int allow_dshow=1;
#else
@@ -1164,10 +1166,17 @@ if(has_audio){
// Go through the codec.conf and find the best codec...
sh_video->codec=NULL;
+if (force_vcodec!=-1) printf("Trying to use forced video codec driver %d ...\n",force_vcodec);
while(1){
sh_video->codec=find_codec(sh_video->format,
sh_video->bih?((unsigned int*) &sh_video->bih->biCompression):NULL,sh_video->codec,0);
if(!sh_video->codec){
+ if(force_vcodec!=-1) {
+ sh_video->codec=NULL; /* re-search */
+ printf("Can't find video codec for forced driver %d, defaulting to other drivers.\n",force_vcodec);
+ force_vcodec=-1;
+ continue;
+ }
printf("Can't find codec for video format 0x%X !\n",sh_video->format);
printf("*** Try to upgrade %s from DOCS/codecs.conf\n",get_path("codecs.conf"));
printf("*** If it's still not OK, then read DOCS/CODECS!\n");
@@ -1181,6 +1190,8 @@ while(1){
#endif
exit(1);
}
+ if(sh_video->codec->driver==force_vcodec) break; /* OK, we find our codec */
+ if(force_vcodec!=-1&&sh_video->codec->driver!=force_vcodec) continue;
if(!allow_dshow && sh_video->codec->driver==4) continue; // skip DShow
break;
}