+ for (;;) {
+ ret = aac_find_stsz(inbuf, inbuf_len, &skip);
+ if (ret >= 0)
+ break;
+ ret = read(fileno(file), inbuf, AAC_INBUF_SIZE);
+ if (ret <= 0)
+ return -E_AAC_READ;
+ inbuf_len = ret;
+ PARA_INFO_LOG("next buffer: %d bytes\n", ret);
+ }
+ afi->chunks_total = ret;
+ PARA_INFO_LOG("sz table has %lu entries\n", afi->chunks_total);
+ afi->chunk_table = para_malloc((afi->chunks_total + 1) * sizeof(size_t));
+ for (i = 1; i <= afi->chunks_total; i++) {
+ if (skip + 4 > inbuf_len) {
+ skip = inbuf_len - skip;
+ memmove(inbuf, inbuf + inbuf_len - skip, skip);
+ ret = read(fileno(file), inbuf + skip,
+ AAC_INBUF_SIZE - skip);
+ if (ret <= 0)
+ return -E_AAC_READ;
+ inbuf_len = ret + skip;
+ skip = 0;
+ PARA_INFO_LOG("next buffer: %zu bytes\n", inbuf_len);
+ }
+ sum += aac_read_int32(inbuf + skip);
+ afi->chunk_table[i] = sum;
+ skip += 4;
+// if (i < 10 || i + 10 > afi->chunks_total)
+// PARA_DEBUG_LOG("offset #%d: %zu\n", i, afi->chunk_table[i]);
+ }
+ return 1;
+}