X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=src%2Fm4af.h;h=6c3ba4df6da5179315eed69160a883285ccc7793;hb=d317e29d467e1e3290a9a2e8c2bbb21b56c854cf;hp=fd6bc78e295298b91a332ede47cef56037bd5123;hpb=48e2f01c5653c8f643b2a763e1cfa2efc1eccd60;p=fdkaac.git diff --git a/src/m4af.h b/src/m4af.h index fd6bc78..6c3ba4d 100644 --- a/src/m4af.h +++ b/src/m4af.h @@ -8,8 +8,10 @@ #define M4AF_FOURCC(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d)) enum m4af_error_code { - M4AF_IO_ERROR = 1, - M4AF_NO_MEMORY, + M4AF_IO_ERROR = -1, + M4AF_NO_MEMORY = -2, + M4AF_FORMAT_ERROR = -3, + M4AF_NOT_SUPPORTED = -4, }; enum m4af_itmf_tag { @@ -50,65 +52,78 @@ enum m4af_codec_type { M4AF_CODEC_TEXT = M4AF_FOURCC('t','e','x','t'), }; +enum m4af_priming_mode { + M4AF_PRIMING_MODE_ITUNSMPB = 1, + M4AF_PRIMING_MODE_EDTS = 2, + M4AF_PRIMING_MODE_BOTH = 3 +}; + +typedef int (*m4af_read_callback)(void *cookie, void *buffer, uint32_t size); typedef int (*m4af_write_callback)(void *cookie, const void *data, uint32_t size); typedef int (*m4af_seek_callback)(void *cookie, int64_t off, int whence); typedef int64_t (*m4af_tell_callback)(void *cookie); typedef struct m4af_io_callbacks_t { + m4af_read_callback read; m4af_write_callback write; m4af_seek_callback seek; m4af_tell_callback tell; } m4af_io_callbacks_t; -typedef struct m4af_writer_t m4af_writer_t; +typedef struct m4af_itmf_entry_t { + uint32_t fcc; + char *name; + uint32_t type_code; + char *data; + uint32_t data_size; +} m4af_itmf_entry_t; -m4af_writer_t *m4af_create(uint32_t codec, uint32_t timescale, - m4af_io_callbacks_t *io, void *io_cookie); +typedef struct m4af_ctx_t m4af_ctx_t; -void m4af_teardown(m4af_writer_t **ctx); -int m4af_begin_write(m4af_writer_t *ctx); +m4af_ctx_t *m4af_create(uint32_t codec, uint32_t timescale, + m4af_io_callbacks_t *io, void *io_cookie); -int m4af_finalize(m4af_writer_t *ctx); +int m4af_begin_write(m4af_ctx_t *ctx); -/* can be called before m4af_write_sample() */ -void m4af_set_fixed_frame_duration(m4af_writer_t *ctx, int track_idx, - uint32_t length); +int m4af_finalize(m4af_ctx_t *ctx); + +void m4af_teardown(m4af_ctx_t **ctx); -/* can be called between mfa4_begin_write() and m4af_finalize() */ -int m4af_write_sample(m4af_writer_t *ctx, int track_idx, const void *data, +int m4af_write_sample(m4af_ctx_t *ctx, uint32_t track_idx, const void *data, uint32_t size, uint32_t duration); +int m4af_set_decoder_specific_info(m4af_ctx_t *ctx, uint32_t track_idx, + uint8_t *data, uint32_t size); -/* the following can be called at anytime before m4af_finalize() */ +void m4af_set_priming(m4af_ctx_t *ctx, uint32_t track_idx, + uint32_t encoder_delay, uint32_t padding); -int m4af_decoder_specific_info(m4af_writer_t *ctx, int track_idx, - uint8_t *data, uint32_t size); +void m4af_set_priming_mode(m4af_ctx_t *ctx, int mode); -void m4af_set_priming(m4af_writer_t *ctx, int track_idx, - uint32_t encoder_delay, uint32_t padding); +void m4af_set_fixed_frame_duration(m4af_ctx_t *ctx, uint32_t track_idx, + uint32_t length); -int m4af_add_itmf_long_tag(m4af_writer_t *ctx, const char *name, +int m4af_add_itmf_long_tag(m4af_ctx_t *ctx, const char *name, const char *data); -int m4af_add_itmf_short_tag(m4af_writer_t *ctx, uint32_t type, - uint32_t type_code, const void *data, - uint32_t data_size); +int m4af_add_itmf_short_tag(m4af_ctx_t *ctx, uint32_t fcc, uint32_t type_code, + const void *data, uint32_t data_size); -int m4af_add_itmf_string_tag(m4af_writer_t *ctx, uint32_t type, - const char *data); +int m4af_add_itmf_string_tag(m4af_ctx_t *ctx, uint32_t fcc, const char *data); -int m4af_add_itmf_int8_tag(m4af_writer_t *ctx, uint32_t type, int value); +int m4af_add_itmf_int8_tag(m4af_ctx_t *ctx, uint32_t fcc, int value); -int m4af_add_itmf_int16_tag(m4af_writer_t *ctx, uint32_t type, int value); +int m4af_add_itmf_int16_tag(m4af_ctx_t *ctx, uint32_t fcc, int value); -int m4af_add_itmf_int32_tag(m4af_writer_t *ctx, uint32_t type, int value); +int m4af_add_itmf_int32_tag(m4af_ctx_t *ctx, uint32_t fcc, uint32_t value); -int m4af_add_itmf_track_tag(m4af_writer_t *ctx, int track, int total); +int m4af_add_itmf_int64_tag(m4af_ctx_t *ctx, uint32_t fcc, uint64_t value); -int m4af_add_itmf_disk_tag(m4af_writer_t *ctx, int disk, int total); +int m4af_add_itmf_track_tag(m4af_ctx_t *ctx, int track, int total); -int m4af_add_itmf_genre_tag(m4af_writer_t *ctx, int genre); +int m4af_add_itmf_disk_tag(m4af_ctx_t *ctx, int disk, int total); +int m4af_add_itmf_genre_tag(m4af_ctx_t *ctx, int genre); #endif