[FFmpeg-cvslog] r10792 - trunk/libavformat/electronicarts.c
aurel
subversion
Fri Oct 19 00:26:23 CEST 2007
Author: aurel
Date: Fri Oct 19 00:26:23 2007
New Revision: 10792
Log:
parse header chunk in a loop (don't depend on a fixed chunk ordering)
Modified:
trunk/libavformat/electronicarts.c
Modified: trunk/libavformat/electronicarts.c
==============================================================================
--- trunk/libavformat/electronicarts.c (original)
+++ trunk/libavformat/electronicarts.c Fri Oct 19 00:26:23 2007
@@ -162,17 +162,16 @@ static int process_ea_header(AVFormatCon
uint32_t blockid, size = 0;
EaDemuxContext *ea = s->priv_data;
ByteIOContext *pb = &s->pb;
+ int i;
+
+ for (i=0; i<5 && (!ea->audio_codec || !ea->video_codec); i++) {
+ unsigned int startpos = url_ftell(pb);
blockid = get_le32(pb);
- if (blockid == MVhd_TAG) {
size = get_le32(pb);
- process_video_header_vp6(s);
- url_fskip(pb, size-32);
- blockid = get_le32(pb);
- }
- if (blockid != SCHl_TAG)
- return 0;
- size += get_le32(pb);
+
+ switch (blockid) {
+ case SCHl_TAG :
blockid = get_le32(pb);
if (blockid == GSTR_TAG) {
url_fskip(pb, 4);
@@ -182,9 +181,17 @@ static int process_ea_header(AVFormatCon
}
process_audio_header_elements(s);
+ break;
- /* skip to the start of the data */
- url_fseek(pb, size, SEEK_SET);
+ case MVhd_TAG :
+ process_video_header_vp6(s);
+ break;
+ }
+
+ url_fseek(pb, startpos + size, SEEK_SET);
+ }
+
+ url_fseek(pb, 0, SEEK_SET);
return 1;
}
More information about the ffmpeg-cvslog
mailing list