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
e2322252
Commit
e2322252
authored
Feb 17, 2012
by
Justin Ruggles
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libmp3lame: renaming, rearrangement, alignment, and comments
parent
232e16dd
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
35 deletions
+51
-35
libmp3lame.c
libavcodec/libmp3lame.c
+51
-35
No files found.
libavcodec/libmp3lame.c
View file @
e2322252
...
...
@@ -24,6 +24,8 @@
* Interface to libmp3lame for mp3 encoding.
*/
#include <lame/lame.h>
#include "libavutil/intreadwrite.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
...
...
@@ -31,21 +33,21 @@
#include "internal.h"
#include "mpegaudio.h"
#include "mpegaudiodecheader.h"
#include <lame/lame.h>
#define BUFFER_SIZE (7200 + 2 * MPA_FRAME_SIZE + MPA_FRAME_SIZE / 4)
typedef
struct
Mp3AudioContext
{
typedef
struct
LAMEContext
{
AVClass
*
class
;
lame_global_flags
*
gfp
;
uint8_t
buffer
[
BUFFER_SIZE
];
int
buffer_index
;
int
reservoir
;
}
Mp3Audio
Context
;
}
LAME
Context
;
static
av_cold
int
MP
3lame_encode_close
(
AVCodecContext
*
avctx
)
static
av_cold
int
mp
3lame_encode_close
(
AVCodecContext
*
avctx
)
{
Mp3Audio
Context
*
s
=
avctx
->
priv_data
;
LAME
Context
*
s
=
avctx
->
priv_data
;
av_freep
(
&
avctx
->
coded_frame
);
...
...
@@ -53,25 +55,34 @@ static av_cold int MP3lame_encode_close(AVCodecContext *avctx)
return
0
;
}
static
av_cold
int
MP
3lame_encode_init
(
AVCodecContext
*
avctx
)
static
av_cold
int
mp
3lame_encode_init
(
AVCodecContext
*
avctx
)
{
Mp3Audio
Context
*
s
=
avctx
->
priv_data
;
LAME
Context
*
s
=
avctx
->
priv_data
;
int
ret
;
if
(
avctx
->
channels
>
2
)
return
AVERROR
(
EINVAL
);
/* initialize LAME and get defaults */
if
((
s
->
gfp
=
lame_init
())
==
NULL
)
return
AVERROR
(
ENOMEM
);
lame_set_in_samplerate
(
s
->
gfp
,
avctx
->
sample_rate
);
lame_set_out_samplerate
(
s
->
gfp
,
avctx
->
sample_rate
);
/* channels */
if
(
avctx
->
channels
>
2
)
{
ret
=
AVERROR
(
EINVAL
);
goto
error
;
}
lame_set_num_channels
(
s
->
gfp
,
avctx
->
channels
);
if
(
avctx
->
compression_level
==
FF_COMPRESSION_DEFAULT
)
{
lame_set_mode
(
s
->
gfp
,
avctx
->
channels
>
1
?
JOINT_STEREO
:
MONO
);
/* sample rate */
lame_set_in_samplerate
(
s
->
gfp
,
avctx
->
sample_rate
);
lame_set_out_samplerate
(
s
->
gfp
,
avctx
->
sample_rate
);
/* algorithmic quality */
if
(
avctx
->
compression_level
==
FF_COMPRESSION_DEFAULT
)
lame_set_quality
(
s
->
gfp
,
5
);
}
else
{
else
lame_set_quality
(
s
->
gfp
,
avctx
->
compression_level
);
}
lame_set_mode
(
s
->
gfp
,
avctx
->
channels
>
1
?
JOINT_STEREO
:
MONO
);
/* rate control */
if
(
avctx
->
flags
&
CODEC_FLAG_QSCALE
)
{
lame_set_VBR
(
s
->
gfp
,
vbr_default
);
lame_set_VBR_quality
(
s
->
gfp
,
avctx
->
global_quality
/
(
float
)
FF_QP2LAMBDA
);
...
...
@@ -79,15 +90,21 @@ static av_cold int MP3lame_encode_init(AVCodecContext *avctx)
if
(
avctx
->
bit_rate
)
lame_set_brate
(
s
->
gfp
,
avctx
->
bit_rate
/
1000
);
}
/* do not get a Xing VBR header frame from LAME */
lame_set_bWriteVbrTag
(
s
->
gfp
,
0
);
/* bit reservoir usage */
lame_set_disable_reservoir
(
s
->
gfp
,
!
s
->
reservoir
);
/* set specified parameters */
if
(
lame_init_params
(
s
->
gfp
)
<
0
)
{
ret
=
-
1
;
goto
error
;
}
avctx
->
frame_size
=
lame_get_framesize
(
s
->
gfp
);
avctx
->
coded_frame
=
avcodec_alloc_frame
();
avctx
->
frame_size
=
lame_get_framesize
(
s
->
gfp
);
avctx
->
coded_frame
=
avcodec_alloc_frame
();
if
(
!
avctx
->
coded_frame
)
{
ret
=
AVERROR
(
ENOMEM
);
goto
error
;
...
...
@@ -95,18 +112,14 @@ static av_cold int MP3lame_encode_init(AVCodecContext *avctx)
return
0
;
error:
MP
3lame_encode_close
(
avctx
);
mp
3lame_encode_close
(
avctx
);
return
ret
;
}
static
const
int
sSampleRates
[]
=
{
44100
,
48000
,
32000
,
22050
,
24000
,
16000
,
11025
,
12000
,
8000
,
0
};
static
int
MP3lame_encode_frame
(
AVCodecContext
*
avctx
,
unsigned
char
*
frame
,
static
int
mp3lame_encode_frame
(
AVCodecContext
*
avctx
,
unsigned
char
*
frame
,
int
buf_size
,
void
*
data
)
{
Mp3Audio
Context
*
s
=
avctx
->
priv_data
;
LAME
Context
*
s
=
avctx
->
priv_data
;
MPADecodeHeader
hdr
;
int
len
;
int
lame_result
;
...
...
@@ -127,7 +140,6 @@ static int MP3lame_encode_frame(AVCodecContext *avctx, unsigned char *frame,
lame_result
=
lame_encode_flush
(
s
->
gfp
,
s
->
buffer
+
s
->
buffer_index
,
BUFFER_SIZE
-
s
->
buffer_index
);
}
if
(
lame_result
<
0
)
{
if
(
lame_result
==
-
1
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
...
...
@@ -136,12 +148,13 @@ static int MP3lame_encode_frame(AVCodecContext *avctx, unsigned char *frame,
}
return
-
1
;
}
s
->
buffer_index
+=
lame_result
;
/* Move 1 frame from the LAME buffer to the output packet, if available.
We have to parse the first frame header in the output buffer to
determine the frame size. */
if
(
s
->
buffer_index
<
4
)
return
0
;
if
(
avpriv_mpegaudio_decode_header
(
&
hdr
,
AV_RB32
(
s
->
buffer
)))
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"free format output not supported
\n
"
);
return
-
1
;
...
...
@@ -152,14 +165,13 @@ static int MP3lame_encode_frame(AVCodecContext *avctx, unsigned char *frame,
if
(
len
<=
s
->
buffer_index
)
{
memcpy
(
frame
,
s
->
buffer
,
len
);
s
->
buffer_index
-=
len
;
memmove
(
s
->
buffer
,
s
->
buffer
+
len
,
s
->
buffer_index
);
return
len
;
}
else
return
0
;
}
#define OFFSET(x) offsetof(
Mp3Audio
Context, x)
#define OFFSET(x) offsetof(
LAME
Context, x)
#define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
static
const
AVOption
options
[]
=
{
{
"reservoir"
,
"Use bit reservoir."
,
OFFSET
(
reservoir
),
AV_OPT_TYPE_INT
,
{
1
},
0
,
1
,
AE
},
...
...
@@ -178,18 +190,22 @@ static const AVCodecDefault libmp3lame_defaults[] = {
{
NULL
},
};
static
const
int
libmp3lame_sample_rates
[]
=
{
44100
,
48000
,
32000
,
22050
,
24000
,
16000
,
11025
,
12000
,
8000
,
0
};
AVCodec
ff_libmp3lame_encoder
=
{
.
name
=
"libmp3lame"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
id
=
CODEC_ID_MP3
,
.
priv_data_size
=
sizeof
(
Mp3Audio
Context
),
.
init
=
MP
3lame_encode_init
,
.
encode
=
MP
3lame_encode_frame
,
.
close
=
MP
3lame_encode_close
,
.
priv_data_size
=
sizeof
(
LAME
Context
),
.
init
=
mp
3lame_encode_init
,
.
encode
=
mp
3lame_encode_frame
,
.
close
=
mp
3lame_encode_close
,
.
capabilities
=
CODEC_CAP_DELAY
,
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_S16
,
AV_SAMPLE_FMT_NONE
},
.
supported_samplerates
=
sSampleR
ates
,
.
supported_samplerates
=
libmp3lame_sample_r
ates
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"libmp3lame MP3 (MPEG audio layer 3)"
),
.
priv_class
=
&
libmp3lame_class
,
.
defaults
=
libmp3lame_defaults
,
...
...
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