linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chen-Yu Tsai <wenst@chromium.org>
To: Nicolas Dufresne <nicolas@ndufresne.ca>
Cc: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	"open list:ARM/Rockchip SoC..."
	<linux-rockchip@lists.infradead.org>,
	linux-staging@lists.linux.dev,
	LKML <linux-kernel@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Andrzej Pietrasiewicz <andrzej.p@collabora.com>,
	Jernej Skrabec <jernej.skrabec@gmail.com>
Subject: Re: [PATCH 0/2] media: rkvdec: Align decoder behavior with Hantro and Cedrus
Date: Thu, 14 Oct 2021 15:31:08 +0800	[thread overview]
Message-ID: <CAGXv+5GJCaxnPPkXRp5xrTBuq-5=ggfjPbRhyS4vdm3meM_4eg@mail.gmail.com> (raw)
In-Reply-To: <ff0769efee51e15451d48e23860f8b1710593cd7.camel@ndufresne.ca>

On Wed, Oct 13, 2021 at 9:40 PM Nicolas Dufresne <nicolas@ndufresne.ca> wrote:
>
> Le mercredi 13 octobre 2021 à 15:05 +0800, Chen-Yu Tsai a écrit :
> > Hi,
> >
> > On Fri, Oct 8, 2021 at 11:42 PM Nicolas Dufresne <nicolas@ndufresne.ca> wrote:
> > >
> > > Hi Chen-Yu,
> > >
> > > thanks for looking into this.
> > >
> > > Le vendredi 08 octobre 2021 à 18:04 +0800, Chen-Yu Tsai a écrit :
> > > > Hi everyone,
> > > >
> > > > While working on the rkvdec H.264 decoder for ChromeOS, I noticed some
> > > > behavioral differences compared to Hantro and Cedrus:
> > > >
> > > > 1. The driver always overrides the sizeimage setting given by userspace
> > > >    for the output format. This results in insufficient buffer space when
> > > >    running the ChromeOS video_decode_accelerator_tests test program,
> > > >    likely due to a small initial resolution followed by dynamic
> > > >    resolution change.
> > > >
> > > > 2. Doesn't support dynamic resolution change.
> > > >
> > > > This small series fixes both and aligns the behavior with the other two
> > > > stateless decoder drivers. This was tested on the downstream ChromeOS
> > > > 5.10 kernel with ChromeOS. Also compiled tested on mainline but I don't
> > > > have any other RK3399 devices set up to test video stuff, so testing
> > > > would be very much appreciated.
> > > >
> > > > Also, I'm not sure if user applications are required to check the value
> > > > of sizeimage upon S_FMT return. If the value is different or too small,
> > > > what can the application do besides fail? AFAICT it can't split the
> > > > data of one frame (or slice) between different buffers.
> > >
> > > While most software out there just assumes that driver will do it right and
> > > crash when it's not the case, application that do map the buffer to CPU must
> > > read back the fmt structure as the drivers are all fail-safe and will modify
> > > that structure to a set of valid value s for the context.
> >
> > I believe what is happening in Chromium is that the decoder is opened with
> > some default settings, including the smallest viable resolution for the
> > output side, and the buffers allocated accordingly. When dynamic resolution
> > change happens, the decoder does not check if the current buffers are
> > sufficiently sized; it just assumes that they are. And when it starts
> > pushing data into the buffers, it realizes they are too small and fails.
> >
> > The spec also says:
> >
> >     Clients are allowed to set the sizeimage field for variable length
> >     compressed data flagged with V4L2_FMT_FLAG_COMPRESSED at ioctl
> >     VIDIOC_ENUM_FMT, but the driver may ignore it and set the value itself,
> >     or it may modify the provided value based on alignment requirements or
> >     minimum/maximum size requirements.
> >
> > The spec only guarantees that the buffers are of sufficient size for the
> > resolution configured at the time they were allocated/requested.
> >
> > So I think my first patch is a workaround for a somewhat broken userspace.
> > But it seems the other stateless drivers are providing similar behavior,
> > as I previously mentioned.
>
> That's what I mean, this is not a driver bug strictly speaking (assuming it does
> guaranty the buffer size is sufficient) but it is without your change
> inconvenient, as userspace may be aware of the largest resolution it will
> decode, and may want to allocate larger buffer upfront.

Thinking about this more, I think a few follow up fixes for each driver
are in order. The spec implies that the driver should override the value
should userspace give some unrealistic value, such as asking for a 256 byte
buffer for a 4K frame size.

Cedrus (CCing Jernej) comes close, but a 1K buffer might not be enough for
really large frames, even though it's slice based?

ChenYu


> As per Chromium bug, this is being addressed already. Thanks for this driver
> improvement.
>
> >
> > > As for opposite direction (output vs capture) format being changed, this should
> > > be documented in the spec, if you find it too unclear or missing for sateless
> > > codec (I know it's there for stateful but can't remember, would have to re-read,
> > > for stateless) let us know.
> >
> > AFAICT the capture side is working OK and to spec.
> >
> >
> > Regards
> > ChenYu
> >
> > > regards,
> > > Nicolas
> > >
> > > >
> > > > Andrzej, I believe the second patch would conflict with your VP9 series.
> > > >
> > > >
> > > > Regards
> > > > ChenYu
> > > >
> > > > Chen-Yu Tsai (2):
> > > >   media: rkvdec: Do not override sizeimage for output format
> > > >   media: rkvdec: Support dynamic resolution changes
> > > >
> > > >  drivers/staging/media/rkvdec/rkvdec-h264.c |  5 +--
> > > >  drivers/staging/media/rkvdec/rkvdec.c      | 40 +++++++++++-----------
> > > >  2 files changed, 23 insertions(+), 22 deletions(-)
> > > >
> > >
> > >
>
>

  reply	other threads:[~2021-10-14  7:31 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-08 10:04 [PATCH 0/2] media: rkvdec: Align decoder behavior with Hantro and Cedrus Chen-Yu Tsai
2021-10-08 10:04 ` [PATCH 1/2] media: rkvdec: Do not override sizeimage for output format Chen-Yu Tsai
2021-10-08 15:48   ` Nicolas Dufresne
2021-10-13 14:23   ` Ezequiel Garcia
2021-10-08 10:04 ` [PATCH 2/2] media: rkvdec: Support dynamic resolution changes Chen-Yu Tsai
2021-10-08 15:54   ` Nicolas Dufresne
2021-10-13 14:27   ` Ezequiel Garcia
2021-10-08 15:01 ` [PATCH 0/2] media: rkvdec: Align decoder behavior with Hantro and Cedrus Andrzej Pietrasiewicz
2021-10-08 15:42 ` Nicolas Dufresne
2021-10-13  7:05   ` Chen-Yu Tsai
2021-10-13 13:40     ` Nicolas Dufresne
2021-10-14  7:31       ` Chen-Yu Tsai [this message]
2021-10-14  8:46         ` Ezequiel Garcia
2021-10-14  8:57           ` Chen-Yu Tsai
2021-10-14  9:21             ` Ezequiel Garcia

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='CAGXv+5GJCaxnPPkXRp5xrTBuq-5=ggfjPbRhyS4vdm3meM_4eg@mail.gmail.com' \
    --to=wenst@chromium.org \
    --cc=andrzej.p@collabora.com \
    --cc=ezequiel@vanguardiasur.com.ar \
    --cc=gregkh@linuxfoundation.org \
    --cc=jernej.skrabec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux-staging@lists.linux.dev \
    --cc=mchehab@kernel.org \
    --cc=nicolas@ndufresne.ca \
    /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;
as well as URLs for NNTP newsgroup(s).