FFmpeg
libavcodec
dolby_e_parser.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2017 foo86
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include "
dolby_e.h
"
22
#include "
get_bits.h
"
23
#include "
put_bits.h
"
24
25
typedef
struct
DBEParseContext
{
26
DBEContext
dectx
;
27
}
DBEParseContext
;
28
29
static
int
dolby_e_parse
(
AVCodecParserContext
*
s2
,
AVCodecContext
*avctx,
30
const
uint8_t
**poutbuf,
int
*poutbuf_size,
31
const
uint8_t
*buf,
int
buf_size)
32
{
33
DBEParseContext
*
s1
=
s2
->priv_data;
34
DBEContext
*
s
= &
s1
->dectx;
35
int
ret
;
36
37
if
((
ret
=
ff_dolby_e_parse_header
(
s
, buf, buf_size)) < 0)
38
goto
end;
39
40
s2
->duration =
FRAME_SAMPLES
;
41
switch
(
s
->metadata.nb_channels) {
42
case
4:
43
avctx->
channel_layout
=
AV_CH_LAYOUT_4POINT0
;
44
break
;
45
case
6:
46
avctx->
channel_layout
=
AV_CH_LAYOUT_5POINT1
;
47
break
;
48
case
8:
49
avctx->
channel_layout
=
AV_CH_LAYOUT_7POINT1
;
50
break
;
51
}
52
53
avctx->
channels
=
s
->metadata.nb_channels;
54
avctx->
sample_rate
=
s
->metadata.sample_rate;
55
avctx->
sample_fmt
=
AV_SAMPLE_FMT_FLTP
;
56
57
end:
58
/* always return the full packet. this parser isn't doing any splitting or
59
combining, only packet analysis */
60
*poutbuf = buf;
61
*poutbuf_size = buf_size;
62
return
buf_size;
63
}
64
65
AVCodecParser
ff_dolby_e_parser
= {
66
.
codec_ids
= {
AV_CODEC_ID_DOLBY_E
},
67
.priv_data_size =
sizeof
(
DBEParseContext
),
68
.parser_parse =
dolby_e_parse
,
69
};
AV_SAMPLE_FMT_FLTP
@ AV_SAMPLE_FMT_FLTP
float, planar
Definition:
samplefmt.h:69
AVCodecContext::channel_layout
uint64_t channel_layout
Audio channel layout.
Definition:
avcodec.h:1247
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition:
avcodec.h:1196
ff_dolby_e_parser
AVCodecParser ff_dolby_e_parser
Definition:
dolby_e_parser.c:65
ff_dolby_e_parse_header
int ff_dolby_e_parse_header(DBEContext *s, const uint8_t *buf, int buf_size)
Initialize DBEContext and parse Dolby E metadata.
Definition:
dolby_e_parse.c:97
FRAME_SAMPLES
#define FRAME_SAMPLES
Definition:
dolby_e.h:27
DBEContext
Definition:
dolby_e.h:70
s
#define s(width, name)
Definition:
cbs_vp9.c:257
s1
#define s1
Definition:
regdef.h:38
get_bits.h
AV_CODEC_ID_DOLBY_E
@ AV_CODEC_ID_DOLBY_E
Definition:
codec_id.h:509
AVCodecParser::codec_ids
int codec_ids[5]
Definition:
avcodec.h:3545
AV_CH_LAYOUT_5POINT1
#define AV_CH_LAYOUT_5POINT1
Definition:
channel_layout.h:101
s2
#define s2
Definition:
regdef.h:39
AVCodecContext::sample_fmt
enum AVSampleFormat sample_fmt
audio sample format
Definition:
avcodec.h:1204
AVCodecContext::channels
int channels
number of audio channels
Definition:
avcodec.h:1197
AV_CH_LAYOUT_7POINT1
#define AV_CH_LAYOUT_7POINT1
Definition:
channel_layout.h:112
uint8_t
uint8_t
Definition:
audio_convert.c:194
AVCodecParserContext
Definition:
avcodec.h:3377
ret
ret
Definition:
filter_design.txt:187
AVCodecContext
main external API structure.
Definition:
avcodec.h:536
dolby_e_parse
static int dolby_e_parse(AVCodecParserContext *s2, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
Definition:
dolby_e_parser.c:29
AVCodecParser
Definition:
avcodec.h:3544
AV_CH_LAYOUT_4POINT0
#define AV_CH_LAYOUT_4POINT0
Definition:
channel_layout.h:96
dolby_e.h
DBEParseContext::dectx
DBEContext dectx
Definition:
dolby_e_parser.c:26
put_bits.h
DBEParseContext
Definition:
dolby_e_parser.c:25
Generated on Wed Aug 24 2022 21:33:52 for FFmpeg by
1.8.17