struct mp4_callback {
- ssize_t (*read)(void *user_data, void *buffer, size_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;
+ ssize_t (*read)(void *user_data, void *buffer, size_t length);
+ ssize_t (*write)(void *user_data, void *buffer, size_t count);
+ off_t (*seek)(void *user_data, off_t offset, int whence);
+ int (*truncate)(void *user_data);
+ void *user_data;
};
struct mp4_tag {
char *item;
char *value;
- uint32_t len;
};
struct mp4_metadata {
struct mp4_tag *tags;
- uint32_t count;
+ unsigned count;
};
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);
+int mp4_set_sample_position(struct mp4 *f, uint32_t sample);
+int mp4_open(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);
+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);
-int32_t 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);
+int mp4_update_meta(struct mp4 *f);
+char *mp4_get_tag_value(const struct mp4 *f, const char *item);