You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
Merge commit '31c51f7441de07b88cfea2550245bf1f5140cb8f'
* commit '31c51f7441de07b88cfea2550245bf1f5140cb8f': avpacket: add a function for wrapping existing data as side data Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
This commit is contained in:
@@ -14,6 +14,9 @@ libavutil: 2015-08-28
|
|||||||
|
|
||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
2015-12-17 - xxxxxxx - lavc 57.18.100 / 57.11.0 - avcodec.h
|
||||||
|
Add av_packet_add_side_data().
|
||||||
|
|
||||||
2015-12-11 - xxxxxxx - lavf 57.20.100 - avformat.h
|
2015-12-11 - xxxxxxx - lavf 57.20.100 - avformat.h
|
||||||
Add av_program_add_stream_index()
|
Add av_program_add_stream_index()
|
||||||
|
|
||||||
|
@@ -3996,6 +3996,22 @@ void av_free_packet(AVPacket *pkt);
|
|||||||
uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
||||||
int size);
|
int size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrap an existing array as a packet side data.
|
||||||
|
*
|
||||||
|
* @param pkt packet
|
||||||
|
* @param type side information type
|
||||||
|
* @param data the side data array. It must be allocated with the av_malloc()
|
||||||
|
* family of functions. The ownership of the data is transferred to
|
||||||
|
* pkt.
|
||||||
|
* @param size side information size
|
||||||
|
* @return a non-negative number on success, a negative AVERROR code on
|
||||||
|
* failure. On failure, the packet is unchanged and the data remains
|
||||||
|
* owned by the caller.
|
||||||
|
*/
|
||||||
|
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
||||||
|
uint8_t *data, size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shrink the already allocated side data buffer
|
* Shrink the already allocated side data buffer
|
||||||
*
|
*
|
||||||
|
@@ -274,29 +274,47 @@ void av_free_packet(AVPacket *pkt)
|
|||||||
FF_ENABLE_DEPRECATION_WARNINGS
|
FF_ENABLE_DEPRECATION_WARNINGS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
||||||
int size)
|
uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
int elems = pkt->side_data_elems;
|
int elems = pkt->side_data_elems;
|
||||||
|
|
||||||
if ((unsigned)elems + 1 > INT_MAX / sizeof(*pkt->side_data))
|
if ((unsigned)elems + 1 > INT_MAX / sizeof(*pkt->side_data))
|
||||||
return NULL;
|
return AVERROR(EOVERFLOW);
|
||||||
if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
pkt->side_data = av_realloc(pkt->side_data,
|
pkt->side_data = av_realloc(pkt->side_data,
|
||||||
(elems + 1) * sizeof(*pkt->side_data));
|
(elems + 1) * sizeof(*pkt->side_data));
|
||||||
if (!pkt->side_data)
|
if (!pkt->side_data)
|
||||||
return NULL;
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
pkt->side_data[elems].data = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE);
|
pkt->side_data[elems].data = data;
|
||||||
if (!pkt->side_data[elems].data)
|
|
||||||
return NULL;
|
|
||||||
pkt->side_data[elems].size = size;
|
pkt->side_data[elems].size = size;
|
||||||
pkt->side_data[elems].type = type;
|
pkt->side_data[elems].type = type;
|
||||||
pkt->side_data_elems++;
|
pkt->side_data_elems++;
|
||||||
|
|
||||||
return pkt->side_data[elems].data;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
||||||
|
int size)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
uint8_t *data;
|
||||||
|
|
||||||
|
if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
|
||||||
|
return NULL;
|
||||||
|
data = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE);
|
||||||
|
if (!data)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
ret = av_packet_add_side_data(pkt, type, data, size);
|
||||||
|
if (ret < 0) {
|
||||||
|
av_freep(&data);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t *av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
uint8_t *av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
|
||||||
|
@@ -29,7 +29,7 @@
|
|||||||
#include "libavutil/version.h"
|
#include "libavutil/version.h"
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 57
|
#define LIBAVCODEC_VERSION_MAJOR 57
|
||||||
#define LIBAVCODEC_VERSION_MINOR 17
|
#define LIBAVCODEC_VERSION_MINOR 18
|
||||||
#define LIBAVCODEC_VERSION_MICRO 100
|
#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, \
|
||||||
|
Reference in New Issue
Block a user