mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-09 08:09:11 +00: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
@ -297,8 +297,16 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
|
|
||||||
memset(d, -1, sizeof(int)*8);
|
memset(d, -1, sizeof(int)*8);
|
||||||
|
|
||||||
if (avi->type == 1 && avi->stream_index)
|
if (avi->type == 1 && avi->stream_index) {
|
||||||
goto pkt_init;
|
/* 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++) {
|
for(i=url_ftell(pb); !url_feof(pb); i++) {
|
||||||
int j;
|
int j;
|
||||||
@ -346,31 +354,29 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
&& n < s->nb_streams
|
&& n < s->nb_streams
|
||||||
&& i + size <= avi->movi_end) {
|
&& i + size <= avi->movi_end) {
|
||||||
|
|
||||||
|
if (avi->type == 1) {
|
||||||
uint8_t *tbuf = av_realloc(avi->buf, size + FF_INPUT_BUFFER_PADDING_SIZE);
|
uint8_t *tbuf = av_realloc(avi->buf, size + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||||
if (!tbuf)
|
if (!tbuf)
|
||||||
return -1;
|
return -1;
|
||||||
avi->buf = tbuf;
|
avi->buf = tbuf;
|
||||||
avi->buf_size = size;
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
pkt_init:
|
|
||||||
av_init_packet(pkt);
|
av_init_packet(pkt);
|
||||||
pkt->data = avi->buf;
|
pkt->data = avi->buf;
|
||||||
pkt->size = avi->buf_size;
|
pkt->size = avi->buf_size;
|
||||||
pkt->destruct = __destruct_pkt;
|
pkt->destruct = __destruct_pkt;
|
||||||
pkt->stream_index = avi->stream_index;
|
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
|
pkt->flags |= PKT_FLAG_KEY; // FIXME: We really should read index for that
|
||||||
avi->stream_index = !avi->stream_index;
|
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int avi_read_close(AVFormatContext *s)
|
static int avi_read_close(AVFormatContext *s)
|
||||||
|
Loading…
Reference in New Issue
Block a user