* 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 | 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 | 20 | 2015-12-11 - xxxxxxx - lavf 57.20.100 - avformat.h |
| 18 | 21 | Add av_program_add_stream_index() |
| 19 | 22 | |
| @@ -3996,6 +3996,22 @@ void av_free_packet(AVPacket *pkt); · 3995 unmodified lines | ||
| 3996 | 3996 | uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, |
| 3997 | 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 | 4016 | * Shrink the already allocated side data buffer |
| 4001 | 4017 | * |
| @@ -274,29 +274,47 @@ void av_free_packet(AVPacket *pkt) · 273 unmodified lines | ||
| 274 | 274 | FF_ENABLE_DEPRECATION_WARNINGS |
| 275 | 275 | #endif |
| 276 | 276 | |
| 277 | −uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, | |
| 278 | − int size) | |
| 277 | +int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, | |
| 278 | + uint8_t *data, size_t size) | |
| 279 | 279 | { |
| 280 | 280 | int elems = pkt->side_data_elems; |
| 281 | 281 | |
| 282 | 282 | if ((unsigned)elems + 1 > INT_MAX / sizeof(*pkt->side_data)) |
| 283 | − return NULL; | |
| 284 | − if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) | |
| 285 | − return NULL; | |
| 283 | + return AVERROR(EOVERFLOW); | |
| 286 | 284 | |
| 287 | 285 | pkt->side_data = av_realloc(pkt->side_data, |
| 288 | 286 | (elems + 1) * sizeof(*pkt->side_data)); |
| 289 | 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); | |
| 293 | − if (!pkt->side_data[elems].data) | |
| 294 | − return NULL; | |
| 290 | + pkt->side_data[elems].data = data; | |
| 295 | 291 | pkt->side_data[elems].size = size; |
| 296 | 292 | pkt->side_data[elems].type = type; |
| 297 | 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 | 320 | uint8_t *av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, |
| @@ -29,7 +29,7 @@ · 28 unmodified lines | ||
| 29 | 29 | #include "libavutil/version.h" |
| 30 | 30 | |
| 31 | 31 | #define LIBAVCODEC_VERSION_MAJOR 57 |
| 32 | −#define LIBAVCODEC_VERSION_MINOR 17 | |
| 32 | +#define LIBAVCODEC_VERSION_MINOR 18 | |
| 33 | 33 | #define LIBAVCODEC_VERSION_MICRO 100 |
| 34 | 34 | |
| 35 | 35 | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |