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
#include "
avcodec.h
"
33
#include "
get_bits.h
"
34
35
#define TAK_FORMAT_DATA_TYPE_BITS 3
36
#define TAK_FORMAT_SAMPLE_RATE_BITS 18
37
#define TAK_FORMAT_BPS_BITS 5
38
#define TAK_FORMAT_CHANNEL_BITS 4
39
#define TAK_FORMAT_VALID_BITS 5
40
#define TAK_FORMAT_CH_LAYOUT_BITS 6
41
#define TAK_SIZE_FRAME_DURATION_BITS 4
42
#define TAK_SIZE_SAMPLES_NUM_BITS 35
43
#define TAK_LAST_FRAME_POS_BITS 40
44
#define TAK_LAST_FRAME_SIZE_BITS 24
45
#define TAK_ENCODER_CODEC_BITS 6
46
#define TAK_ENCODER_PROFILE_BITS 4
47
#define TAK_ENCODER_VERSION_BITS 24
48
#define TAK_SAMPLE_RATE_MIN 6000
49
#define TAK_CHANNELS_MIN 1
50
#define TAK_BPS_MIN 8
51
#define TAK_FRAME_HEADER_FLAGS_BITS 3
52
#define TAK_FRAME_HEADER_SYNC_ID 0xA0FF
53
#define TAK_FRAME_HEADER_SYNC_ID_BITS 16
54
#define TAK_FRAME_HEADER_SAMPLE_COUNT_BITS 14
55
#define TAK_FRAME_HEADER_NO_BITS 21
56
#define TAK_FRAME_DURATION_QUANT_SHIFT 5
57
#define TAK_CRC24_BITS 24
58
59
60
#define TAK_FRAME_FLAG_IS_LAST 0x1
61
#define TAK_FRAME_FLAG_HAS_INFO 0x2
62
#define TAK_FRAME_FLAG_HAS_METADATA 0x4
63
64
#define TAK_MAX_CHANNELS (1 << TAK_FORMAT_CHANNEL_BITS)
65
66
#define TAK_MIN_FRAME_HEADER_BITS (TAK_FRAME_HEADER_SYNC_ID_BITS + \
67
TAK_FRAME_HEADER_FLAGS_BITS + \
68
TAK_FRAME_HEADER_NO_BITS + \
69
TAK_CRC24_BITS)
70
71
#define TAK_MIN_FRAME_HEADER_LAST_BITS (TAK_MIN_FRAME_HEADER_BITS + 2 + \
72
TAK_FRAME_HEADER_SAMPLE_COUNT_BITS)
73
74
#define TAK_ENCODER_BITS (TAK_ENCODER_CODEC_BITS + \
75
TAK_ENCODER_PROFILE_BITS)
76
77
#define TAK_SIZE_BITS (TAK_SIZE_SAMPLES_NUM_BITS + \
78
TAK_SIZE_FRAME_DURATION_BITS)
79
80
#define TAK_FORMAT_BITS (TAK_FORMAT_DATA_TYPE_BITS + \
81
TAK_FORMAT_SAMPLE_RATE_BITS + \
82
TAK_FORMAT_BPS_BITS + \
83
TAK_FORMAT_CHANNEL_BITS + 1 + \
84
TAK_FORMAT_VALID_BITS + 1 + \
85
TAK_FORMAT_CH_LAYOUT_BITS * \
86
TAK_MAX_CHANNELS)
87
88
#define TAK_STREAMINFO_BITS (TAK_ENCODER_BITS + \
89
TAK_SIZE_BITS + \
90
TAK_FORMAT_BITS)
91
92
#define TAK_MAX_FRAME_HEADER_BITS (TAK_MIN_FRAME_HEADER_LAST_BITS + \
93
TAK_STREAMINFO_BITS + 31)
94
95
#define TAK_STREAMINFO_BYTES ((TAK_STREAMINFO_BITS + 7) / 8)
96
#define TAK_MAX_FRAME_HEADER_BYTES ((TAK_MAX_FRAME_HEADER_BITS + 7) / 8)
97
#define TAK_MIN_FRAME_HEADER_BYTES ((TAK_MIN_FRAME_HEADER_BITS + 7) / 8)
98
99
enum
TAKCodecType
{
100
TAK_CODEC_MONO_STEREO
= 2,
101
TAK_CODEC_MULTICHANNEL
= 4,
102
};
103
104
enum
TAKMetaDataType
{
105
TAK_METADATA_END
= 0,
106
TAK_METADATA_STREAMINFO
,
107
TAK_METADATA_SEEKTABLE
,
108
TAK_METADATA_SIMPLE_WAVE_DATA
,
109
TAK_METADATA_ENCODER
,
110
TAK_METADATA_PADDING
,
111
TAK_METADATA_MD5
,
112
TAK_METADATA_LAST_FRAME
,
113
};
114
115
enum
TAKFrameSizeType
{
116
TAK_FST_94ms
= 0,
117
TAK_FST_125ms
,
118
TAK_FST_188ms
,
119
TAK_FST_250ms
,
120
TAK_FST_4096
,
121
TAK_FST_8192
,
122
TAK_FST_16384
,
123
TAK_FST_512
,
124
TAK_FST_1024
,
125
TAK_FST_2048
,
126
};
127
128
typedef
struct
TAKStreamInfo
{
129
int
flags
;
130
enum
TAKCodecType
codec
;
131
int
data_type
;
132
int
sample_rate
;
133
int
channels
;
134
int
bps
;
135
int
frame_num
;
136
int
frame_samples
;
137
int
last_frame_samples
;
138
uint64_t
ch_layout
;
139
int64_t
samples
;
140
}
TAKStreamInfo
;
141
142
int
ff_tak_check_crc
(
const
uint8_t
*
buf
,
unsigned
int
buf_size);
143
144
/**
145
* Parse the Streaminfo metadata block.
146
* @param[out] s storage for parsed information
147
* @param[in] buf input buffer
148
* @param[in] size size of input buffer in bytes
149
* @return non-zero on error, 0 if OK
150
*/
151
int
avpriv_tak_parse_streaminfo
(
TAKStreamInfo
*
s
,
const
uint8_t
*
buf
,
int
size
);
152
153
void
ff_tak_parse_streaminfo
(
TAKStreamInfo
*
s
,
GetBitContext
*gb);
154
155
/**
156
* Validate and decode a frame header.
157
* @param avctx AVCodecContext to use as av_log() context
158
* @param[in] gb GetBitContext from which to read frame header
159
* @param[out] s frame information
160
* @param log_level_offset log level offset, can be used to silence
161
* error messages.
162
* @return non-zero on error, 0 if OK
163
*/
164
int
ff_tak_decode_frame_header
(
AVCodecContext
*avctx,
GetBitContext
*gb,
165
TAKStreamInfo
*
s
,
int
log_level_offset);
166
#endif
/* AVCODEC_TAK_H */
TAK_METADATA_SIMPLE_WAVE_DATA
Definition:
tak.h:108
TAK_FST_8192
Definition:
tak.h:121
s
const char * s
Definition:
avisynth_c.h:768
TAKStreamInfo::channels
int channels
Definition:
tak.h:133
TAK_FST_2048
Definition:
tak.h:125
TAK_FST_125ms
Definition:
tak.h:117
TAK_FST_16384
Definition:
tak.h:122
TAKStreamInfo::ch_layout
uint64_t ch_layout
Definition:
tak.h:138
TAKMetaDataType
TAKMetaDataType
Definition:
tak.h:104
TAK_METADATA_ENCODER
Definition:
tak.h:109
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:141
uint8_t
uint8_t
Definition:
audio_convert.c:194
TAKStreamInfo::flags
int flags
Definition:
tak.h:129
TAK_FST_4096
Definition:
tak.h:120
TAK_CODEC_MULTICHANNEL
Definition:
tak.h:101
avpriv_tak_parse_streaminfo
int avpriv_tak_parse_streaminfo(TAKStreamInfo *s, const uint8_t *buf, int size)
Parse the Streaminfo metadata block.
Definition:
tak.c:128
get_bits.h
bitstream reader API header.
size
ptrdiff_t size
Definition:
opengl_enc.c:101
TAKStreamInfo::data_type
int data_type
Definition:
tak.h:131
ff_tak_check_crc
int ff_tak_check_crc(const uint8_t *buf, unsigned int buf_size)
Definition:
tak.c:77
TAK_METADATA_LAST_FRAME
Definition:
tak.h:112
TAKStreamInfo::last_frame_samples
int last_frame_samples
Definition:
tak.h:137
TAKStreamInfo::bps
int bps
Definition:
tak.h:134
TAKStreamInfo::samples
int64_t samples
Definition:
tak.h:139
TAK_METADATA_MD5
Definition:
tak.h:111
TAK_CODEC_MONO_STEREO
Definition:
tak.h:100
TAK_METADATA_SEEKTABLE
Definition:
tak.h:107
TAK_FST_250ms
Definition:
tak.h:119
TAKCodecType
TAKCodecType
Definition:
tak.h:99
TAK_FST_94ms
Definition:
tak.h:116
TAKStreamInfo
Definition:
tak.h:128
avcodec.h
Libavcodec external API header.
AVCodecContext
main external API structure.
Definition:
avcodec.h:1518
TAKStreamInfo::codec
enum TAKCodecType codec
Definition:
tak.h:130
TAK_FST_512
Definition:
tak.h:123
buf
void * buf
Definition:
avisynth_c.h:690
TAKStreamInfo::frame_samples
int frame_samples
Definition:
tak.h:136
TAK_METADATA_END
Definition:
tak.h:105
TAKStreamInfo::sample_rate
int sample_rate
Definition:
tak.h:132
TAKStreamInfo::frame_num
int frame_num
Definition:
tak.h:135
TAKFrameSizeType
TAKFrameSizeType
Definition:
tak.h:115
TAK_METADATA_STREAMINFO
Definition:
tak.h:106
GetBitContext
Definition:
get_bits.h:56
TAK_FST_188ms
Definition:
tak.h:118
TAK_FST_1024
Definition:
tak.h:124
ff_tak_parse_streaminfo
void ff_tak_parse_streaminfo(TAKStreamInfo *s, GetBitContext *gb)
Definition:
tak.c:93
TAK_METADATA_PADDING
Definition:
tak.h:110
Generated on Sun May 13 2018 02:03:55 for FFmpeg by
1.8.6