# HG changeset patch # User reimar # Date 1266760421 0 # Node ID 102ae81b5dc8a001a17a56f43c2cb176918bdee7 # Parent a7b908875c149a3e3be9692bc3a2386830226cd3 Parse and use the information from the frame rate extension header for MPEG-2. -identify still does not show the right values though. Fixes bug #1636. diff -r a7b908875c14 -r 102ae81b5dc8 libmpdemux/mpeg_hdr.c --- a/libmpdemux/mpeg_hdr.c Sun Feb 21 13:40:49 2010 +0000 +++ b/libmpdemux/mpeg_hdr.c Sun Feb 21 13:53:41 2010 +0000 @@ -81,6 +81,9 @@ return 1; picture->progressive_sequence = (buffer[1] >> 3) & 1; + picture->frame_rate_extension_n = ((buffer[5] >> 5) & 3) + 1; + picture->frame_rate_extension_d = (buffer[5] & 0x1f) + 1; + picture->mpeg1 = 0; return 0; } diff -r a7b908875c14 -r 102ae81b5dc8 libmpdemux/mpeg_hdr.h --- a/libmpdemux/mpeg_hdr.h Sun Feb 21 13:40:49 2010 +0000 +++ b/libmpdemux/mpeg_hdr.h Sun Feb 21 13:53:41 2010 +0000 @@ -27,6 +27,8 @@ int aspect_ratio_information; int frame_rate_code; float fps; + int frame_rate_extension_n; + int frame_rate_extension_d; int bitrate; // 0x3FFFF==VBR // timing: int picture_structure; diff -r a7b908875c14 -r 102ae81b5dc8 libmpdemux/video.c --- a/libmpdemux/video.c Sun Feb 21 13:40:49 2010 +0000 +++ b/libmpdemux/video.c Sun Feb 21 13:53:41 2010 +0000 @@ -433,6 +433,7 @@ float frame_time=1; float pts1=d_video->pts; float pts=0; + float fps; int picture_coding_type=0; int in_size=0; video_codec_t video_codec = find_video_codec(sh_video); @@ -469,14 +470,15 @@ case 0x100: picture_coding_type=(videobuffer[start+1] >> 3) & 7;break; } } + fps = picture.fps * picture.frame_rate_extension_n / picture.frame_rate_extension_d; *start=videobuffer; in_size=videobuf_len; // get mpeg fps: - if(sh_video->fps!=picture.fps) if(!force_fps && !telecine){ - mp_msg(MSGT_CPLAYER,MSGL_WARN,"Warning! FPS changed %5.3f -> %5.3f (%f) [%d] \n",sh_video->fps,picture.fps,sh_video->fps-picture.fps,picture.frame_rate_code); - sh_video->fps=picture.fps; - sh_video->frametime=1.0/picture.fps; + if(sh_video->fps!=fps) if(!force_fps && !telecine){ + mp_msg(MSGT_CPLAYER,MSGL_WARN,"Warning! FPS changed %5.3f -> %5.3f (%f) [%d] \n",sh_video->fps,fps,sh_video->fps-fps,picture.frame_rate_code); + sh_video->fps=fps; + sh_video->frametime=1.0/fps; } // fix mpeg2 frametime: