X-Git-Url: http://git.ieval.ro/?p=fdkaac.git;a=blobdiff_plain;f=src%2Fm4af.h;h=91f4cf8955c3603258e40ab4618b691f8cbb30f2;hp=4e3966c2c1230ce0e520d7781f66287d2d1329bd;hb=e4bbeeb0164812d47cf80f0d39fe2ae452edd4da;hpb=2642af896e0a9f7b3bca63b02833e69b3bfcd82a diff --git a/src/m4af.h b/src/m4af.h index 4e3966c..91f4cf8 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,67 +52,70 @@ enum m4af_codec_type { M4AF_CODEC_TEXT = M4AF_FOURCC('t','e','x','t'), }; +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); - -/* can be called between mfa4_begin_write() and m4af_finalize() */ -int m4af_write_sample(m4af_writer_t *ctx, int track_idx, const void *data, - uint32_t size, uint32_t duration); +int m4af_finalize(m4af_ctx_t *ctx); +void m4af_teardown(m4af_ctx_t **ctx); -/* the following can be called at anytime before m4af_finalize() */ +int m4af_write_sample(m4af_ctx_t *ctx, uint32_t track_idx, const void *data, + uint32_t size, uint32_t duration); -int m4af_decoder_specific_info(m4af_writer_t *ctx, int track_idx, - uint8_t *data, uint32_t size); +int m4af_set_decoder_specific_info(m4af_ctx_t *ctx, uint32_t track_idx, + uint8_t *data, uint32_t size); -void m4af_set_priming(m4af_writer_t *ctx, int track_idx, +void m4af_set_priming(m4af_ctx_t *ctx, uint32_t track_idx, uint32_t encoder_delay, uint32_t padding); -int m4af_add_itmf_long_tag(m4af_writer_t *ctx, const char *name, - const char *data); +void m4af_set_fixed_frame_duration(m4af_ctx_t *ctx, uint32_t track_idx, + uint32_t length); -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_long_tag(m4af_ctx_t *ctx, const char *name, + const char *data); -int m4af_add_itmf_string_tag(m4af_writer_t *ctx, uint32_t type, - const char *data); +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_int8_tag(m4af_writer_t *ctx, uint32_t type, int value); +int m4af_add_itmf_string_tag(m4af_ctx_t *ctx, uint32_t fcc, const char *data); -int m4af_add_itmf_int16_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_int32_tag(m4af_writer_t *ctx, uint32_t type, uint32_t value); +int m4af_add_itmf_int16_tag(m4af_ctx_t *ctx, uint32_t fcc, int value); -int m4af_add_itmf_int64_tag(m4af_writer_t *ctx, uint32_t type, uint64_t 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