MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / ff_hw_base_init_gop_structure

Function ff_hw_base_init_gop_structure

libavcodec/hw_base_encode.c:662–721  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

660}
661
662int ff_hw_base_init_gop_structure(FFHWBaseEncodeContext *ctx, AVCodecContext *avctx,
663 uint32_t ref_l0, uint32_t ref_l1,
664 int flags, int prediction_pre_only)
665{
666 ctx->ref_l0 = FFMIN(ref_l0, MAX_PICTURE_REFERENCES);
667 ctx->ref_l1 = FFMIN(ref_l1, MAX_PICTURE_REFERENCES);
668
669 if (avctx->refs > 0) {
670 ctx->ref_l0 = FFMIN(ctx->ref_l0, avctx->refs);
671 ctx->ref_l1 = FFMIN(ctx->ref_l1, avctx->refs);
672 }
673
674 if (flags & FF_HW_FLAG_INTRA_ONLY || avctx->gop_size <= 1) {
675 av_log(avctx, AV_LOG_VERBOSE, "Using intra frames only.\n");
676 ctx->gop_size = 1;
677 } else if (ref_l0 < 1) {
678 av_log(avctx, AV_LOG_ERROR, "Driver does not support any "
679 "reference frames.\n");
680 return AVERROR(EINVAL);
681 } else if (!(flags & FF_HW_FLAG_B_PICTURES) || ref_l1 < 1 ||
682 avctx->max_b_frames < 1 || prediction_pre_only) {
683 if (ctx->p_to_gpb)
684 av_log(avctx, AV_LOG_VERBOSE, "Using intra and B-frames "
685 "(supported references: %d / %d).\n",
686 ref_l0, ref_l1);
687 else
688 av_log(avctx, AV_LOG_VERBOSE, "Using intra and P-frames "
689 "(supported references: %d / %d).\n", ref_l0, ref_l1);
690 ctx->gop_size = avctx->gop_size;
691 ctx->p_per_i = INT_MAX;
692 ctx->b_per_p = 0;
693 } else {
694 if (ctx->p_to_gpb)
695 av_log(avctx, AV_LOG_VERBOSE, "Using intra and B-frames "
696 "(supported references: %d / %d).\n",
697 ref_l0, ref_l1);
698 else
699 av_log(avctx, AV_LOG_VERBOSE, "Using intra, P- and B-frames "
700 "(supported references: %d / %d).\n", ref_l0, ref_l1);
701 ctx->gop_size = avctx->gop_size;
702 ctx->p_per_i = INT_MAX;
703 ctx->b_per_p = avctx->max_b_frames;
704 if (flags & FF_HW_FLAG_B_PICTURE_REFERENCES) {
705 ctx->max_b_depth = FFMIN(ctx->desired_b_depth,
706 av_log2(ctx->b_per_p) + 1);
707 } else {
708 ctx->max_b_depth = 1;
709 }
710 }
711
712 if (flags & FF_HW_FLAG_NON_IDR_KEY_PICTURES) {
713 ctx->closed_gop = !!(avctx->flags & AV_CODEC_FLAG_CLOSED_GOP);
714 ctx->gop_per_idr = ctx->idr_interval + 1;
715 } else {
716 ctx->closed_gop = 1;
717 ctx->gop_per_idr = 1;
718 }
719

Callers 5

vulkan_encode_h265_initFunction · 0.85
vulkan_encode_av1_initFunction · 0.85
vulkan_encode_h264_initFunction · 0.85

Calls 2

av_logFunction · 0.85
av_log2Function · 0.85

Tested by

no test coverage detected