1 /*
2 * Copyright (c) 2010, Google, Inc.
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 * AV1 encoder support via libaom
24 */
25
26 #define AOM_DISABLE_CTRL_TYPECHECKS 1
27 #include <aom/aom_encoder.h>
28 #include <aom/aomcx.h>
29
36
40
41 /*
42 * Portion of struct aom_codec_cx_pkt from aom_encoder.h.
43 * One encoded frame returned from the library.
44 */
46 void *
buf;
/**< compressed data buffer */
47 size_t sz;
/**< length of compressed data */
48 int64_t
pts;
/**< time stamp to show frame
49 (in timebase units) */
50 unsigned long duration;
/**< duration to show frame
51 (in timebase units) */
52 uint32_t
flags;
/**< flags for this frame */
54 };
55
56 typedef struct AOMEncoderContext {
58 struct aom_codec_ctx encoder;
59 struct aom_image rawimg;
60 struct aom_fixed_buf twopass_stats;
71
73 [AOME_SET_CPUUSED] = "AOME_SET_CPUUSED",
74 [AOME_SET_CQ_LEVEL] = "AOME_SET_CQ_LEVEL",
75 [AOME_SET_ENABLEAUTOALTREF] = "AOME_SET_ENABLEAUTOALTREF",
76 [AOME_SET_STATIC_THRESHOLD] = "AOME_SET_STATIC_THRESHOLD",
77 [AV1E_SET_COLOR_RANGE] = "AV1E_SET_COLOR_RANGE",
78 [AV1E_SET_COLOR_PRIMARIES] = "AV1E_SET_COLOR_PRIMARIES",
79 [AV1E_SET_MATRIX_COEFFICIENTS] = "AV1E_SET_MATRIX_COEFFICIENTS",
80 [AV1E_SET_TRANSFER_CHARACTERISTICS] = "AV1E_SET_TRANSFER_CHARACTERISTICS",
81 };
82
84 {
87 const char *detail = aom_codec_error_detail(&ctx->
encoder);
88
90 if (detail)
92 }
93
95 const struct aom_codec_enc_cfg *cfg)
96 {
99
100 av_log(avctx, level,
"aom_codec_enc_cfg\n");
101 av_log(avctx, level,
"generic settings\n"
102 " %*s%u\n %*s%u\n %*s%u\n %*s%u\n %*s%u\n"
103 " %*s%u\n %*s%u\n"
104 " %*s{%u/%u}\n %*s%u\n %*s%d\n %*s%u\n",
105 width, "g_usage:", cfg->g_usage,
106 width, "g_threads:", cfg->g_threads,
107 width, "g_profile:", cfg->g_profile,
108 width, "g_w:", cfg->g_w,
109 width, "g_h:", cfg->g_h,
110 width, "g_bit_depth:", cfg->g_bit_depth,
111 width, "g_input_bit_depth:", cfg->g_input_bit_depth,
112 width, "g_timebase:", cfg->g_timebase.num, cfg->g_timebase.den,
113 width, "g_error_resilient:", cfg->g_error_resilient,
114 width, "g_pass:", cfg->g_pass,
115 width, "g_lag_in_frames:", cfg->g_lag_in_frames);
116 av_log(avctx, level,
"rate control settings\n"
118 width, "rc_dropframe_thresh:", cfg->rc_dropframe_thresh,
119 width, "rc_end_usage:", cfg->rc_end_usage,
120 width, "rc_twopass_stats_in:", cfg->rc_twopass_stats_in.buf, cfg->rc_twopass_stats_in.sz,
121 width, "rc_target_bitrate:", cfg->rc_target_bitrate);
122 av_log(avctx, level,
"quantizer settings\n"
123 " %*s%u\n %*s%u\n",
124 width, "rc_min_quantizer:", cfg->rc_min_quantizer,
125 width, "rc_max_quantizer:", cfg->rc_max_quantizer);
126 av_log(avctx, level,
"bitrate tolerance\n"
127 " %*s%u\n %*s%u\n",
128 width, "rc_undershoot_pct:", cfg->rc_undershoot_pct,
129 width, "rc_overshoot_pct:", cfg->rc_overshoot_pct);
130 av_log(avctx, level,
"decoder buffer model\n"
131 " %*s%u\n %*s%u\n %*s%u\n",
132 width, "rc_buf_sz:", cfg->rc_buf_sz,
133 width, "rc_buf_initial_sz:", cfg->rc_buf_initial_sz,
134 width, "rc_buf_optimal_sz:", cfg->rc_buf_optimal_sz);
135 av_log(avctx, level,
"2 pass rate control settings\n"
136 " %*s%u\n %*s%u\n %*s%u\n",
137 width, "rc_2pass_vbr_bias_pct:", cfg->rc_2pass_vbr_bias_pct,
138 width, "rc_2pass_vbr_minsection_pct:", cfg->rc_2pass_vbr_minsection_pct,
139 width, "rc_2pass_vbr_maxsection_pct:", cfg->rc_2pass_vbr_maxsection_pct);
140 av_log(avctx, level,
"keyframing settings\n"
141 " %*s%d\n %*s%u\n %*s%u\n",
142 width, "kf_mode:", cfg->kf_mode,
143 width, "kf_min_dist:", cfg->kf_min_dist,
144 width, "kf_max_dist:", cfg->kf_max_dist);
145 av_log(avctx, level,
"\n");
146 }
147
149 {
151
152 while (*p)
154 *p = cx_frame;
156 }
157
159 {
162 }
163
165 {
167
168 while (p) {
171 p = list;
172 }
173 }
174
176 enum aome_enc_control_id
id,
int val)
177 {
181 int res;
182
185
186 res = aom_codec_control(&ctx->
encoder,
id, val);
187 if (res != AOM_CODEC_OK) {
188 snprintf(buf,
sizeof(buf),
"Failed to set %s codec control",
192 }
193
194 return 0;
195 }
196
198 {
200
201 aom_codec_destroy(&ctx->
encoder);
205 return 0;
206 }
207
209 struct aom_codec_enc_cfg *enccfg, aom_codec_flags_t *
flags,
210 aom_img_fmt_t *img_fmt)
211 {
213 enccfg->g_bit_depth = enccfg->g_input_bit_depth = 8;
217 *img_fmt = AOM_IMG_FMT_I420;
218 return 0;
221 *img_fmt = AOM_IMG_FMT_I422;
222 return 0;
225 *img_fmt = AOM_IMG_FMT_I444;
226 return 0;
229 if (codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH) {
230 enccfg->g_bit_depth = enccfg->g_input_bit_depth =
232 enccfg->g_profile =
234 *img_fmt = AOM_IMG_FMT_I42016;
235 *flags |= AOM_CODEC_USE_HIGHBITDEPTH;
236 return 0;
237 }
238 break;
241 if (codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH) {
242 enccfg->g_bit_depth = enccfg->g_input_bit_depth =
245 *img_fmt = AOM_IMG_FMT_I42216;
246 *flags |= AOM_CODEC_USE_HIGHBITDEPTH;
247 return 0;
248 }
249 break;
252 if (codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH) {
253 enccfg->g_bit_depth = enccfg->g_input_bit_depth =
255 enccfg->g_profile =
257 *img_fmt = AOM_IMG_FMT_I44416;
258 *flags |= AOM_CODEC_USE_HIGHBITDEPTH;
259 return 0;
260 }
261 break;
262 default:
263 break;
264 }
267 }
268
270 {
271 enum aom_color_range aom_cr;
276 default:
279 return;
280 }
281
283 }
284
286 const struct aom_codec_iface *iface)
287 {
289 struct aom_codec_enc_cfg enccfg = { 0 };
290 aom_codec_flags_t
flags = 0;
292 int res;
293 aom_img_fmt_t img_fmt;
294 aom_codec_caps_t codec_caps = aom_codec_get_caps(iface);
295
298
299 if ((res = aom_codec_enc_config_default(iface, &enccfg, 0)) != AOM_CODEC_OK) {
301 aom_codec_err_to_string(res));
303 }
304
305 if (
set_pix_fmt(avctx, codec_caps, &enccfg, &flags, &img_fmt))
307
312 }
313
315
316 enccfg.g_w = avctx->
width;
317 enccfg.g_h = avctx->
height;
321
324
326 enccfg.g_pass = AOM_RC_FIRST_PASS;
328 enccfg.g_pass = AOM_RC_LAST_PASS;
329 else
330 enccfg.g_pass = AOM_RC_ONE_PASS;
331
334 enccfg.rc_end_usage = AOM_CBR;
335 }
else if (ctx->
crf >= 0) {
336 enccfg.rc_end_usage = AOM_CQ;
338 enccfg.rc_end_usage = AOM_Q;
339 }
340
344 } else if (enccfg.rc_end_usage != AOM_Q) {
345 if (enccfg.rc_end_usage == AOM_CQ) {
346 enccfg.rc_target_bitrate = 1000000;
347 } else {
348 avctx->
bit_rate = enccfg.rc_target_bitrate * 1000;
350 "Neither bitrate nor constrained quality specified, using default bitrate of %dkbit/sec\n",
351 enccfg.rc_target_bitrate);
352 }
353 }
354
355 if (avctx->
qmin >= 0)
356 enccfg.rc_min_quantizer = avctx->
qmin;
357 if (avctx->
qmax >= 0)
358 enccfg.rc_max_quantizer = avctx->
qmax;
359
360 if (enccfg.rc_end_usage == AOM_CQ || enccfg.rc_end_usage == AOM_Q) {
361 if (ctx->
crf < enccfg.rc_min_quantizer || ctx->
crf > enccfg.rc_max_quantizer) {
363 "CQ level %d must be between minimum and maximum quantizer value (%d-%d)\n",
364 ctx->
crf, enccfg.rc_min_quantizer, enccfg.rc_max_quantizer);
366 }
367 }
368
370
371 // 0-100 (0 => CBR, 100 => VBR)
374 enccfg.rc_2pass_vbr_minsection_pct =
377 enccfg.rc_2pass_vbr_maxsection_pct =
379
381 enccfg.rc_buf_sz =
384 enccfg.rc_buf_initial_sz =
386 enccfg.rc_buf_optimal_sz = enccfg.rc_buf_sz * 5 / 6;
387
388 // _enc_init() will balk if kf_min_dist differs from max w/AOM_KF_AUTO
392 enccfg.kf_max_dist = avctx->
gop_size;
393
394 if (enccfg.g_pass == AOM_RC_FIRST_PASS)
395 enccfg.g_lag_in_frames = 0;
396 else if (enccfg.g_pass == AOM_RC_LAST_PASS) {
397 int decode_size, ret;
398
402 }
403
406 if (ret < 0) {
411 return ret;
412 }
415 if (decode_size < 0) {
418 }
419
422 }
423
424 /* 0-3: For non-zero values the encoder increasingly optimizes for reduced
425 * complexity playback on low powered devices at the expense of encode
426 * quality. */
428 enccfg.g_profile = avctx->
profile;
429
431
433 /* Construct Encoder Context */
434 res = aom_codec_enc_init(&ctx->
encoder, iface, &enccfg, flags);
435 if (res != AOM_CODEC_OK) {
438 }
439
440 // codec control failures are currently treated only as warnings
445
449
454
455 // provide dummy value to initialize wrapper, values will be updated each _encode()
457 (unsigned char*)1);
458
459 if (codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH)
460 ctx->
rawimg.bit_depth = enccfg.g_bit_depth;
461
463 if (!cpb_props)
465
466 if (enccfg.rc_end_usage == AOM_CBR ||
467 enccfg.g_pass != AOM_RC_ONE_PASS) {
471 }
473
474 return 0;
475 }
476
478 const struct aom_codec_cx_pkt *
src)
479 {
480 dst->
pts = src->data.frame.pts;
481 dst->
duration = src->data.frame.duration;
482 dst->
flags = src->data.frame.flags;
483 dst->
sz = src->data.frame.sz;
484 dst->
buf = src->data.frame.buf;
485 }
486
487 /**
488 * Store coded frame information in format suitable for return from encode2().
489 *
490 * Write information from @a cx_frame to @a pkt
491 * @return packet data size on success
492 * @return a negative AVERROR on error
493 */
496 {
498 if (ret < 0) {
501 return ret;
502 }
505
506 if (!!(cx_frame->
flags & AOM_FRAME_IS_KEY))
509 }
510
511 /**
512 * Queue multiple output frames from the encoder, returning the front-most.
513 * In cases where aom_codec_get_cx_data() returns more than 1 frame append
514 * the frame queue. Return the head frame if available.
515 * @return Stored frame size
516 * @return AVERROR(EINVAL) on output size error
517 * @return AVERROR(ENOMEM) on coded frame queue data allocation error
518 */
520 {
522 const struct aom_codec_cx_pkt *
pkt;
523 const void *iter =
NULL;
525
528 /* return the leading frame if we've already begun queueing */
530 if (size < 0)
534 }
535
536 /* consume all available output from the encoder before returning. buffers
537 * are only good through the next aom_codec call */
538 while ((pkt = aom_codec_get_cx_data(&ctx->
encoder, &iter))) {
539 switch (pkt->kind) {
540 case AOM_CODEC_CX_FRAME_PKT:
541 if (!size) {
543
544 /* avoid storing the frame when the list is empty and we haven't yet
545 * provided a frame for output */
549 if (size < 0)
551 } else {
554
555 if (!cx_frame) {
557 "Frame queue element alloc failed\n");
559 }
562
563 if (!cx_frame->
buf) {
569 }
570 memcpy(cx_frame->
buf, pkt->data.frame.buf, pkt->data.frame.sz);
572 }
573 break;
574 case AOM_CODEC_STATS_PKT:
575 {
577 int err;
579 stats->sz +
580 pkt->data.twopass_stats.sz)) < 0) {
581 stats->sz = 0;
583 return err;
584 }
585 memcpy((
uint8_t *)stats->buf + stats->sz,
586 pkt->data.twopass_stats.buf, pkt->data.twopass_stats.sz);
587 stats->sz += pkt->data.twopass_stats.sz;
588 break;
589 }
590 case AOM_CODEC_PSNR_PKT: // FIXME add support for AV_CODEC_FLAG_PSNR
591 case AOM_CODEC_CUSTOM_PKT:
592 // ignore unsupported/unrecognized packet types
593 break;
594 }
595 }
596
598 }
599
602 {
604 struct aom_image *rawimg =
NULL;
605 int64_t timestamp = 0;
606 int res, coded_size;
607 aom_enc_frame_flags_t
flags = 0;
608
609 if (frame) {
611 rawimg->planes[AOM_PLANE_Y] = frame->
data[0];
612 rawimg->planes[AOM_PLANE_U] = frame->
data[1];
613 rawimg->planes[AOM_PLANE_V] = frame->
data[2];
614 rawimg->stride[AOM_PLANE_Y] = frame->
linesize[0];
615 rawimg->stride[AOM_PLANE_U] = frame->
linesize[1];
616 rawimg->stride[AOM_PLANE_V] = frame->
linesize[2];
617 timestamp = frame->
pts;
620 rawimg->range = AOM_CR_STUDIO_RANGE;
621 break;
623 rawimg->range = AOM_CR_FULL_RANGE;
624 break;
625 }
626
628 flags |= AOM_EFLAG_FORCE_KF;
629 }
630
631 res = aom_codec_encode(&ctx->
encoder, rawimg, timestamp,
633 if (res != AOM_CODEC_OK) {
636 }
638
641
645 b64_size);
647 }
650 }
651
652 *got_packet = !!coded_size;
653 return 0;
654 }
655
661 };
662
674 };
675
677 {
678 aom_codec_caps_t codec_caps = aom_codec_get_caps(aom_codec_av1_cx());
679 if (codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH)
681 else
683 }
684
686 {
687 return aom_init(avctx, aom_codec_av1_cx());
688 }
689
690 #define OFFSET(x) offsetof(AOMContext, x)
691 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
694 { "auto-alt-ref", "Enable use of alternate reference "
696 { "lag-in-frames", "Number of frames to look ahead at for "
698 {
"error-resilience",
"Error resilience configuration",
OFFSET(error_resilient),
AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX,
VE,
"er"},
699 {
"default",
"Improve resiliency against losses of whole frames", 0,
AV_OPT_TYPE_CONST, {.i64 = AOM_ERROR_RESILIENT_DEFAULT}, 0, 0,
VE,
"er"},
700 { "partitions", "The frame partitions are independently decodable "
701 "by the bool decoder, meaning that partitions can be decoded even "
702 "though earlier partitions have been lost. Note that intra predicition"
703 " is still done over the partition boundary.", 0,
AV_OPT_TYPE_CONST, {.i64 = AOM_ERROR_RESILIENT_PARTITIONS}, 0, 0,
VE,
"er"},
705 {
"static-thresh",
"A change threshold on blocks below which they will be skipped by the encoder",
OFFSET(static_thresh),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
VE },
706 {
"drop-threshold",
"Frame drop threshold", offsetof(
AOMContext, drop_threshold),
AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX,
VE },
707 {
"noise-sensitivity",
"Noise sensitivity",
OFFSET(noise_sensitivity),
AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 4,
VE},
709 };
710
712 { "qmin", "-1" },
713 { "qmax", "-1" },
714 { "g", "-1" },
715 { "keyint_min", "-1" },
717 };
718
724 };
725
727 .
name =
"libaom-av1",
740 .wrapper_name = "libaom",
741 };
const char const char void * val
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
static void cx_pktcpy(struct FrameListData *dst, const struct aom_codec_cx_pkt *src)
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
#define AV_LOG_WARNING
Something somehow does not look correct.
int64_t bit_rate
the average bitrate
#define LIBAVUTIL_VERSION_INT
static av_cold int init(AVCodecContext *avctx)
int max_bitrate
Maximum bitrate of the stream, in bits per second.
int rc_initial_buffer_occupancy
Number of bits which should be loaded into the rc buffer before decoding starts.
static av_cold int aom_init(AVCodecContext *avctx, const struct aom_codec_iface *iface)
enum AVColorRange color_range
MPEG vs JPEG YUV range.
void * buf
compressed data buffer
const char * av_default_item_name(void *ptr)
Return the context name.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
size_t sz
length of compressed data
#define AV_CODEC_CAP_EXPERIMENTAL
Codec is experimental and is thus avoided in favor of non experimental encoders.
#define AV_PIX_FMT_YUV420P12
char * stats_in
pass2 encoding statistics input buffer Concatenated stuff from stats_out of pass1 should be placed he...
static const AVOption options[]
#define AV_CODEC_CAP_AUTO_THREADS
Codec supports avctx->thread_count == 0 (auto).
int min_bitrate
Minimum bitrate of the stream, in bits per second.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
static av_cold void free_frame_list(struct FrameListData *list)
struct FrameListData * next
struct aom_fixed_buf twopass_stats
int64_t pts
time stamp to show frame (in timebase units)
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
#define AV_LOG_VERBOSE
Detailed information.
static av_cold int codecctl_int(AVCodecContext *avctx, enum aome_enc_control_id id, int val)
int buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
#define AV_PIX_FMT_YUV422P12
char * stats_out
pass1 encoding statistics output buffer
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static av_cold void av1_init_static(AVCodec *codec)
int qmax
maximum quantizer
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
enum AVColorRange color_range
MPEG vs JPEG YUV range.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
int flags
AV_CODEC_FLAG_*.
Round to nearest and halfway cases away from zero.
simple assert() macros that are a bit more flexible than ISO C assert().
const char * name
Name of the codec implementation.
static av_always_inline av_const double round(double x)
#define AV_PIX_FMT_YUV444P10
char * av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size)
Encode data to base64 and null-terminate.
static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame, AVPacket *pkt)
Store coded frame information in format suitable for return from encode2().
static void set_color_range(AVCodecContext *avctx)
int flags
A combination of AV_PKT_FLAG values.
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
int rc_buffer_size
decoder bitstream buffer size
static const AVClass class_aom
int64_t rc_min_rate
minimum bitrate
AVCodec ff_libaom_av1_encoder
struct FrameListData * coded_frame_list
static enum AVPixelFormat av1_pix_fmts_highbd[]
enum AVPixelFormat * pix_fmts
array of supported pixel formats, or NULL if unknown, array is terminated by -1
enum AVPictureType pict_type
Picture type of the frame.
#define AV_BASE64_SIZE(x)
Calculate the output size needed to base64-encode x bytes to a null-terminated string.
static int queue_frames(AVCodecContext *avctx, AVPacket *pkt_out)
Queue multiple output frames from the encoder, returning the front-most.
int width
picture width / height.
#define FF_PROFILE_UNKNOWN
static av_cold void free_coded_frame(struct FrameListData *cx_frame)
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
static void stats(AVPacket *const *in, int n_in, unsigned *_max, unsigned *_sum)
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
static const char *const ctlidstr[]
int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd)
Rescale a 64-bit integer with specified rounding.
static void error(const char *err)
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
the normal 2^n-1 "JPEG" YUV ranges
static int set_pix_fmt(AVCodecContext *avctx, aom_codec_caps_t codec_caps, struct aom_codec_enc_cfg *enccfg, aom_codec_flags_t *flags, aom_img_fmt_t *img_fmt)
This structure describes the bitrate properties of an encoded bitstream.
struct aom_codec_ctx encoder
#define AV_LOG_INFO
Standard information.
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
Libavcodec external API header.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
const AVProfile ff_av1_profiles[]
main external API structure.
static enum AVPixelFormat av1_pix_fmts[]
int qmin
minimum quantizer
static av_cold int av1_init(AVCodecContext *avctx)
#define AV_PIX_FMT_YUV420P10
static void coded_frame_add(void *list, struct FrameListData *cx_frame)
Describe the class of an AVClass context structure.
static const AVProfile profiles[]
#define FF_PROFILE_AV1_PROFESSIONAL
enum AVColorSpace colorspace
YUV colorspace type.
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
#define FF_PROFILE_AV1_MAIN
uint32_t flags
flags for this frame
static av_cold void dump_enc_cfg(AVCodecContext *avctx, const struct aom_codec_enc_cfg *cfg)
float qcompress
amount of qscale change between easy & hard scenes (0.0-1.0)
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV444P12
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
the normal 219*2^(n-8) "MPEG" YUV ranges
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
common internal api header.
static av_cold void log_encoder_error(AVCodecContext *avctx, const char *desc)
common internal and external API header
static int aom_encode(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
AVCPBProperties * ff_add_cpb_side_data(AVCodecContext *avctx)
Add a CPB properties side data to an encoding context.
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
Portion of struct vpx_codec_cx_pkt from vpx_encoder.h.
int avg_bitrate
Average bitrate of the stream, in bits per second.
unsigned long duration
duration to show frame (in timebase units)
int av_base64_decode(uint8_t *out, const char *in_str, int out_size)
Decode a base64-encoded string.
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
static const AVCodecDefault defaults[]
AVPixelFormat
Pixel format.
This structure stores compressed data.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
static av_cold int aom_free(AVCodecContext *avctx)
#define FF_PROFILE_AV1_HIGH
int64_t rc_max_rate
maximum bitrate
int keyint_min
minimum GOP size