# HG changeset patch # User reimar # Date 1169911747 0 # Node ID 213b5c14bba766c7945388043539d1328d02c48d # Parent 9562199ac0756a910ae3f4366063c4c647be7ec2 Implement FIXME: Restore original width/height when CODECS_FLAG_ALIGN16 is set and codec init failed. diff -r 9562199ac075 -r 213b5c14bba7 libmpcodecs/dec_video.c --- 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!