summaryrefslogtreecommitdiffstats
path: root/libavcodec/avpacket.c
diff options
context:
space:
mode:
authorAndrey Utkin <andrey.krieger.utkin@gmail.com>2012-09-20 17:30:02 +0300
committerMichael Niedermayer <michaelni@gmx.at>2012-09-21 00:49:12 +0200
commitd33908a5fc8249b51fd5fbe0dfba46850e6536d0 (patch)
tree6920a97a3c47d08ea75dcdaef1f1a30c64619855 /libavcodec/avpacket.c
parenta6ec1e49f6171bc37a4fb001225f5885e20a1f4e (diff)
downloadffmpeg-streaming-d33908a5fc8249b51fd5fbe0dfba46850e6536d0.zip
ffmpeg-streaming-d33908a5fc8249b51fd5fbe0dfba46850e6536d0.tar.gz
Move av_dup_packet() copy logic to separate procedure
Done to simplify next commit introducing av_copy_packet() Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/avpacket.c')
-rw-r--r--libavcodec/avpacket.c52
1 files changed, 29 insertions, 23 deletions
diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index 17c100e..8989190 100644
--- a/libavcodec/avpacket.c
+++ b/libavcodec/avpacket.c
@@ -125,40 +125,46 @@ int av_grow_packet(AVPacket *pkt, int grow_by)
dst = data; \
} while (0)
-int av_dup_packet(AVPacket *pkt)
+/* Makes duplicates of data, side_data, but does not copy any other fields */
+static int copy_packet_data(AVPacket *dst, AVPacket *src)
{
- AVPacket tmp_pkt;
-
- if (pkt->destruct == NULL && pkt->data) {
- tmp_pkt = *pkt;
+ dst->data = NULL;
+ dst->side_data = NULL;
+ DUP_DATA(dst->data, src->data, dst->size, 1);
+ dst->destruct = av_destruct_packet;
- pkt->data = NULL;
- pkt->side_data = NULL;
- DUP_DATA(pkt->data, tmp_pkt.data, pkt->size, 1);
- pkt->destruct = av_destruct_packet;
+ if (dst->side_data_elems) {
+ int i;
- if (pkt->side_data_elems) {
- int i;
-
- DUP_DATA(pkt->side_data, tmp_pkt.side_data,
- pkt->side_data_elems * sizeof(*pkt->side_data), 0);
- memset(pkt->side_data, 0,
- pkt->side_data_elems * sizeof(*pkt->side_data));
- for (i = 0; i < pkt->side_data_elems; i++) {
- DUP_DATA(pkt->side_data[i].data, tmp_pkt.side_data[i].data,
- tmp_pkt.side_data[i].size, 1);
- pkt->side_data[i].size = tmp_pkt.side_data[i].size;
- pkt->side_data[i].type = tmp_pkt.side_data[i].type;
- }
+ DUP_DATA(dst->side_data, src->side_data,
+ dst->side_data_elems * sizeof(*dst->side_data), 0);
+ memset(dst->side_data, 0,
+ dst->side_data_elems * sizeof(*dst->side_data));
+ for (i = 0; i < dst->side_data_elems; i++) {
+ DUP_DATA(dst->side_data[i].data, src->side_data[i].data,
+ src->side_data[i].size, 1);
+ dst->side_data[i].size = src->side_data[i].size;
+ dst->side_data[i].type = src->side_data[i].type;
}
}
return 0;
failed_alloc:
- av_destruct_packet(pkt);
+ av_destruct_packet(dst);
return AVERROR(ENOMEM);
}
+int av_dup_packet(AVPacket *pkt)
+{
+ AVPacket tmp_pkt;
+
+ if (pkt->destruct == NULL && pkt->data) {
+ tmp_pkt = *pkt;
+ return copy_packet_data(pkt, &tmp_pkt);
+ }
+ return 0;
+}
+
void av_free_packet(AVPacket *pkt)
{
if (pkt) {
OpenPOWER on IntegriCloud