FFmpeg
|
#include <speex/speex.h>
#include <speex/speex_header.h>
#include <speex/speex_stereo.h>
#include "libavutil/channel_layout.h"
#include "libavutil/common.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "codec_internal.h"
#include "encode.h"
#include "audio_frame_queue.h"
Go to the source code of this file.
Data Structures | |
struct | LibSpeexEncContext |
Macros | |
#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 [] |
static const AVClass | speex_class |
static const FFCodecDefault | defaults [] |
const FFCodec | ff_libspeex_encoder |
libspeex Speex audio 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->ch_layout.nb_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 AV_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.
Optional features Speex encoder supports several optional features, which can be useful for some conditions.
Voice Activity Detection When enabled, voice activity detection detects whether the audio being encoded is speech or silence/background noise. VAD is always implicitly activated when encoding in VBR, so the option is only useful in non-VBR operation. In this case, Speex detects non-speech periods and encodes them with just enough bits to reproduce the background noise.
Discontinuous Transmission (DTX) DTX is an addition to VAD/VBR operation, that makes it possible to stop transmitting completely when the background noise is stationary. In file-based operation only 5 bits are used for such frames.
Definition in file libspeexenc.c.
#define OFFSET | ( | x | ) | offsetof(LibSpeexEncContext, x) |
Definition at line 321 of file libspeexenc.c.
#define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM |
Definition at line 322 of file libspeexenc.c.
|
static |
Definition at line 113 of file libspeexenc.c.
Referenced by encode_init().
|
static |
Definition at line 147 of file libspeexenc.c.
|
static |
Definition at line 264 of file libspeexenc.c.
|
static |
Definition at line 309 of file libspeexenc.c.
Definition at line 323 of file libspeexenc.c.
|
static |
Definition at line 332 of file libspeexenc.c.
|
static |
Definition at line 339 of file libspeexenc.c.
const FFCodec ff_libspeex_encoder |
Definition at line 345 of file libspeexenc.c.