On Tue, 8 Sep 2020, James Almer wrote:
This helper removes a side data entry from the packet, maintaining the
integrity and order of the remaining entries, if any.
Signed-off-by: James Almer <[email protected]>
---
Missing APIChanges entry and version bump.
Couldn't find a place in the tree where it could be used right now, but
it makes the API be more in line with the AVFrame one, so i decided to
write it.
libavcodec/avpacket.c | 24 ++++++++++++++++++++++++
libavcodec/packet.h | 8 ++++++++
2 files changed, 32 insertions(+)
diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index 4801163227..61ea81698c 100644
--- a/libavcodec/avpacket.c
+++ b/libavcodec/avpacket.c
@@ -367,6 +367,30 @@ uint8_t *av_packet_get_side_data(const AVPacket *pkt, enum
AVPacketSideDataType
return NULL;
}
+void av_packet_remove_side_data(AVPacket *pkt, enum AVPacketSideDataType type)
+{
+ int i, elems;
+
+ for (i = 0; i < pkt->side_data_elems; i++) {
+ if (pkt->side_data[i].type != type)
+ continue;
+
+ elems = pkt->side_data_elems - 1;
+ av_freep(&pkt->side_data[i].data);
+ pkt->side_data[i].size = 0;
+
+ if (i < elems) {
+ memmove(&pkt->side_data[i], &pkt->side_data[i + 1],
+ (elems - i) * sizeof(*pkt->side_data));
+ }
+ if (!elems)
+ av_freep(&pkt->side_data);
+ pkt->side_data_elems = elems;
+
+ break;
+ }
+}
Why not use the same algorightm that is used in av_frame_remove_side_data?
Shorter and does not need memmove...
Thanks,
Marton
+
const char *av_packet_side_data_name(enum AVPacketSideDataType type)
{
switch(type) {
diff --git a/libavcodec/packet.h b/libavcodec/packet.h
index 0a19a0eff3..6ce3c91c07 100644
--- a/libavcodec/packet.h
+++ b/libavcodec/packet.h
@@ -595,6 +595,14 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum
AVPacketSideDataType type,
uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType
type,
int *size);
+/**
+ * Remove and free a side data entry of the given type.
+ *
+ * @param pkt packet
+ * @param type side data type to be removed
+ */
+void av_packet_remove_side_data(AVPacket *pkt, enum AVPacketSideDataType type);
+
#if FF_API_MERGE_SD_API
attribute_deprecated
int av_packet_merge_side_data(AVPacket *pkt);
--
2.27.0
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".