From: Nicolas Dufresne <nicolas@ndufresne.ca>
To: John Cox <jc@kynesim.co.uk>
Cc: Dave Stevenson <dave.stevenson@raspberrypi.com>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Florian Fainelli <florian.fainelli@broadcom.com>,
Broadcom internal kernel review list
<bcm-kernel-feedback-list@broadcom.com>,
John Cox <john.cox@raspberrypi.com>,
Dom Cobley <dom@raspberrypi.com>,
review list <kernel-list@raspberrypi.com>,
Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org,
linux-rpi-kernel@lists.infradead.org,
linux-arm-kernel@lists.infradead.org,
John Cox <john.cox@raspberypi.com>
Subject: Re: [PATCH 0/7] Raspberry Pi HEVC decoder driver
Date: Wed, 08 Jan 2025 14:15:20 -0500 [thread overview]
Message-ID: <fd5b45f02e5a7dcc828a8e9ae9e6fb2948532dff.camel@ndufresne.ca> (raw)
In-Reply-To: <fnhsnjlvifnma1rqlsm9kqk7ao3bc174ic@4ax.com>
Hi John,
Le mercredi 08 janvier 2025 à 09:52 +0000, John Cox a écrit :
> On Mon, 06 Jan 2025 15:46:51 -0500, you wrote:
>
> > Hi Dave,
> >
> > Le vendredi 20 décembre 2024 à 16:21 +0000, Dave Stevenson a écrit :
> > > Hi All
> > >
> > > This has been in the pipeline for a while, but I've finally cleaned
> > > up our HEVC decoder driver to be in a shape to at least get a first
> > > review.
> > > John Cox has done almost all of the work under contract to Raspberry
> > > Pi, and I'm largely just doing the process of patch curation and
> > > sending.
> > >
> > > There are a couple of questions raised in frameworks.
> > > The main one is that the codec has 2 independent phases to the decode,
> > > CABAC and reconstruction. To keep the decoder operating optimally
> > > means that two requests need to be in process at once, whilst the
> > > current frameworks don't want to allow as there is an implicit
> > > assumption of only a single job being active at once, and
> > > completition returns both buffers and releases the media request.
> > >
> > > The OUTPUT queue buffer is finished with and can be returned at the
> > > end of phase 1, but the media request is still required for phase 2.
> > > The frameworks currently force the driver to be returning both
> > > together via v4l2_m2m_buf_done_and_job_finish. v4l2_m2m_job_finish
> > > would complete the job without returning the buffer as we need,
> > > however if the driver has set VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF
> > > then we have a WARN in v4l2_m2m_job_finish.
> > > Dropping the WARN as this series is currently doing isn't going to be
> > > the right answer, but it isn't obvious what the right answer is.
> > > Discussion required.
> >
> > I think part of the manual request completion RFC will be to evaluate the impact
> > on VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF feature. MTK does not support
> > interleaved interlaced decoding (only alternate), so they didn't have to
> > implement that feature.
> >
> > Overall, It would be nice to get your feedback on the new manual request
> > proposal, which is I believe better then the pin/unpin API you have in this
> > serie.
>
> Is the effect of the manual complete API different from the pin API? Pin
> incs the ref count on the media object to prevent competion,
> manaul_complete sets a flag to do the same thing. Or have I missed the
> point?
The request contains "objects", usually controls and a src buffer. The state of
the request goes to complete implicitly when the last object is removed. The
manual completion avoids adding ref-count on top of this, and simply disable the
implicit signalling of the request. With that we can signal everything in the
most logical order:
1. Program the register from controls -> mark controls complete
2. Entropy decode the stream -> mark src buffer done
3. Reconstruct the image -> mark dst buffer done
4. Signal the request completion
Before that, you always had to hold on the src buffer, and only mark it done
after the reconstruction was complete and the dst buffer was marked done. That
didn't matter for single function HW of course.
Unlike the pin/unpin, manual completion mode removes the implicit completion
bound to the fact the last "object" is removed from the request, and leave it to
the driver to decide when to actually signal the request. Internally, the give a
reference to the driver of course (similar to pin).
>
> I don't mind what call is used as long as the effect is to be able to
> delay media object completion. (In my first veraion of the code I
> created a dummy object and attached it to the media object, when I
> wanted to unpin I deleted the dummy object - pin was just a cleaner
> API.)
The manual completion patchset is very similar really in you step back.
>
> The pin API is counted and needs no new structure elements (which is
> nice), but manual_complete does give a flag that allows other functions
> to know that holding on to the media object whilst releasing OUTPUT is
> intentional so can be made to work cleanly with things like
> v4l2_m2m_job_finish so is probably the better solution (assuming my
> understand of how it works is correct).
>
> I'll try to build a version of the code using manual_complete in the
> next few days.
Thanks! your feedback will be very useful.
Nicolas
>
> Regards
>
> JC
>
> > >
> > > We also have a need to hold on to the media request for phase 2. John
> > > had discussed this with Ezequiel (and others) a couple of years back,
> > > and hence suggested a patch that adds media_request_{pin,unpin} to
> > > grab references on the media request. Discussion required on that
> > > or a better way of handling it.
> > >
> > > I will apologise in advance for sending this V1 just before I head off
> > > on the Christmas break, but will respond to things as soon as possible.
> >
> > One thing missing in this summary is how this driver is being validated
> > (specially that for this one requires a downstream fork of FFMPEG). To this
> > report we ask for:
> >
> > - v4l2-compliance results
> > - Fluster conformance tests results [1] and I believe you need [2]
> >
> > [1] https://github.com/fluendo/fluster
> > [2] https://github.com/fluendo/fluster/pull/179
> >
> > GStreamer support is there in main now, but without the needed software video
> > converter for you column tiling, we can't use it for that (i.e. only works
> > through GL or Wayland).
> >
> > regards,
> > Nicolas
> >
> > >
> > > Thanks
> > > Dave
> > >
> > > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> > > ---
> > > Dave Stevenson (4):
> > > docs: uapi: media: Document Raspberry Pi NV12 column format
> > > media: ioctl: Add pixel formats NV12MT_COL128 and NV12MT_10_COL128
> > > media: dt-bindings: media: Add binding for the Raspberry Pi HEVC decoder
> > > arm: dts: bcm2711-rpi: Add HEVC decoder node
> > >
> > > Ezequiel Garcia (1):
> > > RFC: media: Add media_request_{pin,unpin} API
> > >
> > > John Cox (2):
> > > media: platform: Add Raspberry Pi HEVC decoder driver
> > > RFC: v4l2-mem2mem: Remove warning from v4l2_m2m_job_finish
> > >
> > > .../bindings/media/raspberrypi,hevc-dec.yaml | 72 +
> > > .../userspace-api/media/v4l/pixfmt-yuv-planar.rst | 42 +
> > > MAINTAINERS | 10 +
> > > arch/arm/boot/dts/broadcom/bcm2711-rpi.dtsi | 5 +
> > > arch/arm/boot/dts/broadcom/bcm2711.dtsi | 9 +
> > > drivers/media/mc/mc-request.c | 35 +
> > > drivers/media/platform/raspberrypi/Kconfig | 1 +
> > > drivers/media/platform/raspberrypi/Makefile | 1 +
> > > .../media/platform/raspberrypi/hevc_dec/Kconfig | 17 +
> > > .../media/platform/raspberrypi/hevc_dec/Makefile | 5 +
> > > .../media/platform/raspberrypi/hevc_dec/hevc_d.c | 443 ++++
> > > .../media/platform/raspberrypi/hevc_dec/hevc_d.h | 190 ++
> > > .../platform/raspberrypi/hevc_dec/hevc_d_h265.c | 2629 ++++++++++++++++++++
> > > .../platform/raspberrypi/hevc_dec/hevc_d_hw.c | 376 +++
> > > .../platform/raspberrypi/hevc_dec/hevc_d_hw.h | 303 +++
> > > .../platform/raspberrypi/hevc_dec/hevc_d_video.c | 685 +++++
> > > .../platform/raspberrypi/hevc_dec/hevc_d_video.h | 38 +
> > > drivers/media/v4l2-core/v4l2-ioctl.c | 2 +
> > > drivers/media/v4l2-core/v4l2-mem2mem.c | 7 -
> > > include/media/media-request.h | 12 +
> > > include/uapi/linux/videodev2.h | 5 +
> > > 21 files changed, 4880 insertions(+), 7 deletions(-)
> > > ---
> > > base-commit: e90c9612ac3969cb8206029a26bcd2b6f5d4a942
> > > change-id: 20241212-media-rpi-hevc-dec-3b5be739f3bd
> > >
> > > Best regards,
prev parent reply other threads:[~2025-01-08 19:15 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-20 16:21 Dave Stevenson
2024-12-20 16:21 ` [PATCH 1/7] RFC: media: Add media_request_{pin,unpin} API Dave Stevenson
2025-01-06 20:32 ` Nicolas Dufresne
2024-12-20 16:21 ` [PATCH 2/7] docs: uapi: media: Document Raspberry Pi NV12 column format Dave Stevenson
2025-01-08 8:09 ` Sakari Ailus
2024-12-20 16:21 ` [PATCH 3/7] media: ioctl: Add pixel formats NV12MT_COL128 and NV12MT_10_COL128 Dave Stevenson
[not found] ` <d2f047cd-5c50-454f-95be-601edb79466d@collabora.com>
2025-01-02 12:52 ` Dave Stevenson
2025-01-06 20:52 ` Nicolas Dufresne
2025-01-07 16:28 ` Dave Stevenson
2024-12-20 16:21 ` [PATCH 4/7] media: dt-bindings: media: Add binding for the Raspberry Pi HEVC decoder Dave Stevenson
2024-12-31 13:15 ` Rob Herring
2024-12-20 16:21 ` [PATCH 5/7] media: platform: Add Raspberry Pi HEVC decoder driver Dave Stevenson
2024-12-20 18:20 ` Dave Stevenson
2024-12-20 18:58 ` kernel test robot
2024-12-21 18:34 ` kernel test robot
2024-12-21 18:45 ` kernel test robot
2024-12-20 16:21 ` [PATCH 6/7] RFC: v4l2-mem2mem: Remove warning from v4l2_m2m_job_finish Dave Stevenson
2024-12-20 16:21 ` [PATCH 7/7] arm: dts: bcm2711-rpi: Add HEVC decoder node Dave Stevenson
2025-01-06 20:46 ` [PATCH 0/7] Raspberry Pi HEVC decoder driver Nicolas Dufresne
2025-01-07 16:13 ` Dave Stevenson
2025-01-07 17:36 ` Dave Stevenson
2025-01-08 19:02 ` Nicolas Dufresne
2025-01-08 18:40 ` Nicolas Dufresne
2025-01-08 9:52 ` John Cox
2025-01-08 19:15 ` Nicolas Dufresne [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fd5b45f02e5a7dcc828a8e9ae9e6fb2948532dff.camel@ndufresne.ca \
--to=nicolas@ndufresne.ca \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=conor+dt@kernel.org \
--cc=dave.stevenson@raspberrypi.com \
--cc=devicetree@vger.kernel.org \
--cc=dom@raspberrypi.com \
--cc=ezequiel@vanguardiasur.com.ar \
--cc=florian.fainelli@broadcom.com \
--cc=jc@kynesim.co.uk \
--cc=john.cox@raspberrypi.com \
--cc=john.cox@raspberypi.com \
--cc=kernel-list@raspberrypi.com \
--cc=krzk+dt@kernel.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-rpi-kernel@lists.infradead.org \
--cc=mchehab@kernel.org \
--cc=robh@kernel.org \
--cc=sakari.ailus@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®