comparison libmpdemux/video.c @ 30639:102ae81b5dc8

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.
author reimar
date Sun, 21 Feb 2010 13:53:41 +0000
parents 32725ca88fed
children b14b32c20935
comparison
equal deleted inserted replaced
30638:a7b908875c14 30639:102ae81b5dc8
431 demux_stream_t *d_video=sh_video->ds; 431 demux_stream_t *d_video=sh_video->ds;
432 demuxer_t *demuxer=d_video->demuxer; 432 demuxer_t *demuxer=d_video->demuxer;
433 float frame_time=1; 433 float frame_time=1;
434 float pts1=d_video->pts; 434 float pts1=d_video->pts;
435 float pts=0; 435 float pts=0;
436 float fps;
436 int picture_coding_type=0; 437 int picture_coding_type=0;
437 int in_size=0; 438 int in_size=0;
438 video_codec_t video_codec = find_video_codec(sh_video); 439 video_codec_t video_codec = find_video_codec(sh_video);
439 440
440 *start=NULL; 441 *start=NULL;
467 case 0x1B5: mp_header_process_extension (&picture, &videobuffer[start]);break; 468 case 0x1B5: mp_header_process_extension (&picture, &videobuffer[start]);break;
468 case 0x1B2: process_userdata (&videobuffer[start], videobuf_len-start);break; 469 case 0x1B2: process_userdata (&videobuffer[start], videobuf_len-start);break;
469 case 0x100: picture_coding_type=(videobuffer[start+1] >> 3) & 7;break; 470 case 0x100: picture_coding_type=(videobuffer[start+1] >> 3) & 7;break;
470 } 471 }
471 } 472 }
473 fps = picture.fps * picture.frame_rate_extension_n / picture.frame_rate_extension_d;
472 474
473 *start=videobuffer; in_size=videobuf_len; 475 *start=videobuffer; in_size=videobuf_len;
474 476
475 // get mpeg fps: 477 // get mpeg fps:
476 if(sh_video->fps!=picture.fps) if(!force_fps && !telecine){ 478 if(sh_video->fps!=fps) if(!force_fps && !telecine){
477 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); 479 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);
478 sh_video->fps=picture.fps; 480 sh_video->fps=fps;
479 sh_video->frametime=1.0/picture.fps; 481 sh_video->frametime=1.0/fps;
480 } 482 }
481 483
482 // fix mpeg2 frametime: 484 // fix mpeg2 frametime:
483 frame_time=(picture.display_time)*0.01f; 485 frame_time=(picture.display_time)*0.01f;
484 picture.display_time=100; 486 picture.display_time=100;