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
07c52e2c
Commit
07c52e2c
authored
May 06, 2013
by
Luca Barbato
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
aac: return meaningful errors
parent
6d8629aa
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
31 deletions
+35
-31
aacdec.c
libavcodec/aacdec.c
+35
-31
No files found.
libavcodec/aacdec.c
View file @
07c52e2c
...
...
@@ -497,7 +497,7 @@ static int set_default_channel_config(AVCodecContext *avctx,
av_log
(
avctx
,
AV_LOG_ERROR
,
"invalid default channel configuration (%d)
\n
"
,
channel_config
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
*
tags
=
tags_per_config
[
channel_config
];
memcpy
(
layout_map
,
aac_channel_layout_map
[
channel_config
-
1
],
...
...
@@ -687,7 +687,7 @@ static int decode_pce(AVCodecContext *avctx, MPEG4AudioConfig *m4ac,
comment_len
=
get_bits
(
gb
,
8
)
*
8
;
if
(
get_bits_left
(
gb
)
<
comment_len
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
overread_err
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
skip_bits_long
(
gb
,
comment_len
);
return
tags
;
...
...
@@ -782,7 +782,7 @@ static int decode_audio_specific_config(AACContext *ac,
int
sync_extension
)
{
GetBitContext
gb
;
int
i
;
int
i
,
ret
;
av_dlog
(
avctx
,
"extradata size %d
\n
"
,
avctx
->
extradata_size
);
for
(
i
=
0
;
i
<
avctx
->
extradata_size
;
i
++
)
...
...
@@ -793,12 +793,12 @@ static int decode_audio_specific_config(AACContext *ac,
if
((
i
=
avpriv_mpeg4audio_get_config
(
m4ac
,
data
,
bit_size
,
sync_extension
))
<
0
)
return
-
1
;
return
AVERROR_INVALIDDATA
;
if
(
m4ac
->
sampling_index
>
12
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"invalid sampling rate index %d
\n
"
,
m4ac
->
sampling_index
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
skip_bits_long
(
&
gb
,
i
);
...
...
@@ -807,15 +807,16 @@ static int decode_audio_specific_config(AACContext *ac,
case
AOT_AAC_MAIN
:
case
AOT_AAC_LC
:
case
AOT_AAC_LTP
:
if
(
decode_ga_specific_config
(
ac
,
avctx
,
&
gb
,
m4ac
,
m4ac
->
chan_config
))
return
-
1
;
if
((
ret
=
decode_ga_specific_config
(
ac
,
avctx
,
&
gb
,
m4ac
,
m4ac
->
chan_config
))
<
0
)
return
ret
;
break
;
default:
av_log
(
avctx
,
AV_LOG_ERROR
,
"Audio object type %s%d is not supported.
\n
"
,
m4ac
->
sbr
==
1
?
"SBR+"
:
""
,
m4ac
->
object_type
);
return
-
1
;
return
AVERROR
(
ENOSYS
)
;
}
av_dlog
(
avctx
,
...
...
@@ -891,6 +892,7 @@ static void reset_predictor_group(PredictorState *ps, int group_num)
static
av_cold
int
aac_decode_init
(
AVCodecContext
*
avctx
)
{
AACContext
*
ac
=
avctx
->
priv_data
;
int
ret
;
ac
->
avctx
=
avctx
;
ac
->
oc
[
1
].
m4ac
.
sample_rate
=
avctx
->
sample_rate
;
...
...
@@ -898,10 +900,11 @@ static av_cold int aac_decode_init(AVCodecContext *avctx)
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_FLTP
;
if
(
avctx
->
extradata_size
>
0
)
{
if
(
decode_audio_specific_config
(
ac
,
ac
->
avctx
,
&
ac
->
oc
[
1
].
m4ac
,
avctx
->
extradata
,
avctx
->
extradata_size
*
8
,
1
)
<
0
)
return
-
1
;
if
((
ret
=
decode_audio_specific_config
(
ac
,
ac
->
avctx
,
&
ac
->
oc
[
1
].
m4ac
,
avctx
->
extradata
,
avctx
->
extradata_size
*
8
,
1
))
<
0
)
return
ret
;
}
else
{
int
sr
,
i
;
uint8_t
layout_map
[
MAX_ELEM_ID
*
4
][
3
];
...
...
@@ -991,7 +994,7 @@ static int skip_data_stream_element(AACContext *ac, GetBitContext *gb)
if
(
get_bits_left
(
gb
)
<
8
*
count
)
{
av_log
(
ac
->
avctx
,
AV_LOG_ERROR
,
overread_err
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
skip_bits_long
(
gb
,
8
*
count
);
return
0
;
...
...
@@ -1007,7 +1010,7 @@ static int decode_prediction(AACContext *ac, IndividualChannelStream *ics,
ics
->
predictor_reset_group
>
30
)
{
av_log
(
ac
->
avctx
,
AV_LOG_ERROR
,
"Invalid Predictor Reset Group.
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
}
for
(
sfb
=
0
;
sfb
<
FFMIN
(
ics
->
max_sfb
,
ff_aac_pred_sfb_max
[
ac
->
oc
[
1
].
m4ac
.
sampling_index
]);
sfb
++
)
{
...
...
@@ -1119,20 +1122,20 @@ static int decode_band_types(AACContext *ac, enum BandType band_type[120],
int
sect_band_type
=
get_bits
(
gb
,
4
);
if
(
sect_band_type
==
12
)
{
av_log
(
ac
->
avctx
,
AV_LOG_ERROR
,
"invalid band type
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
do
{
sect_len_incr
=
get_bits
(
gb
,
bits
);
sect_end
+=
sect_len_incr
;
if
(
get_bits_left
(
gb
)
<
0
)
{
av_log
(
ac
->
avctx
,
AV_LOG_ERROR
,
overread_err
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
if
(
sect_end
>
ics
->
max_sfb
)
{
av_log
(
ac
->
avctx
,
AV_LOG_ERROR
,
"Number of bands (%d) exceeds limit (%d).
\n
"
,
sect_end
,
ics
->
max_sfb
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
}
while
(
sect_len_incr
==
(
1
<<
bits
)
-
1
);
for
(;
k
<
sect_end
;
k
++
)
{
...
...
@@ -1204,7 +1207,7 @@ static int decode_scalefactors(AACContext *ac, float sf[120], GetBitContext *gb,
if
(
offset
[
0
]
>
255U
)
{
av_log
(
ac
->
avctx
,
AV_LOG_ERROR
,
"Scalefactor (%d) out of range.
\n
"
,
offset
[
0
]);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
sf
[
idx
]
=
-
ff_aac_pow2sf_tab
[
offset
[
0
]
-
100
+
POW_SF2_ZERO
];
}
...
...
@@ -1263,7 +1266,7 @@ static int decode_tns(AACContext *ac, TemporalNoiseShaping *tns,
"TNS filter order %d is greater than maximum %d.
\n
"
,
tns
->
order
[
w
][
filt
],
tns_max_order
);
tns
->
order
[
w
][
filt
]
=
0
;
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
if
(
tns
->
order
[
w
][
filt
])
{
tns
->
direction
[
w
][
filt
]
=
get_bits1
(
gb
);
...
...
@@ -1549,7 +1552,7 @@ static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024],
if
(
b
>
8
)
{
av_log
(
ac
->
avctx
,
AV_LOG_ERROR
,
"error in spectral data, ESC overflow
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
SKIP_BITS
(
re
,
gb
,
b
+
1
);
...
...
@@ -1698,6 +1701,7 @@ static int decode_ics(AACContext *ac, SingleChannelElement *sce,
IndividualChannelStream
*
ics
=
&
sce
->
ics
;
float
*
out
=
sce
->
coeffs
;
int
global_gain
,
pulse_present
=
0
;
int
ret
;
/* This assignment is to silence a GCC warning about the variable being used
* uninitialized when in fact it always is.
...
...
@@ -1711,12 +1715,12 @@ static int decode_ics(AACContext *ac, SingleChannelElement *sce,
return
AVERROR_INVALIDDATA
;
}
if
(
decode_band_types
(
ac
,
sce
->
band_type
,
sce
->
band_type_run_end
,
gb
,
ics
)
<
0
)
return
-
1
;
if
(
decode_scalefactors
(
ac
,
sce
->
sf
,
gb
,
global_gain
,
ics
,
sce
->
band_type
,
sce
->
band_type_run_end
)
<
0
)
return
-
1
;
if
(
(
ret
=
decode_band_types
(
ac
,
sce
->
band_type
,
sce
->
band_type_run_end
,
gb
,
ics
)
)
<
0
)
return
ret
;
if
(
(
ret
=
decode_scalefactors
(
ac
,
sce
->
sf
,
gb
,
global_gain
,
ics
,
sce
->
band_type
,
sce
->
band_type_run_end
)
)
<
0
)
return
ret
;
pulse_present
=
0
;
if
(
!
scale_flag
)
{
...
...
@@ -1724,16 +1728,16 @@ static int decode_ics(AACContext *ac, SingleChannelElement *sce,
if
(
ics
->
window_sequence
[
0
]
==
EIGHT_SHORT_SEQUENCE
)
{
av_log
(
ac
->
avctx
,
AV_LOG_ERROR
,
"Pulse tool not allowed in eight short sequence.
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
if
(
decode_pulses
(
&
pulse
,
gb
,
ics
->
swb_offset
,
ics
->
num_swb
))
{
av_log
(
ac
->
avctx
,
AV_LOG_ERROR
,
"Pulse data corrupt or invalid.
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
}
if
((
tns
->
present
=
get_bits1
(
gb
))
&&
decode_tns
(
ac
,
tns
,
gb
,
ics
))
return
-
1
;
return
AVERROR_INVALIDDATA
;
if
(
get_bits1
(
gb
))
{
avpriv_request_sample
(
ac
->
avctx
,
"SSR"
);
return
AVERROR_PATCHWELCOME
;
...
...
@@ -1742,7 +1746,7 @@ static int decode_ics(AACContext *ac, SingleChannelElement *sce,
if
(
decode_spectrum_and_dequant
(
ac
,
out
,
gb
,
sce
->
sf
,
pulse_present
,
&
pulse
,
ics
,
sce
->
band_type
)
<
0
)
return
-
1
;
return
AVERROR_INVALIDDATA
;
if
(
ac
->
oc
[
1
].
m4ac
.
object_type
==
AOT_AAC_MAIN
&&
!
common_window
)
apply_prediction
(
ac
,
sce
);
...
...
@@ -1844,7 +1848,7 @@ static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe)
ms_present
=
get_bits
(
gb
,
2
);
if
(
ms_present
==
3
)
{
av_log
(
ac
->
avctx
,
AV_LOG_ERROR
,
"ms_present = 3 is reserved.
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
else
if
(
ms_present
)
decode_mid_side_stereo
(
cpe
,
gb
,
ms_present
);
}
...
...
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