Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp8120413imu; Thu, 15 Nov 2018 06:57:52 -0800 (PST) X-Google-Smtp-Source: AJdET5cCewSIaKhkUJU8nbk+49xo5O/UmANuDQNGAHaMScweJwSi2U5ExkzvyKbGrJ+TXBW7UsGK X-Received: by 2002:a65:484c:: with SMTP id i12mr6061565pgs.309.1542293872382; Thu, 15 Nov 2018 06:57:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542293872; cv=none; d=google.com; s=arc-20160816; b=ntZsldWcorXw3RyvQhB/HN7sjKuqy/WkftS/TG3Mm8iTUH4KhTu55aLki7B/AaU8pB /C72IR81dUvh9pj7yJpssR4B5WQ+gvb/bY5C3FjUf6g3h+74KOxCLW5Idg9/2w23Woby iEbOMmoG4GCIRtvVOiDJt4obgn0y9KlXSXrnf2jmoVNvx/izwuY5vaIXXG0ToAnGyk6N pUqf1fqnPe2tAUaTeQFfiRbkyMx6iC+B+TtwpbO7RLHIoXWOaDeCZq5htZsDWek46p9i siwrgJHgKmSKjxdWBOgv3qc5QDJ9rve5lYxstyhYkWeQzxYJsWO4uYbqVKjcLgMVhXfW zEaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=om4WeiECYFtrnmvE0i9KpIDzFR8MDSinmGSAlrlDICI=; b=rueWMif2YJr/3uRLvYJsBfKrdlGPVBXbU5yvTwEnVajNcXSOs9wcm5seeXA9UzdcRI yteDXOmIbjw5Jn6mx+KbIkzZ9aDNSuc32ECdq7qyNlcZRDK63mIM4W52zRdHhXg1skAq HORzaDWmDGTFViyxhq09NRQckUWVp6hjCgdi4nwJVIEgFY/AviBXOPuILLgYlTETavQY eQTKEwSoEZA6G4s8wcZn05OrCrMgp5PIwHQE5DY4wbImSjebaTBvoFs3wpN3ULrusLkq StX9eVkwNAhNICyAxPoed1+SVEHOgZsRc0JSAZAP1H4JC3GRW5eP+l/wLOPaKsF2QZcm ZYdQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c85-v6si29618430pfe.60.2018.11.15.06.57.37; Thu, 15 Nov 2018 06:57:52 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388452AbeKPBFC (ORCPT + 99 others); Thu, 15 Nov 2018 20:05:02 -0500 Received: from mail.bootlin.com ([62.4.15.54]:44568 "EHLO mail.bootlin.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387548AbeKPBFC (ORCPT ); Thu, 15 Nov 2018 20:05:02 -0500 Received: by mail.bootlin.com (Postfix, from userid 110) id 892A620893; Thu, 15 Nov 2018 15:56:51 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.bootlin.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT shortcircuit=ham autolearn=disabled version=3.4.2 Received: from localhost (aaubervilliers-681-1-13-146.w90-88.abo.wanadoo.fr [90.88.134.146]) by mail.bootlin.com (Postfix) with ESMTPSA id 55ADB20379; Thu, 15 Nov 2018 15:56:51 +0100 (CET) From: Maxime Ripard To: hans.verkuil@cisco.com, acourbot@chromium.org, sakari.ailus@linux.intel.com, Laurent Pinchart Cc: tfiga@chromium.org, posciak@chromium.org, Paul Kocialkowski , Chen-Yu Tsai , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org, nicolas.dufresne@collabora.com, jenskuske@gmail.com, linux-sunxi@googlegroups.com, Thomas Petazzoni , Maxime Ripard Subject: [PATCH v2 0/2] media: cedrus: Add H264 decoding support Date: Thu, 15 Nov 2018 15:56:48 +0100 Message-Id: <20181115145650.9827-1-maxime.ripard@bootlin.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Here is a new version of the H264 decoding support in the cedrus driver. As you might already know, the cedrus driver relies on the Request API, and is a reverse engineered driver for the video decoding engine found on the Allwinner SoCs. This work has been possible thanks to the work done by the people behind libvdpau-sunxi found here: https://github.com/linux-sunxi/libvdpau-sunxi/ It's based on v4.20-rc1, plus the tag patches sent this week by Hans Verkuil. I've been using the controls currently integrated into ChromeOS that have a working version of this particular setup. However, these controls have a number of shortcomings and inconsistencies with other decoding API. I've worked with libva so far, but I've noticed already that: - The kernel UAPI expects to have the nal_ref_idc variable, while libva only exposes whether that frame is a reference frame or not. I've looked at the rockchip driver in the ChromeOS tree, and our own driver, and they both need only the information about whether the frame is a reference one or not, so maybe we should change this? - The H264 bitstream exposes the picture default reference list (for both list 0 and list 1), the slice reference list and an override flag. The libva will only pass the reference list to be used (so either the picture default's or the slice's) depending on the override flag. The kernel UAPI wants the picture default reference list and the slice reference list, but doesn't expose the override flag, which prevents us from configuring properly the hardware. Our video decoding engine needs the three information, but we can easily adapt to having only one. However, having two doesn't really work for us. It's pretty much the only one I've noticed so far, but we should probably fix them already. And there's probably other, feel free to step in. I've tested the various ABI using this gdb script: http://code.bulix.org/jl4se4-505620?raw And this test script: http://code.bulix.org/8zle4s-505623?raw The application compiled is quite trivial: http://code.bulix.org/e34zp8-505624?raw The output is: arm: builds/arm-test-v4l2-h264-structures SHA1: 88cbf7485ba81831fc3b93772b215599b3b38318 x86: builds/x86-test-v4l2-h264-structures SHA1: 88cbf7485ba81831fc3b93772b215599b3b38318 x64: builds/x64-test-v4l2-h264-structures SHA1: 88cbf7485ba81831fc3b93772b215599b3b38318 arm64: builds/arm64-test-v4l2-h264-structures SHA1: 88cbf7485ba81831fc3b93772b215599b3b38318 Let me know if there's any flaw using that test setup, or if you have any comments on the patches. Maxime Changes from v1: - Rebased on 4.20 - Did the documentation for the userspace API - Used the tags instead of buffer IDs - Added a comment to explain why we still needed the swdec trigger - Reworked the MV col buffer in order to have one slot per frame - Removed the unused neighbor info buffer - Made sure to have the same structure offset and alignments across 32 bits and 64 bits architecture Maxime Ripard (1): media: cedrus: Add H264 decoding support Pawel Osciak (1): media: uapi: Add H264 low-level decoder API compound controls. Documentation/media/uapi/v4l/biblio.rst | 9 + .../media/uapi/v4l/extended-controls.rst | 364 ++++++++++++++ .../media/uapi/v4l/pixfmt-compressed.rst | 20 + .../media/uapi/v4l/vidioc-queryctrl.rst | 30 ++ .../media/videodev2.h.rst.exceptions | 5 + drivers/media/v4l2-core/v4l2-ctrls.c | 42 ++ drivers/media/v4l2-core/v4l2-ioctl.c | 1 + drivers/staging/media/sunxi/cedrus/Makefile | 3 +- drivers/staging/media/sunxi/cedrus/cedrus.c | 25 + drivers/staging/media/sunxi/cedrus/cedrus.h | 35 +- .../staging/media/sunxi/cedrus/cedrus_dec.c | 11 + .../staging/media/sunxi/cedrus/cedrus_h264.c | 470 ++++++++++++++++++ .../staging/media/sunxi/cedrus/cedrus_hw.c | 4 + .../staging/media/sunxi/cedrus/cedrus_regs.h | 63 +++ .../staging/media/sunxi/cedrus/cedrus_video.c | 9 + include/media/v4l2-ctrls.h | 10 + include/uapi/linux/v4l2-controls.h | 166 +++++++ include/uapi/linux/videodev2.h | 11 + 18 files changed, 1276 insertions(+), 2 deletions(-) create mode 100644 drivers/staging/media/sunxi/cedrus/cedrus_h264.c -- 2.19.1