struct mp4_metadata meta;
};
-int32_t mp4_total_tracks(const struct mp4 *f)
-{
- return f->total_tracks;
-}
-
/*
* Returns -1, 0, or 1 on errors/EOF/success. Partial reads followed by EOF or
* read errors are treated as errors.
int32_t chunk_sample, int32_t sample)
{
int32_t i, total;
- const struct mp4_track *p_track = f->track[track];
-
- if (p_track->stsz_sample_size) {
- return (sample - chunk_sample) * p_track->stsz_sample_size;
- } else {
- if (sample >= p_track->stsz_sample_count)
- return 0; //error
-
- for (i = chunk_sample, total = 0; i < sample; i++) {
- total += p_track->stsz_table[i];
- }
- }
+ const struct mp4_track *t = f->track[track];
+ if (t->stsz_sample_size)
+ return (sample - chunk_sample) * t->stsz_sample_size;
+ if (sample >= t->stsz_sample_count)
+ return 0; /* error */
+ for (i = chunk_sample, total = 0; i < sample; i++)
+ total += t->stsz_table[i];
return total;
}
-static int32_t sample_to_offset(const struct mp4 *f, int32_t track,
- int32_t sample)
-{
- int32_t chunk, chunk_sample, chunk_offset1, chunk_offset2;
-
- chunk_of_sample(f, track, sample, &chunk_sample, &chunk);
-
- chunk_offset1 = chunk_to_offset(f, track, chunk);
- chunk_offset2 = chunk_offset1 + sample_range_size(f,
- track, chunk_sample, sample);
- return chunk_offset2;
-}
-
/**
* Return the number of milliseconds of the given track.
*
* \param f As returned by \ref mp4_open_read(), must not be NULL.
- * \param track Between zero and the value returned by \ref mp4_total_tracks().
+ * \param track Between zero and the value returned by \ref mp4_get_total_tracks().
*
* The function returns zero if the audio file is of zero length or contains a
* corrupt track header.
return t->duration * 1000 / t->timeScale;
}
+int32_t mp4_get_total_tracks(const struct mp4 *f)
+{
+ return f->total_tracks;
+}
+
/**
* Check whether the given track number corresponds to an audio track.
*
void mp4_set_sample_position(struct mp4 *f, int32_t track, int32_t sample)
{
- int32_t offset = sample_to_offset(f, track, sample);
+ int32_t offset, chunk, chunk_sample;
+
+ chunk_of_sample(f, track, sample, &chunk_sample, &chunk);
+ offset = chunk_to_offset(f, track, chunk)
+ + sample_range_size(f, track, chunk_sample, sample);
set_position(f, offset);
}