mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-05-31 17:07:43 +00:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: mov: Don't av_malloc(0). avconv: only allocate 1 AVFrame per input stream avconv: fix memleaks due to not freeing the AVFrame for audio h264-fate: remove -strict 1 except where necessary (mr4/5-tandberg). misc Doxygen markup improvements doxygen: eliminate Qt-style doxygen syntax g722: Add a regression test for muxing/demuxing in wav g722: Change bits per sample to 4 g722dec: Signal skipping the lower bits via AVOptions instead of bits_per_coded_sample api-example: update to use avcodec_decode_audio4() avplay: use avcodec_decode_audio4() avplay: use a separate buffer for playing silence avformat: use avcodec_decode_audio4() in avformat_find_stream_info() avconv: use avcodec_decode_audio4() instead of avcodec_decode_audio3() mov: Allow empty stts atom. doc: document preferred Doxygen syntax and make patcheck detect it Conflicts: avconv.c ffplay.c libavcodec/mlpdec.c libavcodec/version.h libavformat/mov.c tests/codec-regression.sh tests/fate/h264.mak Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
b404ab9e74
34 changed files with 330 additions and 272 deletions
|
@ -2209,10 +2209,10 @@ static int has_decode_delay_been_guessed(AVStream *st)
|
|||
|
||||
static int try_decode_frame(AVStream *st, AVPacket *avpkt, AVDictionary **options)
|
||||
{
|
||||
int16_t *samples;
|
||||
AVCodec *codec;
|
||||
int got_picture, data_size, ret=0;
|
||||
int got_picture, ret = 0;
|
||||
AVFrame picture;
|
||||
AVPacket pkt = *avpkt;
|
||||
|
||||
if(!st->codec->codec){
|
||||
codec = avcodec_find_decoder(st->codec->codec_id);
|
||||
|
@ -2223,28 +2223,29 @@ static int try_decode_frame(AVStream *st, AVPacket *avpkt, AVDictionary **option
|
|||
return ret;
|
||||
}
|
||||
|
||||
if(!has_codec_parameters(st->codec) || !has_decode_delay_been_guessed(st) ||
|
||||
(!st->codec_info_nb_frames && st->codec->codec->capabilities & CODEC_CAP_CHANNEL_CONF)) {
|
||||
while (pkt.size > 0 && ret >= 0 &&
|
||||
(!has_codec_parameters(st->codec) ||
|
||||
!has_decode_delay_been_guessed(st) ||
|
||||
(!st->codec_info_nb_frames && st->codec->codec->capabilities & CODEC_CAP_CHANNEL_CONF))) {
|
||||
got_picture = 0;
|
||||
avcodec_get_frame_defaults(&picture);
|
||||
switch(st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
avcodec_get_frame_defaults(&picture);
|
||||
ret = avcodec_decode_video2(st->codec, &picture,
|
||||
&got_picture, avpkt);
|
||||
if (got_picture)
|
||||
st->info->nb_decoded_frames++;
|
||||
&got_picture, &pkt);
|
||||
break;
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
data_size = FFMAX(avpkt->size, AVCODEC_MAX_AUDIO_FRAME_SIZE);
|
||||
samples = av_malloc(data_size);
|
||||
if (!samples)
|
||||
goto fail;
|
||||
ret = avcodec_decode_audio3(st->codec, samples,
|
||||
&data_size, avpkt);
|
||||
av_free(samples);
|
||||
ret = avcodec_decode_audio4(st->codec, &picture, &got_picture, &pkt);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (ret >= 0) {
|
||||
if (got_picture)
|
||||
st->info->nb_decoded_frames++;
|
||||
pkt.data += ret;
|
||||
pkt.size -= ret;
|
||||
}
|
||||
}
|
||||
fail:
|
||||
return ret;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue