FFmpeg
Loading...
Searching...
No Matches
libopusenc.c
Go to the documentation of this file.
1/*
2 * Opus encoder using libopus
3 * Copyright (c) 2012 Nathan Caldwell
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22#include <opus.h>
23#include <opus_multistream.h>
24
26#include "libavutil/mem.h"
27#include "libavutil/opt.h"
28#include "avcodec.h"
29#include "bytestream.h"
30#include "codec_internal.h"
31#include "encode.h"
32#include "libopus.h"
33#include "audio_frame_queue.h"
34#include "vorbis_data.h"
35
36typedef struct LibopusEncOpts {
37 int vbr;
40 int fec;
46 int dtx;
47#ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST
48 int apply_phase_inv;
49#endif
51
61
62static const uint8_t opus_coupled_streams[8] = {
63 0, 1, 1, 2, 2, 2, 2, 3
64};
65
66/* Opus internal to Vorbis channel order mapping written in the header */
67static const uint8_t opus_vorbis_channel_map[8][8] = {
68 { 0 },
69 { 0, 1 },
70 { 0, 2, 1 },
71 { 0, 1, 2, 3 },
72 { 0, 4, 1, 2, 3 },
73 { 0, 4, 1, 2, 3, 5 },
74 { 0, 4, 1, 2, 3, 5, 6 },
75 { 0, 6, 1, 2, 3, 4, 5, 7 },
76};
77
78/* libavcodec to libopus channel order mapping, passed to libopus */
79static const uint8_t libavcodec_libopus_channel_map[8][8] = {
80 { 0 },
81 { 0, 1 },
82 { 0, 1, 2 },
83 { 0, 1, 2, 3 },
84 { 0, 1, 3, 4, 2 },
85 { 0, 1, 4, 5, 2, 3 },
86 { 0, 1, 5, 6, 2, 4, 3 },
87 { 0, 1, 6, 7, 4, 5, 2, 3 },
88};
89
90static void libopus_write_header(AVCodecContext *avctx, int stream_count,
91 int coupled_stream_count,
92 int mapping_family,
93 const uint8_t *channel_mapping)
94{
95 uint8_t *p = avctx->extradata;
96 int channels = avctx->ch_layout.nb_channels;
97
98 bytestream_put_buffer(&p, "OpusHead", 8);
99 bytestream_put_byte(&p, 1); /* Version */
100 bytestream_put_byte(&p, channels);
101 bytestream_put_le16(&p, avctx->initial_padding * 48000 / avctx->sample_rate); /* Lookahead samples at 48kHz */
102 bytestream_put_le32(&p, avctx->sample_rate); /* Original sample rate */
103 bytestream_put_le16(&p, 0); /* Gain of 0dB is recommended. */
104
105 /* Channel mapping */
106 bytestream_put_byte(&p, mapping_family);
107 if (mapping_family != 0) {
108 bytestream_put_byte(&p, stream_count);
109 bytestream_put_byte(&p, coupled_stream_count);
110 bytestream_put_buffer(&p, channel_mapping, channels);
111 }
112}
113
114static int libopus_configure_encoder(AVCodecContext *avctx, OpusMSEncoder *enc,
116{
117 int ret;
118
119 if (avctx->global_quality) {
120 av_log(avctx, AV_LOG_ERROR,
121 "Quality-based encoding not supported, "
122 "please specify a bitrate and VBR setting.\n");
123 return AVERROR(EINVAL);
124 }
125
126 ret = opus_multistream_encoder_ctl(enc, OPUS_SET_BITRATE(avctx->bit_rate));
127 if (ret != OPUS_OK) {
128 av_log(avctx, AV_LOG_ERROR,
129 "Failed to set bitrate: %s\n", opus_strerror(ret));
130 return ret;
131 }
132
133 ret = opus_multistream_encoder_ctl(enc,
134 OPUS_SET_COMPLEXITY(opts->complexity));
135 if (ret != OPUS_OK)
136 av_log(avctx, AV_LOG_WARNING,
137 "Unable to set complexity: %s\n", opus_strerror(ret));
138
139 ret = opus_multistream_encoder_ctl(enc, OPUS_SET_VBR(!!opts->vbr));
140 if (ret != OPUS_OK)
141 av_log(avctx, AV_LOG_WARNING,
142 "Unable to set VBR: %s\n", opus_strerror(ret));
143
144 ret = opus_multistream_encoder_ctl(enc,
145 OPUS_SET_VBR_CONSTRAINT(opts->vbr == 2));
146 if (ret != OPUS_OK)
147 av_log(avctx, AV_LOG_WARNING,
148 "Unable to set constrained VBR: %s\n", opus_strerror(ret));
149
150 ret = opus_multistream_encoder_ctl(enc,
151 OPUS_SET_PACKET_LOSS_PERC(opts->packet_loss));
152 if (ret != OPUS_OK)
153 av_log(avctx, AV_LOG_WARNING,
154 "Unable to set expected packet loss percentage: %s\n",
155 opus_strerror(ret));
156
157 ret = opus_multistream_encoder_ctl(enc,
158 OPUS_SET_INBAND_FEC(opts->fec));
159 if (ret != OPUS_OK)
160 av_log(avctx, AV_LOG_WARNING,
161 "Unable to set inband FEC: %s\n",
162 opus_strerror(ret));
163
164 ret = opus_multistream_encoder_ctl(enc,
165 OPUS_SET_DTX(opts->dtx));
166 if (ret != OPUS_OK)
167 av_log(avctx, AV_LOG_WARNING,
168 "Unable to set DTX: %s\n",
169 opus_strerror(ret));
170
171 if (avctx->cutoff) {
172 ret = opus_multistream_encoder_ctl(enc,
173 OPUS_SET_MAX_BANDWIDTH(opts->max_bandwidth));
174 if (ret != OPUS_OK)
175 av_log(avctx, AV_LOG_WARNING,
176 "Unable to set maximum bandwidth: %s\n", opus_strerror(ret));
177 }
178
179#ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST
180 ret = opus_multistream_encoder_ctl(enc,
181 OPUS_SET_PHASE_INVERSION_DISABLED(!opts->apply_phase_inv));
182 if (ret != OPUS_OK)
183 av_log(avctx, AV_LOG_WARNING,
184 "Unable to set phase inversion: %s\n",
185 opus_strerror(ret));
186#endif
187 return OPUS_OK;
188}
189
191 int max_channels) {
192 if (avctx->ch_layout.nb_channels > max_channels) {
193 av_log(avctx, AV_LOG_ERROR, "Opus mapping family undefined for %d channels.\n",
194 avctx->ch_layout.nb_channels);
195 return AVERROR(EINVAL);
196 }
197
198 return 0;
199}
200
201static int libopus_check_vorbis_layout(AVCodecContext *avctx, int mapping_family) {
203
205 av_log(avctx, AV_LOG_WARNING,
206 "No channel layout specified. Opus encoder will use Vorbis "
207 "channel layout for %d channels.\n", avctx->ch_layout.nb_channels);
209 char name[32];
210
212 av_log(avctx, AV_LOG_ERROR,
213 "Invalid channel layout %s for specified mapping family %d.\n",
214 name, mapping_family);
215
216 return AVERROR(EINVAL);
217 }
218
219 return 0;
220}
221
223 AVCodecContext *avctx,
224 int mapping_family,
225 const uint8_t ** channel_map_result)
226{
227 const uint8_t * channel_map = NULL;
228 int ret;
229
230 switch (mapping_family) {
231 case -1:
232 ret = libopus_check_max_channels(avctx, 8);
233 if (ret == 0) {
234 ret = libopus_check_vorbis_layout(avctx, mapping_family);
235 /* Channels do not need to be reordered. */
236 }
237
238 break;
239 case 0:
240 ret = libopus_check_max_channels(avctx, 2);
241 if (ret == 0) {
242 ret = libopus_check_vorbis_layout(avctx, mapping_family);
243 }
244 break;
245 case 1:
246 /* Opus expects channels to be in Vorbis order. */
247 ret = libopus_check_max_channels(avctx, 8);
248 if (ret == 0) {
249 ret = libopus_check_vorbis_layout(avctx, mapping_family);
251 }
252 break;
253 case 255:
254 ret = libopus_check_max_channels(avctx, 254);
255 break;
256 default:
257 av_log(avctx, AV_LOG_WARNING,
258 "Unknown channel mapping family %d. Output channel layout may be invalid.\n",
259 mapping_family);
260 ret = 0;
261 }
262
263 *channel_map_result = channel_map;
264 return ret;
265}
266
268{
269 LibopusEncContext *opus = avctx->priv_data;
270 OpusMSEncoder *enc;
271 uint8_t libopus_channel_mapping[255];
272 int ret = OPUS_OK;
273 int channels = avctx->ch_layout.nb_channels;
274 int av_ret;
275 int coupled_stream_count, header_size, frame_size;
276 int mapping_family;
277
278 frame_size = opus->opts.frame_duration * 48000 / 1000;
279 switch (frame_size) {
280 case 120:
281 case 240:
282 if (opus->opts.application != OPUS_APPLICATION_RESTRICTED_LOWDELAY)
283 av_log(avctx, AV_LOG_WARNING,
284 "LPC mode cannot be used with a frame duration of less "
285 "than 10ms. Enabling restricted low-delay mode.\n"
286 "Use a longer frame duration if this is not what you want.\n");
287 /* Frame sizes less than 10 ms can only use MDCT mode, so switching to
288 * RESTRICTED_LOWDELAY avoids an unnecessary extra 2.5ms lookahead. */
289 opus->opts.application = OPUS_APPLICATION_RESTRICTED_LOWDELAY;
291 case 480:
292 case 960:
293 case 1920:
294 case 2880:
295#ifdef OPUS_FRAMESIZE_120_MS
296 case 3840:
297 case 4800:
298 case 5760:
299#endif
300 opus->opts.packet_size =
301 avctx->frame_size = frame_size * avctx->sample_rate / 48000;
302 break;
303 default:
304 av_log(avctx, AV_LOG_ERROR, "Invalid frame duration: %g.\n"
305 "Frame duration must be exactly one of: 2.5, 5, 10, 20, 40"
306#ifdef OPUS_FRAMESIZE_120_MS
307 ", 60, 80, 100 or 120.\n",
308#else
309 " or 60.\n",
310#endif
311 opus->opts.frame_duration);
312 return AVERROR(EINVAL);
313 }
314
315 if (avctx->compression_level < 0 || avctx->compression_level > 10) {
316 av_log(avctx, AV_LOG_WARNING,
317 "Compression level must be in the range 0 to 10. "
318 "Defaulting to 10.\n");
319 opus->opts.complexity = 10;
320 } else {
321 opus->opts.complexity = avctx->compression_level;
322 }
323
324 if (avctx->cutoff) {
325 switch (avctx->cutoff) {
326 case 4000:
328 break;
329 case 6000:
331 break;
332 case 8000:
334 break;
335 case 12000:
337 break;
338 case 20000:
340 break;
341 default:
342 av_log(avctx, AV_LOG_WARNING,
343 "Invalid frequency cutoff: %d. Using default maximum bandwidth.\n"
344 "Cutoff frequency must be exactly one of: 4000, 6000, 8000, 12000 or 20000.\n",
345 avctx->cutoff);
346 avctx->cutoff = 0;
347 }
348 }
349
350 /* Channels may need to be reordered to match opus mapping. */
352 &opus->encoder_channel_map);
353 if (av_ret) {
354 return av_ret;
355 }
356
357 if (opus->opts.mapping_family == -1) {
358 /* By default, use mapping family 1 for the header but use the older
359 * libopus multistream API to avoid surround masking. */
360
361 /* Set the mapping family so that the value is correct in the header */
362 mapping_family = channels > 2 ? 1 : 0;
363 coupled_stream_count = opus_coupled_streams[channels - 1];
364 opus->stream_count = channels - coupled_stream_count;
365 memcpy(libopus_channel_mapping,
367 channels * sizeof(*libopus_channel_mapping));
368
369 enc = opus_multistream_encoder_create(
370 avctx->sample_rate, channels, opus->stream_count,
371 coupled_stream_count,
373 opus->opts.application, &ret);
374 } else {
375 /* Use the newer multistream API. The encoder will set the channel
376 * mapping and coupled stream counts to its internal defaults and will
377 * use surround masking analysis to save bits. */
378 mapping_family = opus->opts.mapping_family;
379 enc = opus_multistream_surround_encoder_create(
380 avctx->sample_rate, channels, mapping_family,
381 &opus->stream_count, &coupled_stream_count, libopus_channel_mapping,
382 opus->opts.application, &ret);
383 }
384
385 if (ret != OPUS_OK) {
386 av_log(avctx, AV_LOG_ERROR,
387 "Failed to create encoder: %s\n", opus_strerror(ret));
388 return ff_opus_error_to_averror(ret);
389 }
390
391 if (!avctx->bit_rate) {
392 /* Sane default copied from opusenc */
393 avctx->bit_rate = 64000 * opus->stream_count +
394 32000 * coupled_stream_count;
395 av_log(avctx, AV_LOG_WARNING,
396 "No bit rate set. Defaulting to %"PRId64" bps.\n", avctx->bit_rate);
397 }
398
399 if (avctx->bit_rate < 500 || avctx->bit_rate > 256000 * channels) {
400 av_log(avctx, AV_LOG_ERROR, "The bit rate %"PRId64" bps is unsupported. "
401 "Please choose a value between 500 and %d.\n", avctx->bit_rate,
402 256000 * channels);
403 ret = AVERROR(EINVAL);
404 goto fail;
405 }
406
407 ret = libopus_configure_encoder(avctx, enc, &opus->opts);
408 if (ret != OPUS_OK) {
409 ret = ff_opus_error_to_averror(ret);
410 goto fail;
411 }
412
413 /* Header includes channel mapping table if and only if mapping family is NOT 0 */
414 header_size = 19 + (mapping_family == 0 ? 0 : 2 + channels);
415 avctx->extradata = av_malloc(header_size + AV_INPUT_BUFFER_PADDING_SIZE);
416 if (!avctx->extradata) {
417 av_log(avctx, AV_LOG_ERROR, "Failed to allocate extradata.\n");
418 ret = AVERROR(ENOMEM);
419 goto fail;
420 }
421 avctx->extradata_size = header_size;
422
425 if (!opus->samples) {
426 av_log(avctx, AV_LOG_ERROR, "Failed to allocate samples buffer.\n");
427 ret = AVERROR(ENOMEM);
428 goto fail;
429 }
430
431 ret = opus_multistream_encoder_ctl(enc, OPUS_GET_LOOKAHEAD(&avctx->initial_padding));
432 if (ret != OPUS_OK)
433 av_log(avctx, AV_LOG_WARNING,
434 "Unable to get number of lookahead samples: %s\n",
435 opus_strerror(ret));
436
437 libopus_write_header(avctx, opus->stream_count, coupled_stream_count,
438 mapping_family, libopus_channel_mapping);
439
440 ff_af_queue_init(avctx, &opus->afq);
441
442 opus->enc = enc;
443
444 return 0;
445
446fail:
447 opus_multistream_encoder_destroy(enc);
448 return ret;
449}
450
452 uint8_t *dst, const uint8_t *src, const uint8_t *channel_map,
453 int nb_channels, int nb_samples, int bytes_per_sample) {
454 int sample, channel;
455 for (sample = 0; sample < nb_samples; ++sample) {
456 for (channel = 0; channel < nb_channels; ++channel) {
457 const size_t src_pos = bytes_per_sample * (nb_channels * sample + channel);
458 const size_t dst_pos = bytes_per_sample * (nb_channels * sample + channel_map[channel]);
459
460 memcpy(&dst[dst_pos], &src[src_pos], bytes_per_sample);
461 }
462 }
463}
464
465static int libopus_encode(AVCodecContext *avctx, AVPacket *avpkt,
466 const AVFrame *frame, int *got_packet_ptr)
467{
468 LibopusEncContext *opus = avctx->priv_data;
469 const int bytes_per_sample = av_get_bytes_per_sample(avctx->sample_fmt);
470 const int channels = avctx->ch_layout.nb_channels;
471 const int sample_size = channels * bytes_per_sample;
472 const uint8_t *audio;
473 int ret;
474
475 if (frame) {
476 ret = ff_af_queue_add(&opus->afq, frame);
477 if (ret < 0)
478 return ret;
479 if (opus->encoder_channel_map != NULL) {
480 audio = opus->samples;
482 opus->samples, frame->data[0], opus->encoder_channel_map,
483 channels, frame->nb_samples, bytes_per_sample);
484 } else if (frame->nb_samples < opus->opts.packet_size) {
485 audio = opus->samples;
486 memcpy(opus->samples, frame->data[0], frame->nb_samples * sample_size);
487 } else
488 audio = frame->data[0];
489 } else {
490 if (!opus->afq.remaining_samples || (!opus->afq.frame_alloc && !opus->afq.frame_count))
491 return 0;
492 audio = opus->samples;
493 memset(opus->samples, 0, opus->opts.packet_size * sample_size);
494 }
495
496 /* Maximum packet size taken from opusenc in opus-tools. 120ms packets
497 * consist of 6 frames in one packet. The maximum frame size is 1275
498 * bytes along with the largest possible packet header of 7 bytes. */
499 if ((ret = ff_alloc_packet(avctx, avpkt, (1275 * 6 + 7) * opus->stream_count)) < 0)
500 return ret;
501
502 if (avctx->sample_fmt == AV_SAMPLE_FMT_FLT)
503 ret = opus_multistream_encode_float(opus->enc, (const float *)audio,
504 opus->opts.packet_size,
505 avpkt->data, avpkt->size);
506 else
507 ret = opus_multistream_encode(opus->enc, (const opus_int16 *)audio,
508 opus->opts.packet_size,
509 avpkt->data, avpkt->size);
510
511 if (ret < 0) {
512 av_log(avctx, AV_LOG_ERROR,
513 "Error encoding frame: %s\n", opus_strerror(ret));
514 return ff_opus_error_to_averror(ret);
515 }
516
517 av_shrink_packet(avpkt, ret);
518
519 ret = ff_af_queue_remove(&opus->afq, opus->opts.packet_size, avpkt);
520 if (ret < 0)
521 return ret;
522
523 *got_packet_ptr = 1;
524
525 return 0;
526}
527
529{
530 LibopusEncContext *opus = avctx->priv_data;
531
532 opus_multistream_encoder_destroy(opus->enc);
533
534 ff_af_queue_close(&opus->afq);
535
536 av_freep(&opus->samples);
537
538 return 0;
539}
540
541#define OFFSET(x) offsetof(LibopusEncContext, opts.x)
542#define FLAGS AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
543static const AVOption libopus_options[] = {
544 { "application", "Intended application type", OFFSET(application), AV_OPT_TYPE_INT, { .i64 = OPUS_APPLICATION_AUDIO }, OPUS_APPLICATION_VOIP, OPUS_APPLICATION_RESTRICTED_LOWDELAY, FLAGS, .unit = "application" },
545 { "voip", "Favor improved speech intelligibility", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_VOIP }, 0, 0, FLAGS, .unit = "application" },
546 { "audio", "Favor faithfulness to the input", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_AUDIO }, 0, 0, FLAGS, .unit = "application" },
547 { "lowdelay", "Restrict to only the lowest delay modes, disable voice-optimized modes", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_RESTRICTED_LOWDELAY }, 0, 0, FLAGS, .unit = "application" },
548 { "frame_duration", "Duration of a frame in milliseconds", OFFSET(frame_duration), AV_OPT_TYPE_FLOAT, { .dbl = 20.0 }, 2.5, 120.0, FLAGS },
549 { "packet_loss", "Expected packet loss percentage", OFFSET(packet_loss), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 100, FLAGS },
550 { "fec", "Enable inband FEC. Expected packet loss must be non-zero", OFFSET(fec), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
551 { "vbr", "Variable bit rate mode", OFFSET(vbr), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 2, FLAGS, .unit = "vbr" },
552 { "off", "Use constant bit rate", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, FLAGS, .unit = "vbr" },
553 { "on", "Use variable bit rate", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, FLAGS, .unit = "vbr" },
554 { "constrained", "Use constrained VBR", 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, 0, 0, FLAGS, .unit = "vbr" },
555 { "mapping_family", "Channel Mapping Family", OFFSET(mapping_family), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 255, FLAGS, .unit = "mapping_family" },
556 { "dtx", "Enable DTX (Discontinuous transmission)", OFFSET(dtx), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
557#ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST
558 { "apply_phase_inv", "Apply intensity stereo phase inversion", OFFSET(apply_phase_inv), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, FLAGS },
559#endif
560 { NULL },
561};
562
563static const AVClass libopus_class = {
564 .class_name = "libopus",
565 .item_name = av_default_item_name,
566 .option = libopus_options,
567 .version = LIBAVUTIL_VERSION_INT,
568};
569
571 { "b", "0" },
572 { "compression_level", "10" },
573 { NULL },
574};
575
576static const int libopus_sample_rates[] = {
577 48000, 24000, 16000, 12000, 8000, 0,
578};
579
581 .p.name = "libopus",
582 CODEC_LONG_NAME("libopus Opus"),
583 .p.type = AVMEDIA_TYPE_AUDIO,
584 .p.id = AV_CODEC_ID_OPUS,
585 .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
587 .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE,
588 .priv_data_size = sizeof(LibopusEncContext),
591 .close = libopus_encode_close,
594 .p.priv_class = &libopus_class,
595 .defaults = libopus_defaults,
596 .p.wrapper_name = "libopus",
597};
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
const FFCodec ff_libopus_encoder
Definition libopusenc.c:580
static AVDictionary * opts
channels
Definition aptx.h:31
static const uint8_t channel_map[8][8]
av_cold void ff_af_queue_close(AudioFrameQueue *afq)
Close AudioFrameQueue.
av_cold void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
Initialize AudioFrameQueue.
int ff_af_queue_remove(AudioFrameQueue *afq, int nb_samples, AVPacket *pkt)
Remove frame(s) from the queue.
int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f)
Add a frame to the queue.
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition avassert.h:68
Libavcodec external API header.
static av_always_inline void bytestream_put_buffer(uint8_t **b, const uint8_t *src, unsigned int size)
Definition bytestream.h:372
Public libavutil channel layout APIs header.
#define FLAGS
Definition cmdutils.c:598
#define CODEC_SAMPLERATES_ARRAY(array)
#define FF_CODEC_CAP_NOT_INIT_THREADSAFE
The codec is not known to be init-threadsafe (i.e.
#define FF_CODEC_ENCODE_CB(func)
#define CODEC_LONG_NAME(str)
#define CODEC_SAMPLEFMTS(...)
#define NULL
Definition coverity.c:32
static AVFrame * frame
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
channel
Use these values when setting the channel map with ebur128_set_channel().
Definition ebur128.h:39
int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
Check AVPacket size and allocate data.
Definition encode.c:62
#define sample
static const uint8_t frame_size[4]
Definition g723_1.h:222
#define fail
Definition test.h:479
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition opt.h:298
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258
@ AV_OPT_TYPE_FLOAT
Underlying C type is float.
Definition opt.h:270
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition opt.h:326
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition codec.h:79
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition codec.h:49
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
Definition codec.h:84
@ AV_CODEC_ID_OPUS
Definition codec_id.h:513
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
Definition defs.h:40
void av_shrink_packet(AVPacket *pkt, int size)
Reduce packet size, correctly zeroing padding.
Definition packet.c:113
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
int av_channel_layout_describe(const AVChannelLayout *channel_layout, char *buf, size_t buf_size)
Get a human-readable string describing the channel layout properties.
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
#define AVERROR(e)
Definition error.h:45
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition log.h:216
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
Definition samplefmt.c:108
@ AV_SAMPLE_FMT_FLT
float
Definition samplefmt.h:60
@ AV_SAMPLE_FMT_S16
signed 16 bits
Definition samplefmt.h:58
#define LIBAVUTIL_VERSION_INT
Definition version.h:85
#define av_fallthrough
Definition attributes.h:67
#define av_cold
Definition attributes.h:117
int ff_opus_error_to_averror(int err)
Definition libopus.c:27
static const uint8_t libavcodec_libopus_channel_map[8][8]
Definition libopusenc.c:79
static av_cold int libopus_encode_init(AVCodecContext *avctx)
Definition libopusenc.c:267
static void libopus_copy_samples_with_channel_map(uint8_t *dst, const uint8_t *src, const uint8_t *channel_map, int nb_channels, int nb_samples, int bytes_per_sample)
Definition libopusenc.c:451
static const int libopus_sample_rates[]
Definition libopusenc.c:576
static int libopus_check_vorbis_layout(AVCodecContext *avctx, int mapping_family)
Definition libopusenc.c:201
static av_cold int libopus_encode_close(AVCodecContext *avctx)
Definition libopusenc.c:528
static const uint8_t opus_vorbis_channel_map[8][8]
Definition libopusenc.c:67
static const FFCodecDefault libopus_defaults[]
Definition libopusenc.c:570
static int libopus_validate_layout_and_get_channel_map(AVCodecContext *avctx, int mapping_family, const uint8_t **channel_map_result)
Definition libopusenc.c:222
static int libopus_encode(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
Definition libopusenc.c:465
static const AVOption libopus_options[]
Definition libopusenc.c:543
static int libopus_configure_encoder(AVCodecContext *avctx, OpusMSEncoder *enc, LibopusEncOpts *opts)
Definition libopusenc.c:114
static const AVClass libopus_class
Definition libopusenc.c:563
#define OFFSET(x)
Definition libopusenc.c:541
static const uint8_t opus_coupled_streams[8]
Definition libopusenc.c:62
static void libopus_write_header(AVCodecContext *avctx, int stream_count, int coupled_stream_count, int mapping_family, const uint8_t *channel_mapping)
Definition libopusenc.c:90
static int libopus_check_max_channels(AVCodecContext *avctx, int max_channels)
Definition libopusenc.c:190
void * av_calloc(size_t nmemb, size_t size)
Definition mem.c:264
Memory handling functions.
#define av_malloc(s)
Definition ops_static.c:52
AVOptions.
@ OPUS_BANDWIDTH_NARROWBAND
Definition opus.h:50
@ OPUS_BANDWIDTH_MEDIUMBAND
Definition opus.h:51
@ OPUS_BANDWIDTH_FULLBAND
Definition opus.h:54
@ OPUS_BANDWIDTH_SUPERWIDEBAND
Definition opus.h:53
@ OPUS_BANDWIDTH_WIDEBAND
Definition opus.h:52
const char * name
Definition qsvenc.c:142
#define FF_ARRAY_ELEMS(a)
enum AVChannelOrder order
Channel order used in this layout.
int nb_channels
Number of channels in this layout.
Describe the class of an AVClass context structure.
Definition log.h:76
main external API structure.
Definition avcodec.h:443
AVChannelLayout ch_layout
Audio channel layout.
Definition avcodec.h:1055
enum AVSampleFormat sample_fmt
audio sample format
Definition avcodec.h:1047
int global_quality
Global quality for codecs which cannot change it per frame.
Definition avcodec.h:1235
int64_t bit_rate
the average bitrate
Definition avcodec.h:493
int initial_padding
Audio only.
Definition avcodec.h:1114
int sample_rate
samples per second
Definition avcodec.h:1040
int compression_level
Definition avcodec.h:1241
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition avcodec.h:526
int extradata_size
Definition avcodec.h:527
int cutoff
Audio cutoff bandwidth (0 means "automatic")
Definition avcodec.h:1082
int frame_size
Number of samples per channel in an audio frame.
Definition avcodec.h:1068
void * priv_data
Definition avcodec.h:470
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
AVOption.
Definition opt.h:428
This structure stores compressed data.
Definition packet.h:580
int size
Definition packet.h:604
uint8_t * data
Definition packet.h:603
AudioFrameQueue afq
Definition libopusenc.c:58
const uint8_t * encoder_channel_map
Definition libopusenc.c:59
uint8_t * samples
Definition libopusenc.c:56
LibopusEncOpts opts
Definition libopusenc.c:57
OpusMSEncoder * enc
Definition libopusenc.c:54
float frame_duration
Definition libopusenc.c:42
#define av_freep(p)
#define av_log(a,...)
#define src
Definition vp8dsp.c:248
const AVChannelLayout ff_vorbis_ch_layouts[9]
Definition vorbis_data.c:37
const uint8_t ff_vorbis_channel_layout_offsets[8][8]
Definition vorbis_data.c:26