changeset 2626:39ede602ff13 libavformat

move audio header parsing in its own function
author aurel
date Thu, 18 Oct 2007 21:55:51 +0000
parents d3ad7d3d5f90
children af403e794831
files electronicarts.c
diffstat 1 files changed, 40 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/electronicarts.c	Thu Oct 18 21:45:53 2007 +0000
+++ b/electronicarts.c	Thu Oct 18 21:55:51 2007 +0000
@@ -71,37 +71,15 @@
 }
 
 /*
- * 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 @@
         }
     }
 
+    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);