# HG changeset patch # User bellard # Date 1055010987 0 # Node ID f4de8f9c39bd467190cf7d42be17d3f3b2841f88 # Parent 31d7c9a8678c02718c40e407b45dea60d4946f7d use custom packet allocation only for DV diff -r 31d7c9a8678c -r f4de8f9c39bd avidec.c --- 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)