From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steve Longerbeam Subject: [PATCH v8 3/5] gpu: ipu-v3: ipu-ic-csc: Add support for limited range encoding Date: Tue, 21 May 2019 18:03:15 -0700 Message-ID: <20190522010317.23710-4-slongerbeam@gmail.com> References: <20190522010317.23710-1-slongerbeam@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pl1-x642.google.com (mail-pl1-x642.google.com [IPv6:2607:f8b0:4864:20::642]) by gabe.freedesktop.org (Postfix) with ESMTPS id 209CB896C7 for ; Wed, 22 May 2019 01:03:32 +0000 (UTC) Received: by mail-pl1-x642.google.com with SMTP id p1so197626plo.2 for ; Tue, 21 May 2019 18:03:32 -0700 (PDT) In-Reply-To: <20190522010317.23710-1-slongerbeam@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-media@vger.kernel.org Cc: open list , "open list:DRM DRIVERS FOR FREESCALE IMX" , Steve Longerbeam List-Id: dri-devel@lists.freedesktop.org QWRkIHN1cHBvcnQgZm9yIGVuY29kaW5ncyB0byBvciBmcm9tIGxpbWl0ZWQgcmFuZ2UgcXVhbnRp emF0aW9uLgoKU2lnbmVkLW9mZi1ieTogU3RldmUgTG9uZ2VyYmVhbSA8c2xvbmdlcmJlYW1AZ21h aWwuY29tPgotLS0KQ2hhbmdlcyBpbiB2NzoKLSBoYXJkLWNvZGUgdGhlIGNvZWZmaWNpZW50cyBp bnN0ZWFkIG9mIGRlcml2aW5nIHRoZSBsaW1pdGVkIHJhbmdlCiAgY29lZmZpY2llbnRzIGZyb20g dGhlIGZ1bGwyZnVsbCBjb2VmZmljaWVudHMgb24gdGhlIGZseSB3aXRoCiAgZml4ZWQtcG9pbnQg bWF0aC4KLSBhZGQgc3VwcG9ydCBmb3IgUkdCIGxpbWl0ZWQtcmFuZ2UuCi0tLQogZHJpdmVycy9n cHUvaXB1LXYzL2lwdS1pYy1jc2MuYyB8IDE4MCArKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLQogMSBmaWxlIGNoYW5nZWQsIDE2NiBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWljLWNzYy5jIGIvZHJpdmVycy9n cHUvaXB1LXYzL2lwdS1pYy1jc2MuYwppbmRleCA1ZmI0NjljZDY0ZmUuLjhlOTE1MGIxZDY2OCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1pYy1jc2MuYworKysgYi9kcml2ZXJz L2dwdS9pcHUtdjMvaXB1LWljLWNzYy5jCkBAIC0xMCw2ICsxMCwxMCBAQAogI2luY2x1ZGUgPGxp bnV4L3NpemVzLmg+CiAjaW5jbHVkZSAiaXB1LXBydi5oIgogCisjZGVmaW5lIFFVQU5UX01BUChx KQkJCQkJXAorCSgocSkgPT0gVjRMMl9RVUFOVElaQVRJT05fRlVMTF9SQU5HRSB8fAkJXAorCSAo cSkgPT0gVjRMMl9RVUFOVElaQVRJT05fREVGQVVMVCA/IDAgOiAxKQorCiAvKiBpZGVudGl0eSBt YXRyaXggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXB1X2ljX2NzY19wYXJhbXMgaWRlbnRpdHkg PSB7CiAJLmNvZWZmID0gewpAQCAtMjEsMTIgKzI1LDg3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg aXB1X2ljX2NzY19wYXJhbXMgaWRlbnRpdHkgPSB7CiAJLnNjYWxlID0gMiwKIH07CiAKKy8qCisg KiBSR0IgZnVsbC1yYW5nZSB0byBSR0IgbGltaXRlZC1yYW5nZQorICoKKyAqIFJfbGltID0gMC44 NTg4ICogUl9mdWxsICsgMTYKKyAqIEdfbGltID0gMC44NTg4ICogR19mdWxsICsgMTYKKyAqIEJf bGltID0gMC44NTg4ICogQl9mdWxsICsgMTYKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpcHVf aWNfY3NjX3BhcmFtcyByZ2JmMnJnYmwgPSB7CisJLmNvZWZmID0geworCQl7ICAyMjAsICAgIDAs ICAgIDAsIH0sCisJCXsgICAgMCwgIDIyMCwgICAgMCwgfSwKKwkJeyAgICAwLCAgICAwLCAgMjIw LCB9LAorCX0sCisJLm9mZnNldCA9IHsgNjQsIDY0LCA2NCwgfSwKKwkuc2NhbGUgPSAxLAorfTsK KworLyoKKyAqIFJHQiBsaW1pdGVkLXJhbmdlIHRvIFJHQiBmdWxsLXJhbmdlCisgKgorICogUl9m dWxsID0gMS4xNjQ0ICogKFJfbGltIC0gMTYpCisgKiBHX2Z1bGwgPSAxLjE2NDQgKiAoR19saW0g LSAxNikKKyAqIEJfZnVsbCA9IDEuMTY0NCAqIChCX2xpbSAtIDE2KQorICovCitzdGF0aWMgY29u c3Qgc3RydWN0IGlwdV9pY19jc2NfcGFyYW1zIHJnYmwycmdiZiA9IHsKKwkuY29lZmYgPSB7CisJ CXsgIDE0OSwgICAgMCwgICAgMCwgfSwKKwkJeyAgICAwLCAgMTQ5LCAgICAwLCB9LAorCQl7ICAg IDAsICAgIDAsICAxNDksIH0sCisJfSwKKwkub2Zmc2V0ID0geyAtMzcsIC0zNywgLTM3LCB9LAor CS5zY2FsZSA9IDIsCit9OworCisvKgorICogWVVWIGZ1bGwtcmFuZ2UgdG8gWVVWIGxpbWl0ZWQt cmFuZ2UKKyAqCisgKiBZX2xpbSAgPSAwLjg1ODggKiBZX2Z1bGwgKyAxNgorICogQ2JfbGltID0g MC44Nzg0ICogKENiX2Z1bGwgLSAxMjgpICsgMTI4CisgKiBDcl9saW0gPSAwLjg3ODQgKiAoQ3Jf ZnVsbCAtIDEyOCkgKyAxMjgKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpcHVfaWNfY3NjX3Bh cmFtcyB5dXZmMnl1dmwgPSB7CisJLmNvZWZmID0geworCQl7ICAyMjAsICAgIDAsICAgIDAsIH0s CisJCXsgICAgMCwgIDIyNSwgICAgMCwgfSwKKwkJeyAgICAwLCAgICAwLCAgMjI1LCB9LAorCX0s CisJLm9mZnNldCA9IHsgNjQsIDYyLCA2MiwgfSwKKwkuc2NhbGUgPSAxLAorCS5zYXQgPSB0cnVl LAorfTsKKworLyoKKyAqIFlVViBsaW1pdGVkLXJhbmdlIHRvIFlVViBmdWxsLXJhbmdlCisgKgor ICogWV9mdWxsICA9IDEuMTY0NCAqIChZX2xpbSAtIDE2KQorICogQ2JfZnVsbCA9IDEuMTM4NCAq IChDYl9saW0gLSAxMjgpICsgMTI4CisgKiBDcl9mdWxsID0gMS4xMzg0ICogKENyX2xpbSAtIDEy OCkgKyAxMjgKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpcHVfaWNfY3NjX3BhcmFtcyB5dXZs Mnl1dmYgPSB7CisJLmNvZWZmID0geworCQl7ICAxNDksICAgIDAsICAgIDAsIH0sCisJCXsgICAg MCwgIDE0NiwgICAgMCwgfSwKKwkJeyAgICAwLCAgICAwLCAgMTQ2LCB9LAorCX0sCisJLm9mZnNl dCA9IHsgLTM3LCAtMzUsIC0zNSwgfSwKKwkuc2NhbGUgPSAyLAorfTsKKwogc3RhdGljIGNvbnN0 IHN0cnVjdCBpcHVfaWNfY3NjX3BhcmFtcyAqcmdiMnJnYltdID0gewogCSZpZGVudGl0eSwKKwkm cmdiZjJyZ2JsLAorCSZyZ2JsMnJnYmYsCisJJmlkZW50aXR5LAogfTsKIAogc3RhdGljIGNvbnN0 IHN0cnVjdCBpcHVfaWNfY3NjX3BhcmFtcyAqeXV2Mnl1dltdID0gewogCSZpZGVudGl0eSwKKwkm eXV2ZjJ5dXZsLAorCSZ5dXZsMnl1dmYsCisJJmlkZW50aXR5LAogfTsKIAogLyoKQEAgLTQ2LDYg KzEyNSw0MSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlwdV9pY19jc2NfcGFyYW1zIHJnYmYyeXV2 Zl82MDEgPSB7CiAJLnNjYWxlID0gMSwKIH07CiAKKy8qIEJULjYwMSBSR0IgZnVsbC1yYW5nZSB0 byBZVVYgbGltaXRlZC1yYW5nZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpcHVfaWNfY3NjX3Bh cmFtcyByZ2JmMnl1dmxfNjAxID0geworCS5jb2VmZiA9IHsKKwkJeyAgIDY2LCAgMTI5LCAgIDI1 LCB9LAorCQl7ICAtMzgsICAtNzQsICAxMTIsIH0sCisJCXsgIDExMiwgIC05NCwgIC0xOCwgfSwK Kwl9LAorCS5vZmZzZXQgPSB7IDY0LCA1MTIsIDUxMiwgfSwKKwkuc2NhbGUgPSAxLAorCS5zYXQg PSB0cnVlLAorfTsKKworLyogQlQuNjAxIFJHQiBsaW1pdGVkLXJhbmdlIHRvIFlVViBmdWxsLXJh bmdlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGlwdV9pY19jc2NfcGFyYW1zIHJnYmwyeXV2Zl82 MDEgPSB7CisJLmNvZWZmID0geworCQl7ICAgODksICAxNzUsICAgMzQsIH0sCisJCXsgIC01MCwg IC05OSwgIDE0OSwgfSwKKwkJeyAgMTQ5LCAtMTI1LCAgLTI0LCB9LAorCX0sCisJLm9mZnNldCA9 IHsgLTc1LCA1MTIsIDUxMiwgfSwKKwkuc2NhbGUgPSAxLAorfTsKKworLyogQlQuNjAxIFJHQiBs aW1pdGVkLXJhbmdlIHRvIFlVViBsaW1pdGVkLXJhbmdlICovCitzdGF0aWMgY29uc3Qgc3RydWN0 IGlwdV9pY19jc2NfcGFyYW1zIHJnYmwyeXV2bF82MDEgPSB7CisJLmNvZWZmID0geworCQl7ICAg NzcsICAxNTAsICAgMjksIH0sCisJCXsgIC00NCwgIC04NywgIDEzMSwgfSwKKwkJeyAgMTMxLCAt MTEwLCAgLTIxLCB9LAorCX0sCisJLm9mZnNldCA9IHsgMCwgNTEyLCA1MTIsIH0sCisJLnNjYWxl ID0gMSwKKwkuc2F0ID0gdHJ1ZSwKK307CisKIC8qCiAgKiBCVC42MDEgWVVWIGZ1bGwtcmFuZ2Ug dG8gUkdCIGZ1bGwtcmFuZ2UKICAqCkBAIC02OSwzOSArMTgzLDc3IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgaXB1X2ljX2NzY19wYXJhbXMgeXV2ZjJyZ2JmXzYwMSA9IHsKIAkuc2NhbGUgPSAyLAog fTsKIAorLyogQlQuNjAxIFlVViBmdWxsLXJhbmdlIHRvIFJHQiBsaW1pdGVkLXJhbmdlICovCitz dGF0aWMgY29uc3Qgc3RydWN0IGlwdV9pY19jc2NfcGFyYW1zIHl1dmYycmdibF82MDEgPSB7CisJ LmNvZWZmID0geworCQl7ICAxMTAsICAgIDAsICAxNTQsIH0sCisJCXsgIDExMCwgIC0zOCwgIC03 OCwgfSwKKwkJeyAgMTEwLCAgMTk1LCAgICAwLCB9LAorCX0sCisJLm9mZnNldCA9IHsgLTI3Niwg MjY1LCAtMzU4LCB9LAorCS5zY2FsZSA9IDIsCit9OworCisvKiBCVC42MDEgWVVWIGxpbWl0ZWQt cmFuZ2UgdG8gUkdCIGZ1bGwtcmFuZ2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXB1X2ljX2Nz Y19wYXJhbXMgeXV2bDJyZ2JmXzYwMSA9IHsKKwkuY29lZmYgPSB7CisJCXsgICA3NSwgICAgMCwg IDEwMiwgfSwKKwkJeyAgIDc1LCAgLTI1LCAgLTUyLCB9LAorCQl7ICAgNzUsICAxMjksICAgIDAs IH0sCisJfSwKKwkub2Zmc2V0ID0geyAtMjIzLCAxMzYsIC0yNzcsIH0sCisJLnNjYWxlID0gMywK K307CisKKy8qIEJULjYwMSBZVVYgbGltaXRlZC1yYW5nZSB0byBSR0IgbGltaXRlZC1yYW5nZSAq Lworc3RhdGljIGNvbnN0IHN0cnVjdCBpcHVfaWNfY3NjX3BhcmFtcyB5dXZsMnJnYmxfNjAxID0g eworCS5jb2VmZiA9IHsKKwkJeyAgMTI4LCAgICAwLCAgMTc1LCB9LAorCQl7ICAxMjgsICAtNDMs ICAtODksIH0sCisJCXsgIDEyOCwgIDIyMiwgICAgMCwgfSwKKwl9LAorCS5vZmZzZXQgPSB7IC0z NTEsIDI2NSwgLTQ0MywgfSwKKwkuc2NhbGUgPSAyLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVj dCBpcHVfaWNfY3NjX3BhcmFtcyAqcmdiMnl1dl82MDFbXSA9IHsKIAkmcmdiZjJ5dXZmXzYwMSwK KwkmcmdiZjJ5dXZsXzYwMSwKKwkmcmdibDJ5dXZmXzYwMSwKKwkmcmdibDJ5dXZsXzYwMSwKIH07 CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXB1X2ljX2NzY19wYXJhbXMgKnl1djJyZ2JfNjAxW10g PSB7CiAJJnl1dmYycmdiZl82MDEsCisJJnl1dmYycmdibF82MDEsCisJJnl1dmwycmdiZl82MDEs CisJJnl1dmwycmdibF82MDEsCiB9OwogCiBzdGF0aWMgaW50IGNhbGNfY3NjX2NvZWZmcyhzdHJ1 Y3QgaXB1X2ljX2NzYyAqY3NjKQogeworCWNvbnN0IHN0cnVjdCBpcHVfaWNfY3NjX3BhcmFtcyAq KnBhcmFtc190Ymw7CisJaW50IHRibF9pZHg7CisKIAlpZiAoY3NjLT5vdXRfY3MuZW5jICE9IFY0 TDJfWUNCQ1JfRU5DXzYwMSkKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAotCWlmICgoY3NjLT5pbl9j cy5jcyA9PSBJUFVWM19DT0xPUlNQQUNFX1lVViAmJgotCSAgICAgY3NjLT5pbl9jcy5xdWFudCAh PSBWNEwyX1FVQU5USVpBVElPTl9GVUxMX1JBTkdFKSB8fAotCSAgICAoY3NjLT5vdXRfY3MuY3Mg PT0gSVBVVjNfQ09MT1JTUEFDRV9ZVVYgJiYKLQkgICAgIGNzYy0+b3V0X2NzLnF1YW50ICE9IFY0 TDJfUVVBTlRJWkFUSU9OX0ZVTExfUkFOR0UpKQotCQlyZXR1cm4gLUVOT1RTVVBQOwotCi0JaWYg KChjc2MtPmluX2NzLmNzID09IElQVVYzX0NPTE9SU1BBQ0VfUkdCICYmCi0JICAgICBjc2MtPmlu X2NzLnF1YW50ICE9IFY0TDJfUVVBTlRJWkFUSU9OX0ZVTExfUkFOR0UpIHx8Ci0JICAgIChjc2Mt Pm91dF9jcy5jcyA9PSBJUFVWM19DT0xPUlNQQUNFX1JHQiAmJgotCSAgICAgY3NjLT5vdXRfY3Mu cXVhbnQgIT0gVjRMMl9RVUFOVElaQVRJT05fRlVMTF9SQU5HRSkpCi0JCXJldHVybiAtRU5PVFNV UFA7CisJdGJsX2lkeCA9IChRVUFOVF9NQVAoY3NjLT5pbl9jcy5xdWFudCkgPDwgMSkgfAorCQlR VUFOVF9NQVAoY3NjLT5vdXRfY3MucXVhbnQpOwogCiAJaWYgKGNzYy0+aW5fY3MuY3MgPT0gY3Nj LT5vdXRfY3MuY3MpIHsKIAkJY3NjLT5wYXJhbXMgPSAoY3NjLT5pbl9jcy5jcyA9PSBJUFVWM19D T0xPUlNQQUNFX1lVVikgPwotCQkJKnl1djJ5dXZbMF0gOiAqcmdiMnJnYlswXTsKKwkJCSp5dXYy eXV2W3RibF9pZHhdIDogKnJnYjJyZ2JbdGJsX2lkeF07CisKIAkJcmV0dXJuIDA7CiAJfQogCi0J Y3NjLT5wYXJhbXMgPSAoY3NjLT5pbl9jcy5jcyA9PSBJUFVWM19DT0xPUlNQQUNFX1lVVikgPwot CQkqeXV2MnJnYl82MDFbMF0gOiAqcmdiMnl1dl82MDFbMF07CisJLyogWVVWIDwtPiBSR0IgZW5j b2RpbmcgaXMgcmVxdWlyZWQgKi8KKworCXBhcmFtc190YmwgPSAoY3NjLT5pbl9jcy5jcyA9PSBJ UFVWM19DT0xPUlNQQUNFX1lVVikgPworCQl5dXYycmdiXzYwMSA6IHJnYjJ5dXZfNjAxOworCisJ Y3NjLT5wYXJhbXMgPSAqcGFyYW1zX3RibFt0YmxfaWR4XTsKIAogCXJldHVybiAwOwogfQotLSAK Mi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2A205C072B5 for ; Wed, 22 May 2019 01:03:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E96042184C for ; Wed, 22 May 2019 01:03:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HHgQUWC3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728327AbfEVBDp (ORCPT ); Tue, 21 May 2019 21:03:45 -0400 Received: from mail-pl1-f196.google.com ([209.85.214.196]:43916 "EHLO mail-pl1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728099AbfEVBDc (ORCPT ); Tue, 21 May 2019 21:03:32 -0400 Received: by mail-pl1-f196.google.com with SMTP id gn7so179566plb.10; Tue, 21 May 2019 18:03:32 -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:in-reply-to:references; bh=KR2SKJZVR7dpL/K3IRH5SfiJbtnvBNtS7TM5fTzvwUU=; b=HHgQUWC34be18WJ5hpThjXaJU/6mavEM8ZzuyekAbNVxY/4FX8Cs/A5WF6CsgOwtKE NxUmOwiHscHOZ6sxipTWhKlKUD5q3a3HTRuWmduWUtGNyeWty1CBbEAR48zNpf8gxjxV T3ss6wWbGfo35ppJ6pmZdjOwfLO7EEJODY5/VgkTlNVvKDVKLeR4B9o3ry0EBX9F6kzx zfmP+JnvBG9mV5DZKXKcHjtqAgXCSMI2mmxCjL99jcC1cnirFzqCO8GKMYDaKXRJwEMV J/J6k/95z9HZR5yKOo95sEBfgoljDZt45iN33bTeJRM36aW2/3wSHXTg80Je6dQGWvQM pLqg== 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:in-reply-to :references; bh=KR2SKJZVR7dpL/K3IRH5SfiJbtnvBNtS7TM5fTzvwUU=; b=J/O8ppkF37bZuLf/fZ2KXQMzFDiy7tT/2/kbH1UHZheft4QibLV85C5/k5BEPxR1+8 YLz1iY2MbMsngJyfb7/iQs8TmhVjvBAUsR0GG+XlHmScQhjUxySIM+2lLDr5EiSN+XIE oerSvhaj5q0+zz21uwnTGu0KT9OfYhGbCw8JLIM9JbIgrYq8tjliG8XrPP9GWdJQh4d5 JYLgfePU74xmC1ABELjmPNvQN2xCx+KB2SqJ8BVHNXqexfJLLrvBkn6t0K1L1GWtZPBF HX6Kj/GRA6QmCORYYX3koCHoFI6O3QvFKRQ8DSyRzUp2ED2wyqedDU/wEkrbhVBJ9mA5 zCXQ== X-Gm-Message-State: APjAAAWX2LuoOw4bmDSfTfTFiL6NcCSROYoSz69F+kMom/BRSuDKYika ifqS/iqxN9YYvXsJ7LVxORvNfGUA X-Google-Smtp-Source: APXvYqykPyD2qJbS9WVld6QmroysQrD9PBf86L0y3vxq20JEw07sose/NZ9zVGHthyLMv4cZwb9Qug== X-Received: by 2002:a17:902:12f:: with SMTP id 44mr40653762plb.137.1558487011546; Tue, 21 May 2019 18:03:31 -0700 (PDT) Received: from majic.sklembedded.com (c-73-202-231-77.hsd1.ca.comcast.net. [73.202.231.77]) by smtp.googlemail.com with ESMTPSA id q193sm34291242pfc.52.2019.05.21.18.03.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 May 2019 18:03:30 -0700 (PDT) From: Steve Longerbeam To: linux-media@vger.kernel.org Cc: Steve Longerbeam , Philipp Zabel , dri-devel@lists.freedesktop.org (open list:DRM DRIVERS FOR FREESCALE IMX), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v8 3/5] gpu: ipu-v3: ipu-ic-csc: Add support for limited range encoding Date: Tue, 21 May 2019 18:03:15 -0700 Message-Id: <20190522010317.23710-4-slongerbeam@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522010317.23710-1-slongerbeam@gmail.com> References: <20190522010317.23710-1-slongerbeam@gmail.com> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Add support for encodings to or from limited range quantization. Signed-off-by: Steve Longerbeam --- Changes in v7: - hard-code the coefficients instead of deriving the limited range coefficients from the full2full coefficients on the fly with fixed-point math. - add support for RGB limited-range. --- drivers/gpu/ipu-v3/ipu-ic-csc.c | 180 +++++++++++++++++++++++++++++--- 1 file changed, 166 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/ipu-v3/ipu-ic-csc.c b/drivers/gpu/ipu-v3/ipu-ic-csc.c index 5fb469cd64fe..8e9150b1d668 100644 --- a/drivers/gpu/ipu-v3/ipu-ic-csc.c +++ b/drivers/gpu/ipu-v3/ipu-ic-csc.c @@ -10,6 +10,10 @@ #include #include "ipu-prv.h" +#define QUANT_MAP(q) \ + ((q) == V4L2_QUANTIZATION_FULL_RANGE || \ + (q) == V4L2_QUANTIZATION_DEFAULT ? 0 : 1) + /* identity matrix */ static const struct ipu_ic_csc_params identity = { .coeff = { @@ -21,12 +25,87 @@ static const struct ipu_ic_csc_params identity = { .scale = 2, }; +/* + * RGB full-range to RGB limited-range + * + * R_lim = 0.8588 * R_full + 16 + * G_lim = 0.8588 * G_full + 16 + * B_lim = 0.8588 * B_full + 16 + */ +static const struct ipu_ic_csc_params rgbf2rgbl = { + .coeff = { + { 220, 0, 0, }, + { 0, 220, 0, }, + { 0, 0, 220, }, + }, + .offset = { 64, 64, 64, }, + .scale = 1, +}; + +/* + * RGB limited-range to RGB full-range + * + * R_full = 1.1644 * (R_lim - 16) + * G_full = 1.1644 * (G_lim - 16) + * B_full = 1.1644 * (B_lim - 16) + */ +static const struct ipu_ic_csc_params rgbl2rgbf = { + .coeff = { + { 149, 0, 0, }, + { 0, 149, 0, }, + { 0, 0, 149, }, + }, + .offset = { -37, -37, -37, }, + .scale = 2, +}; + +/* + * YUV full-range to YUV limited-range + * + * Y_lim = 0.8588 * Y_full + 16 + * Cb_lim = 0.8784 * (Cb_full - 128) + 128 + * Cr_lim = 0.8784 * (Cr_full - 128) + 128 + */ +static const struct ipu_ic_csc_params yuvf2yuvl = { + .coeff = { + { 220, 0, 0, }, + { 0, 225, 0, }, + { 0, 0, 225, }, + }, + .offset = { 64, 62, 62, }, + .scale = 1, + .sat = true, +}; + +/* + * YUV limited-range to YUV full-range + * + * Y_full = 1.1644 * (Y_lim - 16) + * Cb_full = 1.1384 * (Cb_lim - 128) + 128 + * Cr_full = 1.1384 * (Cr_lim - 128) + 128 + */ +static const struct ipu_ic_csc_params yuvl2yuvf = { + .coeff = { + { 149, 0, 0, }, + { 0, 146, 0, }, + { 0, 0, 146, }, + }, + .offset = { -37, -35, -35, }, + .scale = 2, +}; + static const struct ipu_ic_csc_params *rgb2rgb[] = { &identity, + &rgbf2rgbl, + &rgbl2rgbf, + &identity, }; static const struct ipu_ic_csc_params *yuv2yuv[] = { &identity, + &yuvf2yuvl, + &yuvl2yuvf, + &identity, }; /* @@ -46,6 +125,41 @@ static const struct ipu_ic_csc_params rgbf2yuvf_601 = { .scale = 1, }; +/* BT.601 RGB full-range to YUV limited-range */ +static const struct ipu_ic_csc_params rgbf2yuvl_601 = { + .coeff = { + { 66, 129, 25, }, + { -38, -74, 112, }, + { 112, -94, -18, }, + }, + .offset = { 64, 512, 512, }, + .scale = 1, + .sat = true, +}; + +/* BT.601 RGB limited-range to YUV full-range */ +static const struct ipu_ic_csc_params rgbl2yuvf_601 = { + .coeff = { + { 89, 175, 34, }, + { -50, -99, 149, }, + { 149, -125, -24, }, + }, + .offset = { -75, 512, 512, }, + .scale = 1, +}; + +/* BT.601 RGB limited-range to YUV limited-range */ +static const struct ipu_ic_csc_params rgbl2yuvl_601 = { + .coeff = { + { 77, 150, 29, }, + { -44, -87, 131, }, + { 131, -110, -21, }, + }, + .offset = { 0, 512, 512, }, + .scale = 1, + .sat = true, +}; + /* * BT.601 YUV full-range to RGB full-range * @@ -69,39 +183,77 @@ static const struct ipu_ic_csc_params yuvf2rgbf_601 = { .scale = 2, }; +/* BT.601 YUV full-range to RGB limited-range */ +static const struct ipu_ic_csc_params yuvf2rgbl_601 = { + .coeff = { + { 110, 0, 154, }, + { 110, -38, -78, }, + { 110, 195, 0, }, + }, + .offset = { -276, 265, -358, }, + .scale = 2, +}; + +/* BT.601 YUV limited-range to RGB full-range */ +static const struct ipu_ic_csc_params yuvl2rgbf_601 = { + .coeff = { + { 75, 0, 102, }, + { 75, -25, -52, }, + { 75, 129, 0, }, + }, + .offset = { -223, 136, -277, }, + .scale = 3, +}; + +/* BT.601 YUV limited-range to RGB limited-range */ +static const struct ipu_ic_csc_params yuvl2rgbl_601 = { + .coeff = { + { 128, 0, 175, }, + { 128, -43, -89, }, + { 128, 222, 0, }, + }, + .offset = { -351, 265, -443, }, + .scale = 2, +}; + static const struct ipu_ic_csc_params *rgb2yuv_601[] = { &rgbf2yuvf_601, + &rgbf2yuvl_601, + &rgbl2yuvf_601, + &rgbl2yuvl_601, }; static const struct ipu_ic_csc_params *yuv2rgb_601[] = { &yuvf2rgbf_601, + &yuvf2rgbl_601, + &yuvl2rgbf_601, + &yuvl2rgbl_601, }; static int calc_csc_coeffs(struct ipu_ic_csc *csc) { + const struct ipu_ic_csc_params **params_tbl; + int tbl_idx; + if (csc->out_cs.enc != V4L2_YCBCR_ENC_601) return -ENOTSUPP; - if ((csc->in_cs.cs == IPUV3_COLORSPACE_YUV && - csc->in_cs.quant != V4L2_QUANTIZATION_FULL_RANGE) || - (csc->out_cs.cs == IPUV3_COLORSPACE_YUV && - csc->out_cs.quant != V4L2_QUANTIZATION_FULL_RANGE)) - return -ENOTSUPP; - - if ((csc->in_cs.cs == IPUV3_COLORSPACE_RGB && - csc->in_cs.quant != V4L2_QUANTIZATION_FULL_RANGE) || - (csc->out_cs.cs == IPUV3_COLORSPACE_RGB && - csc->out_cs.quant != V4L2_QUANTIZATION_FULL_RANGE)) - return -ENOTSUPP; + tbl_idx = (QUANT_MAP(csc->in_cs.quant) << 1) | + QUANT_MAP(csc->out_cs.quant); if (csc->in_cs.cs == csc->out_cs.cs) { csc->params = (csc->in_cs.cs == IPUV3_COLORSPACE_YUV) ? - *yuv2yuv[0] : *rgb2rgb[0]; + *yuv2yuv[tbl_idx] : *rgb2rgb[tbl_idx]; + return 0; } - csc->params = (csc->in_cs.cs == IPUV3_COLORSPACE_YUV) ? - *yuv2rgb_601[0] : *rgb2yuv_601[0]; + /* YUV <-> RGB encoding is required */ + + params_tbl = (csc->in_cs.cs == IPUV3_COLORSPACE_YUV) ? + yuv2rgb_601 : rgb2yuv_601; + + csc->params = *params_tbl[tbl_idx]; return 0; } -- 2.17.1