00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00027 #ifndef AVCODEC_TAK_H
00028 #define AVCODEC_TAK_H
00029
00030 #include <stdint.h>
00031
00032 #define BITSTREAM_READER_LE
00033 #include "get_bits.h"
00034 #include "avcodec.h"
00035
00036 #define TAK_FORMAT_DATA_TYPE_BITS 3
00037 #define TAK_FORMAT_SAMPLE_RATE_BITS 18
00038 #define TAK_FORMAT_BPS_BITS 5
00039 #define TAK_FORMAT_CHANNEL_BITS 4
00040 #define TAK_FORMAT_VALID_BITS 5
00041 #define TAK_FORMAT_CH_LAYOUT_BITS 6
00042 #define TAK_SIZE_FRAME_DURATION_BITS 4
00043 #define TAK_SIZE_SAMPLES_NUM_BITS 35
00044 #define TAK_LAST_FRAME_POS_BITS 40
00045 #define TAK_LAST_FRAME_SIZE_BITS 24
00046 #define TAK_ENCODER_CODEC_BITS 6
00047 #define TAK_ENCODER_PROFILE_BITS 4
00048 #define TAK_ENCODER_VERSION_BITS 24
00049 #define TAK_SAMPLE_RATE_MIN 6000
00050 #define TAK_CHANNELS_MIN 1
00051 #define TAK_BPS_MIN 8
00052 #define TAK_FRAME_HEADER_FLAGS_BITS 3
00053 #define TAK_FRAME_HEADER_SYNC_ID 0xA0FF
00054 #define TAK_FRAME_HEADER_SYNC_ID_BITS 16
00055 #define TAK_FRAME_HEADER_SAMPLE_COUNT_BITS 14
00056 #define TAK_FRAME_HEADER_NO_BITS 21
00057 #define TAK_FRAME_DURATION_QUANT_SHIFT 5
00058 #define TAK_CRC24_BITS 24
00059
00060
00061 #define TAK_FRAME_FLAG_IS_LAST 0x1
00062 #define TAK_FRAME_FLAG_HAS_INFO 0x2
00063 #define TAK_FRAME_FLAG_HAS_METADATA 0x4
00064
00065 #define TAK_MAX_CHANNELS (1 << TAK_FORMAT_CHANNEL_BITS)
00066
00067 #define TAK_MIN_FRAME_HEADER_BITS (TAK_FRAME_HEADER_SYNC_ID_BITS + \
00068 TAK_FRAME_HEADER_FLAGS_BITS + \
00069 TAK_FRAME_HEADER_NO_BITS + \
00070 TAK_CRC24_BITS)
00071
00072 #define TAK_MIN_FRAME_HEADER_LAST_BITS (TAK_MIN_FRAME_HEADER_BITS + 2 + \
00073 TAK_FRAME_HEADER_SAMPLE_COUNT_BITS)
00074
00075 #define TAK_ENCODER_BITS (TAK_ENCODER_CODEC_BITS + \
00076 TAK_ENCODER_PROFILE_BITS)
00077
00078 #define TAK_SIZE_BITS (TAK_SIZE_SAMPLES_NUM_BITS + \
00079 TAK_SIZE_FRAME_DURATION_BITS)
00080
00081 #define TAK_FORMAT_BITS (TAK_FORMAT_DATA_TYPE_BITS + \
00082 TAK_FORMAT_SAMPLE_RATE_BITS + \
00083 TAK_FORMAT_BPS_BITS + \
00084 TAK_FORMAT_CHANNEL_BITS + 1 + \
00085 TAK_FORMAT_VALID_BITS + 1 + \
00086 TAK_FORMAT_CH_LAYOUT_BITS * \
00087 TAK_MAX_CHANNELS)
00088
00089 #define TAK_STREAMINFO_BITS (TAK_ENCODER_BITS + \
00090 TAK_SIZE_BITS + \
00091 TAK_FORMAT_BITS)
00092
00093 #define TAK_MAX_FRAME_HEADER_BITS (TAK_MIN_FRAME_HEADER_LAST_BITS + \
00094 TAK_STREAMINFO_BITS + 31)
00095
00096 #define TAK_STREAMINFO_BYTES ((TAK_STREAMINFO_BITS + 7) / 8)
00097 #define TAK_MAX_FRAME_HEADER_BYTES ((TAK_MAX_FRAME_HEADER_BITS + 7) / 8)
00098 #define TAK_MIN_FRAME_HEADER_BYTES ((TAK_MIN_FRAME_HEADER_BITS + 7) / 8)
00099
00100 enum TAKCodecType {
00101 TAK_CODEC_MONO_STEREO = 2,
00102 TAK_CODEC_MULTICHANNEL = 4,
00103 };
00104
00105 enum TAKMetaDataType {
00106 TAK_METADATA_END = 0,
00107 TAK_METADATA_STREAMINFO,
00108 TAK_METADATA_SEEKTABLE,
00109 TAK_METADATA_SIMPLE_WAVE_DATA,
00110 TAK_METADATA_ENCODER,
00111 TAK_METADATA_PADDING,
00112 TAK_METADATA_MD5,
00113 TAK_METADATA_LAST_FRAME,
00114 };
00115
00116 enum TAKFrameSizeType {
00117 TAK_FST_94ms = 0,
00118 TAK_FST_125ms,
00119 TAK_FST_188ms,
00120 TAK_FST_250ms,
00121 TAK_FST_4096,
00122 TAK_FST_8192,
00123 TAK_FST_16384,
00124 TAK_FST_512,
00125 TAK_FST_1024,
00126 TAK_FST_2048,
00127 };
00128
00129 typedef struct TAKStreamInfo {
00130 int flags;
00131 enum TAKCodecType codec;
00132 int data_type;
00133 int sample_rate;
00134 int channels;
00135 int bps;
00136 int frame_num;
00137 int frame_samples;
00138 int last_frame_samples;
00139 uint64_t ch_layout;
00140 int64_t samples;
00141 } TAKStreamInfo;
00142
00143 void ff_tak_init_crc(void);
00144
00145 int ff_tak_check_crc(const uint8_t *buf, unsigned int buf_size);
00146
00152 void avpriv_tak_parse_streaminfo(GetBitContext *gb, TAKStreamInfo *s);
00153
00163 int ff_tak_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
00164 TAKStreamInfo *s, int log_level_offset);
00165 #endif