X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=mp4.h;h=30a609f38c108d0306ccc18ea68596cf64647c96;hb=d440a71683940a58747de6dc32643db452d9cf54;hp=43874a03566468f7f0fead4a0aa167763ede7707;hpb=e1448dff981e0f51c6de02ac8097a646f60a10a1;p=paraslash.git diff --git a/mp4.h b/mp4.h index 43874a03..30a609f3 100644 --- a/mp4.h +++ b/mp4.h @@ -1,123 +1,37 @@ -typedef struct -{ - uint32_t (*read)(void *user_data, void *buffer, uint32_t length); - uint32_t (*write)(void *udata, void *buffer, uint32_t length); - uint32_t (*seek)(void *user_data, uint64_t position); - uint32_t (*truncate)(void *user_data); - void *user_data; - uint32_t read_error; -} mp4ff_callback_t; - -typedef struct -{ - 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; - -} mp4ff_track_t; - -#define MAX_TRACKS 1024 - -typedef struct -{ +struct mp4_callback { + ssize_t (*read)(void *user_data, void *buffer, size_t length); + ssize_t (*write)(void *user_data, void *buffer, size_t count); + uint32_t (*seek)(void *user_data, uint64_t position); + uint32_t (*truncate)(void *user_data); + void *user_data; +}; + +struct mp4_tag { char *item; char *value; uint32_t len; -} mp4ff_tag_t; +}; -typedef struct -{ - mp4ff_tag_t *tags; +struct mp4_metadata { + struct mp4_tag *tags; uint32_t count; -} mp4ff_metadata_t; - -/* mp4 main file structure */ -typedef struct -{ - /* stream to read from */ - mp4ff_callback_t *stream; - int64_t current_position; - - int32_t moov_read; - 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 */ - mp4ff_track_t *track[MAX_TRACKS]; - - /* metadata */ - mp4ff_metadata_t tags; -} mp4ff_t; - -void mp4ff_set_sample_position(mp4ff_t *f, const int32_t track, const int32_t sample); -int32_t mp4ff_total_tracks(const mp4ff_t *f); -void mp4ff_get_decoder_config(const mp4ff_t *f, const int track, - unsigned char** ppBuf, unsigned int* pBufSize); -mp4ff_t *mp4ff_open_read(mp4ff_callback_t *f); -void mp4ff_close(mp4ff_t *f); -int32_t mp4ff_read_sample_getsize(mp4ff_t *f, const int track, const int sample); -uint32_t mp4ff_get_sample_rate(const mp4ff_t *f, const int32_t track); -uint32_t mp4ff_get_channel_count(const mp4ff_t * f,const int32_t track); -int32_t mp4ff_num_samples(const mp4ff_t *f, const int track); -mp4ff_t *mp4ff_open_read_metaonly(mp4ff_callback_t *f); - -int mp4ff_meta_get_by_index(const mp4ff_t *f, unsigned int index, - char **item, char **value); -int32_t mp4ff_meta_update(mp4ff_callback_t *f,const mp4ff_metadata_t * data); - -int mp4ff_meta_get_num_items(const mp4ff_t *f); -int mp4ff_meta_get_artist(const mp4ff_t *f, char **value); -int mp4ff_meta_get_title(const mp4ff_t *f, char **value); -int mp4ff_meta_get_date(const mp4ff_t *f, char **value); -int mp4ff_meta_get_album(const mp4ff_t *f, char **value); -int mp4ff_meta_get_comment(const mp4ff_t *f, char **value); +}; + +struct mp4; /* opaque */ + +int mp4_set_sample_position(struct mp4 *f, int32_t sample); +int mp4_open_read(const struct mp4_callback *cb, struct mp4 **result); +void mp4_close(struct mp4 *f); +int32_t mp4_get_sample_size(const struct mp4 *f, int sample); +uint32_t mp4_get_sample_rate(const struct mp4 *f); +uint32_t mp4_get_channel_count(const struct mp4 * f); +int32_t mp4_num_samples(const struct mp4 *f); +uint64_t mp4_get_duration(const struct mp4 *f); +int mp4_open_meta(const struct mp4_callback *cb, struct mp4 **result); +struct mp4_metadata *mp4_get_meta(struct mp4 *f); +int mp4_meta_update(struct mp4 *f); +char *mp4_meta_get_artist(const struct mp4 *f); +char *mp4_meta_get_title(const struct mp4 *f); +char *mp4_meta_get_date(const struct mp4 *f); +char *mp4_meta_get_album(const struct mp4 *f); +char *mp4_meta_get_comment(const struct mp4 *f);