--- doc/APIchanges | 3 +++ libavcodec/avpacket.c | 15 +++++++++++++++ libavcodec/packet.h | 5 +++++ libavcodec/tests/avpacket.c | 9 +++++++++ libavcodec/version.h | 2 +- 5 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/doc/APIchanges b/doc/APIchanges index 7b267a79ac..2c6b369ea9 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2021-10-11 - xxxxxxxxxx - lavc 59.13.100 - packet.h + Add av_packet_remove_side_data() + 2021-09-21 - xxxxxxxxxx - lavu 57.7.100 - pixfmt.h Add AV_PIX_FMT_X2BGR10. diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index d8d8fef3b9..2a9123e5fa 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -179,6 +179,21 @@ int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size) return 0; } +void av_packet_remove_side_data(AVPacket *pkt, enum AVPacketSideDataType type) +{ + for (int i = 0; i < pkt->side_data_elems; i++) { + if (pkt->side_data[i].type == type) { + av_freep(&pkt->side_data[i].data); + pkt->side_data[i] = pkt->side_data[pkt->side_data_elems - 1]; + pkt->side_data_elems--; + /* Better keep side_data sync to side_data_elems */ + if (!pkt->side_data_elems) + av_freep(&pkt->side_data); + break; + } + } +} + void av_packet_free_side_data(AVPacket *pkt) { int i; diff --git a/libavcodec/packet.h b/libavcodec/packet.h index 9baff24635..85edf87211 100644 --- a/libavcodec/packet.h +++ b/libavcodec/packet.h @@ -571,6 +571,11 @@ uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t *data, size_t size); +/** + * Remove and free side data instances of the given type. + */ +void av_packet_remove_side_data(AVPacket *pkt, enum AVPacketSideDataType type); + /** * Shrink the already allocated side data buffer * diff --git a/libavcodec/tests/avpacket.c b/libavcodec/tests/avpacket.c index 7a70ade4c3..710a964915 100644 --- a/libavcodec/tests/avpacket.c +++ b/libavcodec/tests/avpacket.c @@ -124,6 +124,15 @@ int main(void) "when \"size\" parameter is too large.\n" ); ret = 1; } + /* test remove side data */ + av_packet_remove_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA); + for (int i = 0; i < avpkt->side_data_elems; i++) { + if (avpkt->side_data[i].type == AV_PKT_DATA_NEW_EXTRADATA) { + printf("av_packet_remove_side_data failed to remove side data"); + ret = 1; + } + } + /*clean up*/ av_packet_free(&avpkt_clone); av_packet_free(&avpkt); diff --git a/libavcodec/version.h b/libavcodec/version.h index 74b8baa5f3..76af066d32 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,7 +28,7 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 59 -#define LIBAVCODEC_VERSION_MINOR 12 +#define LIBAVCODEC_VERSION_MINOR 13 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ -- 2.31.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".