On 9/25/2017 12:28 AM, James Almer wrote:
> The side data array in av_packet_copy_side_data() is not reallocated every
> time a new element is added, unlike when calling av_packet_new_side_data()
> in a loop.

Regarding this, I don't know if "merging" the potentially existing side
data in dst with the copied side data of src is an intended behavior of
av_packet_copy_props(), but that's in fact what it currently does.

This patch however would make side data in dst be an exact copy of that
from src.

> 
> Signed-off-by: James Almer <jamr...@gmail.com>
> ---
>  libavcodec/avpacket.c | 19 +++++--------------
>  1 file changed, 5 insertions(+), 14 deletions(-)
> 
> diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
> index f20c191c1..063ecedd3 100644
> --- a/libavcodec/avpacket.c
> +++ b/libavcodec/avpacket.c
> @@ -359,7 +359,7 @@ fail:
>  
>  int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
>  {
> -    int i;
> +    int ret;
>  
>      dst->pts                  = src->pts;
>      dst->dts                  = src->dts;
> @@ -373,20 +373,11 @@ FF_ENABLE_DEPRECATION_WARNINGS
>      dst->flags                = src->flags;
>      dst->stream_index         = src->stream_index;
>  
> -    for (i = 0; i < src->side_data_elems; i++) {
> -         enum AVPacketSideDataType type = src->side_data[i].type;
> -         int size          = src->side_data[i].size;
> -         uint8_t *src_data = src->side_data[i].data;
> -         uint8_t *dst_data = av_packet_new_side_data(dst, type, size);
> -
> -        if (!dst_data) {
> -            av_packet_free_side_data(dst);
> -            return AVERROR(ENOMEM);
> -        }
> -        memcpy(dst_data, src_data, size);
> -    }
> +    ret = av_packet_copy_side_data(dst, src);
> +    if (ret < 0)
> +        av_packet_free_side_data(dst);
>  
> -    return 0;
> +    return ret;
>  }
>  
>  void av_packet_unref(AVPacket *pkt)
> 

_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to