4e3966c2c1230ce0e520d7781f66287d2d1329bd
[fdkaac.git] / src / m4af.h
1 /*
2 * Copyright (C) 2013 nu774
3 * For conditions of distribution and use, see copyright notice in COPYING
4 */
5 #ifndef M4AF_H
6 #define M4AF_H
7
8 #define M4AF_FOURCC(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))
9
10 enum m4af_error_code {
11 M4AF_IO_ERROR = 1,
12 M4AF_NO_MEMORY,
13 };
14
15 enum m4af_itmf_tag {
16 M4AF_TAG_TITLE = M4AF_FOURCC('\xa9','n','a','m'),
17 M4AF_TAG_ARTIST = M4AF_FOURCC('\xa9','A','R','T'),
18 M4AF_TAG_ALBUM = M4AF_FOURCC('\xa9','a','l','b'),
19 M4AF_TAG_GENRE = M4AF_FOURCC('\xa9','g','e','n'),
20 M4AF_TAG_DATE = M4AF_FOURCC('\xa9','d','a','y'),
21 M4AF_TAG_COMPOSER = M4AF_FOURCC('\xa9','w','r','t'),
22 M4AF_TAG_GROUPING = M4AF_FOURCC('\xa9','g','r','p'),
23 M4AF_TAG_COMMENT = M4AF_FOURCC('\xa9','c','m','t'),
24 M4AF_TAG_LYRICS = M4AF_FOURCC('\xa9','l','y','r'),
25 M4AF_TAG_TOOL = M4AF_FOURCC('\xa9','t','o','o'),
26 M4AF_TAG_ALBUM_ARTIST = M4AF_FOURCC('a','A','R','T'),
27 M4AF_TAG_TRACK = M4AF_FOURCC('t','r','k','n'),
28 M4AF_TAG_DISK = M4AF_FOURCC('d','i','s','k'),
29 M4AF_TAG_GENRE_ID3 = M4AF_FOURCC('g','n','r','e'),
30 M4AF_TAG_TEMPO = M4AF_FOURCC('t','m','p','o'),
31 M4AF_TAG_DESCRIPTION = M4AF_FOURCC('d','e','s','c'),
32 M4AF_TAG_LONG_DESCRIPTION = M4AF_FOURCC('l','d','e','s'),
33 M4AF_TAG_COPYRIGHT = M4AF_FOURCC('c','p','r','t'),
34 M4AF_TAG_COMPILATION = M4AF_FOURCC('c','p','i','l'),
35 M4AF_TAG_ARTWORK = M4AF_FOURCC('c','o','v','r'),
36 };
37
38 enum m4af_itmf_type_code {
39 M4AF_IMPLICIT = 0,
40 M4AF_UTF8 = 1,
41 M4AF_GIF = 12,
42 M4AF_JPEG = 13,
43 M4AF_PNG = 14,
44 M4AF_INTEGER = 21,
45 };
46
47 enum m4af_codec_type {
48 M4AF_CODEC_MP4A = M4AF_FOURCC('m','p','4','a'),
49 M4AF_CODEC_ALAC = M4AF_FOURCC('a','l','a','c'),
50 M4AF_CODEC_TEXT = M4AF_FOURCC('t','e','x','t'),
51 };
52
53 typedef int (*m4af_write_callback)(void *cookie, const void *data,
54 uint32_t size);
55 typedef int (*m4af_seek_callback)(void *cookie, int64_t off, int whence);
56 typedef int64_t (*m4af_tell_callback)(void *cookie);
57
58 typedef struct m4af_io_callbacks_t {
59 m4af_write_callback write;
60 m4af_seek_callback seek;
61 m4af_tell_callback tell;
62 } m4af_io_callbacks_t;
63
64 typedef struct m4af_writer_t m4af_writer_t;
65
66 m4af_writer_t *m4af_create(uint32_t codec, uint32_t timescale,
67 m4af_io_callbacks_t *io, void *io_cookie);
68
69 void m4af_teardown(m4af_writer_t **ctx);
70
71 int m4af_begin_write(m4af_writer_t *ctx);
72
73 int m4af_finalize(m4af_writer_t *ctx);
74
75 /* can be called before m4af_write_sample() */
76 void m4af_set_fixed_frame_duration(m4af_writer_t *ctx, int track_idx,
77 uint32_t length);
78
79 /* can be called between mfa4_begin_write() and m4af_finalize() */
80 int m4af_write_sample(m4af_writer_t *ctx, int track_idx, const void *data,
81 uint32_t size, uint32_t duration);
82
83
84 /* the following can be called at anytime before m4af_finalize() */
85
86 int m4af_decoder_specific_info(m4af_writer_t *ctx, int track_idx,
87 uint8_t *data, uint32_t size);
88
89 void m4af_set_priming(m4af_writer_t *ctx, int track_idx,
90 uint32_t encoder_delay, uint32_t padding);
91
92 int m4af_add_itmf_long_tag(m4af_writer_t *ctx, const char *name,
93 const char *data);
94
95 int m4af_add_itmf_short_tag(m4af_writer_t *ctx, uint32_t type,
96 uint32_t type_code, const void *data,
97 uint32_t data_size);
98
99 int m4af_add_itmf_string_tag(m4af_writer_t *ctx, uint32_t type,
100 const char *data);
101
102 int m4af_add_itmf_int8_tag(m4af_writer_t *ctx, uint32_t type, int value);
103
104 int m4af_add_itmf_int16_tag(m4af_writer_t *ctx, uint32_t type, int value);
105
106 int m4af_add_itmf_int32_tag(m4af_writer_t *ctx, uint32_t type, uint32_t value);
107
108 int m4af_add_itmf_int64_tag(m4af_writer_t *ctx, uint32_t type, uint64_t value);
109
110 int m4af_add_itmf_track_tag(m4af_writer_t *ctx, int track, int total);
111
112 int m4af_add_itmf_disk_tag(m4af_writer_t *ctx, int disk, int total);
113
114 int m4af_add_itmf_genre_tag(m4af_writer_t *ctx, int genre);
115
116 #endif
This page took 0.023772 seconds and 3 git commands to generate.