diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-03-04 02:03:25 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-03-04 04:26:04 +0100 |
commit | 15c6be8c7da7b94b5e131396e9a82ab6fe4a6b64 (patch) | |
tree | 84db7f4851faba26561f846b4f112ef64d01b3ad /libavcodec/utils.c | |
parent | f972193a15026a99eb2b08e7913a03f2123663da (diff) | |
parent | b7beabab4b78cc253d06c0a33f15b8ff79866e85 (diff) | |
download | ffmpeg-15c6be8c7da7b94b5e131396e9a82ab6fe4a6b64.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
tiertexseq: set correct block_align for audio
tiertexseq: set audio stream start time to 0
voc/avs: Do not change the sample rate mid-stream.
segafilm: use the sample rate as the time base for audio streams
ea: fix audio pts
psx-str: fix audio pts
vqf: set packet duration
tta demuxer: set packet duration
mpegaudio_parser: do not ignore information from the first parsed frame
mpegaudio_parser: be less picky about the start position
thp: set audio packet durations
avcodec: add a Vorbis parser to get packet duration
vorbisdec: read the previous window flag for long windows
lavc: free the output packet when encoding failed or produced no output.
lavc: preserve avpkt->destruct in ff_alloc_packet().
lavc: clarify the meaning of AVCodecContext.frame_number.
mpegts: Pad the packet buffer in handle_packet().
mpegts: Do not call read_sl_header() when no bytes remain in the buffer.
Conflicts:
libavcodec/mpegaudio_parser.c
libavcodec/version.h
libavformat/mpegts.c
tests/ref/fate/pva-demux
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/utils.c')
-rw-r--r-- | libavcodec/utils.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/libavcodec/utils.c b/libavcodec/utils.c index f462bd1a73..47e29c9151 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -945,14 +945,13 @@ int ff_alloc_packet(AVPacket *avpkt, int size) return AVERROR(EINVAL); if (avpkt->data) { - uint8_t *pkt_data; + void *destruct = avpkt->destruct; if (avpkt->size < size) return AVERROR(EINVAL); - pkt_data = avpkt->data; av_init_packet(avpkt); - avpkt->data = pkt_data; + avpkt->destruct = destruct; avpkt->size = size; return 0; } else { @@ -972,6 +971,7 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx, *got_packet_ptr = 0; if (!(avctx->codec->capabilities & CODEC_CAP_DELAY) && !frame) { + av_free_packet(avpkt); av_init_packet(avpkt); avpkt->size = 0; return 0; @@ -1072,6 +1072,9 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx, if (!ret) avctx->frame_number++; + if (ret < 0 || !*got_packet_ptr) + av_free_packet(avpkt); + /* NOTE: if we add any audio encoders which output non-keyframe packets, this needs to be moved to the encoders, but for now we can do it here to simplify things */ @@ -1203,6 +1206,7 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx, *got_packet_ptr = 0; if (!(avctx->codec->capabilities & CODEC_CAP_DELAY) && !frame) { + av_free_packet(avpkt); av_init_packet(avpkt); avpkt->size = 0; return 0; @@ -1230,6 +1234,9 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx, avctx->frame_number++; } + if (ret < 0 || !*got_packet_ptr) + av_free_packet(avpkt); + emms_c(); return ret; } |