From patchwork Fri Jan 11 14:54:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carl Eugen Hoyos X-Patchwork-Id: 11710 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 2EE3644DA21 for ; Fri, 11 Jan 2019 16:54:15 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 529F168A295; Fri, 11 Jan 2019 16:54:03 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it1-f182.google.com (mail-it1-f182.google.com [209.85.166.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 09B1C68A758 for ; Fri, 11 Jan 2019 16:53:56 +0200 (EET) Received: by mail-it1-f182.google.com with SMTP id w18so2853831ite.1 for ; Fri, 11 Jan 2019 06:54:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=VJzKgh0Fw4uxxCcP0X77Rxoa7TbZB0qYnfbDPPlh7Pc=; b=Ye9Pxe4e2dtEnycoP7bVqptLEuPS8uHJBvq3cuSEfUQwAtI59fHjSP5Cl5kGcktQU/ sFXCuvNnw7rmkzCSgcMVpJ1+WpDe+eGg9a37BrTyOJ5fEX6hFIp9zQ6wmZa5Xh/WRIa2 s2yNCk8Nu9tyx3sW1KRN6hDCWtpOu1lJcozXYlSUrWOCi44WVlC06P1qF5IG0hBnSEyD c9ATHCq/6StZ2+e6/zEFolE2oEPUiQ/TMcZ9vARVVQ10nxVCT2QM6wbx+r19Y8ekt1Dm 694ReZHXst9tZKOmWwjrdkGzXs8BGsn+Z5oZPXqPsfYAw3W7xpGkjHGI+ZR56OhjB4Nj H0JQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=VJzKgh0Fw4uxxCcP0X77Rxoa7TbZB0qYnfbDPPlh7Pc=; b=B9UHAWSuIe5N9Vs2kwooyyahX0cm1xgHzMBRHHzE+t0Yfgdv0rC91aAR9Bmtiy4ePz 972tF98GJVH+AULRWXkzHE98VMZVMiwVwuwKflctnYIyVdbYCgIaJudguKIqIwZTsdIT GiVZ7NpXDJExo9y+717FuUjgK4848RBeu8IYhr2/YiyFL7p1MPblt8EUqDkiDlBanPrX Tk9UzYbWsTlNyJLndXH3Oxpyhi1BUtNUIrNUD2oGradVB7HW999/xPKYXKIiUL2QilRf RjajMLq5BGrgZmloICOw7t1+3BmkehaLun9bxKU1rbv4yeRAJ9sW7yDTcv49dxuo0uVt Lh2g== X-Gm-Message-State: AJcUukf9mLdXYa4lZJ6Aj7y8/saP6vrOahzvzl6KKP4Vmb/gmUV03/rN Ud2G0D1/GbM8Pk/cx3c8KpUXroq6yfJQ+/94UTDMsA== X-Google-Smtp-Source: ALg8bN6q/iTTLAQFq1MXsWFjXSMf30fVHF+MsQWu/5Fl2EYdnW5rjXqHQUIyZc561o0gNJMdufCZatn3gEMwtwTzUNM= X-Received: by 2002:a24:b64a:: with SMTP id d10mr1380336itj.149.1547218447213; Fri, 11 Jan 2019 06:54:07 -0800 (PST) MIME-Version: 1.0 Received: by 2002:a02:5f11:0:0:0:0:0 with HTTP; Fri, 11 Jan 2019 06:54:06 -0800 (PST) From: Carl Eugen Hoyos Date: Fri, 11 Jan 2019 15:54:06 +0100 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH]lavc/tiff: Support some CMYK samples X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Hi! Attached patch that fixes the sample from ticket #3459 cannot be factorized with the code in mjpegdec (and psd), the representation is different. Please comment, Carl Eugen From c4f9f6248af4b277695b90bf3d2efdc8687d70d3 Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Fri, 11 Jan 2019 15:44:17 +0100 Subject: [PATCH] lavc/tiff: Support CMYK images. Fixes ticket #3459. --- libavcodec/tiff.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c index 570b3cb..5a4271c 100644 --- a/libavcodec/tiff.c +++ b/libavcodec/tiff.c @@ -825,7 +825,7 @@ static int init_image(TiffContext *s, ThreadFrame *frame) s->avctx->pix_fmt = s->le ? AV_PIX_FMT_YA16LE : AV_PIX_FMT_YA16BE; break; case 324: - s->avctx->pix_fmt = AV_PIX_FMT_RGBA; + s->avctx->pix_fmt = s->photometric == TIFF_PHOTOMETRIC_SEPARATED ? AV_PIX_FMT_RGB0 : AV_PIX_FMT_RGBA; break; case 483: s->avctx->pix_fmt = s->le ? AV_PIX_FMT_RGB48LE : AV_PIX_FMT_RGB48BE; @@ -1100,12 +1100,12 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame) case TIFF_PHOTOMETRIC_BLACK_IS_ZERO: case TIFF_PHOTOMETRIC_RGB: case TIFF_PHOTOMETRIC_PALETTE: + case TIFF_PHOTOMETRIC_SEPARATED: case TIFF_PHOTOMETRIC_YCBCR: case TIFF_PHOTOMETRIC_CFA: s->photometric = value; break; case TIFF_PHOTOMETRIC_ALPHA_MASK: - case TIFF_PHOTOMETRIC_SEPARATED: case TIFF_PHOTOMETRIC_CIE_LAB: case TIFF_PHOTOMETRIC_ICC_LAB: case TIFF_PHOTOMETRIC_ITU_LAB: @@ -1530,6 +1530,24 @@ again: dst += stride; } } + + if (s->photometric == TIFF_PHOTOMETRIC_SEPARATED && + s->avctx->pix_fmt == AV_PIX_FMT_RGB0) { + dst = p->data[plane]; + for (i = 0; i < s->height; i++) { + for (j = 0; j < s->width; j++) { + int k = 255 - dst[4 * j + 3]; + int r = (255 - dst[4 * j ]) * k; + int g = (255 - dst[4 * j + 1]) * k; + int b = (255 - dst[4 * j + 2]) * k; + dst[4 * j ] = r * 257 >> 16; + dst[4 * j + 1] = g * 257 >> 16; + dst[4 * j + 2] = b * 257 >> 16; + dst[4 * j + 3] = 255; + } + dst += p->linesize[plane]; + } + } } if (s->planar && s->bppcount > 2) { -- 1.7.10.4