move audio header parsing in its own function
authorAurelien Jacobs <aurel@gnuage.org>
Thu, 18 Oct 2007 21:55:51 +0000 (21:55 +0000)
committerAurelien Jacobs <aurel@gnuage.org>
Thu, 18 Oct 2007 21:55:51 +0000 (21:55 +0000)
Originally committed as revision 10786 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/electronicarts.c

index c96d8cc..9c20290 100644 (file)
@@ -71,37 +71,15 @@ static uint32_t read_arbitary(ByteIOContext *pb) {
 }
 
 /*
- * Process EA file header
- * Returns 1 if the EA file is valid and successfully opened, 0 otherwise
+ * Process PT/GSTR sound header
+ * return 1 if success, 0 if invalid format, otherwise AVERROR_xxx
  */
-static int process_ea_header(AVFormatContext *s) {
+static int process_audio_header_elements(AVFormatContext *s)
+{
     int inHeader = 1;
-    uint32_t blockid, size = 0;
-    int num, den;
     EaDemuxContext *ea = s->priv_data;
     ByteIOContext *pb = &s->pb;
 
-    blockid = get_le32(pb);
-    if (blockid == MVhd_TAG) {
-        size = get_le32(pb);
-        url_fskip(pb, 16);
-        den = get_le32(pb);
-        num = get_le32(pb);
-        ea->time_base = (AVRational) {num, den};
-        url_fskip(pb, size-32);
-        blockid = get_le32(pb);
-    }
-    if (blockid != SCHl_TAG)
-        return 0;
-    size += get_le32(pb);
-    blockid = get_le32(pb);
-    if (blockid == GSTR_TAG) {
-        url_fskip(pb, 4);
-    } else if (blockid != PT00_TAG) {
-        av_log (s, AV_LOG_ERROR, "PT header missing\n");
-        return 0;
-    }
-
     while (inHeader) {
         int inSubheader;
         uint8_t byte;
@@ -154,6 +132,42 @@ static int process_ea_header(AVFormatContext *s) {
         }
     }
 
+    return 1;
+}
+
+/*
+ * Process EA file header
+ * Returns 1 if the EA file is valid and successfully opened, 0 otherwise
+ */
+static int process_ea_header(AVFormatContext *s) {
+    uint32_t blockid, size = 0;
+    int num, den;
+    EaDemuxContext *ea = s->priv_data;
+    ByteIOContext *pb = &s->pb;
+
+    blockid = get_le32(pb);
+    if (blockid == MVhd_TAG) {
+        size = get_le32(pb);
+        url_fskip(pb, 16);
+        den = get_le32(pb);
+        num = get_le32(pb);
+        ea->time_base = (AVRational) {num, den};
+        url_fskip(pb, size-32);
+        blockid = get_le32(pb);
+    }
+    if (blockid != SCHl_TAG)
+        return 0;
+    size += get_le32(pb);
+    blockid = get_le32(pb);
+    if (blockid == GSTR_TAG) {
+        url_fskip(pb, 4);
+    } else if (blockid != PT00_TAG) {
+        av_log (s, AV_LOG_ERROR, "PT header missing\n");
+        return 0;
+    }
+
+    process_audio_header_elements(s);
+
     /* skip to the start of the data */
     url_fseek(pb, size, SEEK_SET);