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
This commit is contained in:
@ -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++;
|
||||||
|
Reference in New Issue
Block a user