27 #include <lame/lame.h>
41 #define BUFFER_SIZE (7200 + 2 * MPA_FRAME_SIZE + MPA_FRAME_SIZE / 4+1000) // FIXME: Buffer size to small? Adding 1000 to make up for it.
46 lame_global_flags *
gfp;
98 if (!(s->
gfp = lame_init()))
115 lame_set_VBR(s->
gfp, vbr_default);
120 lame_set_VBR(s->
gfp, vbr_abr);
121 lame_set_VBR_mean_bitrate_kbps(s->
gfp, avctx->
bit_rate / 1000);
128 lame_set_bWriteVbrTag(s->
gfp,0);
134 if (lame_init_params(s->
gfp) < 0) {
148 for (ch = 0; ch < avctx->
channels; ch++) {
175 #define ENCODE_BUFFER(func, buf_type, buf_name) do { \
176 lame_result = func(s->gfp, \
177 (const buf_type *)buf_name[0], \
178 (const buf_type *)buf_name[1], frame->nb_samples, \
179 s->buffer + s->buffer_index, \
180 s->buffer_size - s->buffer_index); \
205 for (ch = 0; ch < avctx->
channels; ch++) {
207 (
const float *)frame->
data[ch],
222 if (lame_result < 0) {
223 if (lame_result == -1) {
225 "lame: output buffer too small (buffer index: %d, free bytes: %d)\n",
257 len = hdr.frame_size;
260 if (len <= s->buffer_index) {
277 #define OFFSET(x) offsetof(LAMEContext, x)
278 #define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
299 44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000, 0
303 .
name =
"libmp3lame",
static int mp3lame_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
static const AVClass libmp3lame_class
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
Check AVPacket size and/or allocate data.
#define FF_COMPRESSION_DEFAULT
This structure describes decoded (raw) audio or video data.
#define LIBAVUTIL_VERSION_INT
static av_cold int mp3lame_encode_init(AVCodecContext *avctx)
static av_cold int init(AVCodecContext *avctx)
static const int libmp3lame_sample_rates[]
AVCodec ff_libmp3lame_encoder
#define AV_CH_LAYOUT_STEREO
static av_cold int mp3lame_encode_close(AVCodecContext *avctx)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
enum AVSampleFormat sample_fmt
audio sample format
av_cold void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
Initialize AudioFrameQueue.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
int av_reallocp(void *ptr, size_t size)
Allocate or reallocate a block of memory.
#define CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
int duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
int initial_padding
Audio only.
preferred ID for decoding MPEG audio layer 1, 2 or 3
#define CODEC_FLAG_QSCALE
Use fixed qscale.
const char * name
Name of the codec implementation.
static const AVOption options[]
static const AVCodecDefault libmp3lame_defaults[]
int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f)
Add a frame to the queue.
Libavcodec external API header.
static int realloc_buffer(LAMEContext *s)
int bit_rate
the average bitrate
audio channel layout utility functions
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
int frame_size
Number of samples per channel in an audio frame.
AVSampleFormat
Audio sample formats.
int sample_rate
samples per second
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
main external API structure.
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
Describe the class of an AVClass context structure.
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
int global_quality
Global quality for codecs which cannot change it per frame.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
common internal api header.
common internal and external API header
mpeg audio declarations for both encoder and decoder.
#define ENCODE_BUFFER(func, buf_type, buf_name)
void ff_af_queue_remove(AudioFrameQueue *afq, int nb_samples, int64_t *pts, int *duration)
Remove frame(s) from the queue.
int channels
number of audio channels
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
void ff_af_queue_close(AudioFrameQueue *afq)
Close AudioFrameQueue.
static enum AVSampleFormat sample_fmts[]
#define av_malloc_array(a, b)
#define AV_CH_LAYOUT_MONO
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...