diff utils.c @ 53:fb671d87824e libavformat

zero copy packet handling for DV1394 by Max Krasnyansky
author bellard
date Mon, 03 Feb 2003 22:58:29 +0000
parents cd0155c9022e
children b0e0eb595e29
line wrap: on
line diff
--- a/utils.c	Mon Feb 03 22:53:10 2003 +0000
+++ b/utils.c	Mon Feb 03 22:58:29 2003 +0000
@@ -151,6 +151,15 @@
 /* memory handling */
 
 /**
+ * Default packet destructor 
+ */
+static void av_destruct_packet(AVPacket *pkt)
+{
+    av_free(pkt->data);
+    pkt->data = NULL; pkt->size = 0;
+}
+
+/**
  * Allocate the payload of a packet and intialized its fields to default values.
  *
  * @param pkt packet
@@ -159,34 +168,18 @@
  */
 int av_new_packet(AVPacket *pkt, int size)
 {
-    int i;
-    pkt->data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
-    if (!pkt->data)
+    void *data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
+    if (!data)
         return AVERROR_NOMEM;
-    pkt->size = size;
-    /* sane state */
-    pkt->pts = AV_NOPTS_VALUE;
-    pkt->stream_index = 0;
-    pkt->flags = 0;
-    
-    for(i=0; i<FF_INPUT_BUFFER_PADDING_SIZE; i++)
-        pkt->data[size+i]= 0;
+    memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
 
+    av_init_packet(pkt);
+    pkt->data = data; 
+    pkt->size = size;
+    pkt->destruct = av_destruct_packet;
     return 0;
 }
 
-/**
- * Free a packet
- *
- * @param pkt packet to free
- */
-void av_free_packet(AVPacket *pkt)
-{
-    av_freep(&pkt->data);
-    /* fail safe */
-    pkt->size = 0;
-}
-
 /* fifo handling */
 
 int fifo_init(FifoBuffer *f, int size)