On Wed, Sep 9, 2020 at 6:36 AM James Almer <jamr...@gmail.com> 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 <jamr...@gmail.com> > --- > 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; > Nit: This not needed since we will overwrite pkg->side_data[i] or shrink the side_data_elems later. > + > + 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; > + } > +} > + > 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 > 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". _______________________________________________ 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".