mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
lavc: free the output packet when encoding failed or produced no output.
This commit is contained in:
parent
e42e9b0e4d
commit
7fb6c9225c
@ -3788,6 +3788,10 @@ int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx,
|
||||
* avpkt->data is NULL, the encoder will allocate it.
|
||||
* The encoder will set avpkt->size to the size of the
|
||||
* output packet.
|
||||
*
|
||||
* If this function fails or produces no output, avpkt will be
|
||||
* freed using av_free_packet() (i.e. avpkt->destruct will be
|
||||
* called to free the user supplied buffer).
|
||||
* @param[in] frame AVFrame containing the raw audio data to be encoded.
|
||||
* May be NULL when flushing an encoder that has the
|
||||
* CODEC_CAP_DELAY capability set.
|
||||
@ -3870,6 +3874,10 @@ int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
|
||||
* The encoder will set avpkt->size to the size of the
|
||||
* output packet. The returned data (if any) belongs to the
|
||||
* caller, he is responsible for freeing it.
|
||||
*
|
||||
* If this function fails or produces no output, avpkt will be
|
||||
* freed using av_free_packet() (i.e. avpkt->destruct will be
|
||||
* called to free the user supplied buffer).
|
||||
* @param[in] frame AVFrame containing the raw video data to be encoded.
|
||||
* May be NULL when flushing an encoder that has the
|
||||
* CODEC_CAP_DELAY capability set.
|
||||
|
@ -864,6 +864,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;
|
||||
@ -962,6 +963,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 */
|
||||
@ -1095,6 +1099,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;
|
||||
@ -1121,6 +1126,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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user