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
99477adc
Commit
99477adc
authored
Jun 13, 2011
by
Justin Ruggles
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ac3enc: fix allocation of floating point samples.
sizeof(SampleType) is different for fixed and float encoders.
parent
35bdaf3d
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
32 additions
and
9 deletions
+32
-9
ac3enc.c
libavcodec/ac3enc.c
+7
-9
ac3enc.h
libavcodec/ac3enc.h
+5
-0
ac3enc_template.c
libavcodec/ac3enc_template.c
+20
-0
No files found.
libavcodec/ac3enc.c
View file @
99477adc
...
...
@@ -2215,15 +2215,9 @@ static av_cold int allocate_buffers(AVCodecContext *avctx)
AC3EncodeContext
*
s
=
avctx
->
priv_data
;
int
channels
=
s
->
channels
+
1
;
/* includes coupling channel */
FF_ALLOC_OR_GOTO
(
avctx
,
s
->
windowed_samples
,
AC3_WINDOW_SIZE
*
sizeof
(
*
s
->
windowed_samples
),
alloc_fail
);
FF_ALLOC_OR_GOTO
(
avctx
,
s
->
planar_samples
,
s
->
channels
*
sizeof
(
*
s
->
planar_samples
),
alloc_fail
);
for
(
ch
=
0
;
ch
<
s
->
channels
;
ch
++
)
{
FF_ALLOCZ_OR_GOTO
(
avctx
,
s
->
planar_samples
[
ch
],
(
AC3_FRAME_SIZE
+
AC3_BLOCK_SIZE
)
*
sizeof
(
**
s
->
planar_samples
),
alloc_fail
);
}
if
(
s
->
allocate_sample_buffers
(
s
))
goto
alloc_fail
;
FF_ALLOC_OR_GOTO
(
avctx
,
s
->
bap_buffer
,
AC3_MAX_BLOCKS
*
channels
*
AC3_MAX_COEFS
*
sizeof
(
*
s
->
bap_buffer
),
alloc_fail
);
FF_ALLOC_OR_GOTO
(
avctx
,
s
->
bap1_buffer
,
AC3_MAX_BLOCKS
*
channels
*
...
...
@@ -2323,6 +2317,8 @@ av_cold int ff_ac3_encode_init(AVCodecContext *avctx)
AC3EncodeContext
*
s
=
avctx
->
priv_data
;
int
ret
,
frame_size_58
;
s
->
avctx
=
avctx
;
s
->
eac3
=
avctx
->
codec_id
==
CODEC_ID_EAC3
;
avctx
->
frame_size
=
AC3_FRAME_SIZE
;
...
...
@@ -2355,6 +2351,7 @@ av_cold int ff_ac3_encode_init(AVCodecContext *avctx)
s
->
apply_window
=
ff_ac3_fixed_apply_window
;
s
->
normalize_samples
=
ff_ac3_fixed_normalize_samples
;
s
->
scale_coefficients
=
ff_ac3_fixed_scale_coefficients
;
s
->
allocate_sample_buffers
=
ff_ac3_fixed_allocate_sample_buffers
;
s
->
deinterleave_input_samples
=
ff_ac3_fixed_deinterleave_input_samples
;
s
->
apply_mdct
=
ff_ac3_fixed_apply_mdct
;
s
->
apply_channel_coupling
=
ff_ac3_fixed_apply_channel_coupling
;
...
...
@@ -2364,6 +2361,7 @@ av_cold int ff_ac3_encode_init(AVCodecContext *avctx)
s
->
mdct_init
=
ff_ac3_float_mdct_init
;
s
->
apply_window
=
ff_ac3_float_apply_window
;
s
->
scale_coefficients
=
ff_ac3_float_scale_coefficients
;
s
->
allocate_sample_buffers
=
ff_ac3_float_allocate_sample_buffers
;
s
->
deinterleave_input_samples
=
ff_ac3_float_deinterleave_input_samples
;
s
->
apply_mdct
=
ff_ac3_float_apply_mdct
;
s
->
apply_channel_coupling
=
ff_ac3_float_apply_channel_coupling
;
...
...
libavcodec/ac3enc.h
View file @
99477adc
...
...
@@ -135,6 +135,7 @@ typedef struct AC3Block {
typedef
struct
AC3EncodeContext
{
AVClass
*
av_class
;
///< AVClass used for AVOption
AC3EncOptions
options
;
///< encoding options
AVCodecContext
*
avctx
;
///< parent AVCodecContext
PutBitContext
pb
;
///< bitstream writer context
DSPContext
dsp
;
AC3DSPContext
ac3dsp
;
///< AC-3 optimized functions
...
...
@@ -230,6 +231,7 @@ typedef struct AC3EncodeContext {
void
(
*
scale_coefficients
)(
struct
AC3EncodeContext
*
s
);
/* fixed vs. float templated function pointers */
int
(
*
allocate_sample_buffers
)(
struct
AC3EncodeContext
*
s
);
void
(
*
deinterleave_input_samples
)(
struct
AC3EncodeContext
*
s
,
const
SampleType
*
samples
);
void
(
*
apply_mdct
)(
struct
AC3EncodeContext
*
s
);
...
...
@@ -276,6 +278,9 @@ void ff_ac3_float_scale_coefficients(AC3EncodeContext *s);
/* prototypes for functions in ac3enc_template.c */
int
ff_ac3_fixed_allocate_sample_buffers
(
AC3EncodeContext
*
s
);
int
ff_ac3_float_allocate_sample_buffers
(
AC3EncodeContext
*
s
);
void
ff_ac3_fixed_deinterleave_input_samples
(
AC3EncodeContext
*
s
,
const
SampleType
*
samples
);
void
ff_ac3_float_deinterleave_input_samples
(
AC3EncodeContext
*
s
,
...
...
libavcodec/ac3enc_template.c
View file @
99477adc
...
...
@@ -31,6 +31,26 @@
#include "ac3enc.h"
int
AC3_NAME
(
allocate_sample_buffers
)(
AC3EncodeContext
*
s
)
{
int
ch
;
FF_ALLOC_OR_GOTO
(
s
->
avctx
,
s
->
windowed_samples
,
AC3_WINDOW_SIZE
*
sizeof
(
*
s
->
windowed_samples
),
alloc_fail
);
FF_ALLOC_OR_GOTO
(
s
->
avctx
,
s
->
planar_samples
,
s
->
channels
*
sizeof
(
*
s
->
planar_samples
),
alloc_fail
);
for
(
ch
=
0
;
ch
<
s
->
channels
;
ch
++
)
{
FF_ALLOCZ_OR_GOTO
(
s
->
avctx
,
s
->
planar_samples
[
ch
],
(
AC3_FRAME_SIZE
+
AC3_BLOCK_SIZE
)
*
sizeof
(
**
s
->
planar_samples
),
alloc_fail
);
}
return
0
;
alloc_fail:
return
AVERROR
(
ENOMEM
);
}
/**
* Deinterleave input samples.
* Channels are reordered from Libav's default order to AC-3 order.
...
...
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