mirror of
https://github.com/nu774/fdkaac.git
synced 2025-03-12 23:10:08 +01:00
update m4af
This commit is contained in:
parent
2642af896e
commit
e4bbeeb016
456
src/m4af.c
456
src/m4af.c
File diff suppressed because it is too large
Load Diff
69
src/m4af.h
69
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,
|
||||
typedef struct m4af_ctx_t m4af_ctx_t;
|
||||
|
||||
|
||||
m4af_ctx_t *m4af_create(uint32_t codec, uint32_t timescale,
|
||||
m4af_io_callbacks_t *io, void *io_cookie);
|
||||
|
||||
void m4af_teardown(m4af_writer_t **ctx);
|
||||
int m4af_begin_write(m4af_ctx_t *ctx);
|
||||
|
||||
int m4af_begin_write(m4af_writer_t *ctx);
|
||||
int m4af_finalize(m4af_ctx_t *ctx);
|
||||
|
||||
int m4af_finalize(m4af_writer_t *ctx);
|
||||
void m4af_teardown(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,
|
||||
int m4af_write_sample(m4af_ctx_t *ctx, uint32_t track_idx, const void *data,
|
||||
uint32_t size, uint32_t duration);
|
||||
|
||||
|
||||
/* the following can be called at anytime before m4af_finalize() */
|
||||
|
||||
int m4af_decoder_specific_info(m4af_writer_t *ctx, int track_idx,
|
||||
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,
|
||||
void m4af_set_fixed_frame_duration(m4af_ctx_t *ctx, uint32_t track_idx,
|
||||
uint32_t length);
|
||||
|
||||
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, uint32_t value);
|
||||
int m4af_add_itmf_int32_tag(m4af_ctx_t *ctx, uint32_t fcc, uint32_t value);
|
||||
|
||||
int m4af_add_itmf_int64_tag(m4af_writer_t *ctx, uint32_t type, uint64_t value);
|
||||
int m4af_add_itmf_int64_tag(m4af_ctx_t *ctx, uint32_t fcc, uint64_t value);
|
||||
|
||||
int m4af_add_itmf_track_tag(m4af_writer_t *ctx, int track, int total);
|
||||
int m4af_add_itmf_track_tag(m4af_ctx_t *ctx, int track, int total);
|
||||
|
||||
int m4af_add_itmf_disk_tag(m4af_writer_t *ctx, int disk, 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
|
||||
|
19
src/main.c
19
src/main.c
@ -464,7 +464,7 @@ int parse_options(int argc, char **argv, aacenc_param_ex_t *params)
|
||||
};
|
||||
|
||||
static
|
||||
int write_sample(FILE *ofp, m4af_writer_t *m4af,
|
||||
int write_sample(FILE *ofp, m4af_ctx_t *m4af,
|
||||
const void *data, uint32_t size, uint32_t duration)
|
||||
{
|
||||
if (!m4af) {
|
||||
@ -482,7 +482,7 @@ int write_sample(FILE *ofp, m4af_writer_t *m4af,
|
||||
|
||||
static
|
||||
int encode(wav_reader_t *wavf, HANDLE_AACENCODER encoder,
|
||||
uint32_t frame_length, FILE *ofp, m4af_writer_t *m4af,
|
||||
uint32_t frame_length, FILE *ofp, m4af_ctx_t *m4af,
|
||||
int show_progress)
|
||||
{
|
||||
uint8_t *ibuf = 0;
|
||||
@ -566,7 +566,7 @@ END:
|
||||
}
|
||||
|
||||
static
|
||||
void put_tag_entry(m4af_writer_t *m4af, const aacenc_tag_entry_t *tag)
|
||||
void put_tag_entry(m4af_ctx_t *m4af, const aacenc_tag_entry_t *tag)
|
||||
{
|
||||
unsigned m, n = 0;
|
||||
const char *data = tag->data;
|
||||
@ -688,7 +688,7 @@ void put_tag_entry(m4af_writer_t *m4af, const aacenc_tag_entry_t *tag)
|
||||
}
|
||||
|
||||
static
|
||||
void put_tool_tag(m4af_writer_t *m4af, const aacenc_param_ex_t *params,
|
||||
void put_tool_tag(m4af_ctx_t *m4af, const aacenc_param_ex_t *params,
|
||||
HANDLE_AACENCODER encoder)
|
||||
{
|
||||
char tool_info[256];
|
||||
@ -716,7 +716,7 @@ void put_tool_tag(m4af_writer_t *m4af, const aacenc_param_ex_t *params,
|
||||
}
|
||||
|
||||
static
|
||||
int finalize_m4a(m4af_writer_t *m4af, const aacenc_param_ex_t *params,
|
||||
int finalize_m4a(m4af_ctx_t *m4af, const aacenc_param_ex_t *params,
|
||||
HANDLE_AACENCODER encoder)
|
||||
{
|
||||
unsigned i;
|
||||
@ -792,8 +792,8 @@ int parse_raw_spec(const char *spec, pcm_sample_description_t *desc)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
wav_io_context_t wav_io = { read_callback, seek_callback, tell_callback };
|
||||
m4af_io_callbacks_t m4af_io = {
|
||||
write_callback, seek_callback, tell_callback };
|
||||
m4af_io_callbacks_t
|
||||
m4af_io = { 0, write_callback, seek_callback, tell_callback };
|
||||
aacenc_param_ex_t params = { 0 };
|
||||
|
||||
int result = 2;
|
||||
@ -803,7 +803,7 @@ int main(int argc, char **argv)
|
||||
wav_reader_t *wavf = 0;
|
||||
HANDLE_AACENCODER encoder = 0;
|
||||
AACENC_InfoStruct aacinfo = { 0 };
|
||||
m4af_writer_t *m4af = 0;
|
||||
m4af_ctx_t *m4af = 0;
|
||||
const pcm_sample_description_t *sample_format;
|
||||
int downsampled_timescale = 0;
|
||||
int frame_count = 0;
|
||||
@ -873,7 +873,8 @@ int main(int argc, char **argv)
|
||||
scale = sample_format->sample_rate >> downsampled_timescale;
|
||||
if ((m4af = m4af_create(M4AF_CODEC_MP4A, scale, &m4af_io, ofp)) < 0)
|
||||
goto END;
|
||||
m4af_decoder_specific_info(m4af, 0, aacinfo.confBuf, aacinfo.confSize);
|
||||
m4af_set_decoder_specific_info(m4af, 0, aacinfo.confBuf,
|
||||
aacinfo.confSize);
|
||||
m4af_set_fixed_frame_duration(m4af, 0,
|
||||
framelen >> downsampled_timescale);
|
||||
m4af_begin_write(m4af);
|
||||
|
Loading…
x
Reference in New Issue
Block a user