RE: s5p-mfc should allow multiple call to REQBUFS before we start streaming

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans, Nicolas,

Hans, would you mind commenting on this?

> From: Nicolas Dufresne [mailto:nicolas.dufresne@xxxxxxxxxxxxx]
> 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@xxxxxxxxxxxxx]
> >> 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.

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,
-- 
Kamil Debski
Samsung R&D Institute Poland


--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux