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
ca488ad4
Commit
ca488ad4
authored
Jul 12, 2013
by
Luca Barbato
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
alsdec: Clean up error paths
Fix at least a memory leak. CC: libav-stable@libav.org
parent
70ecc175
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
75 additions
and
63 deletions
+75
-63
alsdec.c
libavcodec/alsdec.c
+75
-63
No files found.
libavcodec/alsdec.c
View file @
ca488ad4
...
@@ -290,12 +290,12 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
...
@@ -290,12 +290,12 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
avctx
->
extradata_size
*
8
,
1
);
avctx
->
extradata_size
*
8
,
1
);
if
(
config_offset
<
0
)
if
(
config_offset
<
0
)
return
-
1
;
return
AVERROR_INVALIDDATA
;
skip_bits_long
(
&
gb
,
config_offset
);
skip_bits_long
(
&
gb
,
config_offset
);
if
(
get_bits_left
(
&
gb
)
<
(
30
<<
3
))
if
(
get_bits_left
(
&
gb
)
<
(
30
<<
3
))
return
-
1
;
return
AVERROR_INVALIDDATA
;
// read the fixed items
// read the fixed items
als_id
=
get_bits_long
(
&
gb
,
32
);
als_id
=
get_bits_long
(
&
gb
,
32
);
...
@@ -330,7 +330,7 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
...
@@ -330,7 +330,7 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
// check for ALSSpecificConfig struct
// check for ALSSpecificConfig struct
if
(
als_id
!=
MKBETAG
(
'A'
,
'L'
,
'S'
,
'\0'
))
if
(
als_id
!=
MKBETAG
(
'A'
,
'L'
,
'S'
,
'\0'
))
return
-
1
;
return
AVERROR_INVALIDDATA
;
ctx
->
cur_frame_length
=
sconf
->
frame_length
;
ctx
->
cur_frame_length
=
sconf
->
frame_length
;
...
@@ -345,7 +345,7 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
...
@@ -345,7 +345,7 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
int
chan_pos_bits
=
av_ceil_log2
(
avctx
->
channels
);
int
chan_pos_bits
=
av_ceil_log2
(
avctx
->
channels
);
int
bits_needed
=
avctx
->
channels
*
chan_pos_bits
+
7
;
int
bits_needed
=
avctx
->
channels
*
chan_pos_bits
+
7
;
if
(
get_bits_left
(
&
gb
)
<
bits_needed
)
if
(
get_bits_left
(
&
gb
)
<
bits_needed
)
return
-
1
;
return
AVERROR_INVALIDDATA
;
if
(
!
(
sconf
->
chan_pos
=
av_malloc
(
avctx
->
channels
*
sizeof
(
*
sconf
->
chan_pos
))))
if
(
!
(
sconf
->
chan_pos
=
av_malloc
(
avctx
->
channels
*
sizeof
(
*
sconf
->
chan_pos
))))
return
AVERROR
(
ENOMEM
);
return
AVERROR
(
ENOMEM
);
...
@@ -363,7 +363,7 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
...
@@ -363,7 +363,7 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
// read fixed header and trailer sizes,
// read fixed header and trailer sizes,
// if size = 0xFFFFFFFF then there is no data field!
// if size = 0xFFFFFFFF then there is no data field!
if
(
get_bits_left
(
&
gb
)
<
64
)
if
(
get_bits_left
(
&
gb
)
<
64
)
return
-
1
;
return
AVERROR_INVALIDDATA
;
header_size
=
get_bits_long
(
&
gb
,
32
);
header_size
=
get_bits_long
(
&
gb
,
32
);
trailer_size
=
get_bits_long
(
&
gb
,
32
);
trailer_size
=
get_bits_long
(
&
gb
,
32
);
...
@@ -377,10 +377,10 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
...
@@ -377,10 +377,10 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
// skip the header and trailer data
// skip the header and trailer data
if
(
get_bits_left
(
&
gb
)
<
ht_size
)
if
(
get_bits_left
(
&
gb
)
<
ht_size
)
return
-
1
;
return
AVERROR_INVALIDDATA
;
if
(
ht_size
>
INT32_MAX
)
if
(
ht_size
>
INT32_MAX
)
return
-
1
;
return
AVERROR_PATCHWELCOME
;
skip_bits_long
(
&
gb
,
ht_size
);
skip_bits_long
(
&
gb
,
ht_size
);
...
@@ -388,7 +388,7 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
...
@@ -388,7 +388,7 @@ static av_cold int read_specific_config(ALSDecContext *ctx)
// initialize CRC calculation
// initialize CRC calculation
if
(
sconf
->
crc_enabled
)
{
if
(
sconf
->
crc_enabled
)
{
if
(
get_bits_left
(
&
gb
)
<
32
)
if
(
get_bits_left
(
&
gb
)
<
32
)
return
-
1
;
return
AVERROR_INVALIDDATA
;
if
(
avctx
->
err_recognition
&
AV_EF_CRCCHECK
)
{
if
(
avctx
->
err_recognition
&
AV_EF_CRCCHECK
)
{
ctx
->
crc_table
=
av_crc_get_table
(
AV_CRC_32_IEEE_LE
);
ctx
->
crc_table
=
av_crc_get_table
(
AV_CRC_32_IEEE_LE
);
...
@@ -629,7 +629,7 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
...
@@ -629,7 +629,7 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
if
(
bd
->
block_length
&
(
sub_blocks
-
1
))
{
if
(
bd
->
block_length
&
(
sub_blocks
-
1
))
{
av_log
(
avctx
,
AV_LOG_WARNING
,
av_log
(
avctx
,
AV_LOG_WARNING
,
"Block length is not evenly divisible by the number of subblocks.
\n
"
);
"Block length is not evenly divisible by the number of subblocks.
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
}
sb_length
=
bd
->
block_length
>>
log2_sub_blocks
;
sb_length
=
bd
->
block_length
>>
log2_sub_blocks
;
...
@@ -960,18 +960,18 @@ static int decode_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
...
@@ -960,18 +960,18 @@ static int decode_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
*/
*/
static
int
read_block
(
ALSDecContext
*
ctx
,
ALSBlockData
*
bd
)
static
int
read_block
(
ALSDecContext
*
ctx
,
ALSBlockData
*
bd
)
{
{
int
ret
=
0
;
GetBitContext
*
gb
=
&
ctx
->
gb
;
GetBitContext
*
gb
=
&
ctx
->
gb
;
*
bd
->
shift_lsbs
=
0
;
*
bd
->
shift_lsbs
=
0
;
// read block type flag and read the samples accordingly
// read block type flag and read the samples accordingly
if
(
get_bits1
(
gb
))
{
if
(
get_bits1
(
gb
))
{
if
(
read_var_block_data
(
ctx
,
bd
))
ret
=
read_var_block_data
(
ctx
,
bd
);
return
-
1
;
}
else
{
}
else
{
read_const_block_data
(
ctx
,
bd
);
read_const_block_data
(
ctx
,
bd
);
}
}
return
0
;
return
ret
;
}
}
...
@@ -980,12 +980,16 @@ static int read_block(ALSDecContext *ctx, ALSBlockData *bd)
...
@@ -980,12 +980,16 @@ static int read_block(ALSDecContext *ctx, ALSBlockData *bd)
static
int
decode_block
(
ALSDecContext
*
ctx
,
ALSBlockData
*
bd
)
static
int
decode_block
(
ALSDecContext
*
ctx
,
ALSBlockData
*
bd
)
{
{
unsigned
int
smp
;
unsigned
int
smp
;
int
ret
=
0
;
// read block type flag and read the samples accordingly
// read block type flag and read the samples accordingly
if
(
*
bd
->
const_block
)
if
(
*
bd
->
const_block
)
decode_const_block_data
(
ctx
,
bd
);
decode_const_block_data
(
ctx
,
bd
);
else
if
(
decode_var_block_data
(
ctx
,
bd
))
else
return
-
1
;
ret
=
decode_var_block_data
(
ctx
,
bd
);
// always return 0
if
(
ret
<
0
)
return
ret
;
// TODO: read RLSLMS extension data
// TODO: read RLSLMS extension data
...
@@ -1003,14 +1007,10 @@ static int read_decode_block(ALSDecContext *ctx, ALSBlockData *bd)
...
@@ -1003,14 +1007,10 @@ static int read_decode_block(ALSDecContext *ctx, ALSBlockData *bd)
{
{
int
ret
;
int
ret
;
ret
=
read_block
(
ctx
,
bd
);
if
((
ret
=
read_block
(
ctx
,
bd
))
<
0
)
if
(
ret
)
return
ret
;
return
ret
;
ret
=
decode_block
(
ctx
,
bd
);
return
decode_block
(
ctx
,
bd
);
return
ret
;
}
}
...
@@ -1036,6 +1036,7 @@ static int decode_blocks_ind(ALSDecContext *ctx, unsigned int ra_frame,
...
@@ -1036,6 +1036,7 @@ static int decode_blocks_ind(ALSDecContext *ctx, unsigned int ra_frame,
unsigned
int
c
,
const
unsigned
int
*
div_blocks
,
unsigned
int
c
,
const
unsigned
int
*
div_blocks
,
unsigned
int
*
js_blocks
)
unsigned
int
*
js_blocks
)
{
{
int
ret
;
unsigned
int
b
;
unsigned
int
b
;
ALSBlockData
bd
=
{
0
};
ALSBlockData
bd
=
{
0
};
...
@@ -1056,10 +1057,10 @@ static int decode_blocks_ind(ALSDecContext *ctx, unsigned int ra_frame,
...
@@ -1056,10 +1057,10 @@ static int decode_blocks_ind(ALSDecContext *ctx, unsigned int ra_frame,
for
(
b
=
0
;
b
<
ctx
->
num_blocks
;
b
++
)
{
for
(
b
=
0
;
b
<
ctx
->
num_blocks
;
b
++
)
{
bd
.
block_length
=
div_blocks
[
b
];
bd
.
block_length
=
div_blocks
[
b
];
if
(
read_decode_block
(
ctx
,
&
bd
)
)
{
if
(
(
ret
=
read_decode_block
(
ctx
,
&
bd
))
<
0
)
{
// damaged block, write zero for the rest of the frame
// damaged block, write zero for the rest of the frame
zero_remaining
(
b
,
ctx
->
num_blocks
,
div_blocks
,
bd
.
raw_samples
);
zero_remaining
(
b
,
ctx
->
num_blocks
,
div_blocks
,
bd
.
raw_samples
);
return
-
1
;
return
ret
;
}
}
bd
.
raw_samples
+=
div_blocks
[
b
];
bd
.
raw_samples
+=
div_blocks
[
b
];
bd
.
ra_block
=
0
;
bd
.
ra_block
=
0
;
...
@@ -1078,6 +1079,7 @@ static int decode_blocks(ALSDecContext *ctx, unsigned int ra_frame,
...
@@ -1078,6 +1079,7 @@ static int decode_blocks(ALSDecContext *ctx, unsigned int ra_frame,
ALSSpecificConfig
*
sconf
=
&
ctx
->
sconf
;
ALSSpecificConfig
*
sconf
=
&
ctx
->
sconf
;
unsigned
int
offset
=
0
;
unsigned
int
offset
=
0
;
unsigned
int
b
;
unsigned
int
b
;
int
ret
;
ALSBlockData
bd
[
2
]
=
{
{
0
}
};
ALSBlockData
bd
[
2
]
=
{
{
0
}
};
bd
[
0
].
ra_block
=
ra_frame
;
bd
[
0
].
ra_block
=
ra_frame
;
...
@@ -1119,12 +1121,9 @@ static int decode_blocks(ALSDecContext *ctx, unsigned int ra_frame,
...
@@ -1119,12 +1121,9 @@ static int decode_blocks(ALSDecContext *ctx, unsigned int ra_frame,
bd
[
0
].
raw_other
=
bd
[
1
].
raw_samples
;
bd
[
0
].
raw_other
=
bd
[
1
].
raw_samples
;
bd
[
1
].
raw_other
=
bd
[
0
].
raw_samples
;
bd
[
1
].
raw_other
=
bd
[
0
].
raw_samples
;
if
(
read_decode_block
(
ctx
,
&
bd
[
0
])
||
read_decode_block
(
ctx
,
&
bd
[
1
]))
{
if
((
ret
=
read_decode_block
(
ctx
,
&
bd
[
0
]))
<
0
||
// damaged block, write zero for the rest of the frame
(
ret
=
read_decode_block
(
ctx
,
&
bd
[
1
]))
<
0
)
zero_remaining
(
b
,
ctx
->
num_blocks
,
div_blocks
,
bd
[
0
].
raw_samples
);
goto
fail
;
zero_remaining
(
b
,
ctx
->
num_blocks
,
div_blocks
,
bd
[
1
].
raw_samples
);
return
-
1
;
}
// reconstruct joint-stereo blocks
// reconstruct joint-stereo blocks
if
(
bd
[
0
].
js_blocks
)
{
if
(
bd
[
0
].
js_blocks
)
{
...
@@ -1150,6 +1149,11 @@ static int decode_blocks(ALSDecContext *ctx, unsigned int ra_frame,
...
@@ -1150,6 +1149,11 @@ static int decode_blocks(ALSDecContext *ctx, unsigned int ra_frame,
sizeof
(
*
ctx
->
raw_samples
[
c
])
*
sconf
->
max_order
);
sizeof
(
*
ctx
->
raw_samples
[
c
])
*
sconf
->
max_order
);
return
0
;
return
0
;
fail:
// damaged block, write zero for the rest of the frame
zero_remaining
(
b
,
ctx
->
num_blocks
,
div_blocks
,
bd
[
0
].
raw_samples
);
zero_remaining
(
b
,
ctx
->
num_blocks
,
div_blocks
,
bd
[
1
].
raw_samples
);
return
ret
;
}
}
static
inline
int
als_weighting
(
GetBitContext
*
gb
,
int
k
,
int
off
)
static
inline
int
als_weighting
(
GetBitContext
*
gb
,
int
k
,
int
off
)
...
@@ -1173,7 +1177,7 @@ static int read_channel_data(ALSDecContext *ctx, ALSChannelData *cd, int c)
...
@@ -1173,7 +1177,7 @@ static int read_channel_data(ALSDecContext *ctx, ALSChannelData *cd, int c)
if
(
current
->
master_channel
>=
channels
)
{
if
(
current
->
master_channel
>=
channels
)
{
av_log
(
ctx
->
avctx
,
AV_LOG_ERROR
,
"Invalid master channel!
\n
"
);
av_log
(
ctx
->
avctx
,
AV_LOG_ERROR
,
"Invalid master channel!
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
}
if
(
current
->
master_channel
!=
c
)
{
if
(
current
->
master_channel
!=
c
)
{
...
@@ -1198,7 +1202,7 @@ static int read_channel_data(ALSDecContext *ctx, ALSChannelData *cd, int c)
...
@@ -1198,7 +1202,7 @@ static int read_channel_data(ALSDecContext *ctx, ALSChannelData *cd, int c)
if
(
entries
==
channels
)
{
if
(
entries
==
channels
)
{
av_log
(
ctx
->
avctx
,
AV_LOG_ERROR
,
"Damaged channel data!
\n
"
);
av_log
(
ctx
->
avctx
,
AV_LOG_ERROR
,
"Damaged channel data!
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
}
align_get_bits
(
gb
);
align_get_bits
(
gb
);
...
@@ -1230,7 +1234,7 @@ static int revert_channel_correlation(ALSDecContext *ctx, ALSBlockData *bd,
...
@@ -1230,7 +1234,7 @@ static int revert_channel_correlation(ALSDecContext *ctx, ALSBlockData *bd,
if
(
dep
==
channels
)
{
if
(
dep
==
channels
)
{
av_log
(
ctx
->
avctx
,
AV_LOG_WARNING
,
"Invalid channel correlation!
\n
"
);
av_log
(
ctx
->
avctx
,
AV_LOG_WARNING
,
"Invalid channel correlation!
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
}
bd
->
const_block
=
ctx
->
const_block
+
c
;
bd
->
const_block
=
ctx
->
const_block
+
c
;
...
@@ -1301,8 +1305,8 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
...
@@ -1301,8 +1305,8 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
unsigned
int
div_blocks
[
32
];
///< block sizes.
unsigned
int
div_blocks
[
32
];
///< block sizes.
unsigned
int
c
;
unsigned
int
c
;
unsigned
int
js_blocks
[
2
];
unsigned
int
js_blocks
[
2
];
uint32_t
bs_info
=
0
;
uint32_t
bs_info
=
0
;
int
ret
;
// skip the size of the ra unit if present in the frame
// skip the size of the ra unit if present in the frame
if
(
sconf
->
ra_flag
==
RA_FLAG_FRAMES
&&
ra_frame
)
if
(
sconf
->
ra_flag
==
RA_FLAG_FRAMES
&&
ra_frame
)
...
@@ -1333,13 +1337,15 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
...
@@ -1333,13 +1337,15 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
independent_bs
=
1
;
independent_bs
=
1
;
if
(
independent_bs
)
{
if
(
independent_bs
)
{
if
(
decode_blocks_ind
(
ctx
,
ra_frame
,
c
,
div_blocks
,
js_blocks
))
ret
=
decode_blocks_ind
(
ctx
,
ra_frame
,
c
,
return
-
1
;
div_blocks
,
js_blocks
);
if
(
ret
<
0
)
return
ret
;
independent_bs
--
;
independent_bs
--
;
}
else
{
}
else
{
if
(
decode_blocks
(
ctx
,
ra_frame
,
c
,
div_blocks
,
js_blocks
))
ret
=
decode_blocks
(
ctx
,
ra_frame
,
c
,
div_blocks
,
js_blocks
);
return
-
1
;
if
(
ret
<
0
)
return
ret
;
c
++
;
c
++
;
}
}
...
@@ -1358,7 +1364,7 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
...
@@ -1358,7 +1364,7 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
for
(
c
=
0
;
c
<
avctx
->
channels
;
c
++
)
for
(
c
=
0
;
c
<
avctx
->
channels
;
c
++
)
if
(
ctx
->
chan_data
[
c
]
<
ctx
->
chan_data_buffer
)
{
if
(
ctx
->
chan_data
[
c
]
<
ctx
->
chan_data_buffer
)
{
av_log
(
ctx
->
avctx
,
AV_LOG_ERROR
,
"Invalid channel data!
\n
"
);
av_log
(
ctx
->
avctx
,
AV_LOG_ERROR
,
"Invalid channel data!
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
}
memset
(
reverted_channels
,
0
,
sizeof
(
*
reverted_channels
)
*
avctx
->
channels
);
memset
(
reverted_channels
,
0
,
sizeof
(
*
reverted_channels
)
*
avctx
->
channels
);
...
@@ -1390,11 +1396,12 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
...
@@ -1390,11 +1396,12 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
return
ret
;
return
ret
;
}
}
for
(
c
=
0
;
c
<
avctx
->
channels
;
c
++
)
for
(
c
=
0
;
c
<
avctx
->
channels
;
c
++
)
{
if
(
revert_channel_correlation
(
ctx
,
&
bd
,
ctx
->
chan_data
,
ret
=
revert_channel_correlation
(
ctx
,
&
bd
,
ctx
->
chan_data
,
reverted_channels
,
offset
,
c
))
reverted_channels
,
offset
,
c
);
return
-
1
;
if
(
ret
<
0
)
return
ret
;
}
for
(
c
=
0
;
c
<
avctx
->
channels
;
c
++
)
{
for
(
c
=
0
;
c
<
avctx
->
channels
;
c
++
)
{
bd
.
const_block
=
ctx
->
const_block
+
c
;
bd
.
const_block
=
ctx
->
const_block
+
c
;
bd
.
shift_lsbs
=
ctx
->
shift_lsbs
+
c
;
bd
.
shift_lsbs
=
ctx
->
shift_lsbs
+
c
;
...
@@ -1591,30 +1598,30 @@ static av_cold int decode_init(AVCodecContext *avctx)
...
@@ -1591,30 +1598,30 @@ static av_cold int decode_init(AVCodecContext *avctx)
{
{
unsigned
int
c
;
unsigned
int
c
;
unsigned
int
channel_size
;
unsigned
int
channel_size
;
int
num_buffers
;
int
num_buffers
,
ret
;
ALSDecContext
*
ctx
=
avctx
->
priv_data
;
ALSDecContext
*
ctx
=
avctx
->
priv_data
;
ALSSpecificConfig
*
sconf
=
&
ctx
->
sconf
;
ALSSpecificConfig
*
sconf
=
&
ctx
->
sconf
;
ctx
->
avctx
=
avctx
;
ctx
->
avctx
=
avctx
;
if
(
!
avctx
->
extradata
)
{
if
(
!
avctx
->
extradata
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Missing required ALS extradata.
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Missing required ALS extradata.
\n
"
);
return
-
1
;
return
AVERROR_INVALIDDATA
;
}
}
if
(
read_specific_config
(
ctx
)
)
{
if
(
(
ret
=
read_specific_config
(
ctx
))
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Reading ALSSpecificConfig failed.
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Reading ALSSpecificConfig failed.
\n
"
);
decode_end
(
avctx
);
goto
fail
;
return
-
1
;
}
}
if
(
check_specific_config
(
ctx
))
{
if
((
ret
=
check_specific_config
(
ctx
))
<
0
)
{
decode_end
(
avctx
);
goto
fail
;
return
-
1
;
}
}
if
(
sconf
->
bgmc
)
if
(
sconf
->
bgmc
)
{
ff_bgmc_init
(
avctx
,
&
ctx
->
bgmc_lut
,
&
ctx
->
bgmc_lut_status
);
ret
=
ff_bgmc_init
(
avctx
,
&
ctx
->
bgmc_lut
,
&
ctx
->
bgmc_lut_status
);
if
(
ret
<
0
)
goto
fail
;
}
if
(
sconf
->
floating
)
{
if
(
sconf
->
floating
)
{
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_FLT
;
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_FLT
;
avctx
->
bits_per_raw_sample
=
32
;
avctx
->
bits_per_raw_sample
=
32
;
...
@@ -1649,7 +1656,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
...
@@ -1649,7 +1656,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
!
ctx
->
quant_cof_buffer
||
!
ctx
->
lpc_cof_buffer
||
!
ctx
->
quant_cof_buffer
||
!
ctx
->
lpc_cof_buffer
||
!
ctx
->
lpc_cof_reversed_buffer
)
{
!
ctx
->
lpc_cof_reversed_buffer
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Allocating buffer memory failed.
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Allocating buffer memory failed.
\n
"
);
return
AVERROR
(
ENOMEM
);
ret
=
AVERROR
(
ENOMEM
);
goto
fail
;
}
}
// assign quantized parcor coefficient buffers
// assign quantized parcor coefficient buffers
...
@@ -1674,8 +1682,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
...
@@ -1674,8 +1682,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
!
ctx
->
use_ltp
||
!
ctx
->
ltp_lag
||
!
ctx
->
use_ltp
||
!
ctx
->
ltp_lag
||
!
ctx
->
ltp_gain
||
!
ctx
->
ltp_gain_buffer
)
{
!
ctx
->
ltp_gain
||
!
ctx
->
ltp_gain_buffer
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Allocating buffer memory failed.
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Allocating buffer memory failed.
\n
"
);
decode_end
(
avctx
);
ret
=
AVERROR
(
ENOMEM
);
return
AVERROR
(
ENOMEM
)
;
goto
fail
;
}
}
for
(
c
=
0
;
c
<
num_buffers
;
c
++
)
for
(
c
=
0
;
c
<
num_buffers
;
c
++
)
...
@@ -1692,8 +1700,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
...
@@ -1692,8 +1700,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
if
(
!
ctx
->
chan_data_buffer
||
!
ctx
->
chan_data
||
!
ctx
->
reverted_channels
)
{
if
(
!
ctx
->
chan_data_buffer
||
!
ctx
->
chan_data
||
!
ctx
->
reverted_channels
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Allocating buffer memory failed.
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Allocating buffer memory failed.
\n
"
);
decode_end
(
avctx
);
ret
=
AVERROR
(
ENOMEM
);
return
AVERROR
(
ENOMEM
)
;
goto
fail
;
}
}
for
(
c
=
0
;
c
<
num_buffers
;
c
++
)
for
(
c
=
0
;
c
<
num_buffers
;
c
++
)
...
@@ -1713,8 +1721,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
...
@@ -1713,8 +1721,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
// allocate previous raw sample buffer
// allocate previous raw sample buffer
if
(
!
ctx
->
prev_raw_samples
||
!
ctx
->
raw_buffer
||
!
ctx
->
raw_samples
)
{
if
(
!
ctx
->
prev_raw_samples
||
!
ctx
->
raw_buffer
||
!
ctx
->
raw_samples
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Allocating buffer memory failed.
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Allocating buffer memory failed.
\n
"
);
decode_end
(
avctx
);
ret
=
AVERROR
(
ENOMEM
);
return
AVERROR
(
ENOMEM
)
;
goto
fail
;
}
}
// assign raw samples buffers
// assign raw samples buffers
...
@@ -1731,14 +1739,18 @@ static av_cold int decode_init(AVCodecContext *avctx)
...
@@ -1731,14 +1739,18 @@ static av_cold int decode_init(AVCodecContext *avctx)
av_get_bytes_per_sample
(
avctx
->
sample_fmt
));
av_get_bytes_per_sample
(
avctx
->
sample_fmt
));
if
(
!
ctx
->
crc_buffer
)
{
if
(
!
ctx
->
crc_buffer
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Allocating buffer memory failed.
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Allocating buffer memory failed.
\n
"
);
decode_end
(
avctx
);
ret
=
AVERROR
(
ENOMEM
);
return
AVERROR
(
ENOMEM
)
;
goto
fail
;
}
}
}
}
ff_dsputil_init
(
&
ctx
->
dsp
,
avctx
);
ff_dsputil_init
(
&
ctx
->
dsp
,
avctx
);
return
0
;
return
0
;
fail:
decode_end
(
avctx
);
return
ret
;
}
}
...
...
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