Mercurial > libavformat.hg
comparison utils.c @ 85:25062c9b1f86 libavformat
per context frame_rate_base, this should finally fix frame_rate related av sync issues
author | michaelni |
---|---|
date | Wed, 12 Mar 2003 15:16:19 +0000 |
parents | 78bec272ce3a |
children | 27d6df9208d4 |
comparison
equal
deleted
inserted
replaced
84:0068a6902911 | 85:25062c9b1f86 |
---|---|
612 st->codec_info_nb_repeat_frames += 2; | 612 st->codec_info_nb_repeat_frames += 2; |
613 } | 613 } |
614 #endif | 614 #endif |
615 /* stop after 40 frames */ | 615 /* stop after 40 frames */ |
616 if (st->codec_info_nb_real_frames >= 40) { | 616 if (st->codec_info_nb_real_frames >= 40) { |
617 st->r_frame_rate = (st->codec.frame_rate * | 617 av_reduce( |
618 st->codec_info_nb_real_frames) / | 618 &st->r_frame_rate, |
619 (st->codec_info_nb_real_frames + | 619 &st->r_frame_rate_base, |
620 (st->codec_info_nb_repeat_frames >> 1)); | 620 (int64_t)st->codec.frame_rate * st->codec_info_nb_real_frames, |
621 st->codec_info_nb_real_frames + (st->codec_info_nb_repeat_frames >> 1), | |
622 1<<30); | |
621 goto close_codec; | 623 goto close_codec; |
622 } | 624 } |
623 } else { | 625 } else { |
624 close_codec: | 626 close_codec: |
625 st->codec_info_state = CSTATE_FOUND; | 627 st->codec_info_state = CSTATE_FOUND; |
643 | 645 |
644 /* set real frame rate info */ | 646 /* set real frame rate info */ |
645 for(i=0;i<ic->nb_streams;i++) { | 647 for(i=0;i<ic->nb_streams;i++) { |
646 st = ic->streams[i]; | 648 st = ic->streams[i]; |
647 if (st->codec.codec_type == CODEC_TYPE_VIDEO) { | 649 if (st->codec.codec_type == CODEC_TYPE_VIDEO) { |
648 if (!st->r_frame_rate) | 650 if (!st->r_frame_rate){ |
649 st->r_frame_rate = st->codec.frame_rate; | 651 st->r_frame_rate = st->codec.frame_rate; |
652 st->r_frame_rate_base = st->codec.frame_rate_base; | |
653 } | |
650 } | 654 } |
651 } | 655 } |
652 | 656 |
653 return ret; | 657 return ret; |
654 } | 658 } |
818 av_frac_add(&st->pts, | 822 av_frac_add(&st->pts, |
819 (int64_t)s->pts_den * frame_size); | 823 (int64_t)s->pts_den * frame_size); |
820 break; | 824 break; |
821 case CODEC_TYPE_VIDEO: | 825 case CODEC_TYPE_VIDEO: |
822 av_frac_add(&st->pts, | 826 av_frac_add(&st->pts, |
823 (int64_t)s->pts_den * FRAME_RATE_BASE); | 827 (int64_t)s->pts_den * st->codec.frame_rate_base); |
824 break; | 828 break; |
825 default: | 829 default: |
826 break; | 830 break; |
827 } | 831 } |
828 return ret; | 832 return ret; |
1314 num = num % den; | 1318 num = num % den; |
1315 } | 1319 } |
1316 f->num = num; | 1320 f->num = num; |
1317 } | 1321 } |
1318 | 1322 |
1319 int av_gcd(int a, int b){ | |
1320 if(b) return av_gcd(b, a%b); | |
1321 else return a; | |
1322 } | |
1323 | |
1324 /** | 1323 /** |
1325 * register a new image format | 1324 * register a new image format |
1326 * @param img_fmt Image format descriptor | 1325 * @param img_fmt Image format descriptor |
1327 */ | 1326 */ |
1328 void av_register_image_format(AVImageFormat *img_fmt) | 1327 void av_register_image_format(AVImageFormat *img_fmt) |