Mercurial > mplayer.hg
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!