FFmpeg
4.0
libavcodec
opusenc_psy.h
Go to the documentation of this file.
1
/*
2
* Opus encoder
3
* Copyright (c) 2017 Rostislav Pehlivanov <atomnuker@gmail.com>
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
#ifndef AVCODEC_OPUSENC_PSY_H
23
#define AVCODEC_OPUSENC_PSY_H
24
25
#include "
opusenc.h
"
26
#include "
opusenc_utils.h
"
27
#include "
libavfilter/window_func.h
"
28
29
/* Each step is 2.5ms */
30
typedef
struct
OpusPsyStep
{
31
int
index
;
/* Current index */
32
int
silence
;
33
float
energy
[
OPUS_MAX_CHANNELS
][
CELT_MAX_BANDS
];
/* Masking effects included */
34
float
tone
[
OPUS_MAX_CHANNELS
][
CELT_MAX_BANDS
];
/* Tonality */
35
float
stereo
[
CELT_MAX_BANDS
];
/* IS/MS compatibility */
36
float
change_amp
[
OPUS_MAX_CHANNELS
][
CELT_MAX_BANDS
];
/* Jump over last frame */
37
float
total_change
;
/* Total change */
38
39
float
*
bands
[
OPUS_MAX_CHANNELS
][
CELT_MAX_BANDS
];
40
float
coeffs
[
OPUS_MAX_CHANNELS
][
OPUS_BLOCK_SIZE
(
CELT_BLOCK_960
)];
41
}
OpusPsyStep
;
42
43
typedef
struct
OpusBandExcitation
{
44
float
excitation
;
45
float
excitation_dist
;
46
float
excitation_init
;
47
}
OpusBandExcitation
;
48
49
typedef
struct
PsyChain
{
50
int
start
;
51
int
end
;
52
}
PsyChain
;
53
54
typedef
struct
OpusPsyContext
{
55
AVCodecContext
*
avctx
;
56
AVFloatDSPContext
*
dsp
;
57
struct
FFBufQueue
*
bufqueue
;
58
OpusEncOptions
*
options
;
59
60
PsyChain
cs[128];
61
int
cs_num
;
62
63
OpusBandExcitation
ex[
OPUS_MAX_CHANNELS
][
CELT_MAX_BANDS
];
64
FFBesselFilter
bfilter_lo[
OPUS_MAX_CHANNELS
][
CELT_MAX_BANDS
];
65
FFBesselFilter
bfilter_hi[
OPUS_MAX_CHANNELS
][
CELT_MAX_BANDS
];
66
67
OpusPsyStep
*steps[
FF_BUFQUEUE_SIZE
+ 1];
68
int
max_steps
;
69
70
float
*
window
[
CELT_BLOCK_NB
];
71
MDCT15Context
*mdct[
CELT_BLOCK_NB
];
72
int
bsize_analysis
;
73
74
DECLARE_ALIGNED
(32,
float
, scratch)[2048];
75
76
/* Stats */
77
float
rc_waste
;
78
float
avg_is_band
;
79
int64_t
dual_stereo_used
;
80
int64_t
total_packets_out
;
81
82
/* State */
83
FFBesselFilter
lambda_lp
;
84
OpusPacketInfo
p
;
85
int
redo_analysis
;
86
int
buffered_steps
;
87
int
steps_to_process
;
88
int
eof
;
89
float
lambda
;
90
int
*
inflection_points
;
91
int
inflection_points_count
;
92
}
OpusPsyContext
;
93
94
int
ff_opus_psy_process
(
OpusPsyContext
*
s
,
OpusPacketInfo
*p);
95
void
ff_opus_psy_celt_frame_init
(
OpusPsyContext
*
s
,
CeltFrame
*f,
int
index
);
96
int
ff_opus_psy_celt_frame_process
(
OpusPsyContext
*
s
,
CeltFrame
*f,
int
index
);
97
void
ff_opus_psy_postencode_update
(
OpusPsyContext
*
s
,
CeltFrame
*f,
OpusRangeCoder
*rc);
98
99
int
ff_opus_psy_init
(
OpusPsyContext
*
s
,
AVCodecContext
*avctx,
100
struct
FFBufQueue
*bufqueue,
OpusEncOptions
*
options
);
101
void
ff_opus_psy_signal_eof
(
OpusPsyContext
*
s
);
102
int
ff_opus_psy_end
(
OpusPsyContext
*
s
);
103
104
#endif
/* AVCODEC_OPUSENC_PSY_H */
OpusPsyContext::avctx
AVCodecContext * avctx
Definition:
opusenc_psy.h:55
OpusPsyContext::total_packets_out
int64_t total_packets_out
Definition:
opusenc_psy.h:80
s
const char * s
Definition:
avisynth_c.h:768
OpusPsyContext::bufqueue
struct FFBufQueue * bufqueue
Definition:
opusenc_psy.h:57
opusenc.h
OpusPsyContext::cs_num
int cs_num
Definition:
opusenc_psy.h:61
PsyChain::start
int start
Definition:
opusenc_psy.h:50
OpusPsyContext::buffered_steps
int buffered_steps
Definition:
opusenc_psy.h:86
ff_opus_psy_signal_eof
void ff_opus_psy_signal_eof(OpusPsyContext *s)
Definition:
opusenc_psy.c:588
FFBufQueue
Structure holding the queue.
Definition:
bufferqueue.h:49
OpusPsyStep::coeffs
float coeffs[OPUS_MAX_CHANNELS][OPUS_BLOCK_SIZE(CELT_BLOCK_960)]
Definition:
opusenc_psy.h:40
OpusBandExcitation::excitation
float excitation
Definition:
opusenc_psy.h:44
OpusPsyContext::options
OpusEncOptions * options
Definition:
opusenc_psy.h:58
OpusPsyStep::silence
int silence
Definition:
opusenc_psy.h:32
OpusPsyContext::inflection_points
int * inflection_points
Definition:
opusenc_psy.h:90
OpusBandExcitation::excitation_init
float excitation_init
Definition:
opusenc_psy.h:46
OpusPsyStep::stereo
float stereo[CELT_MAX_BANDS]
Definition:
opusenc_psy.h:35
ff_opus_psy_celt_frame_process
int ff_opus_psy_celt_frame_process(OpusPsyContext *s, CeltFrame *f, int index)
Definition:
opusenc_psy.c:455
PsyChain
Definition:
opusenc_psy.h:49
opusenc_utils.h
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Definition:
mem.h:112
ff_opus_psy_init
int ff_opus_psy_init(OpusPsyContext *s, AVCodecContext *avctx, struct FFBufQueue *bufqueue, OpusEncOptions *options)
Definition:
opusenc_psy.c:516
CELT_BLOCK_960
Definition:
opus_celt.h:60
OpusPacketInfo
Definition:
opusenc.h:47
ff_opus_psy_end
int ff_opus_psy_end(OpusPsyContext *s)
Definition:
opusenc_psy.c:593
OpusPsyContext::dsp
AVFloatDSPContext * dsp
Definition:
opusenc_psy.h:56
OPUS_BLOCK_SIZE
#define OPUS_BLOCK_SIZE(x)
Definition:
opusenc.h:39
FF_BUFQUEUE_SIZE
#define FF_BUFQUEUE_SIZE
Definition:
audiotoolboxenc.c:25
OpusPsyStep::total_change
float total_change
Definition:
opusenc_psy.h:37
OpusPsyContext::eof
int eof
Definition:
opusenc_psy.h:88
OpusPsyContext
Definition:
opusenc_psy.h:54
OpusPsyContext::redo_analysis
int redo_analysis
Definition:
opusenc_psy.h:85
OpusPsyContext::rc_waste
float rc_waste
Definition:
opusenc_psy.h:77
OpusPsyStep::bands
float * bands[OPUS_MAX_CHANNELS][CELT_MAX_BANDS]
Definition:
opusenc_psy.h:39
window
static SDL_Window * window
Definition:
ffplay.c:362
OpusPsyContext::lambda_lp
FFBesselFilter lambda_lp
Definition:
opusenc_psy.h:83
OpusPsyStep::tone
float tone[OPUS_MAX_CHANNELS][CELT_MAX_BANDS]
Definition:
opusenc_psy.h:34
OpusPsyStep::change_amp
float change_amp[OPUS_MAX_CHANNELS][CELT_MAX_BANDS]
Definition:
opusenc_psy.h:36
OpusPsyContext::lambda
float lambda
Definition:
opusenc_psy.h:89
OpusPsyContext::avg_is_band
float avg_is_band
Definition:
opusenc_psy.h:78
OpusPsyContext::inflection_points_count
int inflection_points_count
Definition:
opusenc_psy.h:91
AVFloatDSPContext
Definition:
float_dsp.h:24
OpusRangeCoder
Definition:
opus_rc.h:40
FFBesselFilter
Definition:
opusenc_utils.h:27
CELT_MAX_BANDS
#define CELT_MAX_BANDS
Definition:
opus.h:45
AVCodecContext
main external API structure.
Definition:
avcodec.h:1518
PsyChain::end
int end
Definition:
opusenc_psy.h:51
OpusPsyContext::dual_stereo_used
int64_t dual_stereo_used
Definition:
opusenc_psy.h:79
OpusPsyContext::p
OpusPacketInfo p
Definition:
opusenc_psy.h:84
CELT_BLOCK_NB
Definition:
opus_celt.h:62
OPUS_MAX_CHANNELS
#define OPUS_MAX_CHANNELS
Definition:
opusenc.h:34
OpusPsyContext::max_steps
int max_steps
Definition:
opusenc_psy.h:68
ff_opus_psy_postencode_update
void ff_opus_psy_postencode_update(OpusPsyContext *s, CeltFrame *f, OpusRangeCoder *rc)
Definition:
opusenc_psy.c:479
options
const OptionDef options[]
Definition:
ffmpeg_opt.c:3292
OpusPsyStep::index
int index
Definition:
opusenc_psy.h:31
CeltFrame
Definition:
opus_celt.h:92
OpusBandExcitation::excitation_dist
float excitation_dist
Definition:
opusenc_psy.h:45
MDCT15Context
Definition:
mdct15.h:28
ff_opus_psy_celt_frame_init
void ff_opus_psy_celt_frame_init(OpusPsyContext *s, CeltFrame *f, int index)
Definition:
opusenc_psy.c:254
window_func.h
OpusPsyStep::energy
float energy[OPUS_MAX_CHANNELS][CELT_MAX_BANDS]
Definition:
opusenc_psy.h:33
ff_opus_psy_process
int ff_opus_psy_process(OpusPsyContext *s, OpusPacketInfo *p)
Definition:
opusenc_psy.c:223
OpusEncOptions
Definition:
opusenc.h:43
OpusPsyStep
Definition:
opusenc_psy.h:30
OpusBandExcitation
Definition:
opusenc_psy.h:43
OpusPsyContext::bsize_analysis
int bsize_analysis
Definition:
opusenc_psy.h:72
OpusPsyContext::steps_to_process
int steps_to_process
Definition:
opusenc_psy.h:87
Generated on Tue May 22 2018 07:06:39 for FFmpeg by
1.8.13