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
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
Hide 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