From patchwork Fri Jan 11 01:55:37 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: 11700 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 2E8AE44C9BC for ; Fri, 11 Jan 2019 03:55:45 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4B30568A7E2; Fri, 11 Jan 2019 03:55:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it1-f176.google.com (mail-it1-f176.google.com [209.85.166.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8665368A7E0 for ; Fri, 11 Jan 2019 03:55:27 +0200 (EET) Received: by mail-it1-f176.google.com with SMTP id i145so88046ita.4 for ; Thu, 10 Jan 2019 17:55:39 -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=dMHHi4cvvcNxSfQIkNDZA7U6V4ogOvslpn/bVbKNpGo=; b=kupdfo5UET7JpcBbVKbs8HM4NluwcoPzCatJ0L+VrSW2awLDmIxKjDUKZSgpYJ4Y5f tsVt9ESMlrjdOjnndudyT9z25PDXpkU4ryjTuaKvBOENgyFvNC+zQbAbRePG1fW3uSWb /E/mp5OJCwa+fBuPl+kHlI06i8CFZBFBpweOg8rA5KeEXbzkcIEoGpyH1eKYQ2iA9K3s k1Wjg82VPTs/mMvqb+Jza3qQmv1IrapxOIs8OvHW5YNbMDOY3D1uhGCKvrFvqKLQ2XmT s/ZfIontKn8ZsaXeUBFPgEvrwCfikOeiaQH8mIbOxNFr0YTx7PemuszjhVQ0cqsIa0vX ozGw== 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=dMHHi4cvvcNxSfQIkNDZA7U6V4ogOvslpn/bVbKNpGo=; b=NAmD9kEH1pOJrpr9aM4XzS15x7XLTk+RD5Yf1O2m2QpLUrdmUOiTenPDrrx3jwInyZ T1eFIyrQp6OFA17oUPYpRBQpYuK6j/1+KiTMUtFuBvAH5OxRvBGn99kiIO+azrwyMJ2A L3iclvv+li7iUhD6Mez1XuMKRIwP9w60kLQNVd48/oqFnxyKWy6/pbT2lxLjPtOIj1Jt 0LgczEheyj214NdeWFs9/wEm8Ve0FcoYnInGVnRTYNveALHlAH5QeEhWCb5R9pQG/uff l/47LoK5z7C9c5gVo5pSK5lLZ8U+dz/H+5Gj9/HVLdB0XqQLexAl9qwBO87NQbK1n/IH EboA== X-Gm-Message-State: AJcUukfkj4JvM10rFbus2ZNRcBro1zSUhemfxSO1g6gXWrdfFLhKuMPV EXqILvyHUsewutnu90zQjBS9s+C+8JCwivEKKoTSPQ== X-Google-Smtp-Source: ALg8bN6Peb9FT+qcsmltLKTn1t0ZkaWbZ1HHfEnzK8Z72pyb+eTpRhSbnqzTJKtPim3qF65o1rtYWyjboflyx61kgx0= X-Received: by 2002:a24:100d:: with SMTP id 13mr30837ity.58.1547171738296; Thu, 10 Jan 2019 17:55:38 -0800 (PST) MIME-Version: 1.0 Received: by 2002:a02:5f11:0:0:0:0:0 with HTTP; Thu, 10 Jan 2019 17:55:37 -0800 (PST) From: Carl Eugen Hoyos Date: Fri, 11 Jan 2019 02:55:37 +0100 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH]lavc/psd: Support CMYK images 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 fixes ticket #6797, please comment. Carl Eugen From f0d1c43a791f44eee5ae3174baf367a73e59283e Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Fri, 11 Jan 2019 02:53:06 +0100 Subject: [PATCH] lavc/psd: Support CMYK images. Fixes ticket #6797. --- libavcodec/psd.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/libavcodec/psd.c b/libavcodec/psd.c index 4381447..200e3ad 100644 --- a/libavcodec/psd.c +++ b/libavcodec/psd.c @@ -337,6 +337,19 @@ static int decode_frame(AVCodecContext *avctx, void *data, } avctx->pix_fmt = AV_PIX_FMT_PAL8; break; + case PSD_CMYK: + if (s->channel_count == 5) { + if (s->channel_depth == 8) { + avctx->pix_fmt = AV_PIX_FMT_GBRAP; + } else { + avpriv_report_missing_feature(avctx, "channel depth %d for cmyk", s->channel_depth); + return AVERROR_PATCHWELCOME; + } + } else { + avpriv_report_missing_feature(avctx, "channel count %d for cmyk", s->channel_count); + return AVERROR_PATCHWELCOME; + } + break; case PSD_RGB: if (s->channel_count == 3) { if (s->channel_depth == 8) { @@ -435,6 +448,36 @@ static int decode_frame(AVCodecContext *avctx, void *data, } } } + } else if (s->color_mode == PSD_CMYK && avctx->pix_fmt == AV_PIX_FMT_GBRAP) { + uint8_t *dst[4] = { picture->data[0], picture->data[1], picture->data[2], picture->data[3] }; + const uint8_t *src[5] = { ptr_data }; + src[1] = src[0] + s->line_size * s->height; + src[2] = src[1] + s->line_size * s->height; + src[3] = src[2] + s->line_size * s->height; + src[4] = src[3] + s->line_size * s->height; + for (y = 0; y < s->height; y++) { + for (x = 0; x < s->width; x++) { + int k = src[3][x]; + int r = src[0][x] * k; + int g = src[1][x] * k; + int b = src[2][x] * k; + dst[0][x] = g * 257 >> 16; + dst[1][x] = b * 257 >> 16; + dst[2][x] = r * 257 >> 16; + } + dst[0] += picture->linesize[0]; + dst[1] += picture->linesize[1]; + dst[2] += picture->linesize[2]; + src[0] += s->line_size; + src[1] += s->line_size; + src[2] += s->line_size; + src[3] += s->line_size; + } + for (y = 0; y < s->height; y++) { + memcpy(dst[3], src[4], s->line_size); + src[4] += s->line_size; + dst[3] += picture->linesize[3]; + } } else {/* Planar */ if (s->channel_count == 1)/* gray 8 or gray 16be */ eq_channel[0] = 0;/* assign first channel, to first plane */ -- 1.7.10.4