changeset 149:f4de8f9c39bd libavformat

use custom packet allocation only for DV
author bellard
date Sat, 07 Jun 2003 18:36:27 +0000
parents 31d7c9a8678c
children 46e80c40ab9f
files avidec.c
diffstat 1 files changed, 31 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/avidec.c	Fri Jun 06 11:47:49 2003 +0000
+++ b/avidec.c	Sat Jun 07 18:36:27 2003 +0000
@@ -296,9 +296,17 @@
     int n, d[8], size, i;
 
     memset(d, -1, sizeof(int)*8);
-
-    if (avi->type == 1 && avi->stream_index)
-        goto pkt_init;
+    
+    if (avi->type == 1 && avi->stream_index) {
+        /* duplicate DV packet */
+        av_init_packet(pkt);
+        pkt->data = avi->buf;
+        pkt->size = avi->buf_size;
+        pkt->destruct = __destruct_pkt;
+        pkt->stream_index = avi->stream_index;
+        avi->stream_index = !avi->stream_index;
+        return 0;
+    }
 
     for(i=url_ftell(pb); !url_feof(pb); i++) {
         int j;
@@ -346,31 +354,29 @@
             && n < s->nb_streams
             && i + size <= avi->movi_end) {
         
-	    uint8_t *tbuf = av_realloc(avi->buf, size + FF_INPUT_BUFFER_PADDING_SIZE);
-	    if (!tbuf)
-		return -1;
-	    avi->buf = tbuf;
-            avi->buf_size = size;
-	    get_buffer(pb, avi->buf, size);
-	    if (size & 1)
-	        get_byte(pb);
-	    if (avi->type != 1)
-	        avi->stream_index = n;
-	    goto pkt_init;
+            if (avi->type == 1) {
+                uint8_t *tbuf = av_realloc(avi->buf, size + FF_INPUT_BUFFER_PADDING_SIZE);
+                if (!tbuf)
+                    return -1;
+                avi->buf = tbuf;
+                avi->buf_size = size;
+                av_init_packet(pkt);
+                pkt->data = avi->buf;
+                pkt->size = avi->buf_size;
+                pkt->destruct = __destruct_pkt;
+                avi->stream_index = n;
+            } else {
+                av_new_packet(pkt, size);
+            }
+            get_buffer(pb, pkt->data, size);
+            if (size & 1)
+                get_byte(pb);
+            pkt->stream_index = n;
+            pkt->flags |= PKT_FLAG_KEY; // FIXME: We really should read index for that
+            return 0;
         }
     }
-    
     return -1;
-
-pkt_init:
-    av_init_packet(pkt);
-    pkt->data = avi->buf;
-    pkt->size = avi->buf_size;
-    pkt->destruct = __destruct_pkt;
-    pkt->stream_index = avi->stream_index;
-    pkt->flags |= PKT_FLAG_KEY; // FIXME: We really should read index for that
-    avi->stream_index = !avi->stream_index;
-    return 0;
 }
 
 static int avi_read_close(AVFormatContext *s)