mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
use custom packet allocation only for DV
Originally committed as revision 1937 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
01310af292
commit
2af7e61032
@ -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…
Reference in New Issue
Block a user