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
