pkt->convergence_duration = 0;
pkt->flags = 0;
pkt->stream_index = 0;
- pkt->destruct= av_destruct_packet_nofree;
+ pkt->destruct= NULL;
}
int av_new_packet(AVPacket *pkt, int size)
{
- uint8_t *data;
- if((unsigned)size > (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE)
- return AVERROR(ENOMEM);
- data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
- if (!data)
- return AVERROR(ENOMEM);
- memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
+ uint8_t *data= NULL;
+ if((unsigned)size < (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE)
+ data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
+ if (data){
+ memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
+ }else
+ size=0;
av_init_packet(pkt);
pkt->data = data;
pkt->size = size;
pkt->destruct = av_destruct_packet;
+ if(!data)
+ return AVERROR(ENOMEM);
return 0;
}
}
return 0;
}
+
+void av_free_packet(AVPacket *pkt)
+{
+ if (pkt) {
+ if (pkt->destruct) pkt->destruct(pkt);
+ pkt->data = NULL; pkt->size = 0;
+ }
+}