typedef struct AOMEncoderContext {
AVClass *class;
+ AVBSFContext *bsf;
struct aom_codec_ctx encoder;
struct aom_image rawimg;
struct aom_fixed_buf twopass_stats;
av_freep(&ctx->twopass_stats.buf);
av_freep(&avctx->stats_out);
free_frame_list(ctx->coded_frame_list);
+ av_bsf_free(&ctx->bsf);
return 0;
}
if (!cpb_props)
return AVERROR(ENOMEM);
+ if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
+ const AVBitStreamFilter *filter = av_bsf_get_by_name("extract_extradata");
+ int ret;
+
+ if (!filter) {
+ av_log(avctx, AV_LOG_ERROR, "extract_extradata bitstream filter "
+ "not found. This is a bug, please report it.\n");
+ return AVERROR_BUG;
+ }
+ ret = av_bsf_alloc(filter, &ctx->bsf);
+ if (ret < 0)
+ return ret;
+
+ ret = avcodec_parameters_from_context(ctx->bsf->par_in, avctx);
+ if (ret < 0)
+ return ret;
+
+ ret = av_bsf_init(ctx->bsf);
+ if (ret < 0)
+ return ret;
+ }
+
if (enccfg.rc_end_usage == AOM_CBR ||
enccfg.g_pass != AOM_RC_ONE_PASS) {
cpb_props->max_bitrate = avctx->rc_max_rate;
static int storeframe(AVCodecContext *avctx, struct FrameListData *cx_frame,
AVPacket *pkt)
{
+ AOMContext *ctx = avctx->priv_data;
int ret = ff_alloc_packet2(avctx, pkt, cx_frame->sz, 0);
if (ret < 0) {
av_log(avctx, AV_LOG_ERROR,
if (!!(cx_frame->flags & AOM_FRAME_IS_KEY))
pkt->flags |= AV_PKT_FLAG_KEY;
+
+ if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
+ ret = av_bsf_send_packet(ctx->bsf, pkt);
+ if (ret < 0) {
+ av_log(avctx, AV_LOG_ERROR, "extract_extradata filter "
+ "failed to send input packet\n");
+ return ret;
+ }
+ ret = av_bsf_receive_packet(ctx->bsf, pkt);
+
+ if (ret < 0) {
+ av_log(avctx, AV_LOG_ERROR, "extract_extradata filter "
+ "failed to receive output packet\n");
+ return ret;
+ }
+ }
return pkt->size;
}
#define OFFSET(x) offsetof(AOMContext, x)
#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
static const AVOption options[] = {
- { "cpu-used", "Quality/Speed ratio modifier", OFFSET(cpu_used), AV_OPT_TYPE_INT, {.i64 = 1}, -8, 8, VE},
+ { "cpu-used", "Quality/Speed ratio modifier", OFFSET(cpu_used), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 8, VE},
{ "auto-alt-ref", "Enable use of alternate reference "
"frames (2-pass only)", OFFSET(auto_alt_ref), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 2, VE},
{ "lag-in-frames", "Number of frames to look ahead at for "