avcodec/avpacket: add av_packet_make_refcounted()
It works as a drop in replacement for the deprecated av_dup_packet(), to ensure a packet is reference counted. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
e0f3228686
commit
860086ee16
@ -15,6 +15,9 @@ libavutil: 2017-10-21
|
||||
|
||||
API changes, most recent first:
|
||||
|
||||
2018-04-01 - xxxxxxx - lavc 58.17.100 - avcodec.h
|
||||
Add av_packet_make_refcounted().
|
||||
|
||||
2018-xx-xx - xxxxxxx - lavfi 7.14.100 - avfilter.h
|
||||
Deprecate use of avfilter_register(), avfilter_register_all(),
|
||||
avfilter_next(). Add av_filter_iterate().
|
||||
|
@ -4365,7 +4365,7 @@ int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);
|
||||
* @warning This is a hack - the packet memory allocation stuff is broken. The
|
||||
* packet is allocated if it was not really allocated.
|
||||
*
|
||||
* @deprecated Use av_packet_ref
|
||||
* @deprecated Use av_packet_ref or av_packet_make_refcounted
|
||||
*/
|
||||
attribute_deprecated
|
||||
int av_dup_packet(AVPacket *pkt);
|
||||
@ -4536,6 +4536,22 @@ void av_packet_move_ref(AVPacket *dst, AVPacket *src);
|
||||
*/
|
||||
int av_packet_copy_props(AVPacket *dst, const AVPacket *src);
|
||||
|
||||
/**
|
||||
* Ensure the data described by a given packet is reference counted.
|
||||
*
|
||||
* @note This function does not ensure that the reference will be writable.
|
||||
* Use av_packet_make_writable instead for that purpose.
|
||||
*
|
||||
* @see av_packet_ref
|
||||
* @see av_packet_make_writable
|
||||
*
|
||||
* @param pkt packet whose data should be made reference counted.
|
||||
*
|
||||
* @return 0 on success, a negative AVERROR on error. On failure, the
|
||||
* packet is unchanged.
|
||||
*/
|
||||
int av_packet_make_refcounted(AVPacket *pkt);
|
||||
|
||||
/**
|
||||
* Create a writable reference for the data described by a given packet,
|
||||
* avoiding data copy if possible.
|
||||
|
@ -652,6 +652,24 @@ void av_packet_move_ref(AVPacket *dst, AVPacket *src)
|
||||
src->size = 0;
|
||||
}
|
||||
|
||||
int av_packet_make_refcounted(AVPacket *pkt)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (pkt->buf)
|
||||
return 0;
|
||||
|
||||
ret = packet_alloc(&pkt->buf, pkt->size);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (pkt->size)
|
||||
memcpy(pkt->buf->data, pkt->data, pkt->size);
|
||||
|
||||
pkt->data = pkt->buf->data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int av_packet_make_writable(AVPacket *pkt)
|
||||
{
|
||||
AVBufferRef *buf = NULL;
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include "libavutil/version.h"
|
||||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 58
|
||||
#define LIBAVCODEC_VERSION_MINOR 16
|
||||
#define LIBAVCODEC_VERSION_MINOR 17
|
||||
#define LIBAVCODEC_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||
|
Loading…
x
Reference in New Issue
Block a user