|
|
|
@ -2019,6 +2019,12 @@ static int has_codec_parameters(AVCodecContext *enc) |
|
|
|
|
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) |
|
|
|
|
{ |
|
|
|
|
int16_t *samples; |
|
|
|
@ -2035,7 +2041,7 @@ static int try_decode_frame(AVStream *st, AVPacket *avpkt) |
|
|
|
|
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) { |
|
|
|
|
case AVMEDIA_TYPE_VIDEO: |
|
|
|
|
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 |
|
|
|
|
it takes longer and uses more memory. For MPEG-4, we need to |
|
|
|
|
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); |
|
|
|
|
|
|
|
|
|
count++; |
|
|
|
|