Hi,

On Fri, Apr 15, 2011 at 12:05 PM, Luca Barbato <[email protected]> wrote:
> +#define DUP_DATA(dst, size, padding) \
> +    do { \
> +        void *data; \
> +        if (padding) { \
> +            if ((unsigned)(size) > (unsigned)(size) + 
> FF_INPUT_BUFFER_PADDING_SIZE) \
> +                return AVERROR(ENOMEM); \
> +            data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); \
> +        } else { \
> +            data = av_malloc(size); \
> +        } \
> +        if (!data) \
> +            return AVERROR(ENOMEM); \
> +        memcpy(data, dst, size); \
> +        if (padding) \
> +            memset((uint8_t*)data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); \
> +        dst = data; \
> +    } while(0)
> +
>  int av_dup_packet(AVPacket *pkt)
>  {
>     if (((pkt->destruct == av_destruct_packet_nofree) || (pkt->destruct == 
> NULL)) && pkt->data) {
> -        uint8_t *data;
> -        /* We duplicate the packet and don't forget to add the padding 
> again. */
> -        if((unsigned)pkt->size > (unsigned)pkt->size + 
> FF_INPUT_BUFFER_PADDING_SIZE)
> -            return AVERROR(ENOMEM);
> -        data = av_malloc(pkt->size + FF_INPUT_BUFFER_PADDING_SIZE);
> -        if (!data) {
> -            return AVERROR(ENOMEM);
> -        }
> -        memcpy(data, pkt->data, pkt->size);
> -        memset(data + pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
> -        pkt->data = data;
> +        DUP_DATA(pkt->data, pkt->size, 1);
>         pkt->destruct = av_destruct_packet;
> +
> +        if (pkt->side_data_elems) {
> +            int i;
> +
> +            DUP_DATA(pkt->side_data, pkt->side_data_elems * 
> sizeof(*pkt->side_data), 0);
> +            for (i = 0; i < pkt->side_data_elems; i++) {
> +                DUP_DATA(pkt->side_data[i].data, pkt->side_data[i].size, 1);
> +            }
> +        }

Nope, this is an old version.

Ronald
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to