Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
e951b6d9
Commit
e951b6d9
authored
Feb 24, 2013
by
Justin Ruggles
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vorbisdec: cosmetics: rename variable avccontext to avctx
This is consistent with the rest of libavcodec.
parent
b2d688ea
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
73 additions
and
76 deletions
+73
-76
vorbis.c
libavcodec/vorbis.c
+2
-2
vorbis.h
libavcodec/vorbis.h
+1
-1
vorbisdec.c
libavcodec/vorbisdec.c
+70
-73
No files found.
libavcodec/vorbis.c
View file @
e951b6d9
...
...
@@ -117,7 +117,7 @@ int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, unsigned num)
return
0
;
}
int
ff_vorbis_ready_floor1_list
(
AVCodecContext
*
avc
context
,
int
ff_vorbis_ready_floor1_list
(
AVCodecContext
*
avc
tx
,
vorbis_floor1_entry
*
list
,
int
values
)
{
int
i
;
...
...
@@ -143,7 +143,7 @@ int ff_vorbis_ready_floor1_list(AVCodecContext *avccontext,
int
j
;
for
(
j
=
i
+
1
;
j
<
values
;
j
++
)
{
if
(
list
[
i
].
x
==
list
[
j
].
x
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Duplicate value found in floor 1 X coordinates
\n
"
);
return
AVERROR_INVALIDDATA
;
}
...
...
libavcodec/vorbis.h
View file @
e951b6d9
...
...
@@ -36,7 +36,7 @@ typedef struct vorbis_floor1_entry {
uint16_t
high
;
}
vorbis_floor1_entry
;
int
ff_vorbis_ready_floor1_list
(
AVCodecContext
*
avc
context
,
int
ff_vorbis_ready_floor1_list
(
AVCodecContext
*
avc
tx
,
vorbis_floor1_entry
*
list
,
int
values
);
unsigned
int
ff_vorbis_nth_root
(
unsigned
int
x
,
unsigned
int
n
);
// x^(1/n)
int
ff_vorbis_len2vlc
(
uint8_t
*
bits
,
uint32_t
*
codes
,
unsigned
num
);
...
...
libavcodec/vorbisdec.c
View file @
e951b6d9
...
...
@@ -122,7 +122,7 @@ typedef struct {
}
vorbis_mode
;
typedef
struct
vorbis_context_s
{
AVCodecContext
*
avc
context
;
AVCodecContext
*
avc
tx
;
GetBitContext
gb
;
VorbisDSPContext
dsp
;
AVFloatDSPContext
fdsp
;
...
...
@@ -162,7 +162,7 @@ typedef struct vorbis_context_s {
static
const
char
idx_err_str
[]
=
"Index value %d out of range (0 - %d) for %s at %s:%i
\n
"
;
#define VALIDATE_INDEX(idx, limit) \
if (idx >= limit) {\
av_log(vc->avc
context
, AV_LOG_ERROR,\
av_log(vc->avc
tx
, AV_LOG_ERROR,\
idx_err_str,\
(int)(idx), (int)(limit - 1), #idx, __FILE__, __LINE__);\
return AVERROR_INVALIDDATA;\
...
...
@@ -255,7 +255,7 @@ static int vorbis_parse_setup_hdr_codebooks(vorbis_context *vc)
av_dlog
(
NULL
,
" %u. Codebook
\n
"
,
cb
);
if
(
get_bits
(
gb
,
24
)
!=
0x564342
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" %u. Codebook setup data corrupt.
\n
"
,
cb
);
ret
=
AVERROR_INVALIDDATA
;
goto
error
;
...
...
@@ -263,7 +263,7 @@ static int vorbis_parse_setup_hdr_codebooks(vorbis_context *vc)
codebook_setup
->
dimensions
=
get_bits
(
gb
,
16
);
if
(
codebook_setup
->
dimensions
>
16
||
codebook_setup
->
dimensions
==
0
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" %u. Codebook's dimension is invalid (%d).
\n
"
,
cb
,
codebook_setup
->
dimensions
);
ret
=
AVERROR_INVALIDDATA
;
...
...
@@ -271,7 +271,7 @@ static int vorbis_parse_setup_hdr_codebooks(vorbis_context *vc)
}
entries
=
get_bits
(
gb
,
24
);
if
(
entries
>
V_MAX_VLCS
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" %u. Codebook has too many entries (%u).
\n
"
,
cb
,
entries
);
ret
=
AVERROR_INVALIDDATA
;
...
...
@@ -331,7 +331,7 @@ static int vorbis_parse_setup_hdr_codebooks(vorbis_context *vc)
current_entry
+=
number
;
}
if
(
current_entry
>
used_entries
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" More codelengths than codes in codebook.
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" More codelengths than codes in codebook.
\n
"
);
ret
=
AVERROR_INVALIDDATA
;
goto
error
;
}
...
...
@@ -378,7 +378,7 @@ static int vorbis_parse_setup_hdr_codebooks(vorbis_context *vc)
float
last
=
0
.
0
;
unsigned
lookup_offset
=
i
;
av_dlog
(
vc
->
avc
context
,
"Lookup offset %u ,"
,
i
);
av_dlog
(
vc
->
avc
tx
,
"Lookup offset %u ,"
,
i
);
for
(
k
=
0
;
k
<
dim
;
++
k
)
{
unsigned
multiplicand_offset
=
lookup_offset
%
codebook_lookup_values
;
...
...
@@ -389,30 +389,30 @@ static int vorbis_parse_setup_hdr_codebooks(vorbis_context *vc)
}
tmp_vlc_bits
[
j
]
=
tmp_vlc_bits
[
i
];
av_dlog
(
vc
->
avc
context
,
"real lookup offset %u, vector: "
,
j
);
av_dlog
(
vc
->
avc
tx
,
"real lookup offset %u, vector: "
,
j
);
for
(
k
=
0
;
k
<
dim
;
++
k
)
av_dlog
(
vc
->
avc
context
,
" %f "
,
av_dlog
(
vc
->
avc
tx
,
" %f "
,
codebook_setup
->
codevectors
[
j
*
dim
+
k
]);
av_dlog
(
vc
->
avc
context
,
"
\n
"
);
av_dlog
(
vc
->
avc
tx
,
"
\n
"
);
++
j
;
}
}
if
(
j
!=
used_entries
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Bug in codevector vector building code.
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Bug in codevector vector building code.
\n
"
);
ret
=
AVERROR_INVALIDDATA
;
goto
error
;
}
entries
=
used_entries
;
}
else
if
(
codebook_setup
->
lookup_type
>=
2
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Codebook lookup type not supported.
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Codebook lookup type not supported.
\n
"
);
ret
=
AVERROR_INVALIDDATA
;
goto
error
;
}
// Initialize VLC table
if
(
ff_vorbis_len2vlc
(
tmp_vlc_bits
,
tmp_vlc_codes
,
entries
))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Invalid code lengths while generating vlcs.
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Invalid code lengths while generating vlcs.
\n
"
);
ret
=
AVERROR_INVALIDDATA
;
goto
error
;
}
...
...
@@ -433,7 +433,7 @@ static int vorbis_parse_setup_hdr_codebooks(vorbis_context *vc)
sizeof
(
*
tmp_vlc_bits
),
tmp_vlc_codes
,
sizeof
(
*
tmp_vlc_codes
),
sizeof
(
*
tmp_vlc_codes
),
INIT_VLC_LE
)))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Error generating vlc tables.
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Error generating vlc tables.
\n
"
);
goto
error
;
}
}
...
...
@@ -465,7 +465,7 @@ static int vorbis_parse_setup_hdr_tdtransforms(vorbis_context *vc)
vorbis_time_count
,
vorbis_tdtransform
);
if
(
vorbis_tdtransform
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Vorbis time domain transform data nonzero.
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Vorbis time domain transform data nonzero.
\n
"
);
return
AVERROR_INVALIDDATA
;
}
}
...
...
@@ -555,7 +555,7 @@ static int vorbis_parse_setup_hdr_floors(vorbis_context *vc)
rangebits
=
get_bits
(
gb
,
4
);
rangemax
=
(
1
<<
rangebits
);
if
(
rangemax
>
vc
->
blocksize
[
1
]
/
2
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Floor value is too large for blocksize: %u (%"
PRIu32
")
\n
"
,
rangemax
,
vc
->
blocksize
[
1
]
/
2
);
return
AVERROR_INVALIDDATA
;
...
...
@@ -573,7 +573,7 @@ static int vorbis_parse_setup_hdr_floors(vorbis_context *vc)
}
// Precalculate order of x coordinates - needed for decode
if
(
ff_vorbis_ready_floor1_list
(
vc
->
avc
context
,
if
(
ff_vorbis_ready_floor1_list
(
vc
->
avc
tx
,
floor_setup
->
data
.
t1
.
list
,
floor_setup
->
data
.
t1
.
x_list_dim
))
{
return
AVERROR_INVALIDDATA
;
...
...
@@ -585,19 +585,17 @@ static int vorbis_parse_setup_hdr_floors(vorbis_context *vc)
floor_setup
->
data
.
t0
.
order
=
get_bits
(
gb
,
8
);
if
(
!
floor_setup
->
data
.
t0
.
order
)
{
av_log
(
vc
->
avccontext
,
AV_LOG_ERROR
,
"Floor 0 order is 0.
\n
"
);
av_log
(
vc
->
avctx
,
AV_LOG_ERROR
,
"Floor 0 order is 0.
\n
"
);
return
AVERROR_INVALIDDATA
;
}
floor_setup
->
data
.
t0
.
rate
=
get_bits
(
gb
,
16
);
if
(
!
floor_setup
->
data
.
t0
.
rate
)
{
av_log
(
vc
->
avccontext
,
AV_LOG_ERROR
,
"Floor 0 rate is 0.
\n
"
);
av_log
(
vc
->
avctx
,
AV_LOG_ERROR
,
"Floor 0 rate is 0.
\n
"
);
return
AVERROR_INVALIDDATA
;
}
floor_setup
->
data
.
t0
.
bark_map_size
=
get_bits
(
gb
,
16
);
if
(
!
floor_setup
->
data
.
t0
.
bark_map_size
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Floor 0 bark map size is 0.
\n
"
);
return
AVERROR_INVALIDDATA
;
}
...
...
@@ -653,7 +651,7 @@ static int vorbis_parse_setup_hdr_floors(vorbis_context *vc)
}
}
}
else
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Invalid floor type!
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Invalid floor type!
\n
"
);
return
AVERROR_INVALIDDATA
;
}
}
...
...
@@ -686,9 +684,9 @@ static int vorbis_parse_setup_hdr_residues(vorbis_context *vc)
res_setup
->
partition_size
=
get_bits
(
gb
,
24
)
+
1
;
/* Validations to prevent a buffer overflow later. */
if
(
res_setup
->
begin
>
res_setup
->
end
||
res_setup
->
end
>
(
res_setup
->
type
==
2
?
vc
->
avc
context
->
channels
:
1
)
*
vc
->
blocksize
[
1
]
/
2
||
res_setup
->
end
>
(
res_setup
->
type
==
2
?
vc
->
avc
tx
->
channels
:
1
)
*
vc
->
blocksize
[
1
]
/
2
||
(
res_setup
->
end
-
res_setup
->
begin
)
/
res_setup
->
partition_size
>
V_MAX_PARTITIONS
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"partition out of bounds: type, begin, end, size, blocksize: %"
PRIu16
", %"
PRIu32
", %"
PRIu32
", %u, %"
PRIu32
"
\n
"
,
res_setup
->
type
,
res_setup
->
begin
,
res_setup
->
end
,
res_setup
->
partition_size
,
vc
->
blocksize
[
1
]
/
2
);
...
...
@@ -756,7 +754,7 @@ static int vorbis_parse_setup_hdr_mappings(vorbis_context *vc)
vorbis_mapping
*
mapping_setup
=
&
vc
->
mappings
[
i
];
if
(
get_bits
(
gb
,
16
))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Other mappings than type 0 are not compliant with the Vorbis I specification.
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Other mappings than type 0 are not compliant with the Vorbis I specification.
\n
"
);
return
AVERROR_INVALIDDATA
;
}
if
(
get_bits1
(
gb
))
{
...
...
@@ -783,7 +781,7 @@ static int vorbis_parse_setup_hdr_mappings(vorbis_context *vc)
i
,
mapping_setup
->
coupling_steps
);
if
(
get_bits
(
gb
,
2
))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"%u. mapping setup data invalid.
\n
"
,
i
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"%u. mapping setup data invalid.
\n
"
,
i
);
return
AVERROR_INVALIDDATA
;
// following spec.
}
...
...
@@ -875,36 +873,36 @@ static int vorbis_parse_setup_hdr(vorbis_context *vc)
if
((
get_bits
(
gb
,
8
)
!=
'v'
)
||
(
get_bits
(
gb
,
8
)
!=
'o'
)
||
(
get_bits
(
gb
,
8
)
!=
'r'
)
||
(
get_bits
(
gb
,
8
)
!=
'b'
)
||
(
get_bits
(
gb
,
8
)
!=
'i'
)
||
(
get_bits
(
gb
,
8
)
!=
's'
))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (no vorbis signature).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (no vorbis signature).
\n
"
);
return
AVERROR_INVALIDDATA
;
}
if
((
ret
=
vorbis_parse_setup_hdr_codebooks
(
vc
)))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (codebooks).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (codebooks).
\n
"
);
return
ret
;
}
if
((
ret
=
vorbis_parse_setup_hdr_tdtransforms
(
vc
)))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (time domain transforms).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (time domain transforms).
\n
"
);
return
ret
;
}
if
((
ret
=
vorbis_parse_setup_hdr_floors
(
vc
)))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (floors).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (floors).
\n
"
);
return
ret
;
}
if
((
ret
=
vorbis_parse_setup_hdr_residues
(
vc
)))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (residues).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (residues).
\n
"
);
return
ret
;
}
if
((
ret
=
vorbis_parse_setup_hdr_mappings
(
vc
)))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (mappings).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (mappings).
\n
"
);
return
ret
;
}
if
((
ret
=
vorbis_parse_setup_hdr_modes
(
vc
)))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (modes).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (modes).
\n
"
);
return
ret
;
}
if
(
!
get_bits1
(
gb
))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (framing flag).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis setup header packet corrupt (framing flag).
\n
"
);
return
AVERROR_INVALIDDATA
;
// framing flag bit unset error
}
...
...
@@ -921,19 +919,19 @@ static int vorbis_parse_id_hdr(vorbis_context *vc)
if
((
get_bits
(
gb
,
8
)
!=
'v'
)
||
(
get_bits
(
gb
,
8
)
!=
'o'
)
||
(
get_bits
(
gb
,
8
)
!=
'r'
)
||
(
get_bits
(
gb
,
8
)
!=
'b'
)
||
(
get_bits
(
gb
,
8
)
!=
'i'
)
||
(
get_bits
(
gb
,
8
)
!=
's'
))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis id header packet corrupt (no vorbis signature).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis id header packet corrupt (no vorbis signature).
\n
"
);
return
AVERROR_INVALIDDATA
;
}
vc
->
version
=
get_bits_long
(
gb
,
32
);
//FIXME check 0
vc
->
audio_channels
=
get_bits
(
gb
,
8
);
if
(
vc
->
audio_channels
<=
0
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Invalid number of channels
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Invalid number of channels
\n
"
);
return
AVERROR_INVALIDDATA
;
}
vc
->
audio_samplerate
=
get_bits_long
(
gb
,
32
);
if
(
vc
->
audio_samplerate
<=
0
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Invalid samplerate
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Invalid samplerate
\n
"
);
return
AVERROR_INVALIDDATA
;
}
vc
->
bitrate_maximum
=
get_bits_long
(
gb
,
32
);
...
...
@@ -944,14 +942,14 @@ static int vorbis_parse_id_hdr(vorbis_context *vc)
vc
->
blocksize
[
0
]
=
(
1
<<
bl0
);
vc
->
blocksize
[
1
]
=
(
1
<<
bl1
);
if
(
bl0
>
13
||
bl0
<
6
||
bl1
>
13
||
bl1
<
6
||
bl1
<
bl0
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis id header packet corrupt (illegal blocksize).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis id header packet corrupt (illegal blocksize).
\n
"
);
return
AVERROR_INVALIDDATA
;
}
vc
->
win
[
0
]
=
ff_vorbis_vwin
[
bl0
-
6
];
vc
->
win
[
1
]
=
ff_vorbis_vwin
[
bl1
-
6
];
if
((
get_bits1
(
gb
))
==
0
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Vorbis id header packet corrupt (framing flag not set).
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Vorbis id header packet corrupt (framing flag not set).
\n
"
);
return
AVERROR_INVALIDDATA
;
}
...
...
@@ -977,41 +975,41 @@ static int vorbis_parse_id_hdr(vorbis_context *vc)
// Process the extradata using the functions above (identification header, setup header)
static
av_cold
int
vorbis_decode_init
(
AVCodecContext
*
avc
context
)
static
av_cold
int
vorbis_decode_init
(
AVCodecContext
*
avc
tx
)
{
vorbis_context
*
vc
=
avc
context
->
priv_data
;
uint8_t
*
headers
=
avc
context
->
extradata
;
int
headers_len
=
avc
context
->
extradata_size
;
vorbis_context
*
vc
=
avc
tx
->
priv_data
;
uint8_t
*
headers
=
avc
tx
->
extradata
;
int
headers_len
=
avc
tx
->
extradata_size
;
uint8_t
*
header_start
[
3
];
int
header_len
[
3
];
GetBitContext
*
gb
=
&
vc
->
gb
;
int
hdr_type
,
ret
;
vc
->
avc
context
=
avccontext
;
vc
->
avc
tx
=
avctx
;
ff_vorbisdsp_init
(
&
vc
->
dsp
);
avpriv_float_dsp_init
(
&
vc
->
fdsp
,
avc
context
->
flags
&
CODEC_FLAG_BITEXACT
);
ff_fmt_convert_init
(
&
vc
->
fmt_conv
,
avc
context
);
avpriv_float_dsp_init
(
&
vc
->
fdsp
,
avc
tx
->
flags
&
CODEC_FLAG_BITEXACT
);
ff_fmt_convert_init
(
&
vc
->
fmt_conv
,
avc
tx
);
avc
context
->
sample_fmt
=
AV_SAMPLE_FMT_FLTP
;
avc
tx
->
sample_fmt
=
AV_SAMPLE_FMT_FLTP
;
if
(
!
headers_len
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"Extradata missing.
\n
"
);
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Extradata missing.
\n
"
);
return
AVERROR_INVALIDDATA
;
}
if
((
ret
=
avpriv_split_xiph_headers
(
headers
,
headers_len
,
30
,
header_start
,
header_len
))
<
0
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"Extradata corrupt.
\n
"
);
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Extradata corrupt.
\n
"
);
return
ret
;
}
init_get_bits
(
gb
,
header_start
[
0
],
header_len
[
0
]
*
8
);
hdr_type
=
get_bits
(
gb
,
8
);
if
(
hdr_type
!=
1
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"First header is not the id header.
\n
"
);
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"First header is not the id header.
\n
"
);
return
AVERROR_INVALIDDATA
;
}
if
((
ret
=
vorbis_parse_id_hdr
(
vc
)))
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"Id header corrupt.
\n
"
);
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Id header corrupt.
\n
"
);
vorbis_free
(
vc
);
return
ret
;
}
...
...
@@ -1019,23 +1017,23 @@ static av_cold int vorbis_decode_init(AVCodecContext *avccontext)
init_get_bits
(
gb
,
header_start
[
2
],
header_len
[
2
]
*
8
);
hdr_type
=
get_bits
(
gb
,
8
);
if
(
hdr_type
!=
5
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"Third header is not the setup header.
\n
"
);
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Third header is not the setup header.
\n
"
);
vorbis_free
(
vc
);
return
AVERROR_INVALIDDATA
;
}
if
((
ret
=
vorbis_parse_setup_hdr
(
vc
)))
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"Setup header corrupt.
\n
"
);
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Setup header corrupt.
\n
"
);
vorbis_free
(
vc
);
return
ret
;
}
if
(
vc
->
audio_channels
>
8
)
avc
context
->
channel_layout
=
0
;
avc
tx
->
channel_layout
=
0
;
else
avc
context
->
channel_layout
=
ff_vorbis_channel_layouts
[
vc
->
audio_channels
-
1
];
avc
tx
->
channel_layout
=
ff_vorbis_channel_layouts
[
vc
->
audio_channels
-
1
];
avc
context
->
channels
=
vc
->
audio_channels
;
avc
context
->
sample_rate
=
vc
->
audio_samplerate
;
avc
tx
->
channels
=
vc
->
audio_channels
;
avc
tx
->
sample_rate
=
vc
->
audio_samplerate
;
return
0
;
}
...
...
@@ -1063,8 +1061,7 @@ static int vorbis_floor0_decode(vorbis_context *vc,
book_idx
=
get_bits
(
&
vc
->
gb
,
ilog
(
vf
->
num_books
));
if
(
book_idx
>=
vf
->
num_books
)
{
av_log
(
vc
->
avccontext
,
AV_LOG_ERROR
,
"floor0 dec: booknumber too high!
\n
"
);
av_log
(
vc
->
avctx
,
AV_LOG_ERROR
,
"floor0 dec: booknumber too high!
\n
"
);
book_idx
=
0
;
}
av_dlog
(
NULL
,
"floor0 dec: booknumber: %u
\n
"
,
book_idx
);
...
...
@@ -1308,7 +1305,7 @@ static av_always_inline int vorbis_residue_decode_internal(vorbis_context *vc,
}
if
(
max_output
>
ch_left
*
vlen
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Insufficient output buffer
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Insufficient output buffer
\n
"
);
return
-
1
;
}
...
...
@@ -1452,7 +1449,7 @@ static inline int vorbis_residue_decode(vorbis_context *vc, vorbis_residue *vr,
else
if
(
vr
->
type
==
0
)
return
vorbis_residue_decode_internal
(
vc
,
vr
,
ch
,
do_not_decode
,
vec
,
vlen
,
ch_left
,
0
);
else
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
" Invalid residue type while residue decode?!
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
" Invalid residue type while residue decode?!
\n
"
);
return
AVERROR_INVALIDDATA
;
}
}
...
...
@@ -1501,7 +1498,7 @@ static int vorbis_parse_audio_packet(vorbis_context *vc, float **floor_ptr)
unsigned
vlen
;
if
(
get_bits1
(
gb
))
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Not a Vorbis I audio packet.
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Not a Vorbis I audio packet.
\n
"
);
return
AVERROR_INVALIDDATA
;
// packet type not audio
}
...
...
@@ -1542,7 +1539,7 @@ static int vorbis_parse_audio_packet(vorbis_context *vc, float **floor_ptr)
ret
=
floor
->
decode
(
vc
,
&
floor
->
data
,
floor_ptr
[
i
]);
if
(
ret
<
0
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Invalid codebook in vorbis_floor_decode.
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Invalid codebook in vorbis_floor_decode.
\n
"
);
return
AVERROR_INVALIDDATA
;
}
no_residue
[
i
]
=
ret
;
...
...
@@ -1578,7 +1575,7 @@ static int vorbis_parse_audio_packet(vorbis_context *vc, float **floor_ptr)
}
residue
=
&
vc
->
residues
[
mapping
->
submap_residue
[
i
]];
if
(
ch_left
<
ch
)
{
av_log
(
vc
->
avc
context
,
AV_LOG_ERROR
,
"Too many channels in vorbis_floor_decode.
\n
"
);
av_log
(
vc
->
avc
tx
,
AV_LOG_ERROR
,
"Too many channels in vorbis_floor_decode.
\n
"
);
return
-
1
;
}
if
(
ch
)
{
...
...
@@ -1644,12 +1641,12 @@ static int vorbis_parse_audio_packet(vorbis_context *vc, float **floor_ptr)
// Return the decoded audio packet through the standard api
static
int
vorbis_decode_frame
(
AVCodecContext
*
avc
context
,
void
*
data
,
static
int
vorbis_decode_frame
(
AVCodecContext
*
avc
tx
,
void
*
data
,
int
*
got_frame_ptr
,
AVPacket
*
avpkt
)
{
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
vorbis_context
*
vc
=
avc
context
->
priv_data
;
vorbis_context
*
vc
=
avc
tx
->
priv_data
;
AVFrame
*
frame
=
data
;
GetBitContext
*
gb
=
&
vc
->
gb
;
float
*
channel_ptrs
[
255
];
...
...
@@ -1659,8 +1656,8 @@ static int vorbis_decode_frame(AVCodecContext *avccontext, void *data,
/* get output buffer */
frame
->
nb_samples
=
vc
->
blocksize
[
1
]
/
2
;
if
((
ret
=
ff_get_buffer
(
avc
context
,
frame
))
<
0
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"get_buffer() failed
\n
"
);
if
((
ret
=
ff_get_buffer
(
avc
tx
,
frame
))
<
0
)
{
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"get_buffer() failed
\n
"
);
return
ret
;
}
...
...
@@ -1696,18 +1693,18 @@ static int vorbis_decode_frame(AVCodecContext *avccontext, void *data,
// Close decoder
static
av_cold
int
vorbis_decode_close
(
AVCodecContext
*
avc
context
)
static
av_cold
int
vorbis_decode_close
(
AVCodecContext
*
avc
tx
)
{
vorbis_context
*
vc
=
avc
context
->
priv_data
;
vorbis_context
*
vc
=
avc
tx
->
priv_data
;
vorbis_free
(
vc
);
return
0
;
}
static
av_cold
void
vorbis_decode_flush
(
AVCodecContext
*
avc
context
)
static
av_cold
void
vorbis_decode_flush
(
AVCodecContext
*
avc
tx
)
{
vorbis_context
*
vc
=
avc
context
->
priv_data
;
vorbis_context
*
vc
=
avc
tx
->
priv_data
;
if
(
vc
->
saved
)
{
memset
(
vc
->
saved
,
0
,
(
vc
->
blocksize
[
1
]
/
4
)
*
vc
->
audio_channels
*
...
...
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