static int determinable_frame_size(AVCodecContext *avctx)
{
- if (/*avctx->codec_id == AV_CODEC_ID_AAC ||*/
- avctx->codec_id == AV_CODEC_ID_MP1 ||
- avctx->codec_id == AV_CODEC_ID_MP2 ||
- avctx->codec_id == AV_CODEC_ID_MP3/* ||
- avctx->codec_id == AV_CODEC_ID_CELT*/)
+ switch(avctx->codec_id) {
+ case AV_CODEC_ID_MP1:
+ case AV_CODEC_ID_MP2:
+ case AV_CODEC_ID_MP3:
return 1;
+ }
+
return 0;
}
if (j != i && next_start > ch->start && next_start < end)
end = next_start;
}
- ch->end = (end == INT64_MAX) ? ch->start : end;
+ ch->end = (end == INT64_MAX || end < ch->start) ? ch->start : end;
}
}
st->info->codec_info_duration) {
int best_fps = 0;
double best_error = 0.01;
+ AVRational codec_frame_rate = avctx->framerate;
if (st->info->codec_info_duration >= INT64_MAX / st->time_base.num / 2||
st->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den ||
best_error = error;
best_fps = std_fps.num;
}
+
+ if (ic->internal->prefer_codec_framerate && codec_frame_rate.num > 0 && codec_frame_rate.den > 0) {
+ error = fabs(av_q2d(codec_frame_rate) /
+ av_q2d(std_fps) - 1);
+ if (error < best_error) {
+ best_error = error;
+ best_fps = std_fps.num;
+ }
+ }
}
if (best_fps)
av_reduce(&st->avg_frame_rate.num, &st->avg_frame_rate.den,
if (!st->r_frame_rate.num) {
if ( avctx->time_base.den * (int64_t) st->time_base.num
<= avctx->time_base.num * avctx->ticks_per_frame * (int64_t) st->time_base.den) {
- st->r_frame_rate.num = avctx->time_base.den;
- st->r_frame_rate.den = avctx->time_base.num * avctx->ticks_per_frame;
+ av_reduce(&st->r_frame_rate.num, &st->r_frame_rate.den,
+ avctx->time_base.den, (int64_t)avctx->time_base.num * avctx->ticks_per_frame, INT_MAX);
} else {
st->r_frame_rate.num = st->time_base.den;
st->r_frame_rate.den = st->time_base.num;
{
int i, nb_streams = ic->nb_streams;
int ret = AVERROR_STREAM_NOT_FOUND;
- int best_count = -1, best_bitrate = -1, best_multiframe = -1, best_disposition = -1;
- int count, bitrate, multiframe, disposition;
+ int best_count = -1, best_multiframe = -1, best_disposition = -1;
+ int count, multiframe, disposition;
+ int64_t best_bitrate = -1;
+ int64_t bitrate;
unsigned *program = NULL;
const AVCodec *decoder = NULL, *best_decoder = NULL;
av_dict_free(&s->metadata);
av_dict_free(&s->internal->id3v2_meta);
av_freep(&s->streams);
- av_freep(&s->internal);
flush_packet_queue(s);
+ av_freep(&s->internal);
av_free(s);
}