FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
tak.h
Go to the documentation of this file.
1
/*
2
* TAK decoder/demuxer common code
3
* Copyright (c) 2012 Paul B Mahol
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
/**
23
* @file
24
* TAK (Tom's lossless Audio Kompressor) decoder/demuxer common functions
25
*/
26
27
#ifndef AVCODEC_TAK_H
28
#define AVCODEC_TAK_H
29
30
#include <stdint.h>
31
32
#define BITSTREAM_READER_LE
33
#include "
get_bits.h
"
34
#include "
avcodec.h
"
35
36
#define TAK_FORMAT_DATA_TYPE_BITS 3
37
#define TAK_FORMAT_SAMPLE_RATE_BITS 18
38
#define TAK_FORMAT_BPS_BITS 5
39
#define TAK_FORMAT_CHANNEL_BITS 4
40
#define TAK_FORMAT_VALID_BITS 5
41
#define TAK_FORMAT_CH_LAYOUT_BITS 6
42
#define TAK_SIZE_FRAME_DURATION_BITS 4
43
#define TAK_SIZE_SAMPLES_NUM_BITS 35
44
#define TAK_LAST_FRAME_POS_BITS 40
45
#define TAK_LAST_FRAME_SIZE_BITS 24
46
#define TAK_ENCODER_CODEC_BITS 6
47
#define TAK_ENCODER_PROFILE_BITS 4
48
#define TAK_ENCODER_VERSION_BITS 24
49
#define TAK_SAMPLE_RATE_MIN 6000
50
#define TAK_CHANNELS_MIN 1
51
#define TAK_BPS_MIN 8
52
#define TAK_FRAME_HEADER_FLAGS_BITS 3
53
#define TAK_FRAME_HEADER_SYNC_ID 0xA0FF
54
#define TAK_FRAME_HEADER_SYNC_ID_BITS 16
55
#define TAK_FRAME_HEADER_SAMPLE_COUNT_BITS 14
56
#define TAK_FRAME_HEADER_NO_BITS 21
57
#define TAK_FRAME_DURATION_QUANT_SHIFT 5
58
#define TAK_CRC24_BITS 24
59
60
61
#define TAK_FRAME_FLAG_IS_LAST 0x1
62
#define TAK_FRAME_FLAG_HAS_INFO 0x2
63
#define TAK_FRAME_FLAG_HAS_METADATA 0x4
64
65
#define TAK_MAX_CHANNELS (1 << TAK_FORMAT_CHANNEL_BITS)
66
67
#define TAK_MIN_FRAME_HEADER_BITS (TAK_FRAME_HEADER_SYNC_ID_BITS + \
68
TAK_FRAME_HEADER_FLAGS_BITS + \
69
TAK_FRAME_HEADER_NO_BITS + \
70
TAK_CRC24_BITS)
71
72
#define TAK_MIN_FRAME_HEADER_LAST_BITS (TAK_MIN_FRAME_HEADER_BITS + 2 + \
73
TAK_FRAME_HEADER_SAMPLE_COUNT_BITS)
74
75
#define TAK_ENCODER_BITS (TAK_ENCODER_CODEC_BITS + \
76
TAK_ENCODER_PROFILE_BITS)
77
78
#define TAK_SIZE_BITS (TAK_SIZE_SAMPLES_NUM_BITS + \
79
TAK_SIZE_FRAME_DURATION_BITS)
80
81
#define TAK_FORMAT_BITS (TAK_FORMAT_DATA_TYPE_BITS + \
82
TAK_FORMAT_SAMPLE_RATE_BITS + \
83
TAK_FORMAT_BPS_BITS + \
84
TAK_FORMAT_CHANNEL_BITS + 1 + \
85
TAK_FORMAT_VALID_BITS + 1 + \
86
TAK_FORMAT_CH_LAYOUT_BITS * \
87
TAK_MAX_CHANNELS)
88
89
#define TAK_STREAMINFO_BITS (TAK_ENCODER_BITS + \
90
TAK_SIZE_BITS + \
91
TAK_FORMAT_BITS)
92
93
#define TAK_MAX_FRAME_HEADER_BITS (TAK_MIN_FRAME_HEADER_LAST_BITS + \
94
TAK_STREAMINFO_BITS + 31)
95
96
#define TAK_STREAMINFO_BYTES ((TAK_STREAMINFO_BITS + 7) / 8)
97
#define TAK_MAX_FRAME_HEADER_BYTES ((TAK_MAX_FRAME_HEADER_BITS + 7) / 8)
98
#define TAK_MIN_FRAME_HEADER_BYTES ((TAK_MIN_FRAME_HEADER_BITS + 7) / 8)
99
100
enum
TAKCodecType
{
101
TAK_CODEC_MONO_STEREO
= 2,
102
TAK_CODEC_MULTICHANNEL
= 4,
103
};
104
105
enum
TAKMetaDataType
{
106
TAK_METADATA_END
= 0,
107
TAK_METADATA_STREAMINFO
,
108
TAK_METADATA_SEEKTABLE
,
109
TAK_METADATA_SIMPLE_WAVE_DATA
,
110
TAK_METADATA_ENCODER
,
111
TAK_METADATA_PADDING
,
112
TAK_METADATA_MD5
,
113
TAK_METADATA_LAST_FRAME
,
114
};
115
116
enum
TAKFrameSizeType
{
117
TAK_FST_94ms
= 0,
118
TAK_FST_125ms
,
119
TAK_FST_188ms
,
120
TAK_FST_250ms
,
121
TAK_FST_4096
,
122
TAK_FST_8192
,
123
TAK_FST_16384
,
124
TAK_FST_512
,
125
TAK_FST_1024
,
126
TAK_FST_2048
,
127
};
128
129
typedef
struct
TAKStreamInfo
{
130
int
flags
;
131
enum
TAKCodecType
codec
;
132
int
data_type
;
133
int
sample_rate
;
134
int
channels
;
135
int
bps
;
136
int
frame_num
;
137
int
frame_samples
;
138
int
last_frame_samples
;
139
uint64_t
ch_layout
;
140
int64_t
samples
;
141
}
TAKStreamInfo
;
142
143
int
ff_tak_check_crc
(
const
uint8_t
*
buf
,
unsigned
int
buf_size);
144
145
/**
146
* Parse the Streaminfo metadata block.
147
* @param[in] gb pointer to GetBitContext
148
* @param[out] s storage for parsed information
149
*/
150
void
avpriv_tak_parse_streaminfo
(
GetBitContext
*gb,
TAKStreamInfo
*
s
);
151
152
/**
153
* Validate and decode a frame header.
154
* @param avctx AVCodecContext to use as av_log() context
155
* @param[in] gb GetBitContext from which to read frame header
156
* @param[out] s frame information
157
* @param log_level_offset log level offset, can be used to silence
158
* error messages.
159
* @return non-zero on error, 0 if OK
160
*/
161
int
ff_tak_decode_frame_header
(
AVCodecContext
*avctx,
GetBitContext
*gb,
162
TAKStreamInfo
*
s
,
int
log_level_offset);
163
#endif
/* AVCODEC_TAK_H */
TAK_METADATA_SIMPLE_WAVE_DATA
Definition:
tak.h:109
TAK_FST_8192
Definition:
tak.h:122
s
const char * s
Definition:
avisynth_c.h:631
TAKStreamInfo::channels
int channels
Definition:
tak.h:134
TAK_FST_2048
Definition:
tak.h:126
TAK_FST_125ms
Definition:
tak.h:118
TAK_FST_16384
Definition:
tak.h:123
TAKStreamInfo::ch_layout
uint64_t ch_layout
Definition:
tak.h:139
TAKMetaDataType
TAKMetaDataType
Definition:
tak.h:105
TAK_METADATA_ENCODER
Definition:
tak.h:110
ff_tak_decode_frame_header
int ff_tak_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, TAKStreamInfo *s, int log_level_offset)
Validate and decode a frame header.
Definition:
tak.c:126
uint8_t
uint8_t
Definition:
audio_convert.c:194
TAKStreamInfo::flags
int flags
Definition:
tak.h:130
TAK_FST_4096
Definition:
tak.h:121
TAK_CODEC_MULTICHANNEL
Definition:
tak.h:102
get_bits.h
bitstream reader API header.
TAKStreamInfo::data_type
int data_type
Definition:
tak.h:132
ff_tak_check_crc
int ff_tak_check_crc(const uint8_t *buf, unsigned int buf_size)
Definition:
tak.c:75
TAK_METADATA_LAST_FRAME
Definition:
tak.h:113
TAKStreamInfo::last_frame_samples
int last_frame_samples
Definition:
tak.h:138
avcodec.h
Libavcodec external API header.
TAKStreamInfo::bps
int bps
Definition:
tak.h:135
TAKStreamInfo::samples
int64_t samples
Definition:
tak.h:140
TAK_METADATA_MD5
Definition:
tak.h:112
TAK_CODEC_MONO_STEREO
Definition:
tak.h:101
TAK_METADATA_SEEKTABLE
Definition:
tak.h:108
TAK_FST_250ms
Definition:
tak.h:120
TAKCodecType
TAKCodecType
Definition:
tak.h:100
TAK_FST_94ms
Definition:
tak.h:117
TAKStreamInfo
Definition:
tak.h:129
AVCodecContext
main external API structure.
Definition:
avcodec.h:1241
TAKStreamInfo::codec
enum TAKCodecType codec
Definition:
tak.h:131
TAK_FST_512
Definition:
tak.h:124
buf
void * buf
Definition:
avisynth_c.h:553
TAKStreamInfo::frame_samples
int frame_samples
Definition:
tak.h:137
TAK_METADATA_END
Definition:
tak.h:106
TAKStreamInfo::sample_rate
int sample_rate
Definition:
tak.h:133
TAKStreamInfo::frame_num
int frame_num
Definition:
tak.h:136
TAKFrameSizeType
TAKFrameSizeType
Definition:
tak.h:116
TAK_METADATA_STREAMINFO
Definition:
tak.h:107
GetBitContext
Definition:
get_bits.h:54
TAK_FST_188ms
Definition:
tak.h:119
TAK_FST_1024
Definition:
tak.h:125
avpriv_tak_parse_streaminfo
void avpriv_tak_parse_streaminfo(GetBitContext *gb, TAKStreamInfo *s)
Parse the Streaminfo metadata block.
Definition:
tak.c:91
TAK_METADATA_PADDING
Definition:
tak.h:111
Generated on Wed Jun 10 2015 01:56:49 for FFmpeg by
1.8.6