rockchip-vpu driver usability

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

 



Hi Tomasz,

On Thu, May 24, 2018 at 08:46:35PM +0900, Tomasz Figa wrote:
> On Thu, May 24, 2018 at 7:34 PM Baruch Siach <baruch at tkos.co.il> wrote:
> > I'm trying to get the RK3288 VPU do h.264 encoding on the Tinkerboard
> > platform with latest mainline kernel. I found the v4l2 based rockchip-vpu 
> > driver in the vendor kernel. But I could not get it work even in the 
> > context of that kernel. Is this driver in usable state? If not, how far it 
> > is from being usable?
> 
> The driver in chromeos-3.14 kernel [1] is running in production on RK3288
> systems, while the one in chromeos-4.4 [2] on RK3399 systems.
> 
> [1]
> https://chromium.googlesource.com/chromiumos/third_party/kernel/+/chromeos-3.14/drivers/media/platform/rk3288-vpu/
> [2]
> https://chromium.googlesource.com/chromiumos/third_party/kernel/+/chromeos-4.4/drivers/media/platform/rockchip-vpu/
> 
> However, it doesn't implement a regular stateful V4L2 encoder API, since
> the hardware is stateless and does only part of the encoding. For other
> things, like bitstream generation and bitrate control, we have libv4l-based
> plugins for rk3288 [3] and rk3399 [4].
> 
> [3]
> https://chromium.googlesource.com/chromiumos/third_party/libv4lplugins/+/master/libv4l-rockchip/
> [4]
> https://chromium.googlesource.com/chromiumos/third_party/libv4lplugins/+/master/libv4l-rockchip_v2/

This is interesting, thanks.

It looks like only v2 supports h.264 encoding. Does the v2 plugin work with 
the rk3288?

A recent discussion on the linux-media list indicated that gstreamer and 
libv4l2 are not a good match. Which application would you recommend for doing 
h.264 encoding?

> Do you have any details on what was going wrong when you tried to "get it
> work even in the context of that kernel"?

I used the code from the 'develop' branch of the TinkerOS kernel source 
tree[1]. I had to build the latest gstreamer version 1.14.0 to get the 
v4l2h264enc plugin. On startup I got a lot of "must be set encoding output 
size" error messages from try_fmt. Shortly after that I got a NULL dereference 
BUG message.

But since you say that the driver does not implement the regular API, I can't 
expect gstreamer native V4L2 code to work, right?

[1] https://github.com/TinkerBoard/debian_kernel

> > Another option is to forward port the rockchip-vcodec shim driver for the
> > MPP
> > framework. I'm aware of Myy Miouyouyou's work[1] in this area. But this
> > driver
> > seems unusable as well. Testing v4.17-rc6, the PM code fails to enable the
> > video power domain (the hvec power domain enables correctly, though). The
> > error is:
> 
> >    rockchip-pm-domain ff730000.power-management:power-controller: failed
> to get ack on domain 'pd_video', val=0x8021c
> 
> Hmm, this looks like some problem with power domains. I don't think this is
> related to the codec driver itself. Could be something wrong with power
> domain driver or some data in device tree, such as power domain clocks.
> 
> 
> > With the TinkerOS provided kernel I managed to make the VPU encode to
> h.264
> > using the gstreamer MPP plugin. But I would rather not use that kernel if
> > possible, since that would mean backporting other v4l2 code that I need.
> 
> > Do you have any other idea/direction for me to explore?
> 
> I think you should be able to get our driver to work, but ideally we should
> create a proper stateless encoder API, based on V4L2 Request API, similar
> to what's being proposed for decoders.

Thanks for your detailed and helpful response.

baruch

-- 
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il -



[Index of Archives]     [LM Sensors]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux