Mercurial > libavformat.hg
diff utils.c @ 797:f5a231a9a2f1 libavformat
support changing in bitstream global headers into extradata style and back
author | michael |
---|---|
date | Mon, 27 Jun 2005 00:04:03 +0000 |
parents | 694320ffdda0 |
children | bca2334ff177 |
line wrap: on
line diff
--- a/utils.c Sun Jun 26 20:26:47 2005 +0000 +++ b/utils.c Mon Jun 27 00:04:03 2005 +0000 @@ -165,7 +165,7 @@ /** * Default packet destructor */ -static void av_destruct_packet(AVPacket *pkt) +void av_destruct_packet(AVPacket *pkt) { av_free(pkt->data); pkt->data = NULL; pkt->size = 0; @@ -834,7 +834,7 @@ /* select current input stream component */ st = s->cur_st; if (st) { - if (!st->parser) { + if (!st->need_parsing || !st->parser) { /* no parsing needed: we just output the packet as is */ /* raw data support */ *pkt = s->cur_pkt; @@ -876,7 +876,7 @@ /* return the last frames, if any */ for(i = 0; i < s->nb_streams; i++) { st = s->streams[i]; - if (st->parser) { + if (st->parser && st->need_parsing) { av_parser_parse(st->parser, &st->codec, &pkt->data, &pkt->size, NULL, 0, @@ -1742,6 +1742,10 @@ if(!st->codec.time_base.num) st->codec.time_base= st->time_base; } + //only for the split stuff + if (!st->parser) { + st->parser = av_parser_init(st->codec.codec_id); + } } for(i=0;i<MAX_STREAMS;i++){ @@ -1762,6 +1766,8 @@ if( st->codec.time_base.den >= 1000LL*st->codec.time_base.num && duration_count[i]<20 && st->codec.codec_type == CODEC_TYPE_VIDEO) break; + if(st->parser && st->parser->parser->split && !st->codec.extradata) + break; } if (i == ic->nb_streams) { /* NOTE: if the format has no header, then we need to read @@ -1841,6 +1847,15 @@ } last_dts[pkt->stream_index]= pkt->dts; } + if(st->parser && st->parser->parser->split && !st->codec.extradata){ + int i= st->parser->parser->split(&st->codec, pkt->data, pkt->size); + if(i){ + st->codec.extradata_size= i; + st->codec.extradata= av_malloc(st->codec.extradata_size); + memcpy(st->codec.extradata, pkt->data, st->codec.extradata_size); + } + } + /* if still no information, we try to open the codec and to decompress the frame. We try to avoid that in most cases as it takes longer and uses more memory. For MPEG4, we need to