FFmpeg
Loading...
Searching...
No Matches
avcodec.c
Go to the documentation of this file.
1/*
2 * AVCodecContext functions for libavcodec
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21/**
22 * @file
23 * AVCodecContext functions for libavcodec
24 */
25
26#include <assert.h>
27
28#include "config.h"
29#include "libavutil/avassert.h"
30#include "libavutil/avstring.h"
31#include "libavutil/bprint.h"
33#include "libavutil/common.h"
34#include "libavutil/emms.h"
35#include "libavutil/imgutils.h"
36#include "libavutil/mem.h"
37#include "libavutil/opt.h"
38#include "libavutil/thread.h"
39#include "avcodec.h"
40#include "avcodec_internal.h"
41#include "bsf.h"
42#include "codec_desc.h"
43#include "codec_internal.h"
44#include "decode.h"
46#include "hwconfig.h"
47#include "internal.h"
48#include "libavutil/refstruct.h"
49
50/**
51 * Maximum size in bytes of extradata.
52 * This value was chosen such that every bit of the buffer is
53 * addressable by a 32-bit signed integer as used by get_bits.
54 */
55#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - AV_INPUT_BUFFER_PADDING_SIZE)
56
71
72
73int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)
74{
75 size_t i;
76
77 for (i = 0; i < count; i++) {
78 size_t offset = i * size;
79 int r = func(c, FF_PTR_ADD((char *)arg, offset));
80 if (ret)
81 ret[i] = r;
82 }
83 emms_c();
84 return 0;
85}
86
87int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int jobnr, int threadnr), void *arg, int *ret, int count)
88{
89 int i;
90
91 for (i = 0; i < count; i++) {
92 int r = func(c, arg, i, 0);
93 if (ret)
94 ret[i] = r;
95 }
96 emms_c();
97 return 0;
98}
99
101
102static void lock_avcodec(const FFCodec *codec)
103{
106}
107
108static void unlock_avcodec(const FFCodec *codec)
109{
112}
113
115{
116 int64_t bit_rate;
117 int bits_per_sample;
118
119 switch (ctx->codec_type) {
124 bit_rate = ctx->bit_rate;
125 break;
127 bits_per_sample = av_get_bits_per_sample(ctx->codec_id);
128 if (bits_per_sample) {
129 bit_rate = ctx->sample_rate * (int64_t)ctx->ch_layout.nb_channels;
130 if (bit_rate > INT64_MAX / bits_per_sample) {
131 bit_rate = 0;
132 } else
133 bit_rate *= bits_per_sample;
134 } else
135 bit_rate = ctx->bit_rate;
136 break;
137 default:
138 bit_rate = 0;
139 break;
140 }
141 return bit_rate;
142}
143
145{
146 int ret = 0;
147 AVCodecInternal *avci;
148 const FFCodec *codec2;
149 const AVDictionaryEntry *e;
150
151 if (avcodec_is_open(avctx))
152 return 0;
153
154 if (!codec && !avctx->codec) {
155 av_log(avctx, AV_LOG_ERROR, "No codec provided to avcodec_open2()\n");
156 return AVERROR(EINVAL);
157 }
158 if (codec && avctx->codec && codec != avctx->codec) {
159 av_log(avctx, AV_LOG_ERROR, "This AVCodecContext was allocated for %s, "
160 "but %s passed to avcodec_open2()\n", avctx->codec->name, codec->name);
161 return AVERROR(EINVAL);
162 }
163 if (!codec)
164 codec = avctx->codec;
165 codec2 = ffcodec(codec);
166
167 if ((avctx->codec_type != AVMEDIA_TYPE_UNKNOWN && avctx->codec_type != codec->type) ||
168 (avctx->codec_id != AV_CODEC_ID_NONE && avctx->codec_id != codec->id)) {
169 av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n");
170 return AVERROR(EINVAL);
171 }
172
173 avctx->codec_type = codec->type;
174 avctx->codec_id = codec->id;
175 avctx->codec = codec;
176
177 if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE)
178 return AVERROR(EINVAL);
179
180 // set the whitelist from provided options dict,
181 // so we can check it immediately
182 e = options ? av_dict_get(*options, "codec_whitelist", NULL, 0) : NULL;
183 if (e) {
184 ret = av_opt_set(avctx, e->key, e->value, 0);
185 if (ret < 0)
186 return ret;
187 }
188
189 if (avctx->codec_whitelist && av_match_list(codec->name, avctx->codec_whitelist, ',') <= 0) {
190 av_log(avctx, AV_LOG_ERROR, "Codec (%s) not on whitelist \'%s\'\n", codec->name, avctx->codec_whitelist);
191 return AVERROR(EINVAL);
192 }
193
194 avci = ff_codec_is_decoder(codec) ?
197 if (!avci) {
198 ret = AVERROR(ENOMEM);
199 goto end;
200 }
201 avctx->internal = avci;
202
204 avci->buffer_pkt = av_packet_alloc();
205 if (!avci->buffer_frame || !avci->buffer_pkt) {
206 ret = AVERROR(ENOMEM);
207 goto free_and_end;
208 }
209
210 if (codec2->priv_data_size > 0) {
211 if (!avctx->priv_data) {
212 avctx->priv_data = av_mallocz(codec2->priv_data_size);
213 if (!avctx->priv_data) {
214 ret = AVERROR(ENOMEM);
215 goto free_and_end;
216 }
217 if (codec->priv_class) {
218 *(const AVClass **)avctx->priv_data = codec->priv_class;
220 }
221 }
222 } else {
223 avctx->priv_data = NULL;
224 }
225
227 if (ret < 0)
228 goto free_and_end;
229
230 // only call ff_set_dimensions() for non H.264/VP6F/DXV codecs so as not to overwrite previously setup dimensions
231 if (!(avctx->coded_width && avctx->coded_height && avctx->width && avctx->height &&
232 (avctx->codec_id == AV_CODEC_ID_H264 || avctx->codec_id == AV_CODEC_ID_VP6F || avctx->codec_id == AV_CODEC_ID_DXV))) {
233 if (avctx->coded_width && avctx->coded_height)
234 ret = ff_set_dimensions(avctx, avctx->coded_width, avctx->coded_height);
235 else if (avctx->width && avctx->height)
236 ret = ff_set_dimensions(avctx, avctx->width, avctx->height);
237 if (ret < 0)
238 goto free_and_end;
239 }
240
241 if ((avctx->coded_width || avctx->coded_height || avctx->width || avctx->height)
242 && ( av_image_check_size2(avctx->coded_width, avctx->coded_height, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx) < 0
243 || av_image_check_size2(avctx->width, avctx->height, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx) < 0)) {
244 av_log(avctx, AV_LOG_WARNING, "Ignoring invalid width/height values\n");
245 ff_set_dimensions(avctx, 0, 0);
246 }
247
248 if (avctx->width > 0 && avctx->height > 0) {
249 if (av_image_check_sar(avctx->width, avctx->height,
250 avctx->sample_aspect_ratio) < 0) {
251 av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %u/%u\n",
253 avctx->sample_aspect_ratio.den);
254 avctx->sample_aspect_ratio = (AVRational){ 0, 1 };
255 }
256 }
257
258 /* AV_CODEC_CAP_CHANNEL_CONF is a decoder-only flag; so the code below
259 * in particular checks that sample_rate is set for all audio encoders. */
260 if (avctx->sample_rate < 0 ||
261 avctx->sample_rate == 0 && avctx->codec_type == AVMEDIA_TYPE_AUDIO &&
263 av_log(avctx, AV_LOG_ERROR, "Invalid sample rate: %d\n", avctx->sample_rate);
264 ret = AVERROR(EINVAL);
265 goto free_and_end;
266 }
267 if (avctx->block_align < 0) {
268 av_log(avctx, AV_LOG_ERROR, "Invalid block align: %d\n", avctx->block_align);
269 ret = AVERROR(EINVAL);
270 goto free_and_end;
271 }
272
273 /* AV_CODEC_CAP_CHANNEL_CONF is a decoder-only flag; so the code below
274 * in particular checks that nb_channels is set for all audio encoders. */
275 if (avctx->codec_type == AVMEDIA_TYPE_AUDIO && !avctx->ch_layout.nb_channels
277 av_log(avctx, AV_LOG_ERROR, "%s requires channel layout to be set\n",
278 ff_codec_is_decoder(codec) ? "Decoder" : "Encoder");
279 ret = AVERROR(EINVAL);
280 goto free_and_end;
281 }
282 if (avctx->ch_layout.nb_channels && !av_channel_layout_check(&avctx->ch_layout)) {
283 av_log(avctx, AV_LOG_ERROR, "Invalid channel layout\n");
284 ret = AVERROR(EINVAL);
285 goto free_and_end;
286 }
288 av_log(avctx, AV_LOG_ERROR, "Too many channels: %d\n", avctx->ch_layout.nb_channels);
289 ret = AVERROR(EINVAL);
290 goto free_and_end;
291 }
292
293 avctx->frame_num = 0;
295
298 const char *codec_string = ff_codec_is_encoder(codec) ? "encoder" : "decoder";
299 const AVCodec *codec2;
300 av_log(avctx, AV_LOG_ERROR,
301 "The %s '%s' is experimental but experimental codecs are not enabled, "
302 "add '-strict %d' if you want to use it.\n",
304 codec2 = ff_codec_is_encoder(codec) ? avcodec_find_encoder(codec->id) : avcodec_find_decoder(codec->id);
306 av_log(avctx, AV_LOG_ERROR, "Alternatively use the non experimental %s '%s'.\n",
307 codec_string, codec2->name);
309 goto free_and_end;
310 }
311
312 if (avctx->codec_type == AVMEDIA_TYPE_AUDIO &&
313 (!avctx->time_base.num || !avctx->time_base.den)) {
314 avctx->time_base.num = 1;
315 avctx->time_base.den = avctx->sample_rate;
316 }
317
318 if (ff_codec_is_encoder(avctx->codec))
319 ret = ff_encode_preinit(avctx);
320 else
321 ret = ff_decode_preinit(avctx);
322 if (ret < 0)
323 goto free_and_end;
324
325 if (HAVE_THREADS && !avci->frame_thread_encoder) {
326 /* Frame-threaded decoders call FFCodec.init for their child contexts. */
327 lock_avcodec(codec2);
328 ret = ff_thread_init(avctx);
329 unlock_avcodec(codec2);
330 if (ret < 0) {
331 goto free_and_end;
332 }
333 }
334 if (!HAVE_THREADS && !(codec2->caps_internal & FF_CODEC_CAP_AUTO_THREADS))
335 avctx->thread_count = 1;
336
337 if (!(avctx->active_thread_type & FF_THREAD_FRAME) ||
338 avci->frame_thread_encoder) {
339 if (codec2->init) {
340 lock_avcodec(codec2);
341 ret = codec2->init(avctx);
342 unlock_avcodec(codec2);
343 if (ret < 0) {
345 goto free_and_end;
346 }
347 }
348 avci->needs_close = 1;
349 }
350
351 ret=0;
352
353 if (ff_codec_is_decoder(avctx->codec)) {
354 if (!avctx->bit_rate)
355 avctx->bit_rate = get_bit_rate(avctx);
356
357
358 if (avctx->codec_type == AVMEDIA_TYPE_AUDIO &&
359 !avctx->frame_size && (avctx->flags2 & AV_CODEC_FLAG2_FIXED_FRAME_SIZE)) {
360 av_log(avctx, AV_LOG_ERROR, "Fixed frame size requested but no frame_size value set\n");
361 ret = AVERROR(EINVAL);
362 goto free_and_end;
363 }
364
365 avci->skip_samples = avctx->delay;
366
367 /* validate channel layout from the decoder */
368 if ((avctx->ch_layout.nb_channels && !av_channel_layout_check(&avctx->ch_layout)) ||
370 ret = AVERROR(EINVAL);
371 goto free_and_end;
372 }
373 if (avctx->bits_per_coded_sample < 0) {
374 ret = AVERROR(EINVAL);
375 goto free_and_end;
376 }
377 }
378 if (codec->priv_class)
379 av_assert0(*(const AVClass **)avctx->priv_data == codec->priv_class);
380
381end:
382
383 return ret;
384free_and_end:
385 ff_codec_close(avctx);
386 goto end;
387}
388
390{
391 AVCodecInternal *avci = avctx->internal;
392
393 if (av_codec_is_encoder(avctx->codec)) {
394 int caps = avctx->codec->capabilities;
395
396 if (!(caps & AV_CODEC_CAP_ENCODER_FLUSH)) {
397 // Only encoders that explicitly declare support for it can be
398 // flushed. Otherwise, this is a no-op.
399 av_log(avctx, AV_LOG_WARNING, "Ignoring attempt to flush encoder "
400 "that doesn't support it\n");
401 return;
402 }
404 } else
406
407 avci->draining = 0;
408 avci->draining_done = 0;
409 if (avci->buffer_frame)
411 if (avci->buffer_pkt)
413
414 if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME &&
415 !avci->is_frame_mt)
416 ff_thread_flush(avctx);
417 else if (ffcodec(avctx->codec)->flush)
418 ffcodec(avctx->codec)->flush(avctx);
419}
420
422{
423 int i;
424
425 for (i = 0; i < sub->num_rects; i++) {
426 AVSubtitleRect *const rect = sub->rects[i];
427
428 av_freep(&rect->data[0]);
429 av_freep(&rect->data[1]);
430 av_freep(&rect->data[2]);
431 av_freep(&rect->data[3]);
432 av_freep(&rect->text);
433 av_freep(&rect->ass);
434
435 av_freep(&sub->rects[i]);
436 }
437
438 av_freep(&sub->rects);
439
440 memset(sub, 0, sizeof(*sub));
441}
442
444{
445 int i;
446
447 if (avcodec_is_open(avctx)) {
448 AVCodecInternal *avci = avctx->internal;
449
450#if CONFIG_FRAME_THREAD_ENCODER
451 if (avci->frame_thread_encoder && avctx->thread_count > 1) {
453 }
454#endif
455 if (HAVE_THREADS && avci->thread_ctx)
456 ff_thread_free(avctx);
457 if (avci->needs_close && ffcodec(avctx->codec)->close)
458 ffcodec(avctx->codec)->close(avctx);
459 avci->byte_buffer_size = 0;
460 av_freep(&avci->byte_buffer);
464
465 av_packet_free(&avci->in_pkt);
466 av_frame_free(&avci->in_frame);
468
469 av_refstruct_unref(&avci->pool);
471 if (av_codec_is_decoder(avctx->codec))
473
474 ff_hwaccel_uninit(avctx);
475
476 av_bsf_free(&avci->bsf);
477
478#if CONFIG_LCMS2
479 ff_icc_context_uninit(&avci->icc);
480#endif
481
482 av_freep(&avctx->internal);
483 }
484
485 for (i = 0; i < avctx->nb_coded_side_data; i++)
486 av_freep(&avctx->coded_side_data[i].data);
487 av_freep(&avctx->coded_side_data);
488 avctx->nb_coded_side_data = 0;
490 &avctx->nb_decoded_side_data);
491
494
495 if (avctx->priv_data && avctx->codec && avctx->codec->priv_class)
496 av_opt_free(avctx->priv_data);
497 av_opt_free(avctx);
498 av_freep(&avctx->priv_data);
499 if (av_codec_is_encoder(avctx->codec)) {
500 av_freep(&avctx->extradata);
501 avctx->extradata_size = 0;
502 } else if (av_codec_is_decoder(avctx->codec))
503 av_freep(&avctx->subtitle_header);
504
505 avctx->codec = NULL;
506 avctx->active_thread_type = 0;
507}
508
509static const char *unknown_if_null(const char *str)
510{
511 return str ? str : "unknown";
512}
513
514void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
515{
516 const char *codec_type;
517 const char *codec_name;
518 const char *profile = NULL;
519 AVBPrint bprint;
521 int new_line = 0;
522 AVRational display_aspect_ratio;
523 const char *separator = enc->dump_separator ? (const char *)enc->dump_separator : ", ";
524 const char *str;
525
526 if (!buf || buf_size <= 0)
527 return;
528 av_bprint_init_for_buffer(&bprint, buf, buf_size);
530 codec_name = avcodec_get_name(enc->codec_id);
532
533 av_bprintf(&bprint, "%s: %s", codec_type ? codec_type : "unknown",
534 codec_name);
535 buf[0] ^= 'a' ^ 'A'; /* first letter in uppercase */
536
537 if (enc->codec && strcmp(enc->codec->name, codec_name))
538 av_bprintf(&bprint, " (%s)", enc->codec->name);
539
540 if (profile)
541 av_bprintf(&bprint, " (%s)", profile);
542 if ( enc->codec_type == AVMEDIA_TYPE_VIDEO
544 && enc->refs)
545 av_bprintf(&bprint, ", %d reference frame%s",
546 enc->refs, enc->refs > 1 ? "s" : "");
547
548 if (enc->codec_tag)
549 av_bprintf(&bprint, " (%s / 0x%04X)",
550 av_fourcc2str(enc->codec_tag), enc->codec_tag);
551
552 switch (enc->codec_type) {
554 {
555 unsigned len;
556
557 av_bprintf(&bprint, "%s%s", separator,
558 enc->pix_fmt == AV_PIX_FMT_NONE ? "none" :
560
561 av_bprint_chars(&bprint, '(', 1);
562 len = bprint.len;
563
564 /* The following check ensures that '(' has been written
565 * and therefore allows us to erase it if it turns out
566 * to be unnecessary. */
567 if (!av_bprint_is_complete(&bprint))
568 return;
569
570 if (enc->bits_per_raw_sample && enc->pix_fmt != AV_PIX_FMT_NONE &&
571 enc->bits_per_raw_sample < av_pix_fmt_desc_get(enc->pix_fmt)->comp[0].depth)
572 av_bprintf(&bprint, "%d bpc, ", enc->bits_per_raw_sample);
574 (str = av_color_range_name(enc->color_range)))
575 av_bprintf(&bprint, "%s, ", str);
576
577 if (enc->colorspace != AVCOL_SPC_UNSPECIFIED ||
580 const char *col = unknown_if_null(av_color_space_name(enc->colorspace));
582 const char *trc = unknown_if_null(av_color_transfer_name(enc->color_trc));
583 if (strcmp(col, pri) || strcmp(col, trc)) {
584 new_line = 1;
585 av_bprintf(&bprint, "%s/%s/%s, ", col, pri, trc);
586 } else
587 av_bprintf(&bprint, "%s, ", col);
588 }
589
590 if (enc->field_order != AV_FIELD_UNKNOWN) {
591 const char *field_order = "progressive";
592 if (enc->field_order == AV_FIELD_TT)
593 field_order = "top first";
594 else if (enc->field_order == AV_FIELD_BB)
595 field_order = "bottom first";
596 else if (enc->field_order == AV_FIELD_TB)
597 field_order = "top coded first (swapped)";
598 else if (enc->field_order == AV_FIELD_BT)
599 field_order = "bottom coded first (swapped)";
600
601 av_bprintf(&bprint, "%s, ", field_order);
602 }
603
607 av_bprintf(&bprint, "%s, ", str);
608
609 if (len == bprint.len) {
610 bprint.str[len - 1] = '\0';
611 bprint.len--;
612 } else {
613 if (bprint.len - 2 < bprint.size) {
614 /* Erase the last ", " */
615 bprint.len -= 2;
616 bprint.str[bprint.len] = '\0';
617 }
618 av_bprint_chars(&bprint, ')', 1);
619 }
620 }
621
622 if (enc->width) {
623 av_bprintf(&bprint, "%s%dx%d", new_line ? separator : ", ",
624 enc->width, enc->height);
625
627 enc->coded_width && enc->coded_height &&
628 (enc->width != enc->coded_width ||
629 enc->height != enc->coded_height))
630 av_bprintf(&bprint, " (%dx%d)",
631 enc->coded_width, enc->coded_height);
632
633 if (enc->sample_aspect_ratio.num) {
634 av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den,
637 1024 * 1024);
638 av_bprintf(&bprint, " [SAR %d:%d DAR %d:%d]",
640 display_aspect_ratio.num, display_aspect_ratio.den);
641 }
643 int g = av_gcd(enc->time_base.num, enc->time_base.den);
644 av_bprintf(&bprint, ", %d/%d",
645 enc->time_base.num / g, enc->time_base.den / g);
646 }
647 }
648 if (encode) {
649 av_bprintf(&bprint, ", q=%d-%d", enc->qmin, enc->qmax);
650 }
651 break;
653 av_bprintf(&bprint, "%s", separator);
654
655 if (enc->sample_rate) {
656 av_bprintf(&bprint, "%d Hz, ", enc->sample_rate);
657 }
659 if (enc->sample_fmt != AV_SAMPLE_FMT_NONE &&
660 (str = av_get_sample_fmt_name(enc->sample_fmt))) {
661 av_bprintf(&bprint, ", %s", str);
662 }
663 if ( enc->bits_per_raw_sample > 0
665 av_bprintf(&bprint, " (%d bit)", enc->bits_per_raw_sample);
667 if (enc->initial_padding)
668 av_bprintf(&bprint, ", delay %d", enc->initial_padding);
669 if (enc->trailing_padding)
670 av_bprintf(&bprint, ", padding %d", enc->trailing_padding);
671 }
672 break;
675 int g = av_gcd(enc->time_base.num, enc->time_base.den);
676 if (g)
677 av_bprintf(&bprint, ", %d/%d",
678 enc->time_base.num / g, enc->time_base.den / g);
679 }
680 break;
682 if (enc->width)
683 av_bprintf(&bprint, ", %dx%d", enc->width, enc->height);
684 break;
685 default:
686 return;
687 }
688 if (encode) {
689 if (enc->flags & AV_CODEC_FLAG_PASS1)
690 av_bprintf(&bprint, ", pass 1");
691 if (enc->flags & AV_CODEC_FLAG_PASS2)
692 av_bprintf(&bprint, ", pass 2");
693 }
694 bitrate = get_bit_rate(enc);
695 if (bitrate != 0) {
696 av_bprintf(&bprint, ", %"PRId64" kb/s", bitrate / 1000);
697 } else if (enc->rc_max_rate > 0) {
698 av_bprintf(&bprint, ", max. %"PRId64" kb/s", enc->rc_max_rate / 1000);
699 }
700}
701
703{
704 return !!s->internal;
705}
706
708 AVFrame *frame, unsigned flags)
709{
711
712 if (!avcodec_is_open(avctx) || !avctx->codec)
713 return AVERROR(EINVAL);
714
715 if (ff_codec_is_decoder(avctx->codec))
716 return ff_decode_receive_frame(avctx, frame, flags);
717 return ff_encode_receive_frame(avctx, frame);
718}
719
724
725#define WRAP_CONFIG(allowed_type, field, var, field_type, sentinel_check) \
726 do { \
727 if (codec->type != (allowed_type)) \
728 return AVERROR(EINVAL); \
729 const field_type *ptr = codec2->field; \
730 *out_configs = ptr; \
731 if (ptr) { \
732 for (int i = 0;; i++) { \
733 const field_type var = ptr[i]; \
734 if (sentinel_check) { \
735 *out_num_configs = i; \
736 break; \
737 } \
738 } \
739 } else \
740 *out_num_configs = 0; \
741 return 0; \
742 } while (0)
743
748
753
754static_assert((int)AVCOL_RANGE_MPEG == (int)AVALPHA_MODE_PREMULTIPLIED, "unexpected enum values");
755static_assert((int)AVCOL_RANGE_JPEG == (int)AVALPHA_MODE_STRAIGHT, "unexpected enum values");
756static_assert(AVCOL_RANGE_UNSPECIFIED == 0 && AVALPHA_MODE_UNSPECIFIED == 0, "unexpected enum values");
757static_assert(AVCOL_RANGE_NB == 3 && AVALPHA_MODE_NB == 3, "unexpected enum values");
758
759static const uint8_t offset_tab[] = {
760 [AVCOL_RANGE_MPEG] = 3,
761 [AVCOL_RANGE_JPEG] = 1,
763};
764
766 const AVCodec *codec,
767 enum AVCodecConfig config,
768 unsigned flags,
769 const void **out_configs,
770 int *out_num_configs)
771{
772 const FFCodec *codec2 = ffcodec(codec);
773
774 switch (config) {
778 WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, supported_framerates, framerate, AVRational, framerate.num == 0);
780 WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, supported_samplerates, samplerate, int, samplerate == 0);
784 WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, ch_layouts, ch_layout, AVChannelLayout, ch_layout.nb_channels == 0);
785
787 if (codec->type != AVMEDIA_TYPE_VIDEO)
788 return AVERROR(EINVAL);
789 unsigned color_ranges = codec2->color_ranges;
790 if (color_ranges)
791 *out_configs = color_range_tab + offset_tab[color_ranges];
792 else
793 *out_configs = NULL;
794 *out_num_configs = av_popcount(color_ranges);
795 return 0;
796
798 *out_configs = NULL;
799 *out_num_configs = 0;
800 return 0;
801
803 if (codec->type != AVMEDIA_TYPE_VIDEO)
804 return AVERROR(EINVAL);
805 unsigned alpha_modes = codec2->alpha_modes;
806 if (alpha_modes)
807 *out_configs = alpha_mode_tab + offset_tab[alpha_modes];
808 else
809 *out_configs = NULL;
810 *out_num_configs = av_popcount(alpha_modes);
811 return 0;
812
813 default:
814 return AVERROR(EINVAL);
815 }
816}
817
819 enum AVCodecConfig config, unsigned flags,
820 const void **out, int *out_num)
821{
822 const FFCodec *codec2;
823 int dummy_num = 0;
824 if (!codec)
825 codec = avctx->codec;
826 if (!out_num)
827 out_num = &dummy_num;
828
829 codec2 = ffcodec(codec);
830 if (codec2->get_supported_config) {
831 return codec2->get_supported_config(avctx, codec, config, flags, out, out_num);
832 } else {
833 return ff_default_get_supported_config(avctx, codec, config, flags, out, out_num);
834 }
835}
836
838 const AVFrameSideData *src, unsigned int flags)
839{
841
842 for (unsigned j = 0; ff_sd_global_map[j].packet < AV_PKT_DATA_NB; j++) {
843 if (ff_sd_global_map[j].frame != src->type)
844 continue;
845
846 sd = av_packet_side_data_new(psd, pnb_sd, ff_sd_global_map[j].packet,
847 src->size, 0);
848
849 if (!sd)
850 return AVERROR(ENOMEM);
851
852 memcpy(sd->data, src->data, src->size);
853 break;
854 }
855
856 if (!sd)
857 return AVERROR(EINVAL);
858
859 return 0;
860}
861
863 const AVPacketSideData *src, unsigned int flags)
864{
865 AVFrameSideData *sd = NULL;
866
867 for (unsigned j = 0; ff_sd_global_map[j].packet < AV_PKT_DATA_NB; j++) {
868 if (ff_sd_global_map[j].packet != src->type)
869 continue;
870
871 sd = av_frame_side_data_new(psd, pnb_sd, ff_sd_global_map[j].frame,
872 src->size, flags);
873
874 if (!sd)
875 return AVERROR(ENOMEM);
876
877 memcpy(sd->data, src->data, src->size);
878 break;
879 }
880
881 if (!sd)
882 return AVERROR(EINVAL);
883
884 return 0;
885}
static enum AVSampleFormat sample_fmts[]
Definition adpcmenc.c:933
static FILE * out
static AVFormatContext * ctx
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
#define FF_MAX_EXTRADATA_SIZE
Maximum size in bytes of extradata.
Definition avcodec.c:55
static const uint8_t offset_tab[]
Definition avcodec.c:759
int ff_default_get_supported_config(const AVCodecContext *avctx, const AVCodec *codec, enum AVCodecConfig config, unsigned flags, const void **out_configs, int *out_num_configs)
Definition avcodec.c:765
static void lock_avcodec(const FFCodec *codec)
Definition avcodec.c:102
static enum AVColorRange color_range_tab[]
Definition avcodec.c:744
av_cold void ff_codec_close(AVCodecContext *avctx)
Definition avcodec.c:443
static AVMutex codec_mutex
Definition avcodec.c:100
const SideDataMap ff_sd_global_map[]
A map between packet and frame side data types.
Definition avcodec.c:57
static const char * unknown_if_null(const char *str)
Definition avcodec.c:509
static enum AVAlphaMode alpha_mode_tab[]
Definition avcodec.c:749
static void unlock_avcodec(const FFCodec *codec)
Definition avcodec.c:108
int av_packet_side_data_from_frame(AVPacketSideData **psd, int *pnb_sd, const AVFrameSideData *src, unsigned int flags)
Definition avcodec.c:837
#define WRAP_CONFIG(allowed_type, field, var, field_type, sentinel_check)
Definition avcodec.c:725
static int64_t get_bit_rate(AVCodecContext *ctx)
Definition avcodec.c:114
Libavcodec external API header.
#define FF_THREAD_FRAME
Decode more than one frame at once.
Definition avcodec.h:1590
void ff_thread_free(struct AVCodecContext *s)
Definition pthread.c:84
int ff_encode_receive_frame(struct AVCodecContext *avctx, struct AVFrame *frame)
avcodec_receive_frame() implementation for encoders.
Definition encode.c:1011
void ff_thread_flush(struct AVCodecContext *avctx)
Wait for decoding threads to finish and reset internal state.
int ff_decode_preinit(struct AVCodecContext *avctx)
Perform decoder initialization and validation.
Definition decode.c:2029
void ff_encode_flush_buffers(struct AVCodecContext *avctx)
Definition encode.c:1024
void ff_decode_flush_buffers(struct AVCodecContext *avctx)
Definition decode.c:2365
void ff_decode_internal_uninit(struct AVCodecContext *avctx)
Definition decode.c:2406
int ff_encode_preinit(struct AVCodecContext *avctx)
Definition encode.c:898
int ff_decode_receive_frame(struct AVCodecContext *avctx, struct AVFrame *frame, unsigned flags)
avcodec_receive_frame() implementation for decoders.
Definition decode.c:817
int ff_thread_init(struct AVCodecContext *s)
Definition pthread.c:72
struct AVCodecInternal * ff_decode_internal_alloc(void)
Definition decode.c:2385
struct AVCodecInternal * ff_encode_internal_alloc(void)
Definition encode.c:1034
void av_bprintf(AVBPrint *buf, const char *fmt,...)
Definition bprint.c:122
AVBPrint public header.
#define flags(name, subs,...)
Definition cbs_h264.c:74
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define s(width, name)
Definition cbs_vp9.c:198
Public libavutil channel layout APIs header.
#define FF_CODEC_CAP_NOT_INIT_THREADSAFE
The codec is not known to be init-threadsafe (i.e.
static av_always_inline const FFCodec * ffcodec(const AVCodec *codec)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
#define FF_CODEC_CAP_AUTO_THREADS
Codec handles avctx->thread_count == 0 (auto) internally.
static int ff_codec_is_decoder(const AVCodec *avcodec)
Internal version of av_codec_is_decoder().
static int ff_codec_is_encoder(const AVCodec *avcodec)
Internal version of av_codec_is_encoder().
common internal and external API header
#define av_popcount
Definition common.h:154
#define NULL
Definition coverity.c:32
long long int64_t
Definition coverity.c:34
void ff_hwaccel_uninit(AVCodecContext *avctx)
Definition decode.c:1217
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Definition utils.c:91
#define FF_COMPLIANCE_EXPERIMENTAL
Allow nonstandardized experimental things.
Definition defs.h:62
@ AV_FIELD_TT
Top coded_first, top displayed first.
Definition defs.h:214
@ AV_FIELD_BB
Bottom coded first, bottom displayed first.
Definition defs.h:215
@ AV_FIELD_UNKNOWN
Definition defs.h:212
@ AV_FIELD_BT
Bottom coded first, top displayed first.
Definition defs.h:217
@ AV_FIELD_TB
Top coded first, bottom displayed first.
Definition defs.h:216
static enum AVPixelFormat pix_fmt
static AVFrame * frame
#define emms_c()
Definition emms.h:88
static void encode(AVCodecContext *ctx, AVFrame *frame, AVPacket *pkt, FILE *output)
static char separator(CheckasmFormat format)
Definition checkasm.c:149
static const char * unknown_if_null(const char *str)
av_cold void ff_frame_thread_encoder_free(AVCodecContext *avctx)
void av_bsf_free(AVBSFContext **pctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
Definition bsf.c:47
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
Definition utils.c:556
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
Definition avcodec.c:144
#define AV_CODEC_CAP_ENCODER_FLUSH
This encoder can be flushed using avcodec_flush_buffers().
Definition codec.h:154
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
Definition avcodec.h:294
int av_codec_is_encoder(const AVCodec *codec)
Definition utils.c:79
const char * avcodec_profile_name(enum AVCodecID codec_id, int profile)
Return a name for the specified profile, if available.
Definition utils.c:446
int av_codec_is_decoder(const AVCodec *codec)
Definition utils.c:85
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
Definition avcodec.h:290
#define AV_CODEC_FLAG2_FIXED_FRAME_SIZE
Force audio encoders to use a fixed frame size.
Definition avcodec.h:359
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
Definition allcodecs.c:990
const AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
Definition allcodecs.c:985
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct.
Definition avcodec.c:421
const char * avcodec_get_name(enum AVCodecID id)
Get the name of a codec.
Definition utils.c:421
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition codec.h:94
#define AV_CODEC_CAP_EXPERIMENTAL
Codec is experimental and is thus avoided in favor of non experimental encoders.
Definition codec.h:90
@ AV_CODEC_ID_VP6F
Definition codec_id.h:142
@ AV_CODEC_ID_H264
Definition codec_id.h:77
@ AV_CODEC_ID_NONE
Definition codec_id.h:48
@ AV_CODEC_ID_DXV
Definition codec_id.h:240
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Alias for avcodec_receive_frame_flags(avctx, frame, 0).
Definition avcodec.c:720
int attribute_align_arg avcodec_receive_frame_flags(AVCodecContext *avctx, AVFrame *frame, unsigned flags)
Return decoded output data from a decoder or encoder (when the AV_CODEC_FLAG_RECON_FRAME flag is used...
Definition avcodec.c:707
AVCodecConfig
Definition avcodec.h:2572
int avcodec_get_supported_config(const AVCodecContext *avctx, const AVCodec *codec, enum AVCodecConfig config, unsigned flags, const void **out, int *out_num)
Retrieve a list of all supported values for a given configuration type.
Definition avcodec.c:818
@ AV_CODEC_CONFIG_PIX_FORMAT
AVPixelFormat, terminated by AV_PIX_FMT_NONE.
Definition avcodec.h:2573
@ AV_CODEC_CONFIG_SAMPLE_FORMAT
AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE.
Definition avcodec.h:2576
@ AV_CODEC_CONFIG_ALPHA_MODE
AVAlphaMode, terminated by AVALPHA_MODE_UNSPECIFIED.
Definition avcodec.h:2580
@ AV_CODEC_CONFIG_FRAME_RATE
AVRational, terminated by {0, 0}.
Definition avcodec.h:2574
@ AV_CODEC_CONFIG_COLOR_SPACE
AVColorSpace, terminated by AVCOL_SPC_UNSPECIFIED.
Definition avcodec.h:2579
@ AV_CODEC_CONFIG_COLOR_RANGE
AVColorRange, terminated by AVCOL_RANGE_UNSPECIFIED.
Definition avcodec.h:2578
@ AV_CODEC_CONFIG_SAMPLE_RATE
int, terminated by 0
Definition avcodec.h:2575
@ AV_CODEC_CONFIG_CHANNEL_LAYOUT
AVChannelLayout, terminated by {0}.
Definition avcodec.h:2577
int avcodec_default_execute2(AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2, int jobnr, int threadnr), void *arg, int *ret, int count)
Definition avcodec.c:87
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
Definition avcodec.c:514
int avcodec_is_open(AVCodecContext *s)
Definition avcodec.c:702
int avcodec_default_execute(AVCodecContext *c, int(*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)
Definition avcodec.c:73
void avcodec_flush_buffers(AVCodecContext *avctx)
Reset the internal codec state / flush internal buffers.
Definition avcodec.c:389
AVPacketSideData * av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, size_t size, int flags)
Allocate a new packet side data.
Definition packet.c:620
int av_packet_side_data_to_frame(AVFrameSideData ***psd, int *pnb_sd, const AVPacketSideData *src, unsigned int flags)
Add a new frame side data entry to an array based on existing packet side data, if a matching type ex...
Definition avcodec.c:862
@ AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT
Ambient viewing environment metadata, as defined by H.274.
Definition packet.h:327
@ AV_PKT_DATA_3D_REFERENCE_DISPLAYS
This side data contains information about the reference display width(s) and reference viewing distan...
Definition packet.h:357
@ AV_PKT_DATA_ICC_PROFILE
ICC profile data consisting of an opaque octet buffer following the format described by ISO 15076-1.
Definition packet.h:271
@ AV_PKT_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata (based on SMPTE-2086:2014).
Definition packet.h:219
@ AV_PKT_DATA_AUDIO_SERVICE_TYPE
This side data should be associated with an audio stream and corresponds to enum AVAudioServiceType.
Definition packet.h:117
@ AV_PKT_DATA_SPHERICAL
This side data should be associated with a video stream and corresponds to the AVSphericalMapping str...
Definition packet.h:225
@ AV_PKT_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition packet.h:105
@ AV_PKT_DATA_EXIF
Extensible image file format metadata.
Definition packet.h:369
@ AV_PKT_DATA_NB
The number of side data types.
Definition packet.h:394
@ AV_PKT_DATA_STEREO3D
This side data should be associated with a video stream and contains Stereoscopic 3D information in f...
Definition packet.h:111
@ AV_PKT_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition packet.h:232
@ AV_PKT_DATA_REPLAYGAIN
This side data should be associated with an audio stream and contains ReplayGain information in form ...
Definition packet.h:96
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
Definition packet.c:74
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition packet.c:434
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
Definition packet.c:63
int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, AVBPrint *bp)
bprint variant of av_channel_layout_describe().
int av_channel_layout_check(const AVChannelLayout *channel_layout)
Check whether a channel layout is valid, i.e.
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
Definition bprint.h:218
void av_bprint_chars(AVBPrint *buf, char c, unsigned n)
Append char c n times to a print buffer.
Definition bprint.c:130
void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size)
Init a print buffer using a pre-existing buffer.
Definition bprint.c:85
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
Definition buffer.c:139
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition dict.c:60
#define AVERROR_EXPERIMENTAL
Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it.
Definition error.h:74
#define AVERROR(e)
Definition error.h:45
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition frame.c:496
AVFrameSideData * av_frame_side_data_new(AVFrameSideData ***sd, int *nb_sd, enum AVFrameSideDataType type, size_t size, unsigned int flags)
Add new side data entry to an array.
Definition side_data.c:204
void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd)
Free all side data entries and their contents, then zeroes out the values which the pointers are poin...
Definition side_data.c:139
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition frame.c:64
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition frame.c:52
@ AV_FRAME_DATA_EXIF
Exchangeable image file format metadata.
Definition frame.h:263
@ AV_FRAME_DATA_SPHERICAL
The data represents the AVSphericalMapping structure defined in libavutil/spherical....
Definition frame.h:131
@ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition frame.h:137
@ AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT
Ambient viewing environment metadata, as defined by H.274.
Definition frame.h:220
@ AV_FRAME_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition frame.h:85
@ AV_FRAME_DATA_AUDIO_SERVICE_TYPE
This side data must be associated with an audio frame and corresponds to enum AVAudioServiceType defi...
Definition frame.h:114
@ AV_FRAME_DATA_REPLAYGAIN
ReplayGain information in the form of the AVReplayGain struct.
Definition frame.h:77
@ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata associated with a video frame.
Definition frame.h:120
@ AV_FRAME_DATA_3D_REFERENCE_DISPLAYS
This side data contains information about the reference display width(s) and reference viewing distan...
Definition frame.h:256
@ AV_FRAME_DATA_ICC_PROFILE
The data contains an ICC profile as an opaque octet buffer following the format described by ISO 1507...
Definition frame.h:144
@ AV_FRAME_DATA_STEREO3D
Stereoscopic 3d metadata.
Definition frame.h:64
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition log.h:231
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition log.h:216
#define AV_LOG_VERBOSE
Detailed information.
Definition log.h:226
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
int av_log_get_level(void)
Get the current log level.
Definition log.c:471
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition rational.c:35
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands.
Definition mathematics.c:37
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
Definition utils.c:28
#define av_fourcc2str(fourcc)
Definition avutil.h:323
@ AVMEDIA_TYPE_ATTACHMENT
Opaque data information usually sparse.
Definition avutil.h:204
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201
@ AVMEDIA_TYPE_SUBTITLE
Definition avutil.h:203
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
Definition avutil.h:202
@ AVMEDIA_TYPE_UNKNOWN
Usually treated as AVMEDIA_TYPE_DATA.
Definition avutil.h:199
int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of a plane of an image with...
Definition imgutils.c:289
int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar)
Check if the given sample aspect ratio of an image is valid.
Definition imgutils.c:323
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
Definition samplefmt.c:108
const char * av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
Return the name of sample_fmt, or NULL if sample_fmt is not recognized.
Definition samplefmt.c:51
AVSampleFormat
Audio sample formats.
Definition samplefmt.h:55
@ AV_SAMPLE_FMT_NONE
Definition samplefmt.h:56
int av_match_list(const char *name, const char *list, char separator)
Check if a name is in a list.
Definition avstring.c:440
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
Definition opt.h:604
void av_opt_free(void *obj)
Free all allocated objects in obj.
Definition opt.c:2025
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
Definition opt.c:1754
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
Definition opt.c:887
int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
Set all the options from a given dictionary on an object.
Definition opt.c:2038
misc image utilities
#define r
Definition input.c:42
unsigned offset
Definition libaomenc.c:763
void ff_icc_context_uninit(FFIccContext *s)
Definition fflcms2.c:42
common internal api header.
#define FF_SANE_NB_CHANNELS
Definition internal.h:37
int(* func)(AVBPrint *dst, const char *in, const char *arg)
Definition jacosubdec.c:66
const char * arg
Definition jacosubdec.c:65
#define av_cold
Definition attributes.h:117
#define FF_PTR_ADD(ptr, off)
Definition internal.h:74
#define attribute_align_arg
Definition internal.h:50
#define AV_MUTEX_INITIALIZER
Definition thread.h:185
static int ff_mutex_unlock(AVMutex *mutex)
Definition thread.h:189
static int ff_mutex_lock(AVMutex *mutex)
Definition thread.h:188
#define AVMutex
Definition thread.h:184
static enum AVPixelFormat pix_fmts[]
Definition libkvazaar.c:296
Memory handling functions.
static const uint64_t c2
Definition murmur3.c:53
int profile
Definition mxfenc.c:2299
AVOptions.
const char * av_color_space_name(enum AVColorSpace space)
Definition pixdesc.c:3860
const char * av_color_range_name(enum AVColorRange range)
Definition pixdesc.c:3776
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
Definition pixdesc.c:3380
const char * av_chroma_location_name(enum AVChromaLocation location)
Definition pixdesc.c:3881
const char * av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
Definition pixdesc.c:3827
const char * av_color_primaries_name(enum AVColorPrimaries primaries)
Definition pixdesc.c:3794
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition pixdesc.c:3460
@ AVCHROMA_LOC_UNSPECIFIED
Definition pixfmt.h:803
AVColorRange
Visual content value range.
Definition pixfmt.h:748
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
Definition pixfmt.h:766
@ AVCOL_RANGE_UNSPECIFIED
Definition pixfmt.h:749
@ AVCOL_RANGE_NB
Not part of ABI.
Definition pixfmt.h:784
@ AVCOL_RANGE_JPEG
Full range content.
Definition pixfmt.h:783
AVAlphaMode
Correlation between the alpha channel and color values.
Definition pixfmt.h:816
@ AVALPHA_MODE_NB
Not part of ABI.
Definition pixfmt.h:820
@ AVALPHA_MODE_STRAIGHT
Alpha channel is independent of color values.
Definition pixfmt.h:819
@ AVALPHA_MODE_UNSPECIFIED
Unknown alpha handling, or no alpha channel.
Definition pixfmt.h:817
@ AVALPHA_MODE_PREMULTIPLIED
Alpha channel is multiplied into color values.
Definition pixfmt.h:818
AVPixelFormat
Pixel format.
Definition pixfmt.h:71
@ AV_PIX_FMT_NONE
Definition pixfmt.h:72
@ AVCOL_PRI_UNSPECIFIED
Definition pixfmt.h:645
@ AVCOL_TRC_UNSPECIFIED
Definition pixfmt.h:675
@ AVCOL_SPC_UNSPECIFIED
Definition pixfmt.h:709
void av_refstruct_unref(void *objp)
Decrement the reference count of the underlying object and automatically free the object if there are...
Definition refstruct.c:120
static void av_refstruct_pool_uninit(AVRefStructPool **poolp)
Mark the pool as being available for freeing.
Definition refstruct.h:292
enum AVMediaType codec_type
Definition rtp.c:37
An AVChannelLayout holds information about the channel layout of audio data.
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
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition avcodec.h:643
int width
picture width / height.
Definition avcodec.h:604
AVPacketSideData * coded_side_data
Additional data associated with the entire coded stream.
Definition avcodec.h:1768
const struct AVCodecDescriptor * codec_descriptor
AVCodecDescriptor.
Definition avcodec.h:1709
AVChannelLayout ch_layout
Audio channel layout.
Definition avcodec.h:1055
int flags2
AV_CODEC_FLAG2_*.
Definition avcodec.h:507
enum AVSampleFormat sample_fmt
audio sample format
Definition avcodec.h:1047
int64_t max_pixels
The number of pixels per image to maximally accept.
Definition avcodec.h:1787
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition avcodec.h:681
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
Definition avcodec.h:468
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
Definition avcodec.h:1375
int nb_coded_side_data
Definition avcodec.h:1769
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition avcodec.h:657
AVBufferRef * hw_frames_ctx
A reference to the AVHWFramesContext describing the input (for encoding) or output (decoding) frames.
Definition avcodec.h:1471
int qmin
minimum quantizer
Definition avcodec.h:1252
enum AVMediaType codec_type
Definition avcodec.h:451
int64_t frame_num
Frame counter, set by libavcodec.
Definition avcodec.h:1883
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
Definition avcodec.h:628
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
Definition avcodec.h:1564
uint8_t * dump_separator
dump format separator.
Definition avcodec.h:1752
enum AVFieldOrder field_order
Field order.
Definition avcodec.h:694
int active_thread_type
Which multithreading methods are in use by the codec.
Definition avcodec.h:1598
char * codec_whitelist
',' separated list of allowed decoders.
Definition avcodec.h:1760
int64_t bit_rate
the average bitrate
Definition avcodec.h:493
const struct AVCodec * codec
Definition avcodec.h:452
int profile
profile
Definition avcodec.h:1636
int nb_decoded_side_data
Definition avcodec.h:1930
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition avcodec.h:1571
enum AVColorSpace colorspace
YUV colorspace type.
Definition avcodec.h:671
int initial_padding
Audio only.
Definition avcodec.h:1114
int sample_rate
samples per second
Definition avcodec.h:1040
int delay
Codec delay.
Definition avcodec.h:587
int refs
number of reference frames
Definition avcodec.h:701
int64_t rc_max_rate
maximum bitrate
Definition avcodec.h:1288
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
Definition avcodec.h:1579
int qmax
maximum quantizer
Definition avcodec.h:1259
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition avcodec.h:664
uint8_t * subtitle_header
Definition avcodec.h:1744
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition avcodec.h:547
int flags
AV_CODEC_FLAG_*.
Definition avcodec.h:500
AVFrameSideData ** decoded_side_data
Array containing static side data, such as HDR10 CLL / MDCV structures.
Definition avcodec.h:1929
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition avcodec.h:526
int trailing_padding
Audio only.
Definition avcodec.h:1125
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition avcodec.h:688
AVBufferRef * hw_device_ctx
A reference to the AVHWDeviceContext describing the device which will be used by a hardware encoder/d...
Definition avcodec.h:1493
enum AVCodecID codec_id
Definition avcodec.h:453
int extradata_size
Definition avcodec.h:527
int coded_width
Bitstream width / height, may be different from width/height e.g.
Definition avcodec.h:619
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs.
Definition avcodec.h:1075
int frame_size
Number of samples per channel in an audio frame.
Definition avcodec.h:1068
struct AVCodecInternal * internal
Private context used for internal data.
Definition avcodec.h:478
void * priv_data
Definition avcodec.h:470
AVPacket * in_pkt
This packet is used to hold the packet given to decoders implementing the .decode API; it is unused b...
Definition internal.h:83
AVFrame * recon_frame
When the AV_CODEC_FLAG_RECON_FRAME flag is used.
Definition internal.h:114
void * thread_ctx
Definition internal.h:73
AVPacket * last_pkt_props
Properties (timestamps+side data) extracted from the last packet passed for decoding.
Definition internal.h:90
int needs_close
If this is set, then FFCodec->close (if existing) needs to be called for the parent AVCodecContext.
Definition internal.h:120
int is_frame_mt
This field is set to 1 when frame threading is being used and the parent AVCodecContext of this AVCod...
Definition internal.h:61
struct FramePool * pool
Definition internal.h:69
unsigned int byte_buffer_size
Definition internal.h:96
uint8_t * byte_buffer
temporary buffer used for encoders to store their bitstream
Definition internal.h:95
AVFrame * buffer_frame
Definition internal.h:145
AVPacket * buffer_pkt
Temporary buffers for newly received or not yet output packets/frames.
Definition internal.h:144
AVFrame * in_frame
The input frame is stored here for encoders implementing the simple encode API.
Definition internal.h:106
int draining
decoding: AVERROR_EOF has been returned from ff_decode_get_packet(); must not be used by decoders tha...
Definition internal.h:139
struct AVRefStructPool * progress_frame_pool
Definition internal.h:71
void * frame_thread_encoder
Definition internal.h:98
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
Definition internal.h:125
struct AVBSFContext * bsf
Definition internal.h:84
AVCodec.
Definition codec.h:175
enum AVCodecID id
Definition codec.h:189
const AVClass * priv_class
AVClass for the private context.
Definition codec.h:197
enum AVMediaType type
Definition codec.h:188
const char * name
Name of the codec implementation.
Definition codec.h:182
int capabilities
Codec capabilities.
Definition codec.h:194
char * key
Definition dict.h:91
char * value
Definition dict.h:92
Structure to hold side data for an AVFrame.
Definition frame.h:327
uint8_t * data
Definition frame.h:329
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
Definition packet.h:424
uint8_t * data
Definition packet.h:425
Rational number (pair of numerator and denominator).
Definition rational.h:58
int num
Numerator.
Definition rational.h:59
int den
Denominator.
Definition rational.h:60
unsigned num_rects
Definition avcodec.h:2091
AVSubtitleRect ** rects
Definition avcodec.h:2092
int priv_data_size
int(* init)(struct AVCodecContext *)
void(* flush)(struct AVCodecContext *)
Flush buffers.
unsigned alpha_modes
This field determines the alpha modes supported by an encoder.
unsigned caps_internal
Internal codec capabilities FF_CODEC_CAP_*.
int(* close)(struct AVCodecContext *)
int(* get_supported_config)(const struct AVCodecContext *avctx, const AVCodec *codec, enum AVCodecConfig config, unsigned flags, const void **out_configs, int *out_num_configs)
Custom callback for avcodec_get_supported_config().
unsigned color_ranges
This field determines the video color ranges supported by an encoder.
#define av_mallocz(s)
#define av_freep(p)
#define av_log(a,...)
float framerate
Definition av1_levels.c:29
int64_t bitrate
Definition av1_levels.c:47
#define src
Definition vp8dsp.c:248
int size
const char * g
Definition vf_curves.c:128
int len
static double c[64]