From: Hans Verkuil <hverkuil@xs4all.nl>
To: Kamil Debski <k.debski@samsung.com>,
"'Nicolas Dufresne'" <nicolas.dufresne@collabora.com>,
linux-media@vger.kernel.org
Subject: Re: s5p-mfc should allow multiple call to REQBUFS before we start streaming
Date: Tue, 02 Sep 2014 11:29:16 +0200 [thread overview]
Message-ID: <54058DEC.6050302@xs4all.nl> (raw)
In-Reply-To: <086701cfc68c$9d69a020$d83ce060$%debski@samsung.com>
On 09/02/14 11:02, Kamil Debski wrote:
> Hi Hans, Nicolas,
>
> Hans, would you mind commenting on this?
>
>> From: Nicolas Dufresne [mailto:nicolas.dufresne@collabora.com]
>> Sent: Monday, September 01, 2014 5:46 PM
>>
>>
>> Le 2014-09-01 05:43, Kamil Debski a écrit :
>>> Hi Nicolas,
>>>
>>>
>>>> From: Nicolas Dufresne [mailto:nicolas.dufresne@collabora.com]
>>>> Sent: Friday, August 29, 2014 3:47 PM
>>>>
>>>> Hi Kamil,
>>>>
>>>> after a discussion on IRC, we concluded that s5p-mfc have this bug
>>>> that disallow multiple reqbufs calls before streaming. This has the
>>>> impact that it forces to call REQBUFS(0) before setting the new
>>>> number of buffers during re-negotiation, and is against the spec too.
>>> I was out of office last week. Could you shed more light on this
>> subject?
>>> Do you have the irc log?
>>
>> Sorry I didn't record this one, but feel free to ping Hans V.
>>>> As an example, in reqbufs_output() REQBUFS is only allowed in
>>>> QUEUE_FREE state, and setting buffers exits this state. We think
>> that
>>>> the call to
>>>> <http://lxr.free-
>>>> electrons.com/ident?i=reqbufs_output>s5p_mfc_open_mfc_inst()
>>>> should be post-poned until STREAMON is called.
>>>> <http://lxr.free-electrons.com/ident?i=reqbufs_output>
>>> How is this connected to the renegotiation scenario?
>>> Are you sure you wanted to mention s5p_mfc_open_mfc_inst?
>> This limitation in MFC causes an important conflict between old
>> videobuf and new videobuf2 drivers. Old videobuf driver (before Hans G.
>> proposed
>> patch) refuse REQBUFS(0). As MFC code has this bug that refuse
>> REBBUFS(N) if buffers are already allocated, it makes all this
>> completely incompatible. This open_mfc call seems to be the only reason
>> REQBUFS() cannot be called multiple time, though I must say you are
>> better placed then me to figure this out.
>
> After MFCs decoding is initialized it has a fixed number of buffers.
> Changing
> this can be done when the stream changes its properties and resolution
> change is initiated. Even then all buffers have to be
> unmapped/reallocated/mapped.
>
> There is a single hardware call that is a part of hardware initialization
> that sets the buffers' addresses.
But is reqbufs the right place to initial MFC decoding? Wouldn't start_streaming
be a much more logical place for this? Until start_streaming is called apps
are free to request more buffers (with CREATE_BUFS), or request a new set of
buffers (REQBUFS(N)). Only once start_streaming is called does everything
have to be locked down and changes are no longer allowed until after
stop_streaming() (or as long as buffers are still mapped).
I see no reason why REQBUFS should be doing anything other than requesting
buffers.
Regards,
Hans
>
> Changing the number of buffers during decoding without explicit reason to do
> so (resolution change/stream properties change) would be problematic. For
> hardware it is very close to reinitiating decoding - it needs to be done on
> an I-frame, the header needs to be present. Otherwise some buffers would be
> lost and corruption would be introduced (lack of reference frames).
>
> I think you mentioned negotiating the number of buffers? Did you use the
> V4L2_CID_MIN_BUFFERS_FOR_CAPTURE control?
>
> I understand that before calling REQBUFS(N) with the new N value you
> properly
> unmap the buffers just like the documentation is telling?
>
> "Applications can call VIDIOC_REQBUFS again to change the number of buffers,
> however this cannot succeed when any buffers are still mapped. A count value
> of zero frees all buffers, after aborting or finishing any DMA in progress,
> an implicit VIDIOC_STREAMOFF." [1]
>
> Could you tell me what is the scenario where you want to use the REQBUFS(N)
> to change number of buffers? Maybe I could understand better the problem.
>
>>
>> cheers,
>> Nicolas
>
> [1] http://linuxtv.org/downloads/v4l-dvb-apis/vidioc-reqbufs.html
>
> Best wishes,
>
next prev parent reply other threads:[~2014-09-02 9:30 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-29 13:46 Bug: s5p-mfc should allow multiple call to REQBUFS before we start streaming Nicolas Dufresne
2014-09-01 9:43 ` Kamil Debski
2014-09-01 15:45 ` Nicolas Dufresne
2014-09-02 9:02 ` Kamil Debski
2014-09-02 9:29 ` Hans Verkuil [this message]
2014-09-02 10:38 ` Kamil Debski
2014-09-02 12:02 ` Nicolas Dufresne
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=54058DEC.6050302@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=k.debski@samsung.com \
--cc=linux-media@vger.kernel.org \
--cc=nicolas.dufresne@collabora.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;
as well as URLs for NNTP newsgroup(s).