From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4B4FC485FC for ; Mon, 11 Dec 2023 17:05:46 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7065A68D1C6; Mon, 11 Dec 2023 19:05:38 +0200 (EET) Received: from mail-40130.protonmail.ch (mail-40130.protonmail.ch [185.70.40.130]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F2A1F68D1BC for ; Mon, 11 Dec 2023 19:05:31 +0200 (EET) Date: Mon, 11 Dec 2023 17:05:13 +0000 To: FFmpeg development discussions and patches Message-ID: Feedback-ID: 28710920:user:proton MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] avcodec/libjxlenc: Move JxlBasicInfo to LibJxlEncodeContext X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: =?utf-8?q?Zsolt_Vad=C3=A1sz_via_ffmpeg-devel?= Reply-To: FFmpeg development discussions and patches Cc: =?utf-8?Q?Zsolt_Vad=C3=A1sz?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --- libavcodec/libjxlenc.c | 45 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/libavcodec/libjxlenc.c b/libavcodec/libjxlenc.c index d707f3a61b..92a458d51a 100644 --- a/libavcodec/libjxlenc.c +++ b/libavcodec/libjxlenc.c @@ -49,6 +49,7 @@ typedef struct LibJxlEncodeContext { void *runner; JxlEncoder *encoder; JxlEncoderFrameSettings *options; + JxlBasicInfo info; int effort; float distance; int modular; @@ -95,9 +96,6 @@ static int libjxl_init_jxl_encoder(AVCodecContext *avctx) { LibJxlEncodeContext *ctx = avctx->priv_data; - /* reset the encoder every frame for image2 muxer */ - JxlEncoderReset(ctx->encoder); - ctx->options = JxlEncoderFrameSettingsCreate(ctx->encoder, NULL); if (!ctx->options) { av_log(avctx, AV_LOG_ERROR, "Failed to create JxlEncoderOptions\n"); @@ -247,7 +245,7 @@ static int libjxl_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFra LibJxlEncodeContext *ctx = avctx->priv_data; AVFrameSideData *sd; const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(frame->format); - JxlBasicInfo info; + JxlBasicInfo *info = &ctx->info; JxlColorEncoding jxl_color; JxlPixelFormat jxl_fmt; int bits_per_sample; @@ -260,6 +258,9 @@ static int libjxl_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFra size_t bytes_written = 0; uint8_t *next_out = ctx->buffer; + /* reset the encoder every frame for image2 muxer */ + JxlEncoderReset(ctx->encoder); + ret = libjxl_init_jxl_encoder(avctx); if (ret) { av_log(avctx, AV_LOG_ERROR, "Error frame-initializing JxlEncoder\n"); @@ -267,31 +268,31 @@ static int libjxl_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFra } /* populate the basic info settings */ - JxlEncoderInitBasicInfo(&info); + JxlEncoderInitBasicInfo(info); jxl_fmt.num_channels = pix_desc->nb_components; - info.xsize = frame->width; - info.ysize = frame->height; - info.num_extra_channels = (jxl_fmt.num_channels + 1) % 2; - info.num_color_channels = jxl_fmt.num_channels - info.num_extra_channels; + info->xsize = frame->width; + info->ysize = frame->height; + info->num_extra_channels = (jxl_fmt.num_channels + 1) % 2; + info->num_color_channels = jxl_fmt.num_channels - info->num_extra_channels; bits_per_sample = av_get_bits_per_pixel(pix_desc) / jxl_fmt.num_channels; - info.bits_per_sample = avctx->bits_per_raw_sample > 0 && !(pix_desc->flags & AV_PIX_FMT_FLAG_FLOAT) + info->bits_per_sample = avctx->bits_per_raw_sample > 0 && !(pix_desc->flags & AV_PIX_FMT_FLAG_FLOAT) ? avctx->bits_per_raw_sample : bits_per_sample; - info.alpha_bits = (info.num_extra_channels > 0) * info.bits_per_sample; + info->alpha_bits = (info->num_extra_channels > 0) * info->bits_per_sample; if (pix_desc->flags & AV_PIX_FMT_FLAG_FLOAT) { - info.exponent_bits_per_sample = info.bits_per_sample > 16 ? 8 : 5; - info.alpha_exponent_bits = info.alpha_bits ? info.exponent_bits_per_sample : 0; - jxl_fmt.data_type = info.bits_per_sample > 16 ? JXL_TYPE_FLOAT : JXL_TYPE_FLOAT16; + info->exponent_bits_per_sample = info->bits_per_sample > 16 ? 8 : 5; + info->alpha_exponent_bits = info->alpha_bits ? info->exponent_bits_per_sample : 0; + jxl_fmt.data_type = info->bits_per_sample > 16 ? JXL_TYPE_FLOAT : JXL_TYPE_FLOAT16; } else { - info.exponent_bits_per_sample = 0; - info.alpha_exponent_bits = 0; - jxl_fmt.data_type = info.bits_per_sample <= 8 ? JXL_TYPE_UINT8 : JXL_TYPE_UINT16; + info->exponent_bits_per_sample = 0; + info->alpha_exponent_bits = 0; + jxl_fmt.data_type = info->bits_per_sample <= 8 ? JXL_TYPE_UINT8 : JXL_TYPE_UINT16; } #if JPEGXL_NUMERIC_VERSION >= JPEGXL_COMPUTE_NUMERIC_VERSION(0, 8, 0) jxl_bit_depth.bits_per_sample = bits_per_sample; jxl_bit_depth.type = JXL_BIT_DEPTH_FROM_PIXEL_FORMAT; jxl_bit_depth.exponent_bits_per_sample = pix_desc->flags & AV_PIX_FMT_FLAG_FLOAT ? - info.exponent_bits_per_sample : 0; + info->exponent_bits_per_sample : 0; #endif /* JPEG XL format itself does not support limited range */ @@ -302,9 +303,9 @@ static int libjxl_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFra av_log(avctx, AV_LOG_WARNING, "Unknown color range, assuming full (pc)\n"); /* bitexact lossless requires there to be no XYB transform */ - info.uses_original_profile = ctx->distance == 0.0; + info->uses_original_profile = ctx->distance == 0.0; - if (JxlEncoderSetBasicInfo(ctx->encoder, &info) != JXL_ENC_SUCCESS) { + if (JxlEncoderSetBasicInfo(ctx->encoder, info) != JXL_ENC_SUCCESS) { av_log(avctx, AV_LOG_ERROR, "Failed to set JxlBasicInfo\n"); return AVERROR_EXTERNAL; } @@ -353,7 +354,7 @@ static int libjxl_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFra /* This should be implied to be honest * but a libjxl bug makes it fail otherwise */ - if (info.num_color_channels == 1) + if (info->num_color_channels == 1) jxl_color.color_space = JXL_COLOR_SPACE_GRAY; else jxl_color.color_space = JXL_COLOR_SPACE_RGB; @@ -385,7 +386,7 @@ static int libjxl_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFra jxl_fmt.endianness = JXL_NATIVE_ENDIAN; jxl_fmt.align = frame->linesize[0]; - if (JxlEncoderAddImageFrame(ctx->options, &jxl_fmt, frame->data[0], jxl_fmt.align * info.ysize) != JXL_ENC_SUCCESS) { + if (JxlEncoderAddImageFrame(ctx->options, &jxl_fmt, frame->data[0], jxl_fmt.align * info->ysize) != JXL_ENC_SUCCESS) { av_log(avctx, AV_LOG_ERROR, "Failed to add Image Frame\n"); return AVERROR_EXTERNAL; } -- 2.43.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".