Modification of stsc_decompact function

This commit is contained in:
Francois-Olivier Devaux 2004-09-08 15:12:21 +00:00
parent 7250ce0668
commit 02e3a4ec77
1 changed files with 13 additions and 10 deletions

View File

@ -287,39 +287,42 @@ void mj2_stsc_decompact(mj2_tk_t * tk)
{ {
int j, i; int j, i;
unsigned int k; unsigned int k;
int sampleno=0;
if (tk->num_samplestochunk == 1) { if (tk->num_samplestochunk == 1) {
tk->num_chunks = tk->num_chunks =
(unsigned int) ceil((double) tk->num_samples / (unsigned int) ceil((double) tk->num_samples /
(double) tk->sampletochunk[0].samples_per_chunk); (double) tk->sampletochunk[0].samples_per_chunk);
tk->chunk = tk->chunk =
(mj2_chunk_t *) malloc(tk->num_chunks * sizeof(mj2_chunk_t)); (mj2_chunk_t *) malloc(tk->num_chunks * sizeof(mj2_chunk_t));
for (k = 0; k < tk->num_chunks; k++) { for (k = 0; k < tk->num_chunks; k++) {
tk->chunk[k].num_samples = tk->sampletochunk[0].samples_per_chunk; tk->chunk[k].num_samples = tk->sampletochunk[0].samples_per_chunk;
} }
} else { } else {
tk->chunk = tk->chunk =
(mj2_chunk_t *) malloc(tk->num_samples * sizeof(mj2_chunk_t)); (mj2_chunk_t *) malloc(tk->num_samples * sizeof(mj2_chunk_t));
tk->num_chunks = 0; tk->num_chunks = 0;
for (i = 0; i < tk->num_samplestochunk - 1; i++) { for (i = 0; i < tk->num_samplestochunk -1 ; i++) {
for (j = tk->sampletochunk[i].first_chunk - 1; for (j = tk->sampletochunk[i].first_chunk - 1;
j < tk->sampletochunk[i + 1].first_chunk - 1; j++) { j < tk->sampletochunk[i + 1].first_chunk - 1; j++) {
tk->chunk[j].num_samples = tk->sampletochunk[i].samples_per_chunk; tk->chunk[j].num_samples = tk->sampletochunk[i].samples_per_chunk;
tk->num_chunks++; tk->num_chunks++;
sampleno += tk->chunk[j].num_samples;
} }
} }
tk->num_chunks++; tk->num_chunks += (int)(tk->num_samples - sampleno) / tk->sampletochunk[tk->num_samplestochunk - 1].samples_per_chunk;
for (k = tk->sampletochunk[tk->num_samplestochunk].first_chunk - 1; for (k = tk->sampletochunk[tk->num_samplestochunk - 1].first_chunk - 1;
k < tk->num_chunks; k++) { k < tk->num_chunks; k++) {
tk->chunk[k].num_samples = tk->chunk[k].num_samples =
tk->sampletochunk[tk->num_samplestochunk].samples_per_chunk; tk->sampletochunk[tk->num_samplestochunk - 1].samples_per_chunk;
} }
tk->chunk = realloc(tk->chunk, tk->num_chunks * sizeof(mj2_chunk_t)); tk->chunk = realloc(tk->chunk, tk->num_chunks * sizeof(mj2_chunk_t));
} }
} }
/* /*
* Chunk offset box Decompact * Chunk offset box Decompact
* *