avpacket: ABI bump additions
This commit adds a long-requested by API users opaque fields for AVPacket, as well as a time_base field.
This commit is contained in:
parent
a27853a730
commit
a1a0fddfd0
@ -14,6 +14,9 @@ libavutil: 2021-04-27
|
|||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
2021-08-02 - xxxxxxxxxx - lavc 59.4.100 - packet.h
|
||||||
|
Add AVPacket.opaque, AVPacket.opaque_ref, AVPacket.time_base.
|
||||||
|
|
||||||
2021-07-23 - xxxxxxxxxx - lavu 57.3.100 - common.h macros.h
|
2021-07-23 - xxxxxxxxxx - lavu 57.3.100 - common.h macros.h
|
||||||
Move several macros (AV_NE, FFDIFFSIGN, FFMAX, FFMAX3, FFMIN, FFMIN3,
|
Move several macros (AV_NE, FFDIFFSIGN, FFMAX, FFMAX3, FFMIN, FFMIN3,
|
||||||
FFSWAP, FF_ARRAY_ELEMS, MKTAG, MKBETAG) from common.h to macros.h.
|
FFSWAP, FF_ARRAY_ELEMS, MKTAG, MKBETAG) from common.h to macros.h.
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "libavutil/internal.h"
|
#include "libavutil/internal.h"
|
||||||
#include "libavutil/mathematics.h"
|
#include "libavutil/mathematics.h"
|
||||||
#include "libavutil/mem.h"
|
#include "libavutil/mem.h"
|
||||||
|
#include "libavutil/rational.h"
|
||||||
|
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
@ -44,6 +45,9 @@ void av_init_packet(AVPacket *pkt)
|
|||||||
pkt->buf = NULL;
|
pkt->buf = NULL;
|
||||||
pkt->side_data = NULL;
|
pkt->side_data = NULL;
|
||||||
pkt->side_data_elems = 0;
|
pkt->side_data_elems = 0;
|
||||||
|
pkt->opaque = NULL;
|
||||||
|
pkt->opaque_ref = NULL;
|
||||||
|
pkt->time_base = av_make_q(0, 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -374,7 +378,7 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
|||||||
|
|
||||||
int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
|
int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
|
||||||
{
|
{
|
||||||
int i;
|
int i, ret;
|
||||||
|
|
||||||
dst->pts = src->pts;
|
dst->pts = src->pts;
|
||||||
dst->dts = src->dts;
|
dst->dts = src->dts;
|
||||||
@ -382,9 +386,16 @@ int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
|
|||||||
dst->duration = src->duration;
|
dst->duration = src->duration;
|
||||||
dst->flags = src->flags;
|
dst->flags = src->flags;
|
||||||
dst->stream_index = src->stream_index;
|
dst->stream_index = src->stream_index;
|
||||||
|
dst->opaque = src->opaque;
|
||||||
|
dst->time_base = src->time_base;
|
||||||
|
dst->opaque_ref = NULL;
|
||||||
dst->side_data = NULL;
|
dst->side_data = NULL;
|
||||||
dst->side_data_elems = 0;
|
dst->side_data_elems = 0;
|
||||||
|
|
||||||
|
ret = av_buffer_replace(&dst->opaque_ref, src->opaque_ref);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
for (i = 0; i < src->side_data_elems; i++) {
|
for (i = 0; i < src->side_data_elems; i++) {
|
||||||
enum AVPacketSideDataType type = src->side_data[i].type;
|
enum AVPacketSideDataType type = src->side_data[i].type;
|
||||||
size_t size = src->side_data[i].size;
|
size_t size = src->side_data[i].size;
|
||||||
@ -392,6 +403,7 @@ int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
|
|||||||
uint8_t *dst_data = av_packet_new_side_data(dst, type, size);
|
uint8_t *dst_data = av_packet_new_side_data(dst, type, size);
|
||||||
|
|
||||||
if (!dst_data) {
|
if (!dst_data) {
|
||||||
|
av_buffer_unref(&dst->opaque_ref);
|
||||||
av_packet_free_side_data(dst);
|
av_packet_free_side_data(dst);
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
}
|
}
|
||||||
@ -404,6 +416,7 @@ int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
|
|||||||
void av_packet_unref(AVPacket *pkt)
|
void av_packet_unref(AVPacket *pkt)
|
||||||
{
|
{
|
||||||
av_packet_free_side_data(pkt);
|
av_packet_free_side_data(pkt);
|
||||||
|
av_buffer_unref(&pkt->opaque_ref);
|
||||||
av_buffer_unref(&pkt->buf);
|
av_buffer_unref(&pkt->buf);
|
||||||
get_packet_defaults(pkt);
|
get_packet_defaults(pkt);
|
||||||
}
|
}
|
||||||
|
@ -391,6 +391,27 @@ typedef struct AVPacket {
|
|||||||
int64_t duration;
|
int64_t duration;
|
||||||
|
|
||||||
int64_t pos; ///< byte position in stream, -1 if unknown
|
int64_t pos; ///< byte position in stream, -1 if unknown
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for some private data of the user
|
||||||
|
*/
|
||||||
|
void *opaque;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AVBufferRef for free use by the API user. FFmpeg will never check the
|
||||||
|
* contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when
|
||||||
|
* the packet is unreferenced. av_packet_copy_props() calls create a new
|
||||||
|
* reference with av_buffer_ref() for the target packet's opaque_ref field.
|
||||||
|
*
|
||||||
|
* This is unrelated to the opaque field, although it serves a similar
|
||||||
|
* purpose.
|
||||||
|
*/
|
||||||
|
AVBufferRef *opaque_ref;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Time base of the packet's timestamps.
|
||||||
|
*/
|
||||||
|
AVRational time_base;
|
||||||
} AVPacket;
|
} AVPacket;
|
||||||
|
|
||||||
#if FF_API_INIT_PACKET
|
#if FF_API_INIT_PACKET
|
||||||
|
@ -28,8 +28,8 @@
|
|||||||
#include "libavutil/version.h"
|
#include "libavutil/version.h"
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 59
|
#define LIBAVCODEC_VERSION_MAJOR 59
|
||||||
#define LIBAVCODEC_VERSION_MINOR 3
|
#define LIBAVCODEC_VERSION_MINOR 4
|
||||||
#define LIBAVCODEC_VERSION_MICRO 102
|
#define LIBAVCODEC_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
LIBAVCODEC_VERSION_MINOR, \
|
LIBAVCODEC_VERSION_MINOR, \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user