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 B0F9C48F08 for ; Tue, 30 Jan 2024 00:38:04 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 792B868D2A4; Tue, 30 Jan 2024 02:38:01 +0200 (EET) Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 16A3A68D29E for ; Tue, 30 Jan 2024 02:37:55 +0200 (EET) Received: by mail-qk1-f178.google.com with SMTP id af79cd13be357-783cdbecfe2so109027085a.0 for ; Mon, 29 Jan 2024 16:37:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706575073; x=1707179873; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=mu2hKUExQ+gLmdrO11J9jyjw6xznKYxl83DiJvsyWGg=; b=CfNa3m/Ph0r3l3uUvZVdL2fkj+3RAUwNfGJcnPhJSTBO/t6wovJpb09HXw7yPAn1vL XSPd8kfIUPOL9xitPpdQKYh7iSJASHGQg5E0IAS6sBmOD2YQ918luOtdWkHZr59VnXdZ 0vd6DoC5dvVnBL+JC1RQcBllAkGhXe1ms2swT24itgLGOOnEd+I/uwAl+ZdYsT9wG4oE Jt1OP/WMLU+qW2XeDJvVzIzR6atnvCYBYnXkCxjGblYjyK/F/ZzoZiTsIVzTFBFYhrgx c/g/KVHceGqQVQ+g4+0nXtLNpnF1q5BRmKT0xQobT0lVpTRIDY8V/kxtbPZ8tSS+GT10 YzOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706575073; x=1707179873; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mu2hKUExQ+gLmdrO11J9jyjw6xznKYxl83DiJvsyWGg=; b=vLjIGMGIro8tICBNSjcg24UzUOdJIVyc7OikF1kIQOHlP6yNMonql7UzgJIzidcK33 0iaOrl5yclj/8ENSuFtF90inwC3kXB4XMS3td3FaJ/SgPeaaumEoPZDofg0H6ziUpWdL iVFeptQt4m2n06ToyH9XTG18hXfvHttBKeB92fAyQthLiQdF1K5cFEw6tAlmdwx3Ranl AW63n5k5NXydCUw7sZlyb2uIFxAGq+EXdtYkVvOEkGheWGRxHZ0rYJRXy+uDVNvQCWQW ulFpM6yr1UK01QoupUQpe/qOdxFDECj2W6woUb3J/P0rX4Hi6WqdTH7tyS7zelOIQeTf xHoA== X-Gm-Message-State: AOJu0YzlP0NW8HzqePsqd2z5crmnuZe96eEuvyUC39cQMOPr+gH1QsPh zMi/goDxIrjT0JP6629W3Wq3p+54zb0Puwnce9C6CODKwaKDX9WSo81KslDM X-Google-Smtp-Source: AGHT+IEe45xz6SLqpZXo0tLpsiLDcJtk9vq2bPBf7ngwEUNH/2/EyKfweW/J1ELn+qy0RmvDYKhfFg== X-Received: by 2002:ad4:5c66:0:b0:686:9faf:6f10 with SMTP id i6-20020ad45c66000000b006869faf6f10mr10694151qvh.0.1706575073376; Mon, 29 Jan 2024 16:37:53 -0800 (PST) Received: from gauss.local (c-68-56-149-176.hsd1.mi.comcast.net. [68.56.149.176]) by smtp.gmail.com with ESMTPSA id ow9-20020a0562143f8900b0068692ea038esm3930384qvb.91.2024.01.29.16.37.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jan 2024 16:37:53 -0800 (PST) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Jan 2024 19:37:50 -0500 Message-ID: <20240130003750.27503-1-leo.izen@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/libjxlenc: support negative linesizes 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: , Reply-To: FFmpeg development discussions and patches Cc: Leo Izen 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: libjxl doesn't support negative strides, but JPEG XL has an orientation flag inside the codestream. We can use this to work around the library limitation, by taking the absolute value of the negative row stride, sending the image up-side-down, and telling the library that the image has a vertical-flip orientation. Signed-off-by: Leo Izen --- libavcodec/libjxlenc.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libavcodec/libjxlenc.c b/libavcodec/libjxlenc.c index 67be8a01ca..49020b1036 100644 --- a/libavcodec/libjxlenc.c +++ b/libavcodec/libjxlenc.c @@ -259,6 +259,7 @@ static int libjxl_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFra size_t available = ctx->buffer_size; size_t bytes_written = 0; uint8_t *next_out = ctx->buffer; + uint8_t *data; ret = libjxl_init_jxl_encoder(avctx); if (ret) { @@ -303,6 +304,7 @@ static int libjxl_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFra /* bitexact lossless requires there to be no XYB transform */ info.uses_original_profile = ctx->distance == 0.0; + info.orientation = frame->linesize[0] >= 0 ? JXL_ORIENT_IDENTITY : JXL_ORIENT_FLIP_VERTICAL; if (JxlEncoderSetBasicInfo(ctx->encoder, &info) != JXL_ENC_SUCCESS) { av_log(avctx, AV_LOG_ERROR, "Failed to set JxlBasicInfo\n"); @@ -383,9 +385,15 @@ static int libjxl_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFra } jxl_fmt.endianness = JXL_NATIVE_ENDIAN; - jxl_fmt.align = frame->linesize[0]; + if (frame->linesize[0] >= 0) { + jxl_fmt.align = frame->linesize[0]; + data = frame->data[0]; + } else { + jxl_fmt.align = -frame->linesize[0]; + data = frame->data[0] - jxl_fmt.align * (info.ysize - 1); + } - if (JxlEncoderAddImageFrame(ctx->options, &jxl_fmt, frame->data[0], jxl_fmt.align * info.ysize) != JXL_ENC_SUCCESS) { + if (JxlEncoderAddImageFrame(ctx->options, &jxl_fmt, data, 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".