changeset 352:c5ea5cdb5b58 libavformat

replic_size==0 fix, needed so that G.726 asf file, so ffmpeg can at least decode the video without segfaulting
author michael
date Wed, 14 Jan 2004 21:27:59 +0000
parents c072833fe7f4
children 0778b93924cb
files asf.c
diffstat 1 files changed, 10 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/asf.c	Wed Jan 14 18:40:29 2004 +0000
+++ b/asf.c	Wed Jan 14 21:27:59 2004 +0000
@@ -1141,23 +1141,24 @@
 	    DO_2BITS(asf->packet_property, asf->packet_replic_size, 0);
 //printf("key:%d stream:%d seq:%d offset:%d replic_size:%d\n", asf->packet_key_frame, asf->stream_index, asf->packet_seq, //asf->packet_frag_offset, asf->packet_replic_size);
 	    if (asf->packet_replic_size > 1) {
+                assert(asf->packet_replic_size >= 8);
                 // it should be always at least 8 bytes - FIXME validate
 		asf->packet_obj_size = get_le32(pb);
 		asf->packet_frag_timestamp = get_le32(pb); // timestamp
 		if (asf->packet_replic_size > 8)
 		    url_fskip(pb, asf->packet_replic_size - 8);
 		rsize += asf->packet_replic_size; // FIXME - check validity
-	    } else {
+	    } else if (asf->packet_replic_size==1){
 		// multipacket - frag_offset is begining timestamp
 		asf->packet_time_start = asf->packet_frag_offset;
                 asf->packet_frag_offset = 0;
 		asf->packet_frag_timestamp = asf->packet_timestamp;
 
-		if (asf->packet_replic_size == 1) {
-		    asf->packet_time_delta = get_byte(pb);
-		    rsize++;
-		}
-	    }
+                asf->packet_time_delta = get_byte(pb);
+		rsize++;
+	    }else{
+                assert(asf->packet_replic_size==0);
+            }
 	    if (asf->packet_flags & 0x01) {
 		DO_2BITS(asf->packet_segsizetype >> 6, asf->packet_frag_size, 0); // 0 is illegal
 #undef DO_2BITS
@@ -1232,10 +1233,10 @@
 	    asf_st->seq = asf->packet_seq;
 	    asf_st->pkt.pts = asf->packet_frag_timestamp - asf->hdr.preroll;
 	    asf_st->pkt.stream_index = asf->stream_index;
-            asf_st->packet_pos= asf->packet_pos;
-//printf("new packet: stream:%d key:%d packet_key:%d audio:%d\n", 
+            asf_st->packet_pos= asf->packet_pos;            
+//printf("new packet: stream:%d key:%d packet_key:%d audio:%d size:%d\n", 
 //asf->stream_index, asf->packet_key_frame, asf_st->pkt.flags & PKT_FLAG_KEY,
-//s->streams[asf->stream_index]->codec.codec_type == CODEC_TYPE_AUDIO);
+//s->streams[asf->stream_index]->codec.codec_type == CODEC_TYPE_AUDIO, asf->packet_obj_size);
 	    if (s->streams[asf->stream_index]->codec.codec_type == CODEC_TYPE_AUDIO) 
 		asf->packet_key_frame = 1;
 	    if (asf->packet_key_frame)