Browse Source

use custom packet allocation only for DV

Originally committed as revision 1937 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Fabrice Bellard 23 years ago
parent
commit
2af7e61032
1 changed files with 31 additions and 25 deletions
  1. +31
    -25
      libavformat/avidec.c

+ 31
- 25
libavformat/avidec.c View File

@@ -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)


Loading…
Cancel
Save