comparison utils.c @ 804:6a0cd265adbb libavformat

fix assertion failure
author michael
date Wed, 29 Jun 2005 08:48:26 +0000
parents ea0e995ac4a8
children bae563a91a57
comparison
equal deleted inserted replaced
803:021c8bf015c2 804:6a0cd265adbb
2284 return ret; 2284 return ret;
2285 } 2285 }
2286 2286
2287 /** 2287 /**
2288 * interleave_packet implementation which will interleave per DTS. 2288 * interleave_packet implementation which will interleave per DTS.
2289 * packets with pkt->destruct == av_destruct_packet will be freed inside this function.
2290 * so they cannot be used after it, note calling av_free_packet() on them is still safe
2289 */ 2291 */
2290 static int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush){ 2292 static int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush){
2291 AVPacketList *pktl, **next_point, *this_pktl; 2293 AVPacketList *pktl, **next_point, *this_pktl;
2292 int stream_count=0; 2294 int stream_count=0;
2293 int streams[MAX_STREAMS]; 2295 int streams[MAX_STREAMS];
2294 2296
2295 if(pkt){ 2297 if(pkt){
2296 AVStream *st= s->streams[ pkt->stream_index]; 2298 AVStream *st= s->streams[ pkt->stream_index];
2297 2299
2298 assert(pkt->destruct != av_destruct_packet); //FIXME 2300 // assert(pkt->destruct != av_destruct_packet); //FIXME
2299 2301
2300 this_pktl = av_mallocz(sizeof(AVPacketList)); 2302 this_pktl = av_mallocz(sizeof(AVPacketList));
2301 this_pktl->pkt= *pkt; 2303 this_pktl->pkt= *pkt;
2302 av_dup_packet(&this_pktl->pkt); 2304 if(pkt->destruct == av_destruct_packet)
2305 pkt->destruct= NULL; // non shared -> must keep original from being freed
2306 else
2307 av_dup_packet(&this_pktl->pkt); //shared -> must dup
2303 2308
2304 next_point = &s->packet_buffer; 2309 next_point = &s->packet_buffer;
2305 while(*next_point){ 2310 while(*next_point){
2306 AVStream *st2= s->streams[ (*next_point)->pkt.stream_index]; 2311 AVStream *st2= s->streams[ (*next_point)->pkt.stream_index];
2307 int64_t left= st2->time_base.num * (int64_t)st ->time_base.den; 2312 int64_t left= st2->time_base.num * (int64_t)st ->time_base.den;