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