aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabrice Bellard <fabrice@bellard.org>2003-06-07 18:36:27 +0000
committerFabrice Bellard <fabrice@bellard.org>2003-06-07 18:36:27 +0000
commit2af7e610325348dd495359c58cb48b64038bcdf5 (patch)
treeb4d7411e5f86eb3859d52ebcac87bc29a724c8b4
parent01310af292fe18ba700f7ba9d97ab8d43427a619 (diff)
downloadffmpeg-2af7e610325348dd495359c58cb48b64038bcdf5.tar.gz
use custom packet allocation only for DV
Originally committed as revision 1937 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/avidec.c56
1 files changed, 31 insertions, 25 deletions
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index 5d3bb8ac18..dbfef1db38 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -296,9 +296,17 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
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 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
&& 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)