[MPlayer-cvslog] r30681 - in trunk/libmpdemux: mpeg_hdr.c mpeg_hdr.h video.c
reimar
subversion at mplayerhq.hu
Sun Feb 21 14:53:42 CET 2010
Author: reimar
Date: Sun Feb 21 14:53:41 2010
New Revision: 30681
Log:
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.
Modified:
trunk/libmpdemux/mpeg_hdr.c
trunk/libmpdemux/mpeg_hdr.h
trunk/libmpdemux/video.c
Modified: trunk/libmpdemux/mpeg_hdr.c
==============================================================================
--- trunk/libmpdemux/mpeg_hdr.c Sun Feb 21 14:40:49 2010 (r30680)
+++ trunk/libmpdemux/mpeg_hdr.c Sun Feb 21 14:53:41 2010 (r30681)
@@ -81,6 +81,9 @@ static int header_process_sequence_exten
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;
}
Modified: trunk/libmpdemux/mpeg_hdr.h
==============================================================================
--- trunk/libmpdemux/mpeg_hdr.h Sun Feb 21 14:40:49 2010 (r30680)
+++ trunk/libmpdemux/mpeg_hdr.h Sun Feb 21 14:53:41 2010 (r30681)
@@ -27,6 +27,8 @@ typedef struct {
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;
Modified: trunk/libmpdemux/video.c
==============================================================================
--- trunk/libmpdemux/video.c Sun Feb 21 14:40:49 2010 (r30680)
+++ trunk/libmpdemux/video.c Sun Feb 21 14:53:41 2010 (r30681)
@@ -433,6 +433,7 @@ int video_read_frame(sh_video_t* sh_vide
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 @@ int video_read_frame(sh_video_t* sh_vide
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:
More information about the MPlayer-cvslog
mailing list