changeset 30782:1c38d10731ab

Partially revert r30645, the final output format is determined by mpcodecs_config_vo so we need to query it afterwards. Still try to set a more sensible, codec-dependant preferred format even though it is currently ignored. Fixes bug #1659, based on patch by Andrew Wason [rectalogic rectalogic com]
author reimar
date Wed, 03 Mar 2010 21:32:31 +0000
parents 1b4d24af52a7
children 1bd54aea2896
files libmpcodecs/vd_dmo.c libmpcodecs/vd_dshow.c
diffstat 2 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/vd_dmo.c	Wed Mar 03 21:01:57 2010 +0000
+++ b/libmpcodecs/vd_dmo.c	Wed Mar 03 21:32:31 2010 +0000
@@ -55,7 +55,7 @@
 
 // init driver
 static int init(sh_video_t *sh){
-    unsigned int out_fmt=sh->codec->outfmt[sh->outfmtidx];
+    unsigned int out_fmt=sh->codec->outfmt[0];
     struct context *ctx;
     void *decoder;
     if(!(decoder=DMO_VideoDecoder_Open(sh->codec->dll,&sh->codec->guid, sh->bih, 0, 0))){
@@ -64,6 +64,8 @@
 	return 0;
     }
     if(!mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,out_fmt)) return 0;
+    // mpcodecs_config_vo can change the format
+    out_fmt=sh->codec->outfmt[sh->outfmtidx];
     sh->context = ctx = calloc(1, sizeof(*ctx));
     ctx->decoder = decoder;
     switch(out_fmt){
--- a/libmpcodecs/vd_dshow.c	Wed Mar 03 21:01:57 2010 +0000
+++ b/libmpcodecs/vd_dshow.c	Wed Mar 03 21:32:31 2010 +0000
@@ -66,7 +66,7 @@
 
 // init driver
 static int init(sh_video_t *sh){
-    unsigned int out_fmt=sh->codec->outfmt[sh->outfmtidx];
+    unsigned int out_fmt=sh->codec->outfmt[0];
 
     /* Hack for VSSH codec: new dll can't decode old files
      * In my samples old files have no extradata, so use that info
@@ -81,6 +81,8 @@
 	return 0;
     }
     if(!mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,out_fmt)) return 0;
+    // mpcodecs_config_vo can change the format
+    out_fmt=sh->codec->outfmt[sh->outfmtidx];
     switch(out_fmt){
     case IMGFMT_YUY2:
     case IMGFMT_UYVY: