- uint32_t len;
-} mp4ff_tag_t;
-
-typedef struct
-{
- mp4ff_tag_t *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;
-
-int32_t mp4ff_total_tracks(const mp4ff_t *f);
-int32_t 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_metadata {
+ struct mp4_tag *tags;
+ unsigned count;
+};
+
+struct mp4; /* opaque */
+
+int mp4_set_sample_position(struct mp4 *f, uint32_t sample);
+int mp4_open_read(const struct mp4_callback *cb, struct mp4 **result);
+void mp4_close(struct mp4 *f);
+int mp4_get_sample_size(const struct mp4 *f, uint32_t sample, uint32_t *result);
+uint16_t mp4_get_sample_rate(const struct mp4 *f);
+uint16_t mp4_get_channel_count(const struct mp4 *f);
+uint32_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_get_tag_value(const struct mp4 *f, const char *item);