]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - aac_common.c
Some more aacdec cleanups
[paraslash.git] / aac_common.c
index 16109b9500c08e97c8ece63cc8aa51819b3921bd..3739be9dfa450824f592ff7f5848a5377c3c038a 100644 (file)
@@ -57,6 +57,7 @@ int aac_find_esds(unsigned char *buf, unsigned buflen, int *skip)
                if (*p != 5)
                        continue;
                i++;
+               p = buf + i;
                decoder_length = aac_read_decoder_length(p, &description_len);
                PARA_INFO_LOG("decoder length: %d\n", decoder_length);
                i += description_len;
@@ -73,7 +74,7 @@ unsigned aac_read_int32(unsigned char *buf)
 }
 
 
-int find_stco(unsigned char *buf, unsigned buflen, int *skip)
+int aac_find_stco(unsigned char *buf, unsigned buflen, int *skip)
 {
        int i, ret;
 
@@ -90,6 +91,32 @@ int find_stco(unsigned char *buf, unsigned buflen, int *skip)
                *skip = i;
                return ret;
        }
+       PARA_WARNING_LOG("stco not found, buflen: %d\n", buflen);
+       return -E_STCO;
+}
+
+int aac_find_stsz(unsigned char *buf, unsigned buflen, unsigned *skip)
+{
+       int i, ret;
+
+       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;
 }