Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
FFmpeg
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
libremedia
Tethys
FFmpeg
Commits
ca488ad4
Commit
ca488ad4
authored
11 years ago
by
Luca Barbato
Browse files
Options
Downloads
Patches
Plain Diff
alsdec: Clean up error paths
Fix at least a memory leak. CC: libav-stable@libav.org
parent
70ecc175
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
libavcodec/alsdec.c
+75
-63
75 additions, 63 deletions
libavcodec/alsdec.c
with
75 additions
and
63 deletions
libavcodec/alsdec.c
+
75
−
63
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
;
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment