Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp109174imu; Thu, 15 Nov 2018 23:05:46 -0800 (PST) X-Google-Smtp-Source: AJdET5fuQlC0HkCxgTTUNTAa3bj7vJW6v7IE2Z2EIOFv8AKyRfEELXDT/PG7QZSMCwpMe/nE/11P X-Received: by 2002:a63:9809:: with SMTP id q9mr8897868pgd.109.1542351946749; Thu, 15 Nov 2018 23:05:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542351946; cv=none; d=google.com; s=arc-20160816; b=W1ll3HFnR5FmgOw6txY6DDMo586MhPmuj3Bf1toeKpxs/2oOvUrmGqzs0k5Q/fwQLM /lGwWkHO9ya5lk9G3Qp5carAc38Vg5hfM8xWQ/AH9hbo5mv6u7gmCCUio3QouuUz8rN0 dGVEByv+2KHWzOpus2sKFDs4/XdVxGSf159jqsRHbNNFL3eXF4NAJeQKnc7SL1JSdovY cmsU/pUHbIvo3sCLUBGmiicfZSolFx3N2vLvJOX+FWaPG1J3g5Z/KfrAdktWt68NiW2j b+jl67gKDj5wAKlmE6wbTI0ArbyeN/Lt21w+PXhwU9WG0ZjO5izG9wwUhAkHyJQR7fD0 FGKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=i+Ih6Ri/+jXKKVokCbFAuvWy/PMufQ654zCv+wUiWos=; b=XRZlIkesQaHrmZudJXOCCN9kT3Pij6Gu9gNn0UrkiKjqTZsOgrH2J9g5q9Kgh/0QT2 WbIADbn2aly5QHHWwV/PPNSnIKFJOkANlsLgxJx3rKjFnITgZXxQoBA/PLHqVFCjAVBP FxYZb3XUX7xEca5RtcZLAdC/Rshcd422Rz9fxbW+Yup9SiN7UcALUIhN/iYoPOlSNXwJ A1l+tm3W02A+AT/MGkuozUMAgbLOmF9F1cjs5wL1XBcyMc/dcLQAWeWVk0BNryv1Waau U01KpJt3y1tavZ2JnRy9UarwsVcLxzV4QIzRjbUMXjAHgdiVkCRkfS/rswwISU0ifqKH +uMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=eTDWKygW; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f14si14159374pln.289.2018.11.15.23.05.32; Thu, 15 Nov 2018 23:05:46 -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; dkim=pass header.i=@chromium.org header.s=google header.b=eTDWKygW; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389284AbeKPRQC (ORCPT + 99 others); Fri, 16 Nov 2018 12:16:02 -0500 Received: from mail-yb1-f194.google.com ([209.85.219.194]:33597 "EHLO mail-yb1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727438AbeKPRQC (ORCPT ); Fri, 16 Nov 2018 12:16:02 -0500 Received: by mail-yb1-f194.google.com with SMTP id i78-v6so9433081ybg.0 for ; Thu, 15 Nov 2018 23:04:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=i+Ih6Ri/+jXKKVokCbFAuvWy/PMufQ654zCv+wUiWos=; b=eTDWKygWMbS7agH9eoxXkYoeGq9L7lZDP4pW6cDeWzLKOl9blArL0dWBxPAi8H/7hl Mr4hir4aclPvMq/Cvb7zHeaBNggGbNuX5fnRV8bca8NwKcoISkkCN7lM11Iy5EVrqNjF h10Esk5WEmks5tGPIuYMBeSC9aKRc24fiKGJA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=i+Ih6Ri/+jXKKVokCbFAuvWy/PMufQ654zCv+wUiWos=; b=fSOZfkh8h7P8lInsxSbm7zO8NmHNqF4q34KqYVz4fbYqIGgeTpHgikp60oxDLpblkc 4O5R1HXl4efOOVWRSUDU0MsipQfnh8pzMrVrHlyBbUnuYC/ljSAkVJashP5G0TOumXyd AKogorQvjNl5j4iRkPSSo9s4XwCZ7drF/K3oN8gDgSqHzcB98WkQrtmkq51w2bDuW/tV ql0QE64OqXbGEk9jbrd9I9TtJ019vUA4hpoaPdc4Tngy8HYD1D1p/ub/7KE7zRnLUW6m F1GOSmrenClSxSyYW7/uyVNHULeU8ka2ipVMM2D4pJy2uSZkjNsFMu4W+qwqLgu0qSgV lzsw== X-Gm-Message-State: AGRZ1gLWB6u0Bl2G3YAcwZ3lTlO+1wGzusfaSvYRG/NS+ABAz9UmGfKE uq0wmnDCAGL/ZN3bsjxJ0iYj09pD0rA= X-Received: by 2002:a25:9d0d:: with SMTP id i13-v6mr8789004ybp.266.1542351893170; Thu, 15 Nov 2018 23:04:53 -0800 (PST) Received: from mail-yw1-f43.google.com (mail-yw1-f43.google.com. [209.85.161.43]) by smtp.gmail.com with ESMTPSA id f203-v6sm8058509ywa.45.2018.11.15.23.04.52 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 15 Nov 2018 23:04:52 -0800 (PST) Received: by mail-yw1-f43.google.com with SMTP id h21-v6so9760278ywa.3 for ; Thu, 15 Nov 2018 23:04:52 -0800 (PST) X-Received: by 2002:a81:350c:: with SMTP id c12-v6mr9299539ywa.342.1542351891748; Thu, 15 Nov 2018 23:04:51 -0800 (PST) MIME-Version: 1.0 References: <20181115145650.9827-1-maxime.ripard@bootlin.com> In-Reply-To: <20181115145650.9827-1-maxime.ripard@bootlin.com> From: Tomasz Figa Date: Fri, 16 Nov 2018 16:04:40 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v2 0/2] media: cedrus: Add H264 decoding support To: Maxime Ripard , Pawel Osciak Cc: Hans Verkuil , Alexandre Courbot , Sakari Ailus , Laurent Pinchart , Paul Kocialkowski , Chen-Yu Tsai , Linux Kernel Mailing List , "list@263.net:IOMMU DRIVERS , Joerg Roedel ," , Linux Media Mailing List , Nicolas Dufresne , jenskuske@gmail.com, linux-sunxi@googlegroups.com, thomas.petazzoni@bootlin.com Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Maxime, On Thu, Nov 15, 2018 at 11:56 PM Maxime Ripard wrote: > > > 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. Thanks for looking into this. Please see my comments below. > > 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? Since this is something that is actually present in the stream and the problem is that libva doesn't convey the information properly, I believe you can workaround it in the libva backend using this API by just setting it to 0 and some arbitrary non-zero value in a binary fashion. > - 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. > From what I can see in the H.264 Slice header, there are 3 related data: - num_ref_idx_active_override_flag - affects the number of reference indices for the slice, - ref_list_l{0,1}_modifications - modifications for the reference lists, - ref_pic_list_modification_flag_l{0,1} - selects whether the modifications are applied. The reference lists inside the v4l2_ctrl_h264_slice_param are expected to already take all the above into account and be the final reference lists to be used for the slice. For reference, the H.264 specification refers to those final reference lists as RefPicList0 and RefPicList1 and so the names of the fields in the struct. There is some interesting background here, though. The Rockchip VPU parses the slice headers itself and handles the above data on its own. This means that it needs to be programmed with the unmodified reference lists, as in v4l2_ctrl_h264_decode_param. Given that, it sounds like we need to have both. Your driver would always use the lists in v4l2_ctrl_h264_slice_param, while the Rockchip VPU would ignore them, use the ones in v4l2_ctrl_h264_decode_param and perform the per-slice modifications on its own. Best regards, Tomasz > 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 >