X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=mp4.c;h=32871727b345ab61ff3b0498a69de772c387cabd;hb=c86e86cebcba879191eacea04a0e7c5d019877e4;hp=b6fbabcd39e45c5fb2a5df9d4dcb45e0db8fe205;hpb=66491ab8498a5b57930fae018d0022579c2c17bb;p=paraslash.git diff --git a/mp4.c b/mp4.c index b6fbabcd..32871727 100644 --- a/mp4.c +++ b/mp4.c @@ -12,6 +12,79 @@ #include "string.h" #include "mp4.h" +struct mp4ff_track { + int32_t type; + int32_t channelCount; + int32_t sampleSize; + uint16_t sampleRate; + int32_t audioType; + + /* stsd */ + int32_t stsd_entry_count; + + /* stsz */ + int32_t stsz_sample_size; + int32_t stsz_sample_count; + int32_t *stsz_table; + + /* stts */ + int32_t stts_entry_count; + int32_t *stts_sample_count; + int32_t *stts_sample_delta; + + /* stsc */ + int32_t stsc_entry_count; + int32_t *stsc_first_chunk; + int32_t *stsc_samples_per_chunk; + int32_t *stsc_sample_desc_index; + + /* stsc */ + int32_t stco_entry_count; + int32_t *stco_chunk_offset; + + /* ctts */ + int32_t ctts_entry_count; + int32_t *ctts_sample_count; + int32_t *ctts_sample_offset; + + /* esde */ + uint8_t *decoderConfig; + int32_t decoderConfigLen; + + uint32_t maxBitrate; + uint32_t avgBitrate; + + uint32_t timeScale; + uint64_t duration; +}; + +#define MAX_TRACKS 1024 + +struct mp4ff { + /* stream to read from */ + struct mp4ff_callback *stream; + int64_t current_position; + + uint64_t moov_offset; + uint64_t moov_size; + uint8_t last_atom; + uint64_t file_size; + uint32_t error; + + /* mvhd */ + int32_t time_scale; + int32_t duration; + + /* incremental track index while reading the file */ + int32_t total_tracks; + + /* track data */ + struct mp4ff_track *track[MAX_TRACKS]; + + /* metadata */ + struct mp4ff_metadata tags; +}; + int32_t mp4ff_total_tracks(const struct mp4ff *f) { return f->total_tracks;