From patchwork Sun Jun 6 06:27:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Valerii Zapodovnikov X-Patchwork-Id: 28109 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp2489285iof; Sat, 5 Jun 2021 23:27:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxCYNFcvhlygRSesNq4cy325gVonqFqTMjs1Mi6yLFZyu6IwydbtGrZZG/e1i+g7/QEmBM7 X-Received: by 2002:a17:906:22c6:: with SMTP id q6mr12375719eja.275.1622960865417; Sat, 05 Jun 2021 23:27:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622960865; cv=none; d=google.com; s=arc-20160816; b=I/x4veGvDfCpr5A8nw5hLhJ/F3SqEYOvYmHd5cCG/BTDeRYpweg6jDZeOkvJyA38Z3 Q8Cryal30rbpaQL/3WvZItsoWwPoyCPF5ZpQOLCRVzkotBaFg5e/uAPd4dmWXlUUj+Lz a7a2iNRSps/KS92iFyFPcskT3jk+FaBF/wdWP2ZCv7QEwQeYmNki/TLZctABXLos0gVC MQmjbNW4dndPNHLe14qSefWVtB3SHtpfmbluwN8fFknoWW96a6Jc7cc4yf9MGWmh7vqq SDeXwQmZtghalcOCCcPXKaY06Fm5q/pSzoT2ilqyyq8lQbwxtVArDPa9XLUhgdMbeVF8 IrKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=n4bf58Ak71XknXz3iBrNLH3FuRaumYkPmGGCn0emdEk=; b=HOWveCkY9mLMfUeM9TwK34QDCjK9p8M7K+6V9S/ORup65J/U+EA26WSP5BIEsvz3N6 bpdlaAecWzuiXWKjnEoPZIfYgcC8ebn0bodbJhn5M9tm2BWgp735fdaJ0RGCHVk0iKP9 n8QJDtBYjClvrfUTHs/MP51j6s96WgDJwzuwYj0nkcmdALxIBVoo1SEt5GpgE+UHWJ/3 IIO6F0Op/bAGoXsA1xXDb7qc1iHKvuUd5HFGaB9zpwK0xhZwsqkrThoMI8gFSb2yIbxP nxYxQp6tOl2AKAQWEWm4NlmsTtO6TsgxXGmSh4XUc6wd7Ku29OQUBSKbKhAyEooPfy/n O+nA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=iuWZnKo9; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id h3si2825388ede.590.2021.06.05.23.27.44; Sat, 05 Jun 2021 23:27:45 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=iuWZnKo9; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DCA5C6891CF; Sun, 6 Jun 2021 09:27:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A53E16891CF for ; Sun, 6 Jun 2021 09:27:34 +0300 (EEST) Received: by mail-lf1-f51.google.com with SMTP id v8so20696585lft.8 for ; Sat, 05 Jun 2021 23:27:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fE3ZqmsJ7MOAwPHKqIUdqArC2jyV2UcNKZ8gdV7PCNw=; b=iuWZnKo9X2NRp//2is6F3daie5pYXTXA4ip3IgcNKPHvZ3pwkEXNiOEP0Gj5QoHMYY ROAAvLH1J1lz6jcTjRmd5h4Z/ExyYXMyOYAuPWtoWoct/meMpd2crkwNq/WzqZrDK3IP lxtjBb9uB9sTB4KmaFXPlI1NTx5s9datXVEXmIjvR+8feu+GgwpP2IEwRXQR5J+hDLwd 29ZSo3fhlLVcDcSKEzCd5RNLta9pRRKU9mO+XmaCaons98XMKvAUAttf9wxBuxiCiWUf rSmsSLSFF4VETXPKeXrbqUg/Dyr1tAePnTUro7PJ/MtZGX3S4vtdJLwFxcKNq2QqdiA6 W21Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=fE3ZqmsJ7MOAwPHKqIUdqArC2jyV2UcNKZ8gdV7PCNw=; b=X04rIaQDfhfUKsaE6gkAMlzBUyXOcRP9Bm6TsqeVV+Wiv4EK3DCY1f9Mceg0Ar0iiu ew1odmPSz29W/mOdW47WkcyNuYdllS9+Rh+ofksJ9+PsNEzR98SskOgfUwmQTqCdtbcq iFW2nEAwr6YXEVEfT2hJ3iWg2mwUv+bfNYwY0bW2bjyoYkBr2jVdQEWxtq7RyS2BO/XF dpuQjEtQLg/wq3D27nUIms0ddQ78MajdlAJN+Kn65WdeOjqXC1YcsLJGdzkxwY5xhVmE WvXO0C940HyOBanibTqHLv1ofT7xIHuMXZuhQOO0C4rYajgSRjymK4R7w9b/6DTo5eYF q3kQ== X-Gm-Message-State: AOAM531KTwkfMXEyQpsUZdEJR/aHhpk+du40ncaavOP8bOQRi7h379DC ir3+nUlI0A9CUBvurBWzc9FTpsOlEUqgbg== X-Received: by 2002:a19:c8e:: with SMTP id 136mr7643175lfm.411.1622960853708; Sat, 05 Jun 2021 23:27:33 -0700 (PDT) Received: from localhost (109-252-91-149.nat.spd-mgts.ru. [109.252.91.149]) by smtp.gmail.com with ESMTPSA id r7sm1275834ljc.113.2021.06.05.23.27.32 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 05 Jun 2021 23:27:33 -0700 (PDT) From: Valerii Zapodovnikov To: ffmpeg-devel@ffmpeg.org Date: Sun, 6 Jun 2021 09:27:32 +0300 Message-Id: <20210606062732.90683-1-val.zapod.vz@gmail.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/libopenjpeg: Interpret cinema profiles as XYZ 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: =?utf-8?q?R=C3=A9mi_Achard?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2GTmPZuDsK+N From: RĂ©mi Achard Patch should be applied to decode XYZ samples with not native decoder in ffmpeg (-c:v libopenjpeg, not -c:v jpeg2000). jpeg2000 works already. Now, this is AFAIK a patch that should be applied after upstream's patch: https://github.com/uclouvain/openjpeg/pull/1200 Please note that jpeg2000 XYZ is not bitperfect compared to openjpeg see #4829#comment:3. Some pixels will be different, like in sYCC. I consider both bugs. Also pixel_format can be forced by "-pixel_format xyz12le". --- libavcodec/libopenjpegdec.c | 44 +++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/libavcodec/libopenjpegdec.c b/libavcodec/libopenjpegdec.c index 8982d21be4..dff19586bb 100644 --- a/libavcodec/libopenjpegdec.c +++ b/libavcodec/libopenjpegdec.c @@ -71,6 +71,10 @@ static const enum AVPixelFormat libopenjpeg_gray_pix_fmts[] = { static const enum AVPixelFormat libopenjpeg_yuv_pix_fmts[] = { YUV_PIXEL_FORMATS }; +static const enum AVPixelFormat libopenjpeg_xyz_pix_fmts[] = { + XYZ_PIXEL_FORMATS, + YUV_PIXEL_FORMATS +}; static const enum AVPixelFormat libopenjpeg_all_pix_fmts[] = { RGB_PIXEL_FORMATS, GRAY_PIXEL_FORMATS, YUV_PIXEL_FORMATS, XYZ_PIXEL_FORMATS }; @@ -196,23 +200,29 @@ static inline enum AVPixelFormat libopenjpeg_guess_pix_fmt(const opj_image_t *im const enum AVPixelFormat *possible_fmts = NULL; int possible_fmts_nb = 0; - switch (image->color_space) { - case OPJ_CLRSPC_SRGB: - possible_fmts = libopenjpeg_rgb_pix_fmts; - possible_fmts_nb = FF_ARRAY_ELEMS(libopenjpeg_rgb_pix_fmts); - break; - case OPJ_CLRSPC_GRAY: - possible_fmts = libopenjpeg_gray_pix_fmts; - possible_fmts_nb = FF_ARRAY_ELEMS(libopenjpeg_gray_pix_fmts); - break; - case OPJ_CLRSPC_SYCC: - possible_fmts = libopenjpeg_yuv_pix_fmts; - possible_fmts_nb = FF_ARRAY_ELEMS(libopenjpeg_yuv_pix_fmts); - break; - default: - possible_fmts = libopenjpeg_all_pix_fmts; - possible_fmts_nb = FF_ARRAY_ELEMS(libopenjpeg_all_pix_fmts); - break; + if (image->rsiz == FF_PROFILE_JPEG2000_DCINEMA_2K || + image->rsiz == FF_PROFILE_JPEG2000_DCINEMA_4K) { + possible_fmts = libopenjpeg_xyz_pix_fmts; + possible_fmts_nb = FF_ARRAY_ELEMS(libopenjpeg_xyz_pix_fmts); + } else { + switch (image->color_space) { + case OPJ_CLRSPC_SRGB: + possible_fmts = libopenjpeg_rgb_pix_fmts; + possible_fmts_nb = FF_ARRAY_ELEMS(libopenjpeg_rgb_pix_fmts); + break; + case OPJ_CLRSPC_GRAY: + possible_fmts = libopenjpeg_gray_pix_fmts; + possible_fmts_nb = FF_ARRAY_ELEMS(libopenjpeg_gray_pix_fmts); + break; + case OPJ_CLRSPC_SYCC: + possible_fmts = libopenjpeg_yuv_pix_fmts; + possible_fmts_nb = FF_ARRAY_ELEMS(libopenjpeg_yuv_pix_fmts); + break; + default: + possible_fmts = libopenjpeg_all_pix_fmts; + possible_fmts_nb = FF_ARRAY_ELEMS(libopenjpeg_all_pix_fmts); + break; + } } for (index = 0; index < possible_fmts_nb; ++index)