Commit 215eb102 authored by Aurelien Jacobs's avatar Aurelien Jacobs

move audio header parsing in its own function

Originally committed as revision 10786 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent d51bd73c
...@@ -71,37 +71,15 @@ static uint32_t read_arbitary(ByteIOContext *pb) { ...@@ -71,37 +71,15 @@ static uint32_t read_arbitary(ByteIOContext *pb) {
} }
/* /*
* Process EA file header * Process PT/GSTR sound header
* Returns 1 if the EA file is valid and successfully opened, 0 otherwise * 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; int inHeader = 1;
uint32_t blockid, size = 0;
int num, den;
EaDemuxContext *ea = s->priv_data; EaDemuxContext *ea = s->priv_data;
ByteIOContext *pb = &s->pb; 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) { while (inHeader) {
int inSubheader; int inSubheader;
uint8_t byte; uint8_t byte;
...@@ -154,6 +132,42 @@ static int process_ea_header(AVFormatContext *s) { ...@@ -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 */ /* skip to the start of the data */
url_fseek(pb, size, SEEK_SET); url_fseek(pb, size, SEEK_SET);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment