static av_cold int libopenjpeg_encode_init(AVCodecContext *avctx) { LibOpenJPEGContext *ctx = avctx->priv_data; int err = AVERROR(ENOMEM); opj_set_default_encoder_parameters(&ctx->enc_params); ctx->enc_params.cp_rsiz = ctx->profile; ctx->enc_params.mode = !!avctx->global_quality; ctx->enc_params.cp_cinema = ctx->cinema_mode; ctx->enc_params.prog_order = ctx->prog_order; ctx->enc_params.numresolution = ctx->numresolution; ctx->enc_params.cp_disto_alloc = ctx->disto_alloc; ctx->enc_params.cp_fixed_alloc = ctx->fixed_alloc; ctx->enc_params.cp_fixed_quality = ctx->fixed_quality; ctx->enc_params.tcp_numlayers = ctx->numlayers; ctx->enc_params.tcp_rates[0] = FFMAX(avctx->compression_level, 0) * 2; if (ctx->cinema_mode > 0) { cinema_parameters(&ctx->enc_params); } ctx->image = mj2_create_image(avctx, &ctx->enc_params); if (!ctx->image) { av_log(avctx, AV_LOG_ERROR, "Error creating the mj2 image\n"); err = AVERROR(EINVAL); goto fail; } avctx->coded_frame = av_frame_alloc(); if (!avctx->coded_frame) { av_log(avctx, AV_LOG_ERROR, "Error allocating coded frame\n"); goto fail; } return 0; fail: opj_image_destroy(ctx->image); ctx->image = NULL; av_frame_free(&avctx->coded_frame); return err; }
static av_cold int libopenjpeg_encode_init(AVCodecContext *avctx) { LibOpenJPEGContext *ctx = avctx->priv_data; opj_set_default_encoder_parameters(&ctx->enc_params); ctx->enc_params.tcp_numlayers = 1; ctx->enc_params.tcp_rates[0] = avctx->compression_level > 0 ? avctx->compression_level : 0; ctx->enc_params.cp_disto_alloc = 1; ctx->compress = opj_create_compress(CODEC_J2K); if (!ctx->compress) { av_log(avctx, AV_LOG_ERROR, "Error creating the compressor\n"); return AVERROR(ENOMEM); } avctx->coded_frame = avcodec_alloc_frame(); if (!avctx->coded_frame) { av_freep(&ctx->compress); ctx->compress = NULL; av_log(avctx, AV_LOG_ERROR, "Error allocating coded frame\n"); return AVERROR(ENOMEM); } ctx->image = mj2_create_image(avctx, &ctx->enc_params); if (!ctx->image) { av_freep(&ctx->compress); ctx->compress = NULL; av_freep(&avctx->coded_frame); avctx->coded_frame = NULL; av_log(avctx, AV_LOG_ERROR, "Error creating the mj2 image\n"); return AVERROR(EINVAL); } memset(&ctx->event_mgr, 0, sizeof(opj_event_mgr_t)); ctx->event_mgr.error_handler = error_callback; ctx->event_mgr.warning_handler = warning_callback; ctx->event_mgr.info_handler = NULL; opj_set_event_mgr((opj_common_ptr)ctx->compress, &ctx->event_mgr, avctx); return 0; }
static av_cold int libopenjpeg_encode_init(AVCodecContext *avctx) { LibOpenJPEGContext *ctx = avctx->priv_data; int err = AVERROR(ENOMEM); opj_set_default_encoder_parameters(&ctx->enc_params); ctx->enc_params.cp_rsiz = ctx->profile; ctx->enc_params.mode = !!avctx->global_quality; ctx->enc_params.cp_cinema = ctx->cinema_mode; ctx->enc_params.prog_order = ctx->prog_order; ctx->enc_params.numresolution = ctx->numresolution; ctx->enc_params.cp_disto_alloc = ctx->disto_alloc; ctx->enc_params.cp_fixed_alloc = ctx->fixed_alloc; ctx->enc_params.cp_fixed_quality = ctx->fixed_quality; ctx->enc_params.tcp_numlayers = ctx->numlayers; ctx->enc_params.tcp_rates[0] = FFMAX(avctx->compression_level, 0) * 2; if (ctx->cinema_mode > 0) { ctx->enc_params.irreversible = 1; ctx->enc_params.tcp_mct = 1; ctx->enc_params.tile_size_on = 0; /* no subsampling */ ctx->enc_params.cp_tdx=1; ctx->enc_params.cp_tdy=1; ctx->enc_params.subsampling_dx = 1; ctx->enc_params.subsampling_dy = 1; /* Tile and Image shall be at (0,0) */ ctx->enc_params.cp_tx0 = 0; ctx->enc_params.cp_ty0 = 0; ctx->enc_params.image_offset_x0 = 0; ctx->enc_params.image_offset_y0 = 0; /* Codeblock size= 32*32 */ ctx->enc_params.cblockw_init = 32; ctx->enc_params.cblockh_init = 32; ctx->enc_params.csty |= 0x01; /* No ROI */ ctx->enc_params.roi_compno = -1; if (ctx->enc_params.prog_order != CPRL) { av_log(avctx, AV_LOG_ERROR, "prog_order forced to CPRL\n"); ctx->enc_params.prog_order = CPRL; } ctx->enc_params.tp_flag = 'C'; ctx->enc_params.tp_on = 1; } ctx->compress = opj_create_compress(ctx->format); if (!ctx->compress) { av_log(avctx, AV_LOG_ERROR, "Error creating the compressor\n"); return AVERROR(ENOMEM); } ctx->image = mj2_create_image(avctx, &ctx->enc_params); if (!ctx->image) { av_log(avctx, AV_LOG_ERROR, "Error creating the mj2 image\n"); err = AVERROR(EINVAL); goto fail; } avctx->coded_frame = av_frame_alloc(); if (!avctx->coded_frame) { av_log(avctx, AV_LOG_ERROR, "Error allocating coded frame\n"); goto fail; } memset(&ctx->event_mgr, 0, sizeof(opj_event_mgr_t)); ctx->event_mgr.info_handler = info_callback; ctx->event_mgr.error_handler = error_callback; ctx->event_mgr.warning_handler = warning_callback; opj_set_event_mgr((opj_common_ptr) ctx->compress, &ctx->event_mgr, avctx); return 0; fail: opj_destroy_compress(ctx->compress); ctx->compress = NULL; opj_image_destroy(ctx->image); ctx->image = NULL; av_freep(&avctx->coded_frame); return err; }