#include <speex/speex.h>
#include <speex/speex_header.h>
#include <speex/speex_stereo.h>
#include "libavutil/audioconvert.h"
#include "libavutil/common.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "internal.h"
#include "audio_frame_queue.h"
Go to the source code of this file.
Data Structures | |
| struct | LibSpeexEncContext |
Defines | |
| #define | OFFSET(x) offsetof(LibSpeexEncContext, x) |
| #define | AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM |
Functions | |
| static av_cold void | print_enc_params (AVCodecContext *avctx, LibSpeexEncContext *s) |
| static av_cold int | encode_init (AVCodecContext *avctx) |
| static int | encode_frame (AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr) |
| static av_cold int | encode_close (AVCodecContext *avctx) |
Variables | |
| static const AVOption | options [] |
| class { | |
| class_name = "libspeex" | |
| item_name = av_default_item_name | |
| option = options | |
| version = LIBAVUTIL_VERSION_INT | |
| }; | |
| static const AVCodecDefault | defaults [] |
| AVCodec | ff_libspeex_encoder |
Usage Guide This explains the values that need to be set prior to initialization in order to control various encoding parameters.
Channels Speex only supports mono or stereo, so avctx->channels must be set to 1 or 2.
Sample Rate / Encoding Mode Speex has 3 modes, each of which uses a specific sample rate. narrowband : 8 kHz wideband : 16 kHz ultra-wideband : 32 kHz avctx->sample_rate must be set to one of these 3 values. This will be used to set the encoding mode.
Rate Control VBR mode is turned on by setting CODEC_FLAG_QSCALE in avctx->flags. avctx->global_quality is used to set the encoding quality. For CBR mode, avctx->bit_rate can be used to set the constant bitrate. Alternatively, the 'cbr_quality' option can be set from 0 to 10 to set a constant bitrate based on quality. For ABR mode, set avctx->bit_rate and set the 'abr' option to 1. Approx. Bitrate Range: narrowband : 2400 - 25600 bps wideband : 4000 - 43200 bps ultra-wideband : 4400 - 45200 bps
Complexity Encoding complexity is controlled by setting avctx->compression_level. The valid range is 0 to 10. A higher setting gives generally better quality at the expense of encoding speed. This does not affect the bit rate.
Frames-per-Packet The encoder defaults to using 1 frame-per-packet. However, it is sometimes desirable to use multiple frames-per-packet to reduce the amount of container overhead. This can be done by setting the 'frames_per_packet' option to a value 1 to 8.
Definition in file libspeexenc.c.
| #define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM |
Definition at line 306 of file libspeexenc.c.
| #define OFFSET | ( | x | ) | offsetof(LibSpeexEncContext, x) |
Definition at line 305 of file libspeexenc.c.
| static av_cold int encode_close | ( | AVCodecContext * | avctx | ) | [static] |
| static int encode_frame | ( | AVCodecContext * | avctx, | |
| AVPacket * | avpkt, | |||
| const AVFrame * | frame, | |||
| int * | got_packet_ptr | |||
| ) | [static] |
Definition at line 244 of file libspeexenc.c.
| static av_cold int encode_init | ( | AVCodecContext * | avctx | ) | [static] |
Definition at line 123 of file libspeexenc.c.
| static av_cold void print_enc_params | ( | AVCodecContext * | avctx, | |
| LibSpeexEncContext * | s | |||
| ) | [static] |
const { ... } [static] |
| class_name = "libspeex" |
Definition at line 315 of file libspeexenc.c.
const AVCodecDefault defaults[] [static] |
Initial value:
{
{ "b", "0" },
{ "compression_level", "3" },
{ NULL },
}
Definition at line 321 of file libspeexenc.c.
Initial value:
{
.name = "libspeex",
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_SPEEX,
.priv_data_size = sizeof(LibSpeexEncContext),
.init = encode_init,
.encode2 = encode_frame,
.close = encode_close,
.capabilities = CODEC_CAP_DELAY,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
AV_SAMPLE_FMT_NONE },
.channel_layouts = (const uint64_t[]){ AV_CH_LAYOUT_MONO,
AV_CH_LAYOUT_STEREO,
0 },
.supported_samplerates = (const int[]){ 8000, 16000, 32000, 0 },
.long_name = NULL_IF_CONFIG_SMALL("libspeex Speex"),
.priv_class = &class,
.defaults = defaults,
}
Definition at line 327 of file libspeexenc.c.
| item_name = av_default_item_name |
Definition at line 316 of file libspeexenc.c.
Definition at line 317 of file libspeexenc.c.
Initial value:
{
{ "abr", "Use average bit rate", OFFSET(abr), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AE },
{ "cbr_quality", "Set quality value (0 to 10) for CBR", OFFSET(cbr_quality), AV_OPT_TYPE_INT, { .i64 = 8 }, 0, 10, AE },
{ "frames_per_packet", "Number of frames to encode in each packet", OFFSET(frames_per_packet), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, 8, AE },
{ NULL },
}
Definition at line 307 of file libspeexenc.c.
Definition at line 318 of file libspeexenc.c.
1.5.8