27 #include <vorbis/vorbisenc.h>
46 #define OGGVORBIS_FRAME_SIZE 64
48 #define BUFFER_SIZE (1024 * 64)
82 case OV_EINVAL:
return AVERROR(EINVAL);
83 case OV_EIMPL:
return AVERROR(EINVAL);
104 if ((ret = vorbis_encode_setup_vbr(vi, avctx->
channels,
113 if ((ret = vorbis_encode_setup_managed(vi, avctx->
channels,
119 if (minrate == -1 && maxrate == -1)
120 if ((ret = vorbis_encode_ctl(vi, OV_ECTL_RATEMANAGE2_SET,
NULL)))
126 cfreq = avctx->
cutoff / 1000.0;
127 if ((ret = vorbis_encode_ctl(vi, OV_ECTL_LOWPASS_SET, &cfreq)))
133 if ((ret = vorbis_encode_ctl(vi, OV_ECTL_IBLOCK_SET, &s->
iblock)))
137 if ((ret = vorbis_encode_setup_init(vi)))
148 return 1 + l / 255 + l;
157 vorbis_analysis_wrote(&s->
vd, 0);
159 vorbis_block_clear(&s->
vb);
160 vorbis_dsp_clear(&s->
vd);
161 vorbis_info_clear(&s->
vi);
178 vorbis_info_init(&s->
vi);
183 if ((ret = vorbis_analysis_init(&s->
vd, &s->
vi))) {
189 if ((ret = vorbis_block_init(&s->
vd, &s->
vb))) {
195 vorbis_comment_init(&s->
vc);
198 if ((ret = vorbis_analysis_headerout(&s->
vd, &s->
vc, &header, &header_comm,
217 memcpy(&p[offset], header.packet, header.bytes);
218 offset += header.bytes;
219 memcpy(&p[offset], header_comm.packet, header_comm.bytes);
220 offset += header_comm.bytes;
221 memcpy(&p[offset], header_code.packet, header_code.bytes);
222 offset += header_code.bytes;
230 vorbis_comment_clear(&s->
vc);
248 const AVFrame *frame,
int *got_packet_ptr)
258 int c, channels = s->
vi.channels;
260 buffer = vorbis_analysis_buffer(&s->
vd, samples);
261 for (c = 0; c < channels; c++) {
262 int co = (channels > 8) ? c :
265 samples *
sizeof(*buffer[c]));
267 if ((ret = vorbis_analysis_wrote(&s->
vd, samples)) < 0) {
275 if ((ret = vorbis_analysis_wrote(&s->
vd, 0)) < 0) {
283 while ((ret = vorbis_analysis_blockout(&s->
vd, &s->
vb)) == 1) {
284 if ((ret = vorbis_analysis(&s->
vb,
NULL)) < 0)
286 if ((ret = vorbis_bitrate_addblock(&s->
vb)) < 0)
290 while ((ret = vorbis_bitrate_flushpacket(&s->
vd, &op)) == 1) {
350 .priv_class = &
class,
static const AVCodecDefault defaults[]
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
#define OGGVORBIS_FRAME_SIZE
This structure describes decoded (raw) audio or video data.
static int oggvorbis_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
int avpriv_vorbis_parse_frame(VorbisParseContext *s, const uint8_t *buf, int buf_size)
Get the duration for a Vorbis packet.
#define AV_OPT_FLAG_AUDIO_PARAM
int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int(*func)(void *, void *, int))
Feed data from a user-supplied callback to an AVFifoBuffer.
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
AVFifoBuffer * pkt_fifo
output packet buffer
av_cold void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
Initialize AudioFrameQueue.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
static const AVOption options[]
void av_fifo_free(AVFifoBuffer *f)
Free an AVFifoBuffer.
int duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding
AVCodec ff_libvorbis_encoder
int dsp_initialized
vd has been initialized
#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 NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static int vorbis_error_to_averror(int ov_err)
int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void(*func)(void *, void *, int))
Feed data from an AVFifoBuffer to a user-supplied callback.
#define CODEC_FLAG_QSCALE
Use fixed qscale.
int rc_max_rate
maximum bitrate
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
double iblock
impulse block bias option
int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f)
Add a frame to the queue.
vorbis_dsp_state vd
DSP state used for analysis.
#define FF_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
int bit_rate
the average bitrate
int ff_alloc_packet(AVPacket *avpkt, int size)
Check AVPacket size and/or allocate data.
static av_cold int oggvorbis_init_encoder(vorbis_info *vi, AVCodecContext *avctx)
AVClass * av_class
class for AVOptions
int frame_size
Number of samples per channel in an audio frame.
const uint8_t ff_vorbis_encoding_channel_layout_offsets[8][8]
int av_fifo_space(AVFifoBuffer *f)
Return the amount of space in bytes in the AVFifoBuffer, that is the amount of data you can write int...
VorbisParseContext vp
parse context to get durations
Libavcodec external API header.
int sample_rate
samples per second
main external API structure.
static void close(AVCodecParserContext *s)
a very simple circular buffer FIFO implementation
AudioFrameQueue afq
frame queue for timestamps
#define AVERROR_BUG
Bug detected, please report the issue.
unsigned int av_xiphlacing(unsigned char *s, unsigned int v)
Encode extradata length to a buffer.
Describe the class of an AVClass context structure.
vorbis_block vb
vorbis_block used for analysis
vorbis_info vi
vorbis_info used during init
int global_quality
Global quality for codecs which cannot change it per frame.
static int op(uint8_t **dst, const uint8_t *dst_end, GetByteContext *gb, int pixel, int count, int *x, int width, int linesize)
Perform decode operation.
int av_fifo_size(AVFifoBuffer *f)
Return the amount of data in bytes in the AVFifoBuffer, that is the amount of data you can read from ...
common internal api header.
AVSampleFormat
Audio Sample Formats.
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
static av_cold int init(AVCodecParserContext *s)
int cutoff
Audio cutoff bandwidth (0 means "automatic")
static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize, int64_t *fpos)
AVFifoBuffer * av_fifo_alloc(unsigned int size)
Initialize an AVFifoBuffer.
static av_cold int oggvorbis_encode_close(AVCodecContext *avctx)
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.
int avpriv_vorbis_parse_extradata(AVCodecContext *avctx, VorbisParseContext *s)
Initialize the Vorbis parser using headers in the extradata.
static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, int64_t samples)
Rescale from sample rate to AVCodecContext.time_base.
int rc_min_rate
minimum bitrate
uint8_t ** extended_data
pointers to the data planes/channels.
static av_cold int oggvorbis_encode_init(AVCodecContext *avctx)
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...
static int xiph_len(int l)
vorbis_comment vc
VorbisComment info.