static int matroska_merge_packets(AVPacket *out, AVPacket *in)
{
- void *newdata = av_realloc(out->data, out->size+in->size);
- if (!newdata)
- return AVERROR(ENOMEM);
- out->data = newdata;
- memcpy(out->data+out->size, in->data, in->size);
- out->size += in->size;
- av_destruct_packet(in);
+ int old_size = out->size;
+ int ret = av_grow_packet(out, in->size);
+ if (ret < 0)
+ return ret;
+
+ memcpy(out->data + old_size, in->data, in->size);
+
+ av_free_packet(in);
av_free(in);
return 0;
}