In av_find_stream_info, decode at least 4 h.264 frames to be able to guess delay.

Originally committed as revision 24014 to svn://svn.ffmpeg.org/ffmpeg/trunk
oldabi
Baptiste Coudurier 15 years ago
parent b06855f18a
commit ae447836af
  1. 10
      libavformat/utils.c

@ -2019,6 +2019,12 @@ static int has_codec_parameters(AVCodecContext *enc)
return enc->codec_id != CODEC_ID_NONE && val != 0; return enc->codec_id != CODEC_ID_NONE && val != 0;
} }
static int has_decode_delay_been_guessed(AVStream *st)
{
return st->codec->codec_id != CODEC_ID_H264 ||
st->codec_info_nb_frames >= 4 + st->codec->has_b_frames;
}
static int try_decode_frame(AVStream *st, AVPacket *avpkt) static int try_decode_frame(AVStream *st, AVPacket *avpkt)
{ {
int16_t *samples; int16_t *samples;
@ -2035,7 +2041,7 @@ static int try_decode_frame(AVStream *st, AVPacket *avpkt)
return ret; return ret;
} }
if(!has_codec_parameters(st->codec)){ if(!has_codec_parameters(st->codec) || !has_decode_delay_been_guessed(st)){
switch(st->codec->codec_type) { switch(st->codec->codec_type) {
case AVMEDIA_TYPE_VIDEO: case AVMEDIA_TYPE_VIDEO:
avcodec_get_frame_defaults(&picture); avcodec_get_frame_defaults(&picture);
@ -2317,7 +2323,7 @@ int av_find_stream_info(AVFormatContext *ic)
decompress the frame. We try to avoid that in most cases as decompress the frame. We try to avoid that in most cases as
it takes longer and uses more memory. For MPEG-4, we need to it takes longer and uses more memory. For MPEG-4, we need to
decompress for QuickTime. */ decompress for QuickTime. */
if (!has_codec_parameters(st->codec)) if (!has_codec_parameters(st->codec) || !has_decode_delay_been_guessed(st))
try_decode_frame(st, pkt); try_decode_frame(st, pkt);
count++; count++;

Loading…
Cancel
Save