From 215eb1028d155cae2184673ab36cddd101b1390b Mon Sep 17 00:00:00 2001 From: Aurelien Jacobs Date: Thu, 18 Oct 2007 21:55:51 +0000 Subject: [PATCH] move audio header parsing in its own function Originally committed as revision 10786 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/electronicarts.c | 66 ++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/libavformat/electronicarts.c b/libavformat/electronicarts.c index c96d8cc67d..9c20290d5b 100644 --- a/libavformat/electronicarts.c +++ b/libavformat/electronicarts.c @@ -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);