]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - aac_afh.c
aac: move aac_find_stsz from aac_common.c to to aac_afh.c
[paraslash.git] / aac_afh.c
index 9cab39205d9739736653fa359240aeebaf9508f9..b7e828f4d7c76287e871fee87dc17023215a80ab 100644 (file)
--- a/aac_afh.c
+++ b/aac_afh.c
@@ -44,6 +44,32 @@ static void aac_close_audio_file(void)
 {
 }
 
+static int aac_find_stsz(unsigned char *buf, unsigned buflen, unsigned *skip)
+{
+       int i;
+
+       for (i = 0; i + 16 < buflen; i++) {
+               unsigned char *p = buf + i;
+               unsigned sample_count, sample_size;
+
+               if (p[0] != 's' || p[1] != 't' || p[2] != 's' || p[3] != 'z')
+                       continue;
+               PARA_INFO_LOG("found stsz@%d\n", i);
+               i += 8;
+               sample_size = aac_read_int32(buf + i);
+               PARA_INFO_LOG("sample size: %d\n", sample_size);
+               i += 4;
+               sample_count = aac_read_int32(buf + i);
+               i += 4;
+               PARA_INFO_LOG("sample count: %d\n", sample_count);
+               *skip = i;
+               return sample_count;
+       }
+       PARA_WARNING_LOG("stsz not found, buflen: %d\n", buflen);
+       return -E_STCO;
+}
+
+
 static int read_stsz(unsigned skip)
 {
        int ret, i;
@@ -128,8 +154,9 @@ static int aac_get_file_info(FILE *file, char *info_str, long unsigned *frames,
        ret = read_stsz(skip);
        if (ret < 0)
                return ret;
+       *frames = num_chunks;
        for (;;) {
-               ret = aac_find_stco(inbuf, inbuf_len, &skip);
+               ret = aac_find_entry(inbuf, inbuf_len, &skip);
                if (ret >= 0)
                        break;
                ret = read(fileno(infile), inbuf, inbuf_size);
@@ -137,8 +164,7 @@ static int aac_get_file_info(FILE *file, char *info_str, long unsigned *frames,
                        return -E_AAC_READ;
                PARA_INFO_LOG("next buffer: %d bytes\n", ret);
        }
-       *frames = ret;
-       entry = aac_read_int32(inbuf + skip);
+       entry = ret;
        PARA_INFO_LOG("offset table has %d entries\, entry: %zd\n", num_chunks,
                entry);
 #if 1