- /* get chunk size */
- if (sc->sample_size > 1 || st->codec->codec_id == CODEC_ID_PCM_U8 || st->codec->codec_id == CODEC_ID_PCM_S8)
- chunk_size = chunk_samples * sc->sample_size;
- else if (sc->samples_per_frame > 0 && (chunk_samples * sc->bytes_per_frame % sc->samples_per_frame == 0))
- chunk_size = chunk_samples * sc->bytes_per_frame / sc->samples_per_frame;
- else { /* workaround to find nearest next chunk offset */
- chunk_size = INT_MAX;
- for (j = 0; j < mov->total_streams; j++) {
- MOVStreamContext *msc = mov->streams[j];
-
- for (k = msc->next_chunk; k < msc->chunk_count; k++) {
- if (msc->chunk_offsets[k] > current_offset && msc->chunk_offsets[k] - current_offset < chunk_size) {
- chunk_size = msc->chunk_offsets[k] - current_offset;
- msc->next_chunk = k;
- break;
- }
- }
- }
- /* check for last chunk */
- if (chunk_size == INT_MAX)
- for (j = 0; j < mov->mdat_count; j++) {
- dprintf(mov->fc, "mdat %d, offset %"PRIx64", size %"PRId64", current offset %"PRIx64"\n",
- j, mov->mdat_list[j].offset, mov->mdat_list[j].size, current_offset);
- if (mov->mdat_list[j].offset <= current_offset && mov->mdat_list[j].offset + mov->mdat_list[j].size > current_offset)
- chunk_size = mov->mdat_list[j].offset + mov->mdat_list[j].size - current_offset;
- }
- assert(chunk_size != INT_MAX);
- for (j = 0; j < mov->total_streams; j++) {
- mov->streams[j]->next_chunk = 0;
+ /* get chunk size, beware of alaw/ulaw/mace */
+ if (sc->samples_per_frame > 0 &&
+ (chunk_samples * sc->bytes_per_frame % sc->samples_per_frame == 0)) {
+ if (sc->samples_per_frame < 1024)
+ chunk_size = chunk_samples * sc->bytes_per_frame / sc->samples_per_frame;
+ else {
+ chunk_size = sc->bytes_per_frame;
+ frames = chunk_samples / sc->samples_per_frame;
+ chunk_samples = sc->samples_per_frame;