changeset 22012:213b5c14bba7

Implement FIXME: Restore original width/height when CODECS_FLAG_ALIGN16 is set and codec init failed.
author reimar
date Sat, 27 Jan 2007 15:29:07 +0000
parents 9562199ac075
children 3e00896b3f2b
files libmpcodecs/dec_video.c
diffstat 1 files changed, 15 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/dec_video.c	Sat Jan 27 14:54:45 2007 +0000
+++ b/libmpcodecs/dec_video.c	Sat Jan 27 15:29:07 2007 +0000
@@ -185,6 +185,7 @@
 
     while(1){
 	int i;
+	int orig_w, orig_h;
 	// restore original fourcc:
 	if(sh_video->bih) sh_video->bih->biCompression=orig_fourcc;
 	if(!(sh_video->codec=find_video_codec(sh_video->format,
@@ -238,22 +239,30 @@
 		sh_video->codec->name, sh_video->codec->drv);
 	    continue;
 	}
+	orig_w = sh_video->bih ? sh_video->bih->biWidth : sh_video->disp_w;
+	orig_h = sh_video->bih ? sh_video->bih->biHeight : sh_video->disp_h;
+	sh_video->disp_w = orig_w;
+	sh_video->disp_h = orig_h;
 	// it's available, let's try to init!
 	if(sh_video->codec->flags & CODECS_FLAG_ALIGN16){
 	    // align width/height to n*16
-	    // FIXME: save orig w/h, and restore if codec init failed!
-	    if(sh_video->bih){
-		sh_video->disp_w=sh_video->bih->biWidth=(sh_video->bih->biWidth+15)&(~15);
-		sh_video->disp_h=sh_video->bih->biHeight=(sh_video->bih->biHeight+15)&(~15);
-	    } else {
 		sh_video->disp_w=(sh_video->disp_w+15)&(~15);
 		sh_video->disp_h=(sh_video->disp_h+15)&(~15);
-	    }
+	}
+	if (sh_video->bih) {
+		sh_video->bih->biWidth = sh_video->disp_w;
+		sh_video->bih->biHeight = sh_video->disp_h;
 	}
 	// init()
 	mp_msg(MSGT_DECVIDEO,MSGL_INFO,MSGTR_OpeningVideoDecoder,mpvdec->info->short_name,mpvdec->info->name);
 	if(!mpvdec->init(sh_video)){
 	    mp_msg(MSGT_DECVIDEO,MSGL_INFO,MSGTR_VDecoderInitFailed);
+	    sh_video->disp_w=orig_w;
+	    sh_video->disp_h=orig_h;
+	    if (sh_video->bih) {
+		sh_video->bih->biWidth = sh_video->disp_w;
+		sh_video->bih->biHeight = sh_video->disp_h;
+	    }
 	    continue; // try next...
 	}
 	// Yeah! We got it!