static int trace_headers_init(AVBSFContext *bsf) { TraceHeadersContext *ctx = bsf->priv_data; int err; err = ff_cbs_init(&ctx->cbc, bsf->par_in->codec_id, bsf); if (err < 0) return err; ctx->cbc.trace_enable = 1; ctx->cbc.trace_level = AV_LOG_INFO; if (bsf->par_in->extradata) { CodedBitstreamFragment ps; av_log(bsf, AV_LOG_INFO, "Extradata\n"); err = ff_cbs_read_extradata(&ctx->cbc, &ps, bsf->par_in); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Failed to read extradata.\n"); return err; } ff_cbs_fragment_uninit(&ctx->cbc, &ps); } return 0; }
static int filter_units_init(AVBSFContext *bsf) { FilterUnitsContext *ctx = bsf->priv_data; int err; if (ctx->pass_types && ctx->remove_types) { av_log(bsf, AV_LOG_ERROR, "Exactly one of pass_types or " "remove_types is required.\n"); return AVERROR(EINVAL); } if (ctx->pass_types) { ctx->mode = PASS; err = filter_units_make_type_list(ctx->pass_types, &ctx->type_list, &ctx->nb_types); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Failed to parse pass_types.\n"); return err; } } else if (ctx->remove_types) { ctx->mode = REMOVE; err = filter_units_make_type_list(ctx->remove_types, &ctx->type_list, &ctx->nb_types); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Failed to parse remove_types.\n"); return err; } } else { return 0; } err = ff_cbs_init(&ctx->cbc, bsf->par_in->codec_id, bsf); if (err < 0) return err; // Don't actually decompose anything, we only want the unit data. ctx->cbc->decompose_unit_types = ctx->type_list; ctx->cbc->nb_decompose_unit_types = 0; if (bsf->par_in->extradata) { CodedBitstreamFragment ps; err = ff_cbs_read_extradata(ctx->cbc, &ps, bsf->par_in); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Failed to read extradata.\n"); } else { err = ff_cbs_write_extradata(ctx->cbc, bsf->par_out, &ps); if (err < 0) av_log(bsf, AV_LOG_ERROR, "Failed to write extradata.\n"); } ff_cbs_fragment_uninit(ctx->cbc, &ps); } return err; }
static int h264_redundant_pps_init(AVBSFContext *bsf) { H264RedundantPPSContext *ctx = bsf->priv_data; CodedBitstreamFragment *au = &ctx->access_unit; int err, i; err = ff_cbs_init(&ctx->input, AV_CODEC_ID_H264, bsf); if (err < 0) return err; err = ff_cbs_init(&ctx->output, AV_CODEC_ID_H264, bsf); if (err < 0) return err; ctx->global_pic_init_qp = 26; if (bsf->par_in->extradata) { err = ff_cbs_read_extradata(ctx->input, au, bsf->par_in); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Failed to read extradata.\n"); goto fail; } for (i = 0; i < au->nb_units; i++) { if (au->units[i].type == H264_NAL_PPS) { err = h264_redundant_pps_fixup_pps(ctx, au->units[i].content); if (err < 0) goto fail; } } ctx->extradata_pic_init_qp = ctx->current_pic_init_qp; err = ff_cbs_write_extradata(ctx->output, bsf->par_out, au); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Failed to write extradata.\n"); goto fail; } } err = 0; fail: ff_cbs_fragment_uninit(ctx->output, au); return err; }
static int h265_metadata_init(AVBSFContext *bsf) { H265MetadataContext *ctx = bsf->priv_data; CodedBitstreamFragment *au = &ctx->access_unit; int err, i; err = ff_cbs_init(&ctx->cbc, AV_CODEC_ID_HEVC, bsf); if (err < 0) return err; if (bsf->par_in->extradata) { err = ff_cbs_read_extradata(ctx->cbc, au, bsf->par_in); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Failed to read extradata.\n"); goto fail; } for (i = 0; i < au->nb_units; i++) { if (au->units[i].type == HEVC_NAL_VPS) { err = h265_metadata_update_vps(bsf, au->units[i].content); if (err < 0) goto fail; } if (au->units[i].type == HEVC_NAL_SPS) { err = h265_metadata_update_sps(bsf, au->units[i].content); if (err < 0) goto fail; } } err = ff_cbs_write_extradata(ctx->cbc, bsf->par_out, au); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Failed to write extradata.\n"); goto fail; } } err = 0; fail: ff_cbs_fragment_uninit(ctx->cbc, au); return err; }