mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-12-15 11:30:08 +01:00
lavc: free the output packet when encoding failed or produced no output.
This commit is contained in:
@@ -3788,6 +3788,10 @@ int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx,
|
|||||||
* avpkt->data is NULL, the encoder will allocate it.
|
* avpkt->data is NULL, the encoder will allocate it.
|
||||||
* The encoder will set avpkt->size to the size of the
|
* The encoder will set avpkt->size to the size of the
|
||||||
* output packet.
|
* 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.
|
* @param[in] frame AVFrame containing the raw audio data to be encoded.
|
||||||
* May be NULL when flushing an encoder that has the
|
* May be NULL when flushing an encoder that has the
|
||||||
* CODEC_CAP_DELAY capability set.
|
* 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
|
* The encoder will set avpkt->size to the size of the
|
||||||
* output packet. The returned data (if any) belongs to the
|
* output packet. The returned data (if any) belongs to the
|
||||||
* caller, he is responsible for freeing it.
|
* 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.
|
* @param[in] frame AVFrame containing the raw video data to be encoded.
|
||||||
* May be NULL when flushing an encoder that has the
|
* May be NULL when flushing an encoder that has the
|
||||||
* CODEC_CAP_DELAY capability set.
|
* CODEC_CAP_DELAY capability set.
|
||||||
|
|||||||
@@ -864,6 +864,7 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
|
|||||||
*got_packet_ptr = 0;
|
*got_packet_ptr = 0;
|
||||||
|
|
||||||
if (!(avctx->codec->capabilities & CODEC_CAP_DELAY) && !frame) {
|
if (!(avctx->codec->capabilities & CODEC_CAP_DELAY) && !frame) {
|
||||||
|
av_free_packet(avpkt);
|
||||||
av_init_packet(avpkt);
|
av_init_packet(avpkt);
|
||||||
avpkt->size = 0;
|
avpkt->size = 0;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -962,6 +963,9 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
|
|||||||
if (!ret)
|
if (!ret)
|
||||||
avctx->frame_number++;
|
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,
|
/* 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
|
this needs to be moved to the encoders, but for now we can do it
|
||||||
here to simplify things */
|
here to simplify things */
|
||||||
@@ -1095,6 +1099,7 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx,
|
|||||||
*got_packet_ptr = 0;
|
*got_packet_ptr = 0;
|
||||||
|
|
||||||
if (!(avctx->codec->capabilities & CODEC_CAP_DELAY) && !frame) {
|
if (!(avctx->codec->capabilities & CODEC_CAP_DELAY) && !frame) {
|
||||||
|
av_free_packet(avpkt);
|
||||||
av_init_packet(avpkt);
|
av_init_packet(avpkt);
|
||||||
avpkt->size = 0;
|
avpkt->size = 0;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1121,6 +1126,9 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx,
|
|||||||
avctx->frame_number++;
|
avctx->frame_number++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret < 0 || !*got_packet_ptr)
|
||||||
|
av_free_packet(avpkt);
|
||||||
|
|
||||||
emms_c();
|
emms_c();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user