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 ACE8948F74 for ; Tue, 30 Jan 2024 14:46:19 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4B90368D386; Tue, 30 Jan 2024 16:46:17 +0200 (EET) Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com [209.85.167.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D1B5F68D370 for ; Tue, 30 Jan 2024 16:46:11 +0200 (EET) Received: by mail-oi1-f178.google.com with SMTP id 5614622812f47-3be110bbff9so888189b6e.1 for ; Tue, 30 Jan 2024 06:46:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706625970; x=1707230770; 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=QKL0P3vjr+tnyqsNJ3rFcEx6CODM9Z0xBN5RO7KhPR8=; b=fXIbRMLQVN08Fl9ycFSTLYcNbnLtYRa+BC85lk2XJTgrpoMzfXsRVCwDairGq1YmBd 0bhxXzfiQPHIlAtHfSy/uRCLjdl4GgkcaYP9JEP01sqkXKXL8W2sX5wYWtztnFfmHNHU N8IfApYJxZ9WmGxWg8q4ZUoAe0BdBVX35hFWVo6007LeUHEZu5uS4zDm34yQnnPxm8LC HoQMN3AQSQUxCRe0cGvZCl0rtPOetLDN6o2TT/UQRNCaqnKDZy74+BE5nwdQOES2NhfA xNt3wQCAn2wIVhLXQI/+BQP6rtm67Z2PiwJdIm7aAyJjoZl+jI3mC1sSfbO32S/cILOC ns3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706625970; x=1707230770; 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=QKL0P3vjr+tnyqsNJ3rFcEx6CODM9Z0xBN5RO7KhPR8=; b=takCANtYjnK3NaGaGK1hq/M5J6NxPNd47RQEarKMCH40eHhxebLQd+VgaNVrYjqdOy 4SdgnrkSjv8yK1Ckyt+wAxIiHSMAX3zqcLWhoXvak+qKbEdxrhtv9medyNJcMvutaNz2 GPdJUmcLn+k+QYvUQkEWDjPf4MLFfwTl4SMQTkO1hq8BPYWDe7iAgyIlZrRJqwPBY08d 1B6QpTCth6DP9jD58wZnFmD8zkvzbmibQSld7xGuP1Q1oIAiFOI9B1uwh5Rb+55L5siD xRcPpcGJ5lAYEyhZ7JRmfI7XV21SZMIJWHSN9SpSreUUqtNYd5NuHzO68NrYR4KCkQEW MK4A== X-Gm-Message-State: AOJu0YxqppCdG3QeLYPp6TloV3eVMTAA4EZNPKX9CXweSsw18xlCIkXb RRtnVHiLXj2agaE+sgr4CcgLetj6EJQCvX/ghRt14PTNYCsuTInbFCMq1GL4 X-Google-Smtp-Source: AGHT+IFOwtVUMWpP6GM2DiitwEgu79hEL6xsqNeXZaqCNuzyzD01YZNulb7HFVlCJmxHk04AWa/10A== X-Received: by 2002:a05:6808:494:b0:3be:7cd0:926 with SMTP id z20-20020a056808049400b003be7cd00926mr3869650oid.3.1706625970153; Tue, 30 Jan 2024 06:46:10 -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 w3-20020a05620a444300b00783fbbe9741sm1945261qkp.134.2024.01.30.06.46.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jan 2024 06:46:09 -0800 (PST) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Tue, 30 Jan 2024 09:46:08 -0500 Message-ID: <20240130144608.54492-1-leo.izen@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] 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..4ddd5f9f2c 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; + const 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".