]> git.tuebingen.mpg.de Git - paraslash.git/blob - mp4.h
mp4: Avoid typedefs for data structures.
[paraslash.git] / mp4.h
1 struct mp4ff_callback {
2     uint32_t (*read)(void *user_data, void *buffer, uint32_t length);
3     uint32_t (*write)(void *udata, void *buffer, uint32_t length);
4     uint32_t (*seek)(void *user_data, uint64_t position);
5     uint32_t (*truncate)(void *user_data);
6     void *user_data;
7     uint32_t read_error;
8 };
9
10 struct mp4ff_track {
11     int32_t type;
12     int32_t channelCount;
13     int32_t sampleSize;
14     uint16_t sampleRate;
15     int32_t audioType;
16
17     /* stsd */
18     int32_t stsd_entry_count;
19
20     /* stsz */
21     int32_t stsz_sample_size;
22     int32_t stsz_sample_count;
23     int32_t *stsz_table;
24
25     /* stts */
26     int32_t stts_entry_count;
27     int32_t *stts_sample_count;
28     int32_t *stts_sample_delta;
29
30     /* stsc */
31     int32_t stsc_entry_count;
32     int32_t *stsc_first_chunk;
33     int32_t *stsc_samples_per_chunk;
34     int32_t *stsc_sample_desc_index;
35
36     /* stsc */
37     int32_t stco_entry_count;
38     int32_t *stco_chunk_offset;
39
40     /* ctts */
41     int32_t ctts_entry_count;
42     int32_t *ctts_sample_count;
43     int32_t *ctts_sample_offset;
44
45     /* esde */
46     uint8_t *decoderConfig;
47     int32_t decoderConfigLen;
48
49     uint32_t maxBitrate;
50     uint32_t avgBitrate;
51
52     uint32_t timeScale;
53     uint64_t duration;
54
55 };
56
57 #define MAX_TRACKS 1024
58
59 struct mp4ff_tag {
60     char *item;
61     char *value;
62     uint32_t len;
63 };
64
65 struct mp4ff_metadata {
66     struct mp4ff_tag *tags;
67     uint32_t count;
68 };
69
70 /* mp4 main file structure */
71 struct mp4ff {
72     /* stream to read from */
73     struct mp4ff_callback *stream;
74     int64_t current_position;
75
76     uint64_t moov_offset;
77     uint64_t moov_size;
78     uint8_t last_atom;
79     uint64_t file_size;
80     uint32_t error;
81
82     /* mvhd */
83     int32_t time_scale;
84     int32_t duration;
85
86     /* incremental track index while reading the file */
87     int32_t total_tracks;
88
89     /* track data */
90     struct mp4ff_track *track[MAX_TRACKS];
91
92     /* metadata */
93     struct mp4ff_metadata tags;
94 };
95
96 void mp4ff_set_sample_position(struct mp4ff *f, const int32_t track, const int32_t sample);
97 int32_t mp4ff_total_tracks(const struct mp4ff *f);
98 void mp4ff_get_decoder_config(const struct mp4ff *f, const int track,
99                 unsigned char** ppBuf, unsigned int* pBufSize);
100 struct mp4ff *mp4ff_open_read(struct mp4ff_callback *f);
101 void mp4ff_close(struct mp4ff *f);
102 int32_t mp4ff_get_sample_size(const struct mp4ff *f, int track, int sample);
103 uint32_t mp4ff_get_sample_rate(const struct mp4ff *f, const int32_t track);
104 uint32_t mp4ff_get_channel_count(const struct mp4ff * f,const int32_t track);
105 int32_t mp4ff_num_samples(const struct mp4ff *f, const int track);
106 struct mp4ff *mp4ff_open_read_metaonly(struct mp4ff_callback *f);
107
108 int mp4ff_meta_get_by_index(const struct mp4ff *f, unsigned int index,
109                             char **item, char **value);
110 int32_t mp4ff_meta_update(struct mp4ff_callback *f,const struct mp4ff_metadata * data);
111
112 int mp4ff_meta_get_num_items(const struct mp4ff *f);
113 int mp4ff_meta_get_artist(const struct mp4ff *f, char **value);
114 int mp4ff_meta_get_title(const struct mp4ff *f, char **value);
115 int mp4ff_meta_get_date(const struct mp4ff *f, char **value);
116 int mp4ff_meta_get_album(const struct mp4ff *f, char **value);
117 int mp4ff_meta_get_comment(const struct mp4ff *f, char **value);