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)