* commit '31c51f7441de07b88cfea2550245bf1f5140cb8f': avpacket: add a function for wrapping existing data as side data Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>tags/n3.0
| @@ -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 size) | |||||
| int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, | |||||
| 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; | |||||
| if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) | |||||
| return NULL; | |||||
| return AVERROR(EOVERFLOW); | |||||
| 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); | |||||
| if (!pkt->side_data[elems].data) | |||||
| return NULL; | |||||
| pkt->side_data[elems].data = data; | |||||
| 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, \ | ||||