diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2015-12-17 15:12:07 +0300 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2015-12-17 15:12:07 +0300 |
commit | 30833d121e24fc644c9c4e6ca07df3e9e4963180 (patch) | |
tree | db5e1913911cfaa1366f9bcf9efd2371b06f492e /libavcodec/avpacket.c | |
parent | 10e55bd658b06034d700553190b419b1af92b7cb (diff) | |
parent | 31c51f7441de07b88cfea2550245bf1f5140cb8f (diff) |
Merge commit '31c51f7441de07b88cfea2550245bf1f5140cb8f'
* commit '31c51f7441de07b88cfea2550245bf1f5140cb8f':
avpacket: add a function for wrapping existing data as side data
Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
Diffstat (limited to 'libavcodec/avpacket.c')
-rw-r--r-- | libavcodec/avpacket.c | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 1cc10eba05..cb1d44d4fb 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -274,29 +274,47 @@ void av_free_packet(AVPacket *pkt) FF_ENABLE_DEPRECATION_WARNINGS #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; 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, (elems + 1) * sizeof(*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].type = type; 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, |