move audio header parsing in its own function

Originally committed as revision 10786 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Aurelien Jacobs 17 years ago
parent d51bd73ce6
commit 215eb1028d
  1. 66
      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);

Loading…
Cancel
Save