mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avpacket: Provide an alloc and a free function for the struct
Pave the way for having the size of the AVPacket struct not part of the ABI.
This commit is contained in:
parent
9b56d5c114
commit
a9a6010637
@ -12,12 +12,15 @@ libavutil: 2015-08-28
|
|||||||
|
|
||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
2015-xx-xx - xxxxxxx - lavc 57.6.0 - avcodec.h
|
||||||
|
|
||||||
2015-xx-xx - lavc 57.7.0 - avcodec.h
|
2015-xx-xx - lavc 57.7.0 - avcodec.h
|
||||||
xxxxxx - Deprecate av_free_packet(). Use av_packet_unref() as replacement,
|
xxxxxx - Deprecate av_free_packet(). Use av_packet_unref() as replacement,
|
||||||
it resets the packet in a more consistent way.
|
it resets the packet in a more consistent way.
|
||||||
xxxxxx - Deprecate av_dup_packet(), it is a no-op for most cases.
|
xxxxxx - Deprecate av_dup_packet(), it is a no-op for most cases.
|
||||||
Use av_packet_ref() to make a non-refcounted AVPacket refcounted.
|
Use av_packet_ref() to make a non-refcounted AVPacket refcounted.
|
||||||
|
xxxxxx - Add av_packet_alloc(), av_packet_clone(), av_packet_free().
|
||||||
|
They match the AVFrame functions with the same name.
|
||||||
|
|
||||||
2015-xx-xx - xxxxxxx - lavc 57.5.0 - avcodec.h
|
2015-xx-xx - xxxxxxx - lavc 57.5.0 - avcodec.h
|
||||||
Add data and linesize array to AVSubtitleRect, to be used instead of
|
Add data and linesize array to AVSubtitleRect, to be used instead of
|
||||||
|
@ -3425,6 +3425,40 @@ void avsubtitle_free(AVSubtitle *sub);
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate an AVPacket and set its fields to default values. The resulting
|
||||||
|
* struct must be freed using av_packet_free().
|
||||||
|
*
|
||||||
|
* @return An AVPacket filled with default values or NULL on failure.
|
||||||
|
*
|
||||||
|
* @note this only allocates the AVPacket itself, not the data buffers. Those
|
||||||
|
* must be allocated through other means such as av_new_packet.
|
||||||
|
*
|
||||||
|
* @see av_new_packet
|
||||||
|
*/
|
||||||
|
AVPacket *av_packet_alloc(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new packet that references the same data as src.
|
||||||
|
*
|
||||||
|
* This is a shortcut for av_packet_alloc()+av_packet_ref().
|
||||||
|
*
|
||||||
|
* @return newly created AVPacket on success, NULL on error.
|
||||||
|
*
|
||||||
|
* @see av_packet_alloc
|
||||||
|
* @see av_packet_ref
|
||||||
|
*/
|
||||||
|
AVPacket *av_packet_clone(AVPacket *src);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Free the packet, if the packet is reference counted, it will be
|
||||||
|
* unreferenced first.
|
||||||
|
*
|
||||||
|
* @param packet packet to be freed. The pointer will be set to NULL.
|
||||||
|
* @note passing NULL is a no-op.
|
||||||
|
*/
|
||||||
|
void av_packet_free(AVPacket **pkt);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize optional fields of a packet with default values.
|
* Initialize optional fields of a packet with default values.
|
||||||
*
|
*
|
||||||
|
@ -46,6 +46,26 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||||||
pkt->side_data_elems = 0;
|
pkt->side_data_elems = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AVPacket *av_packet_alloc(void)
|
||||||
|
{
|
||||||
|
AVPacket *pkt = av_mallocz(sizeof(AVPacket));
|
||||||
|
if (!pkt)
|
||||||
|
return pkt;
|
||||||
|
|
||||||
|
av_packet_unref(pkt);
|
||||||
|
|
||||||
|
return pkt;
|
||||||
|
}
|
||||||
|
|
||||||
|
void av_packet_free(AVPacket **pkt)
|
||||||
|
{
|
||||||
|
if (!pkt || !*pkt)
|
||||||
|
return;
|
||||||
|
|
||||||
|
av_packet_unref(*pkt);
|
||||||
|
av_freep(pkt);
|
||||||
|
}
|
||||||
|
|
||||||
static int packet_alloc(AVBufferRef **buf, int size)
|
static int packet_alloc(AVBufferRef **buf, int size)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -343,6 +363,19 @@ fail:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AVPacket *av_packet_clone(AVPacket *src)
|
||||||
|
{
|
||||||
|
AVPacket *ret = av_packet_alloc();
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if (av_packet_ref(ret, src))
|
||||||
|
av_packet_free(&ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
|
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
|
||||||
{
|
{
|
||||||
*dst = *src;
|
*dst = *src;
|
||||||
|
Loading…
Reference in New Issue
Block a user