Skip to content

Commit

Permalink
avpacket: Replace av_free_packet with av_packet_unref
Browse files Browse the repository at this point in the history
`av_packet_unref` matches the AVFrame ref-counted API and can be used as
a drop in replacement.

Deprecate `av_free_packet`.
  • Loading branch information
lu-zero committed Oct 26, 2015
1 parent a5d4204 commit ce70f28
Show file tree
Hide file tree
Showing 80 changed files with 174 additions and 158 deletions.
10 changes: 5 additions & 5 deletions avconv.c
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
*/
if (!(avctx->codec_type == AVMEDIA_TYPE_VIDEO && avctx->codec)) {
if (ost->frame_number >= ost->max_frames) {
av_free_packet(pkt);
av_packet_unref(pkt);
return;
}
ost->frame_number++;
Expand All @@ -288,7 +288,7 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
pkt->data, pkt->size,
pkt->flags & AV_PKT_FLAG_KEY);
if (a > 0) {
av_free_packet(pkt);
av_packet_unref(pkt);
new_pkt.buf = av_buffer_create(new_pkt.data, new_pkt.size,
av_buffer_default_free, NULL, 0);
if (!new_pkt.buf)
Expand Down Expand Up @@ -2158,7 +2158,7 @@ static void free_input_threads(void)
pthread_mutex_lock(&f->fifo_lock);
while (av_fifo_size(f->fifo)) {
av_fifo_generic_read(f->fifo, &pkt, sizeof(pkt), NULL);
av_free_packet(&pkt);
av_packet_unref(&pkt);
}
pthread_cond_signal(&f->fifo_cond);
pthread_mutex_unlock(&f->fifo_lock);
Expand All @@ -2168,7 +2168,7 @@ static void free_input_threads(void)

while (av_fifo_size(f->fifo)) {
av_fifo_generic_read(f->fifo, &pkt, sizeof(pkt), NULL);
av_free_packet(&pkt);
av_packet_unref(&pkt);
}
av_fifo_free(f->fifo);
}
Expand Down Expand Up @@ -2483,7 +2483,7 @@ static int process_input(void)
process_input_packet(ist, &pkt, 0);

discard_packet:
av_free_packet(&pkt);
av_packet_unref(&pkt);

return 0;
}
Expand Down
14 changes: 7 additions & 7 deletions avplay.c
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ static void packet_queue_flush(PacketQueue *q)
SDL_LockMutex(q->mutex);
for (pkt = q->first_pkt; pkt != NULL; pkt = pkt1) {
pkt1 = pkt->next;
av_free_packet(&pkt->pkt);
av_packet_unref(&pkt->pkt);
av_freep(&pkt);
}
q->last_pkt = NULL;
Expand Down Expand Up @@ -1617,7 +1617,7 @@ static int video_thread(void *arg)
while (is->paused && !is->videoq.abort_request)
SDL_Delay(10);

av_free_packet(&pkt);
av_packet_unref(&pkt);

ret = get_video_frame(is, frame, &pts_int, &pkt);
if (ret < 0)
Expand Down Expand Up @@ -1684,7 +1684,7 @@ static int video_thread(void *arg)
av_freep(&vfilters);
avfilter_graph_free(&graph);
#endif
av_free_packet(&pkt);
av_packet_unref(&pkt);
av_frame_free(&frame);
return 0;
}
Expand Down Expand Up @@ -1753,7 +1753,7 @@ static int subtitle_thread(void *arg)
is->subpq_size++;
SDL_UnlockMutex(is->subpq_mutex);
}
av_free_packet(pkt);
av_packet_unref(pkt);
}
return 0;
}
Expand Down Expand Up @@ -1984,7 +1984,7 @@ static int audio_decode_frame(VideoState *is, double *pts_ptr)

/* free the current packet */
if (pkt->data)
av_free_packet(pkt);
av_packet_unref(pkt);
memset(pkt_temp, 0, sizeof(*pkt_temp));

if (is->paused || is->audioq.abort_request) {
Expand Down Expand Up @@ -2181,7 +2181,7 @@ static void stream_component_close(VideoState *is, int stream_index)
SDL_CloseAudio();

packet_queue_end(&is->audioq);
av_free_packet(&is->audio_pkt);
av_packet_unref(&is->audio_pkt);
if (is->avr)
avresample_free(&is->avr);
av_freep(&is->audio_buf1);
Expand Down Expand Up @@ -2490,7 +2490,7 @@ static int decode_thread(void *arg)
} else if (pkt->stream_index == is->subtitle_stream && pkt_in_play_range) {
packet_queue_put(&is->subtitleq, pkt);
} else {
av_free_packet(pkt);
av_packet_unref(pkt);
}
}
/* wait until the end */
Expand Down
4 changes: 4 additions & 0 deletions doc/APIchanges
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ libavutil: 2015-08-28

API changes, most recent first:

2015-xx-xx - xxxxxxx - lavc 57.7.0 - avcodec.h
Deprecate av_free_packet(). Use av_packet_unref() as replacement,
it resets the packet in a more consistent way.

2015-xx-xx - xxxxxxx - lavc 57.5.0 - avcodec.h
Add data and linesize array to AVSubtitleRect, to be used instead of
the ones from the embedded AVPicture.
Expand Down
6 changes: 3 additions & 3 deletions doc/examples/avcodec.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ static void audio_encode_example(const char *filename)
}
if (got_output) {
fwrite(pkt.data, 1, pkt.size, f);
av_free_packet(&pkt);
av_packet_unref(&pkt);
}
}
fclose(f);
Expand Down Expand Up @@ -403,7 +403,7 @@ static void video_encode_example(const char *filename)
if (got_output) {
printf("encoding frame %3d (size=%5d)\n", i, pkt.size);
fwrite(pkt.data, 1, pkt.size, f);
av_free_packet(&pkt);
av_packet_unref(&pkt);
}
}

Expand All @@ -420,7 +420,7 @@ static void video_encode_example(const char *filename)
if (got_output) {
printf("encoding frame %3d (size=%5d)\n", i, pkt.size);
fwrite(pkt.data, 1, pkt.size, f);
av_free_packet(&pkt);
av_packet_unref(&pkt);
}
}

Expand Down
10 changes: 5 additions & 5 deletions doc/examples/transcode_aac.c
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ static int decode_audio_frame(AVFrame *frame,
data_present, &input_packet)) < 0) {
fprintf(stderr, "Could not decode frame (error '%s')\n",
get_error_text(error));
av_free_packet(&input_packet);
av_packet_unref(&input_packet);
return error;
}

Expand All @@ -347,7 +347,7 @@ static int decode_audio_frame(AVFrame *frame,
*/
if (*finished && *data_present)
*finished = 0;
av_free_packet(&input_packet);
av_packet_unref(&input_packet);
return 0;
}

Expand Down Expand Up @@ -585,7 +585,7 @@ static int encode_audio_frame(AVFrame *frame,
frame, data_present)) < 0) {
fprintf(stderr, "Could not encode frame (error '%s')\n",
get_error_text(error));
av_free_packet(&output_packet);
av_packet_unref(&output_packet);
return error;
}

Expand All @@ -594,11 +594,11 @@ static int encode_audio_frame(AVFrame *frame,
if ((error = av_write_frame(output_format_context, &output_packet)) < 0) {
fprintf(stderr, "Could not write frame (error '%s')\n",
get_error_text(error));
av_free_packet(&output_packet);
av_packet_unref(&output_packet);
return error;
}

av_free_packet(&output_packet);
av_packet_unref(&output_packet);
}

return 0;
Expand Down
33 changes: 19 additions & 14 deletions libavcodec/avcodec.h
Original file line number Diff line number Diff line change
Expand Up @@ -1151,15 +1151,19 @@ typedef struct AVPacketSideData {
* ABI. Thus it may be allocated on stack and no new fields can be added to it
* without libavcodec and libavformat major bump.
*
* The semantics of data ownership depends on the buf or destruct (deprecated)
* fields. If either is set, the packet data is dynamically allocated and is
* valid indefinitely until av_free_packet() is called (which in turn calls
* av_buffer_unref()/the destruct callback to free the data). If neither is set,
* the packet data is typically backed by some static buffer somewhere and is
* only valid for a limited time (e.g. until the next read call when demuxing).
* The semantics of data ownership depends on the buf field.
* If it is set, the packet data is dynamically allocated and is
* valid indefinitely until a call to av_packet_unref() reduces the
* reference count to 0.
*
* The side data is always allocated with av_malloc() and is freed in
* av_free_packet().
* If the buf field is not set av_packet_ref() would make a copy instead
* of increasing the reference count.
*
* The side data is always allocated with av_malloc(), copied by
* av_packet_ref() and freed by av_packet_unref().
*
* @see av_packet_ref
* @see av_packet_unref
*/
typedef struct AVPacket {
/**
Expand Down Expand Up @@ -3477,14 +3481,17 @@ int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);
* packet is allocated if it was not really allocated.
*/
int av_dup_packet(AVPacket *pkt);

#if FF_API_AVPACKET_OLD_API
/**
* Free a packet.
*
* @deprecated Use av_packet_unref
*
* @param pkt packet to free
*/
attribute_deprecated
void av_free_packet(AVPacket *pkt);

#endif
/**
* Allocate new information of a packet.
*
Expand Down Expand Up @@ -4070,8 +4077,7 @@ AVCodec *avcodec_find_encoder_by_name(const char *name);
* 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).
* freed using av_packet_unref().
* @param[in] frame AVFrame containing the raw audio data to be encoded.
* May be NULL when flushing an encoder that has the
* AV_CODEC_CAP_DELAY capability set.
Expand Down Expand Up @@ -4112,8 +4118,7 @@ int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt,
* 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).
* freed using av_packet_unref().
* @param[in] frame AVFrame containing the raw video data to be encoded.
* May be NULL when flushing an encoder that has the
* AV_CODEC_CAP_DELAY capability set.
Expand Down
6 changes: 5 additions & 1 deletion libavcodec/avpacket.c
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ int av_dup_packet(AVPacket *pkt)
return 0;

failed_alloc:
av_free_packet(pkt);
av_packet_unref(pkt);
return AVERROR(ENOMEM);
}

Expand All @@ -197,6 +197,8 @@ void av_packet_free_side_data(AVPacket *pkt)
pkt->side_data_elems = 0;
}

#if FF_API_AVPACKET_OLD_API
FF_DISABLE_DEPRECATION_WARNINGS
void av_free_packet(AVPacket *pkt)
{
if (pkt) {
Expand All @@ -208,6 +210,8 @@ void av_free_packet(AVPacket *pkt)
av_packet_free_side_data(pkt);
}
}
FF_ENABLE_DEPRECATION_WARNINGS
#endif

uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
int size)
Expand Down
2 changes: 1 addition & 1 deletion libavcodec/jpeglsenc.c
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt,
return 0;

memfail:
av_free_packet(pkt);
av_packet_unref(pkt);
av_freep(&buf2);
av_freep(&state);
av_freep(&zero);
Expand Down
2 changes: 1 addition & 1 deletion libavcodec/libxvid.c
Original file line number Diff line number Diff line change
Expand Up @@ -811,7 +811,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
return 0;
} else {
if (!user_packet)
av_free_packet(pkt);
av_packet_unref(pkt);
if (!xerr)
return 0;
av_log(avctx, AV_LOG_ERROR,
Expand Down
2 changes: 1 addition & 1 deletion libavcodec/mpegvideo_enc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1146,7 +1146,7 @@ static int encode_frame(AVCodecContext *c, AVFrame *frame)
return ret;

ret = pkt.size;
av_free_packet(&pkt);
av_packet_unref(&pkt);
return ret;
}

Expand Down
8 changes: 4 additions & 4 deletions libavcodec/utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -1200,7 +1200,7 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
*got_packet_ptr = 0;

if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY) && !frame) {
av_free_packet(avpkt);
av_packet_unref(avpkt);
av_init_packet(avpkt);
return 0;
}
Expand Down Expand Up @@ -1276,7 +1276,7 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
}

if (ret < 0 || !*got_packet_ptr) {
av_free_packet(avpkt);
av_packet_unref(avpkt);
av_init_packet(avpkt);
goto end;
}
Expand Down Expand Up @@ -1307,7 +1307,7 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx,
*got_packet_ptr = 0;

if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY) && !frame) {
av_free_packet(avpkt);
av_packet_unref(avpkt);
av_init_packet(avpkt);
avpkt->size = 0;
return 0;
Expand Down Expand Up @@ -1335,7 +1335,7 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx,
}

if (ret < 0 || !*got_packet_ptr)
av_free_packet(avpkt);
av_packet_unref(avpkt);

emms_c();
return ret;
Expand Down
5 changes: 4 additions & 1 deletion libavcodec/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
#include "libavutil/version.h"

#define LIBAVCODEC_VERSION_MAJOR 57
#define LIBAVCODEC_VERSION_MINOR 7
#define LIBAVCODEC_VERSION_MINOR 8
#define LIBAVCODEC_VERSION_MICRO 0

#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
Expand Down Expand Up @@ -174,5 +174,8 @@
#ifndef FF_API_AVPICTURE
#define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59)
#endif
#ifndef FF_API_AVPACKET_OLD_API
#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59)
#endif

#endif /* AVCODEC_VERSION_H */
4 changes: 2 additions & 2 deletions libavdevice/alsa_dec.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,14 +128,14 @@ static int audio_read_packet(AVFormatContext *s1, AVPacket *pkt)

while ((res = snd_pcm_readi(s->h, pkt->data, pkt->size / s->frame_size)) < 0) {
if (res == -EAGAIN) {
av_free_packet(pkt);
av_packet_unref(pkt);

return AVERROR(EAGAIN);
}
if (ff_alsa_xrun_recover(s1, res) < 0) {
av_log(s1, AV_LOG_ERROR, "ALSA read error: %s\n",
snd_strerror(res));
av_free_packet(pkt);
av_packet_unref(pkt);

return AVERROR(EIO);
}
Expand Down
2 changes: 1 addition & 1 deletion libavdevice/jack.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ static void free_pkt_fifo(AVFifoBuffer *fifo)
AVPacket pkt;
while (av_fifo_size(fifo)) {
av_fifo_generic_read(fifo, &pkt, sizeof(pkt), NULL);
av_free_packet(&pkt);
av_packet_unref(&pkt);
}
av_fifo_free(fifo);
}
Expand Down
2 changes: 1 addition & 1 deletion libavdevice/oss_dec.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ static int audio_read_packet(AVFormatContext *s1, AVPacket *pkt)

ret = read(s->fd, pkt->data, pkt->size);
if (ret <= 0){
av_free_packet(pkt);
av_packet_unref(pkt);
pkt->size = 0;
if (ret<0) return AVERROR(errno);
else return AVERROR_EOF;
Expand Down
Loading

0 comments on commit ce70f28

Please sign in to comment.