Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
4d8d16b5
Commit
4d8d16b5
authored
Aug 05, 2013
by
Diego Biurrun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
twinvq: Prefix enums and defines shared with VoxWare MetaSound
parent
bc909626
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
76 additions
and
71 deletions
+76
-71
twinvq.c
libavcodec/twinvq.c
+76
-71
No files found.
libavcodec/twinvq.c
View file @
4d8d16b5
...
@@ -33,26 +33,26 @@
...
@@ -33,26 +33,26 @@
#include "twinvq_data.h"
#include "twinvq_data.h"
enum
TwinVQFrameType
{
enum
TwinVQFrameType
{
FT_SHORT
=
0
,
///< Short frame (divided in n sub-blocks)
TWINVQ_
FT_SHORT
=
0
,
///< Short frame (divided in n sub-blocks)
FT_MEDIUM
,
///< Medium frame (divided in m<n sub-blocks)
TWINVQ_
FT_MEDIUM
,
///< Medium frame (divided in m<n sub-blocks)
FT_LONG
,
///< Long frame (single sub-block + PPC)
TWINVQ_
FT_LONG
,
///< Long frame (single sub-block + PPC)
FT_PPC
,
///< Periodic Peak Component (part of the long frame)
TWINVQ_
FT_PPC
,
///< Periodic Peak Component (part of the long frame)
};
};
#define PPC_SHAPE_CB_SIZE 64
#define
TWINVQ_
PPC_SHAPE_CB_SIZE 64
#define PPC_SHAPE_LEN_MAX 60
#define
TWINVQ_
PPC_SHAPE_LEN_MAX 60
#define SUB_AMP_MAX 4500.0
#define
TWINVQ_
SUB_AMP_MAX 4500.0
#define MULAW_MU 100.0
#define
TWINVQ_
MULAW_MU 100.0
#define GAIN_BITS 8
#define
TWINVQ_
GAIN_BITS 8
#define AMP_MAX 13000.0
#define
TWINVQ_
AMP_MAX 13000.0
#define SUB_GAIN_BITS 5
#define
TWINVQ_
SUB_GAIN_BITS 5
#define WINDOW_TYPE_BITS 4
#define
TWINVQ_
WINDOW_TYPE_BITS 4
#define PGAIN_MU 200
#define
TWINVQ_
PGAIN_MU 200
#define LSP_COEFS_MAX 20
#define
TWINVQ_
LSP_COEFS_MAX 20
#define LSP_SPLIT_MAX 4
#define
TWINVQ_
LSP_SPLIT_MAX 4
#define CHANNELS_MAX 2
#define
TWINVQ_
CHANNELS_MAX 2
#define SUBBLOCKS_MAX 16
#define
TWINVQ_
SUBBLOCKS_MAX 16
#define BARK_N_COEF_MAX 4
#define
TWINVQ_
BARK_N_COEF_MAX 4
/**
/**
* Parameters and tables that are different for each frame type
* Parameters and tables that are different for each frame type
...
@@ -82,20 +82,20 @@ typedef struct TwinVQFrameData {
...
@@ -82,20 +82,20 @@ typedef struct TwinVQFrameData {
enum
TwinVQFrameType
ftype
;
enum
TwinVQFrameType
ftype
;
uint8_t
main_coeffs
[
1024
];
uint8_t
main_coeffs
[
1024
];
uint8_t
ppc_coeffs
[
PPC_SHAPE_LEN_MAX
];
uint8_t
ppc_coeffs
[
TWINVQ_
PPC_SHAPE_LEN_MAX
];
uint8_t
gain_bits
[
CHANNELS_MAX
];
uint8_t
gain_bits
[
TWINVQ_
CHANNELS_MAX
];
uint8_t
sub_gain_bits
[
CHANNELS_MAX
*
SUBBLOCKS_MAX
];
uint8_t
sub_gain_bits
[
TWINVQ_CHANNELS_MAX
*
TWINVQ_
SUBBLOCKS_MAX
];
uint8_t
bark1
[
CHANNELS_MAX
][
SUBBLOCKS_MAX
][
BARK_N_COEF_MAX
];
uint8_t
bark1
[
TWINVQ_CHANNELS_MAX
][
TWINVQ_SUBBLOCKS_MAX
][
TWINVQ_
BARK_N_COEF_MAX
];
uint8_t
bark_use_hist
[
CHANNELS_MAX
][
SUBBLOCKS_MAX
];
uint8_t
bark_use_hist
[
TWINVQ_CHANNELS_MAX
][
TWINVQ_
SUBBLOCKS_MAX
];
uint8_t
lpc_idx1
[
CHANNELS_MAX
];
uint8_t
lpc_idx1
[
TWINVQ_
CHANNELS_MAX
];
uint8_t
lpc_idx2
[
CHANNELS_MAX
][
LSP_SPLIT_MAX
];
uint8_t
lpc_idx2
[
TWINVQ_CHANNELS_MAX
][
TWINVQ_
LSP_SPLIT_MAX
];
uint8_t
lpc_hist_idx
[
CHANNELS_MAX
];
uint8_t
lpc_hist_idx
[
TWINVQ_
CHANNELS_MAX
];
int
p_coef
[
CHANNELS_MAX
];
int
p_coef
[
TWINVQ_
CHANNELS_MAX
];
int
g_coef
[
CHANNELS_MAX
];
int
g_coef
[
TWINVQ_
CHANNELS_MAX
];
}
TwinVQFrameData
;
}
TwinVQFrameData
;
/**
/**
...
@@ -290,7 +290,7 @@ static void eval_lpcenv(TwinVQContext *tctx, const float *cos_vals, float *lpc)
...
@@ -290,7 +290,7 @@ static void eval_lpcenv(TwinVQContext *tctx, const float *cos_vals, float *lpc)
{
{
int
i
;
int
i
;
const
TwinVQModeTab
*
mtab
=
tctx
->
mtab
;
const
TwinVQModeTab
*
mtab
=
tctx
->
mtab
;
int
size_s
=
mtab
->
size
/
mtab
->
fmode
[
FT_SHORT
].
sub
;
int
size_s
=
mtab
->
size
/
mtab
->
fmode
[
TWINVQ_
FT_SHORT
].
sub
;
for
(
i
=
0
;
i
<
size_s
/
2
;
i
++
)
{
for
(
i
=
0
;
i
<
size_s
/
2
;
i
++
)
{
float
cos_i
=
tctx
->
cos_tabs
[
0
][
i
];
float
cos_i
=
tctx
->
cos_tabs
[
0
][
i
];
...
@@ -533,25 +533,25 @@ static void dec_gain(TwinVQContext *tctx,
...
@@ -533,25 +533,25 @@ static void dec_gain(TwinVQContext *tctx,
const
TwinVQFrameData
*
bits
=
&
tctx
->
bits
;
const
TwinVQFrameData
*
bits
=
&
tctx
->
bits
;
int
i
,
j
;
int
i
,
j
;
int
sub
=
mtab
->
fmode
[
ftype
].
sub
;
int
sub
=
mtab
->
fmode
[
ftype
].
sub
;
float
step
=
AMP_MAX
/
((
1
<<
GAIN_BITS
)
-
1
);
float
step
=
TWINVQ_AMP_MAX
/
((
1
<<
TWINVQ_GAIN_BITS
)
-
1
);
float
sub_step
=
SUB_AMP_MAX
/
((
1
<<
SUB_GAIN_BITS
)
-
1
);
float
sub_step
=
TWINVQ_SUB_AMP_MAX
/
((
1
<<
TWINVQ_
SUB_GAIN_BITS
)
-
1
);
if
(
ftype
==
FT_LONG
)
{
if
(
ftype
==
TWINVQ_
FT_LONG
)
{
for
(
i
=
0
;
i
<
tctx
->
avctx
->
channels
;
i
++
)
for
(
i
=
0
;
i
<
tctx
->
avctx
->
channels
;
i
++
)
out
[
i
]
=
(
1
.
0
/
(
1
<<
13
))
*
out
[
i
]
=
(
1
.
0
/
(
1
<<
13
))
*
mulawinv
(
step
*
0
.
5
+
step
*
bits
->
gain_bits
[
i
],
mulawinv
(
step
*
0
.
5
+
step
*
bits
->
gain_bits
[
i
],
AMP_MAX
,
MULAW_MU
);
TWINVQ_AMP_MAX
,
TWINVQ_
MULAW_MU
);
}
else
{
}
else
{
for
(
i
=
0
;
i
<
tctx
->
avctx
->
channels
;
i
++
)
{
for
(
i
=
0
;
i
<
tctx
->
avctx
->
channels
;
i
++
)
{
float
val
=
(
1
.
0
/
(
1
<<
23
))
*
float
val
=
(
1
.
0
/
(
1
<<
23
))
*
mulawinv
(
step
*
0
.
5
+
step
*
bits
->
gain_bits
[
i
],
mulawinv
(
step
*
0
.
5
+
step
*
bits
->
gain_bits
[
i
],
AMP_MAX
,
MULAW_MU
);
TWINVQ_AMP_MAX
,
TWINVQ_
MULAW_MU
);
for
(
j
=
0
;
j
<
sub
;
j
++
)
for
(
j
=
0
;
j
<
sub
;
j
++
)
out
[
i
*
sub
+
j
]
=
out
[
i
*
sub
+
j
]
=
val
*
mulawinv
(
sub_step
*
0
.
5
+
val
*
mulawinv
(
sub_step
*
0
.
5
+
sub_step
*
bits
->
sub_gain_bits
[
i
*
sub
+
j
],
sub_step
*
bits
->
sub_gain_bits
[
i
*
sub
+
j
],
SUB_AMP_MAX
,
MULAW_MU
);
TWINVQ_SUB_AMP_MAX
,
TWINVQ_
MULAW_MU
);
}
}
}
}
}
}
...
@@ -625,13 +625,13 @@ static void dec_lpc_spectrum_inv(TwinVQContext *tctx, float *lsp,
...
@@ -625,13 +625,13 @@ static void dec_lpc_spectrum_inv(TwinVQContext *tctx, float *lsp,
lsp
[
i
]
=
2
*
cos
(
lsp
[
i
]);
lsp
[
i
]
=
2
*
cos
(
lsp
[
i
]);
switch
(
ftype
)
{
switch
(
ftype
)
{
case
FT_LONG
:
case
TWINVQ_
FT_LONG
:
eval_lpcenv_2parts
(
tctx
,
ftype
,
lsp
,
lpc
,
size
,
8
);
eval_lpcenv_2parts
(
tctx
,
ftype
,
lsp
,
lpc
,
size
,
8
);
break
;
break
;
case
FT_MEDIUM
:
case
TWINVQ_
FT_MEDIUM
:
eval_lpcenv_2parts
(
tctx
,
ftype
,
lsp
,
lpc
,
size
,
2
);
eval_lpcenv_2parts
(
tctx
,
ftype
,
lsp
,
lpc
,
size
,
2
);
break
;
break
;
case
FT_SHORT
:
case
TWINVQ_
FT_SHORT
:
eval_lpcenv
(
tctx
,
lsp
,
lpc
);
eval_lpcenv
(
tctx
,
lsp
,
lpc
);
break
;
break
;
}
}
...
@@ -652,9 +652,9 @@ static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype,
...
@@ -652,9 +652,9 @@ static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype,
float
*
out2
=
out
;
float
*
out2
=
out
;
float
*
prev_buf
;
float
*
prev_buf
;
int
types_sizes
[]
=
{
int
types_sizes
[]
=
{
mtab
->
size
/
mtab
->
fmode
[
FT_LONG
].
sub
,
mtab
->
size
/
mtab
->
fmode
[
TWINVQ_
FT_LONG
].
sub
,
mtab
->
size
/
mtab
->
fmode
[
FT_MEDIUM
].
sub
,
mtab
->
size
/
mtab
->
fmode
[
TWINVQ_
FT_MEDIUM
].
sub
,
mtab
->
size
/
(
mtab
->
fmode
[
FT_SHORT
].
sub
*
2
),
mtab
->
size
/
(
mtab
->
fmode
[
TWINVQ_
FT_SHORT
].
sub
*
2
),
};
};
wsize
=
types_sizes
[
wtype_to_wsize
[
wtype
]];
wsize
=
types_sizes
[
wtype_to_wsize
[
wtype
]];
...
@@ -662,7 +662,7 @@ static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype,
...
@@ -662,7 +662,7 @@ static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype,
prev_buf
=
prev
+
(
size
-
bsize
)
/
2
;
prev_buf
=
prev
+
(
size
-
bsize
)
/
2
;
for
(
j
=
0
;
j
<
mtab
->
fmode
[
ftype
].
sub
;
j
++
)
{
for
(
j
=
0
;
j
<
mtab
->
fmode
[
ftype
].
sub
;
j
++
)
{
int
sub_wtype
=
ftype
==
FT_MEDIUM
?
8
:
wtype
;
int
sub_wtype
=
ftype
==
TWINVQ_
FT_MEDIUM
?
8
:
wtype
;
if
(
!
j
&&
wtype
==
4
)
if
(
!
j
&&
wtype
==
4
)
sub_wtype
=
4
;
sub_wtype
=
4
;
...
@@ -682,7 +682,7 @@ static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype,
...
@@ -682,7 +682,7 @@ static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype,
memcpy
(
out2
,
buf1
+
bsize
*
j
+
wsize
/
2
,
memcpy
(
out2
,
buf1
+
bsize
*
j
+
wsize
/
2
,
(
bsize
-
wsize
/
2
)
*
sizeof
(
float
));
(
bsize
-
wsize
/
2
)
*
sizeof
(
float
));
out2
+=
ftype
==
FT_MEDIUM
?
(
bsize
-
wsize
)
/
2
:
bsize
-
wsize
;
out2
+=
ftype
==
TWINVQ_
FT_MEDIUM
?
(
bsize
-
wsize
)
/
2
:
bsize
-
wsize
;
prev_buf
=
buf1
+
bsize
*
j
+
bsize
/
2
;
prev_buf
=
buf1
+
bsize
*
j
+
bsize
/
2
;
}
}
...
@@ -757,8 +757,8 @@ static void read_and_decode_spectrum(TwinVQContext *tctx, float *out,
...
@@ -757,8 +757,8 @@ static void read_and_decode_spectrum(TwinVQContext *tctx, float *out,
int
channels
=
tctx
->
avctx
->
channels
;
int
channels
=
tctx
->
avctx
->
channels
;
int
sub
=
mtab
->
fmode
[
ftype
].
sub
;
int
sub
=
mtab
->
fmode
[
ftype
].
sub
;
int
block_size
=
mtab
->
size
/
sub
;
int
block_size
=
mtab
->
size
/
sub
;
float
gain
[
CHANNELS_MAX
*
SUBBLOCKS_MAX
];
float
gain
[
TWINVQ_CHANNELS_MAX
*
TWINVQ_
SUBBLOCKS_MAX
];
float
ppc_shape
[
PPC_SHAPE_LEN_MAX
*
CHANNELS_MAX
*
4
];
float
ppc_shape
[
TWINVQ_PPC_SHAPE_LEN_MAX
*
TWINVQ_
CHANNELS_MAX
*
4
];
int
i
,
j
;
int
i
,
j
;
...
@@ -768,16 +768,18 @@ static void read_and_decode_spectrum(TwinVQContext *tctx, float *out,
...
@@ -768,16 +768,18 @@ static void read_and_decode_spectrum(TwinVQContext *tctx, float *out,
dec_gain
(
tctx
,
ftype
,
gain
);
dec_gain
(
tctx
,
ftype
,
gain
);
if
(
ftype
==
FT_LONG
)
{
if
(
ftype
==
TWINVQ_
FT_LONG
)
{
int
cb_len_p
=
(
tctx
->
n_div
[
3
]
+
mtab
->
ppc_shape_len
*
channels
-
1
)
/
int
cb_len_p
=
(
tctx
->
n_div
[
3
]
+
mtab
->
ppc_shape_len
*
channels
-
1
)
/
tctx
->
n_div
[
3
];
tctx
->
n_div
[
3
];
dequant
(
tctx
,
bits
->
ppc_coeffs
,
ppc_shape
,
FT_PPC
,
mtab
->
ppc_shape_cb
,
dequant
(
tctx
,
bits
->
ppc_coeffs
,
ppc_shape
,
mtab
->
ppc_shape_cb
+
cb_len_p
*
PPC_SHAPE_CB_SIZE
,
cb_len_p
);
TWINVQ_FT_PPC
,
mtab
->
ppc_shape_cb
,
mtab
->
ppc_shape_cb
+
cb_len_p
*
TWINVQ_PPC_SHAPE_CB_SIZE
,
cb_len_p
);
}
}
for
(
i
=
0
;
i
<
channels
;
i
++
)
{
for
(
i
=
0
;
i
<
channels
;
i
++
)
{
float
*
chunk
=
out
+
mtab
->
size
*
i
;
float
*
chunk
=
out
+
mtab
->
size
*
i
;
float
lsp
[
LSP_COEFS_MAX
];
float
lsp
[
TWINVQ_
LSP_COEFS_MAX
];
for
(
j
=
0
;
j
<
sub
;
j
++
)
{
for
(
j
=
0
;
j
<
sub
;
j
++
)
{
dec_bark_env
(
tctx
,
bits
->
bark1
[
i
][
j
],
bits
->
bark_use_hist
[
i
][
j
],
i
,
dec_bark_env
(
tctx
,
bits
->
bark1
[
i
][
j
],
bits
->
bark_use_hist
[
i
][
j
],
i
,
...
@@ -788,12 +790,12 @@ static void read_and_decode_spectrum(TwinVQContext *tctx, float *out,
...
@@ -788,12 +790,12 @@ static void read_and_decode_spectrum(TwinVQContext *tctx, float *out,
tctx
->
tmp_buf
,
block_size
);
tctx
->
tmp_buf
,
block_size
);
}
}
if
(
ftype
==
FT_LONG
)
{
if
(
ftype
==
TWINVQ_
FT_LONG
)
{
float
pgain_step
=
25000
.
0
/
((
1
<<
mtab
->
pgain_bit
)
-
1
);
float
pgain_step
=
25000
.
0
/
((
1
<<
mtab
->
pgain_bit
)
-
1
);
float
v
=
1
.
0
/
8192
*
float
v
=
1
.
0
/
8192
*
mulawinv
(
pgain_step
*
bits
->
g_coef
[
i
]
+
mulawinv
(
pgain_step
*
bits
->
g_coef
[
i
]
+
pgain_step
/
2
,
pgain_step
/
2
,
25000
.
0
,
PGAIN_MU
);
25000
.
0
,
TWINVQ_
PGAIN_MU
);
decode_ppc
(
tctx
,
bits
->
p_coef
[
i
],
decode_ppc
(
tctx
,
bits
->
p_coef
[
i
],
ppc_shape
+
i
*
mtab
->
ppc_shape_len
,
v
,
chunk
);
ppc_shape
+
i
*
mtab
->
ppc_shape_len
,
v
,
chunk
);
...
@@ -825,8 +827,9 @@ static void read_cb_data(TwinVQContext *tctx, GetBitContext *gb,
...
@@ -825,8 +827,9 @@ static void read_cb_data(TwinVQContext *tctx, GetBitContext *gb,
}
}
static
const
enum
TwinVQFrameType
wtype_to_ftype_table
[]
=
{
static
const
enum
TwinVQFrameType
wtype_to_ftype_table
[]
=
{
FT_LONG
,
FT_LONG
,
FT_SHORT
,
FT_LONG
,
TWINVQ_FT_LONG
,
TWINVQ_FT_LONG
,
TWINVQ_FT_SHORT
,
TWINVQ_FT_LONG
,
FT_MEDIUM
,
FT_LONG
,
FT_LONG
,
FT_MEDIUM
,
FT_MEDIUM
TWINVQ_FT_MEDIUM
,
TWINVQ_FT_LONG
,
TWINVQ_FT_LONG
,
TWINVQ_FT_MEDIUM
,
TWINVQ_FT_MEDIUM
};
};
static
int
twinvq_read_bitstream
(
AVCodecContext
*
avctx
,
TwinVQContext
*
tctx
,
static
int
twinvq_read_bitstream
(
AVCodecContext
*
avctx
,
TwinVQContext
*
tctx
,
...
@@ -842,7 +845,7 @@ static int twinvq_read_bitstream(AVCodecContext *avctx, TwinVQContext *tctx,
...
@@ -842,7 +845,7 @@ static int twinvq_read_bitstream(AVCodecContext *avctx, TwinVQContext *tctx,
init_get_bits
(
&
gb
,
buf
,
buf_size
*
8
);
init_get_bits
(
&
gb
,
buf
,
buf_size
*
8
);
skip_bits
(
&
gb
,
get_bits
(
&
gb
,
8
));
skip_bits
(
&
gb
,
get_bits
(
&
gb
,
8
));
bits
->
window_type
=
get_bits
(
&
gb
,
WINDOW_TYPE_BITS
);
bits
->
window_type
=
get_bits
(
&
gb
,
TWINVQ_
WINDOW_TYPE_BITS
);
if
(
bits
->
window_type
>
8
)
{
if
(
bits
->
window_type
>
8
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Invalid window type, broken sample?
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Invalid window type, broken sample?
\n
"
);
...
@@ -865,14 +868,15 @@ static int twinvq_read_bitstream(AVCodecContext *avctx, TwinVQContext *tctx,
...
@@ -865,14 +868,15 @@ static int twinvq_read_bitstream(AVCodecContext *avctx, TwinVQContext *tctx,
for
(
j
=
0
;
j
<
sub
;
j
++
)
for
(
j
=
0
;
j
<
sub
;
j
++
)
bits
->
bark_use_hist
[
i
][
j
]
=
get_bits1
(
&
gb
);
bits
->
bark_use_hist
[
i
][
j
]
=
get_bits1
(
&
gb
);
if
(
bits
->
ftype
==
FT_LONG
)
{
if
(
bits
->
ftype
==
TWINVQ_
FT_LONG
)
{
for
(
i
=
0
;
i
<
channels
;
i
++
)
for
(
i
=
0
;
i
<
channels
;
i
++
)
bits
->
gain_bits
[
i
]
=
get_bits
(
&
gb
,
GAIN_BITS
);
bits
->
gain_bits
[
i
]
=
get_bits
(
&
gb
,
TWINVQ_
GAIN_BITS
);
}
else
{
}
else
{
for
(
i
=
0
;
i
<
channels
;
i
++
)
{
for
(
i
=
0
;
i
<
channels
;
i
++
)
{
bits
->
gain_bits
[
i
]
=
get_bits
(
&
gb
,
GAIN_BITS
);
bits
->
gain_bits
[
i
]
=
get_bits
(
&
gb
,
TWINVQ_
GAIN_BITS
);
for
(
j
=
0
;
j
<
sub
;
j
++
)
for
(
j
=
0
;
j
<
sub
;
j
++
)
bits
->
sub_gain_bits
[
i
*
sub
+
j
]
=
get_bits
(
&
gb
,
SUB_GAIN_BITS
);
bits
->
sub_gain_bits
[
i
*
sub
+
j
]
=
get_bits
(
&
gb
,
TWINVQ_SUB_GAIN_BITS
);
}
}
}
}
...
@@ -884,7 +888,7 @@ static int twinvq_read_bitstream(AVCodecContext *avctx, TwinVQContext *tctx,
...
@@ -884,7 +888,7 @@ static int twinvq_read_bitstream(AVCodecContext *avctx, TwinVQContext *tctx,
bits
->
lpc_idx2
[
i
][
j
]
=
get_bits
(
&
gb
,
mtab
->
lsp_bit2
);
bits
->
lpc_idx2
[
i
][
j
]
=
get_bits
(
&
gb
,
mtab
->
lsp_bit2
);
}
}
if
(
bits
->
ftype
==
FT_LONG
)
{
if
(
bits
->
ftype
==
TWINVQ_
FT_LONG
)
{
read_cb_data
(
tctx
,
&
gb
,
bits
->
ppc_coeffs
,
3
);
read_cb_data
(
tctx
,
&
gb
,
bits
->
ppc_coeffs
,
3
);
for
(
i
=
0
;
i
<
channels
;
i
++
)
{
for
(
i
=
0
;
i
<
channels
;
i
++
)
{
bits
->
p_coef
[
i
]
=
get_bits
(
&
gb
,
mtab
->
ppc_period_bit
);
bits
->
p_coef
[
i
]
=
get_bits
(
&
gb
,
mtab
->
ppc_period_bit
);
...
@@ -949,8 +953,8 @@ static av_cold int init_mdct_win(TwinVQContext *tctx)
...
@@ -949,8 +953,8 @@ static av_cold int init_mdct_win(TwinVQContext *tctx)
{
{
int
i
,
j
,
ret
;
int
i
,
j
,
ret
;
const
TwinVQModeTab
*
mtab
=
tctx
->
mtab
;
const
TwinVQModeTab
*
mtab
=
tctx
->
mtab
;
int
size_s
=
mtab
->
size
/
mtab
->
fmode
[
FT_SHORT
].
sub
;
int
size_s
=
mtab
->
size
/
mtab
->
fmode
[
TWINVQ_
FT_SHORT
].
sub
;
int
size_m
=
mtab
->
size
/
mtab
->
fmode
[
FT_MEDIUM
].
sub
;
int
size_m
=
mtab
->
size
/
mtab
->
fmode
[
TWINVQ_
FT_MEDIUM
].
sub
;
int
channels
=
tctx
->
avctx
->
channels
;
int
channels
=
tctx
->
avctx
->
channels
;
float
norm
=
channels
==
1
?
2
.
0
:
1
.
0
;
float
norm
=
channels
==
1
?
2
.
0
:
1
.
0
;
...
@@ -1012,12 +1016,12 @@ static void permutate_in_line(int16_t *tab, int num_vect, int num_blocks,
...
@@ -1012,12 +1016,12 @@ static void permutate_in_line(int16_t *tab, int num_vect, int num_blocks,
for
(
i
=
0
;
i
<
line_len
[
0
];
i
++
)
{
for
(
i
=
0
;
i
<
line_len
[
0
];
i
++
)
{
int
shift
;
int
shift
;
if
(
num_blocks
==
1
||
if
(
num_blocks
==
1
||
(
ftype
==
FT_LONG
&&
num_vect
%
num_blocks
)
||
(
ftype
==
TWINVQ_
FT_LONG
&&
num_vect
%
num_blocks
)
||
(
ftype
!=
FT_LONG
&&
num_vect
&
1
)
||
(
ftype
!=
TWINVQ_
FT_LONG
&&
num_vect
&
1
)
||
i
==
line_len
[
1
])
{
i
==
line_len
[
1
])
{
shift
=
0
;
shift
=
0
;
}
else
if
(
ftype
==
FT_LONG
)
{
}
else
if
(
ftype
==
TWINVQ_
FT_LONG
)
{
shift
=
i
;
shift
=
i
;
}
else
}
else
shift
=
i
*
i
;
shift
=
i
*
i
;
...
@@ -1069,7 +1073,7 @@ static av_cold void construct_perm_table(TwinVQContext *tctx,
...
@@ -1069,7 +1073,7 @@ static av_cold void construct_perm_table(TwinVQContext *tctx,
const
TwinVQModeTab
*
mtab
=
tctx
->
mtab
;
const
TwinVQModeTab
*
mtab
=
tctx
->
mtab
;
int16_t
*
tmp_perm
=
(
int16_t
*
)
tctx
->
tmp_buf
;
int16_t
*
tmp_perm
=
(
int16_t
*
)
tctx
->
tmp_buf
;
if
(
ftype
==
FT_PPC
)
{
if
(
ftype
==
TWINVQ_
FT_PPC
)
{
size
=
tctx
->
avctx
->
channels
;
size
=
tctx
->
avctx
->
channels
;
block_size
=
mtab
->
ppc_shape_len
;
block_size
=
mtab
->
ppc_shape_len
;
}
else
{
}
else
{
...
@@ -1111,12 +1115,13 @@ static av_cold void init_bitstream_params(TwinVQContext *tctx)
...
@@ -1111,12 +1115,13 @@ static av_cold void init_bitstream_params(TwinVQContext *tctx)
mtab
->
fmode
[
i
].
bark_n_bit
+
1
);
mtab
->
fmode
[
i
].
bark_n_bit
+
1
);
bsize_no_main_cb
[
2
]
=
bse_bits
[
2
]
+
lsp_bits_per_block
+
ppc_bits
+
bsize_no_main_cb
[
2
]
=
bse_bits
[
2
]
+
lsp_bits_per_block
+
ppc_bits
+
WINDOW_TYPE_BITS
+
n_ch
*
GAIN_BITS
;
TWINVQ_WINDOW_TYPE_BITS
+
n_ch
*
TWINVQ_
GAIN_BITS
;
for
(
i
=
0
;
i
<
2
;
i
++
)
for
(
i
=
0
;
i
<
2
;
i
++
)
bsize_no_main_cb
[
i
]
=
bsize_no_main_cb
[
i
]
=
lsp_bits_per_block
+
n_ch
*
GAIN_BITS
+
WINDOW_TYPE_BITS
+
lsp_bits_per_block
+
n_ch
*
TWINVQ_GAIN_BITS
+
mtab
->
fmode
[
i
].
sub
*
(
bse_bits
[
i
]
+
n_ch
*
SUB_GAIN_BITS
);
TWINVQ_WINDOW_TYPE_BITS
+
mtab
->
fmode
[
i
].
sub
*
(
bse_bits
[
i
]
+
n_ch
*
TWINVQ_SUB_GAIN_BITS
);
// The remaining bits are all used for the main spectrum coefficients
// The remaining bits are all used for the main spectrum coefficients
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
{
...
@@ -1153,7 +1158,7 @@ static av_cold void init_bitstream_params(TwinVQContext *tctx)
...
@@ -1153,7 +1158,7 @@ static av_cold void init_bitstream_params(TwinVQContext *tctx)
tctx
->
length_change
[
i
]
=
num_rounded_up
;
tctx
->
length_change
[
i
]
=
num_rounded_up
;
}
}
for
(
frametype
=
FT_SHORT
;
frametype
<=
FT_PPC
;
frametype
++
)
for
(
frametype
=
TWINVQ_FT_SHORT
;
frametype
<=
TWINVQ_
FT_PPC
;
frametype
++
)
construct_perm_table
(
tctx
,
frametype
);
construct_perm_table
(
tctx
,
frametype
);
}
}
...
@@ -1210,7 +1215,7 @@ static av_cold int twinvq_decode_init(AVCodecContext *avctx)
...
@@ -1210,7 +1215,7 @@ static av_cold int twinvq_decode_init(AVCodecContext *avctx)
break
;
break
;
}
}
if
(
avctx
->
channels
<=
0
||
avctx
->
channels
>
CHANNELS_MAX
)
{
if
(
avctx
->
channels
<=
0
||
avctx
->
channels
>
TWINVQ_
CHANNELS_MAX
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Unsupported number of channels: %i
\n
"
,
av_log
(
avctx
,
AV_LOG_ERROR
,
"Unsupported number of channels: %i
\n
"
,
avctx
->
channels
);
avctx
->
channels
);
return
-
1
;
return
-
1
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment