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; }