* commit '31c51f7441de07b88cfea2550245bf1f5140cb8f': avpacket: add a function for wrapping existing data as side data
Unified · Split
| @@ -14,6 +14,9 @@ libavutil: 2015-08-28 · 13 unmodified lines | |||
| 14 | 14 | ||
| 15 | 15 | ||
| 16 | API changes, most recent first: | 16 | API changes, most recent first: |
| 17 | 2015-12-17 - xxxxxxx - lavc 57.18.100 / 57.11.0 - avcodec.h | ||
| 18 | Add av_packet_add_side_data(). | ||
| 19 | |||
| 17 | 2015-12-11 - xxxxxxx - lavf 57.20.100 - avformat.h | 20 | 2015-12-11 - xxxxxxx - lavf 57.20.100 - avformat.h |
| 18 | Add av_program_add_stream_index() | 21 | Add av_program_add_stream_index() |
| 19 | 22 | ||
| @@ -3996,6 +3996,22 @@ void av_free_packet(AVPacket *pkt); · 3995 unmodified lines | |||
| 3996 | uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, | 3996 | uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, |
| 3997 | int size); | 3997 | int size); |
| 3998 | 3998 | ||
| 3999 | /** | ||
| 4000 | * Wrap an existing array as a packet side data. | ||
| 4001 | * | ||
| 4002 | * @param pkt packet | ||
| 4003 | * @param type side information type | ||
| 4004 | * @param data the side data array. It must be allocated with the av_malloc() | ||
| 4005 | * family of functions. The ownership of the data is transferred to | ||
| 4006 | * pkt. | ||
| 4007 | * @param size side information size | ||
| 4008 | * @return a non-negative number on success, a negative AVERROR code on | ||
| 4009 | * failure. On failure, the packet is unchanged and the data remains | ||
| 4010 | * owned by the caller. | ||
| 4011 | */ | ||
| 4012 | int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, | ||
| 4013 | uint8_t *data, size_t size); | ||
| 4014 | |||
| 3999 | /** | 4015 | /** |
| 4000 | * Shrink the already allocated side data buffer | 4016 | * Shrink the already allocated side data buffer |
| 4001 | * | 4017 | * |
| @@ -274,29 +274,47 @@ void av_free_packet(AVPacket *pkt) · 273 unmodified lines | |||
| 274 | FF_ENABLE_DEPRECATION_WARNINGS | 274 | FF_ENABLE_DEPRECATION_WARNINGS |
| 275 | #endif | 275 | #endif |
| 276 | 276 | ||
| 277 | uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, | 277 | int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, |
| 278 | int size) | 278 | uint8_t *data, size_t size) |
| 279 | { | 279 | { |
| 280 | int elems = pkt->side_data_elems; | 280 | int elems = pkt->side_data_elems; |
| 281 | 281 | ||
| 282 | if ((unsigned)elems + 1 > INT_MAX / sizeof(*pkt->side_data)) | 282 | if ((unsigned)elems + 1 > INT_MAX / sizeof(*pkt->side_data)) |
| 283 | return NULL; | 283 | return AVERROR(EOVERFLOW); |
| 284 | if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) | ||
| 285 | return NULL; | ||
| 286 | 284 | ||
| 287 | pkt->side_data = av_realloc(pkt->side_data, | 285 | pkt->side_data = av_realloc(pkt->side_data, |
| 288 | (elems + 1) * sizeof(*pkt->side_data)); | 286 | (elems + 1) * sizeof(*pkt->side_data)); |
| 289 | if (!pkt->side_data) | 287 | if (!pkt->side_data) |
| 290 | return NULL; | 288 | return AVERROR(ENOMEM); |
| 291 | 289 | ||
| 292 | pkt->side_data[elems].data = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE); | 290 | pkt->side_data[elems].data = data; |
| 293 | if (!pkt->side_data[elems].data) | ||
| 294 | return NULL; | ||
| 295 | pkt->side_data[elems].size = size; | 291 | pkt->side_data[elems].size = size; |
| 296 | pkt->side_data[elems].type = type; | 292 | pkt->side_data[elems].type = type; |
| 297 | pkt->side_data_elems++; | 293 | pkt->side_data_elems++; |
| 298 | 294 | ||
| 299 | return pkt->side_data[elems].data; | 295 | return 0; |
| 296 | } | ||
| 297 | |||
| 298 | |||
| 299 | uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, | ||
| 300 | int size) | ||
| 301 | { | ||
| 302 | int ret; | ||
| 303 | uint8_t *data; | ||
| 304 | |||
| 305 | if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) | ||
| 306 | return NULL; | ||
| 307 | data = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE); | ||
| 308 | if (!data) | ||
| 309 | return NULL; | ||
| 310 | |||
| 311 | ret = av_packet_add_side_data(pkt, type, data, size); | ||
| 312 | if (ret < 0) { | ||
| 313 | av_freep(&data); | ||
| 314 | return NULL; | ||
| 315 | } | ||
| 316 | |||
| 317 | return data; | ||
| 300 | } | 318 | } |
| 301 | 319 | ||
| 302 | uint8_t *av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, | 320 | uint8_t *av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, |
| @@ -29,7 +29,7 @@ · 28 unmodified lines | |||
| 29 | #include "libavutil/version.h" | 29 | #include "libavutil/version.h" |
| 30 | 30 | ||
| 31 | #define LIBAVCODEC_VERSION_MAJOR 57 | 31 | #define LIBAVCODEC_VERSION_MAJOR 57 |
| 32 | #define LIBAVCODEC_VERSION_MINOR 17 | 32 | #define LIBAVCODEC_VERSION_MINOR 18 |
| 33 | #define LIBAVCODEC_VERSION_MICRO 100 | 33 | #define LIBAVCODEC_VERSION_MICRO 100 |
| 34 | 34 | ||
| 35 | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | 35 | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |