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
avpriv_flac_parse_streaminfo
(
AVCodecContext
*avctx,
struct
FLACStreaminfo
*
s
,
100
const
uint8_t
*
buffer
);
101
102
/**
103
* Validate the FLAC extradata.
104
* @param[in] avctx codec context containing the extradata.
105
* @param[out] format extradata format.
106
* @param[out] streaminfo_start pointer to start of 34-byte STREAMINFO data.
107
* @return 1 if valid, 0 if not valid.
108
*/
109
int
avpriv_flac_is_extradata_valid
(
AVCodecContext
*avctx,
110
enum
FLACExtradataFormat
*format,
111
uint8_t
**streaminfo_start);
112
113
#if LIBAVCODEC_VERSION_MAJOR < 56
114
void
avpriv_flac_parse_block_header
(
const
uint8_t
*block_header,
115
int
*last,
int
*
type
,
int
*
size
);
116
#endif
117
118
/**
119
* Calculate an estimate for the maximum frame size based on verbatim mode.
120
* @param blocksize block size, in samples
121
* @param ch number of channels
122
* @param bps bits-per-sample
123
*/
124
int
ff_flac_get_max_frame_size
(
int
blocksize,
int
ch,
int
bps
);
125
126
/**
127
* Validate and decode a frame header.
128
* @param avctx AVCodecContext to use as av_log() context
129
* @param gb GetBitContext from which to read frame header
130
* @param[out] fi frame information
131
* @param log_level_offset log level offset. can be used to silence error messages.
132
* @return non-zero on error, 0 if ok
133
*/
134
int
ff_flac_decode_frame_header
(
AVCodecContext
*avctx,
GetBitContext
*gb,
135
FLACFrameInfo
*
fi
,
int
log_level_offset);
136
137
void
ff_flac_set_channel_layout
(
AVCodecContext
*avctx);
138
139
/**
140
* Parse the metadata block parameters from the header.
141
* @param[in] block_header header data, at least 4 bytes
142
* @param[out] last indicator for last metadata block
143
* @param[out] type metadata block type
144
* @param[out] size metadata block size
145
*/
146
static
av_always_inline
void
flac_parse_block_header
(
const
uint8_t
*block_header,
147
int
*last,
int
*
type
,
int
*
size
)
148
{
149
int
tmp = bytestream_get_byte(&block_header);
150
if
(last)
151
*last = tmp & 0x80;
152
if
(type)
153
*type = tmp & 0x7F;
154
if
(size)
155
*size = bytestream_get_be24(&block_header);
156
}
157
158
#endif
/* AVCODEC_FLAC_H */
Generated on Sun Jul 20 2014 23:05:46 for FFmpeg by
1.8.2