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
flac.h
Go to the documentation of this file.
1
/*
2
* FLAC (Free Lossless Audio Codec) decoder/demuxer common functions
3
* Copyright (c) 2008 Justin Ruggles
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
* FLAC (Free Lossless Audio Codec) decoder/demuxer common functions
25
*/
26
27
#ifndef AVCODEC_FLAC_H
28
#define AVCODEC_FLAC_H
29
30
#include "
avcodec.h
"
31
#include "
bytestream.h
"
32
#include "
get_bits.h
"
33
34
#define FLAC_STREAMINFO_SIZE 34
35
#define FLAC_MAX_CHANNELS 8
36
#define FLAC_MIN_BLOCKSIZE 16
37
#define FLAC_MAX_BLOCKSIZE 65535
38
#define FLAC_MIN_FRAME_SIZE 11
39
40
enum
{
41
FLAC_CHMODE_INDEPENDENT
= 0,
42
FLAC_CHMODE_LEFT_SIDE
= 1,
43
FLAC_CHMODE_RIGHT_SIDE
= 2,
44
FLAC_CHMODE_MID_SIDE
= 3,
45
};
46
47
enum
{
48
FLAC_METADATA_TYPE_STREAMINFO
= 0,
49
FLAC_METADATA_TYPE_PADDING
,
50
FLAC_METADATA_TYPE_APPLICATION
,
51
FLAC_METADATA_TYPE_SEEKTABLE
,
52
FLAC_METADATA_TYPE_VORBIS_COMMENT
,
53
FLAC_METADATA_TYPE_CUESHEET
,
54
FLAC_METADATA_TYPE_PICTURE
,
55
FLAC_METADATA_TYPE_INVALID
= 127
56
};
57
58
enum
FLACExtradataFormat
{
59
FLAC_EXTRADATA_FORMAT_STREAMINFO
= 0,
60
FLAC_EXTRADATA_FORMAT_FULL_HEADER
= 1
61
};
62
63
#define FLACCOMMONINFO \
64
int samplerate;
/**< sample rate */
\
65
int channels;
/**< number of channels */
\
66
int bps;
/**< bits-per-sample */
\
67
68
/**
69
* Data needed from the Streaminfo header for use by the raw FLAC demuxer
70
* and/or the FLAC decoder.
71
*/
72
#define FLACSTREAMINFO \
73
FLACCOMMONINFO \
74
int max_blocksize;
/**< maximum block size, in samples */
\
75
int max_framesize;
/**< maximum frame size, in bytes */
\
76
int64_t samples;
/**< total number of samples */
\
77
78
typedef
struct
FLACStreaminfo
{
79
FLACSTREAMINFO
80
}
FLACStreaminfo
;
81
82
typedef
struct
FLACFrameInfo
{
83
FLACCOMMONINFO
84
int
blocksize
;
/**< block size of the frame */
85
int
ch_mode
;
/**< channel decorrelation mode */
86
int64_t
frame_or_sample_num
;
/**< frame number or sample number */
87
int
is_var_size
;
/**< specifies if the stream uses variable
88
block sizes or a fixed block size;
89
also determines the meaning of
90
frame_or_sample_num */
91
}
FLACFrameInfo
;
92
93
/**
94
* Parse the Streaminfo metadata block
95
* @param[out] avctx codec context to set basic stream parameters
96
* @param[out] s where parsed information is stored
97
* @param[in] buffer pointer to start of 34-byte streaminfo data
98
*/
99
void
ff_flac_parse_streaminfo
(
AVCodecContext
*avctx,
struct
FLACStreaminfo
*
s
,
100
const
uint8_t
*
buffer
);
101
102
#if LIBAVCODEC_VERSION_MAJOR < 57
103
void
avpriv_flac_parse_streaminfo
(
AVCodecContext
*avctx,
struct
FLACStreaminfo
*
s
,
104
const
uint8_t
*
buffer
);
105
int
avpriv_flac_is_extradata_valid
(
AVCodecContext
*avctx,
106
enum
FLACExtradataFormat
*format,
107
uint8_t
**streaminfo_start);
108
#endif
109
110
/**
111
* Validate the FLAC extradata.
112
* @param[in] avctx codec context containing the extradata.
113
* @param[out] format extradata format.
114
* @param[out] streaminfo_start pointer to start of 34-byte STREAMINFO data.
115
* @return 1 if valid, 0 if not valid.
116
*/
117
int
ff_flac_is_extradata_valid
(
AVCodecContext
*avctx,
118
enum
FLACExtradataFormat
*format,
119
uint8_t
**streaminfo_start);
120
121
/**
122
* Calculate an estimate for the maximum frame size based on verbatim mode.
123
* @param blocksize block size, in samples
124
* @param ch number of channels
125
* @param bps bits-per-sample
126
*/
127
int
ff_flac_get_max_frame_size
(
int
blocksize,
int
ch,
int
bps
);
128
129
/**
130
* Validate and decode a frame header.
131
* @param avctx AVCodecContext to use as av_log() context
132
* @param gb GetBitContext from which to read frame header
133
* @param[out] fi frame information
134
* @param log_level_offset log level offset. can be used to silence error messages.
135
* @return non-zero on error, 0 if ok
136
*/
137
int
ff_flac_decode_frame_header
(
AVCodecContext
*avctx,
GetBitContext
*gb,
138
FLACFrameInfo
*
fi
,
int
log_level_offset);
139
140
void
ff_flac_set_channel_layout
(
AVCodecContext
*avctx);
141
142
/**
143
* Parse the metadata block parameters from the header.
144
* @param[in] block_header header data, at least 4 bytes
145
* @param[out] last indicator for last metadata block
146
* @param[out] type metadata block type
147
* @param[out] size metadata block size
148
*/
149
static
av_always_inline
void
flac_parse_block_header
(
const
uint8_t
*block_header,
150
int
*last,
int
*
type
,
int
*
size
)
151
{
152
int
tmp = bytestream_get_byte(&block_header);
153
if
(last)
154
*last = tmp & 0x80;
155
if
(type)
156
*type = tmp & 0x7F;
157
if
(size)
158
*size = bytestream_get_be24(&block_header);
159
}
160
161
#endif
/* AVCODEC_FLAC_H */
Generated on Fri Dec 5 2014 04:41:54 for FFmpeg by
1.8.2