[Mesa-dev] [PATCH v4 0/6] nouveau: add support for vaapi
Julien Isorce
j.isorce at samsung.com
Wed Sep 16 05:22:19 PDT 2015
I added below version4 updates. It works for all codecs expect h264.
Video is visible but lot of blockiness.
Can someone with a Radeon confirm that "LIBVA_DRIVER_NAME=gallium mpv --hwdec=vaapi"
is working on h264 videos ?
I want to make sure it is not a bug in st/va.
v4:
Update caps after number of slices.
Fixed debug build.
After trying debug build I made a new patch "st/va: properly set max number of ref frames".
Tested videos:
* mpeg4 work ok:
mpv --hwdec=vaapi big_buck_bunny_720p_surround.avi (from http://download.blender.org/peach/bigbuckbunny_movies/)
* vc1 works ok:
mpv --hwdec=vaapi To_The_Limit_720_230.ismv (from http://playready.directtaps.net/smoothstreaming/)
* mpeg12 works ok:
mpv --hwdec=vaapi centaur_2.mpg (from https://github.com/malek0512/PLS/raw/master/Tests/centaur_2.mpg)
* h264 has blockiness like it was dropping some slices:
mpv --hwdec=vaapi any_video (from http://www.h264info.com/clips.html)
Depending on the video it can have more or much less blockiness.
* All this videos still work with option --hwdec=vdpau
v3:
Indent to 3 spaces.
Move "unsigned bsp_size" and unsigned int nb_slices" in
commits that use it.
v2:
Squash some commits as requested.
Currently nouveau does not support chunk decoding
which is required to support st/va.
The low level code is already there since it supports
vpau. But it is missing the possibility to feed
the nouveau_bo buffers gradually.
Resizing is already there too. But it also requires
to preserve the content after resizing.
The following patches refactor nouveau_vp3_bsp
and nvc0_decoder_bsp in order to implement
pipe_video_codec::begin_frame/decode_bitstream/end_frame.
So that decode_bitstream can be call multiple times
between each begin/end.
There is nothing really new in these patches.
All the low level code relative to nouveau was already there.
The patches are moving code in order to call nouveau_vp3_bsp and
nvc0_decoder_bsp multiple times between each begin/end frame.
I made sure that vdpau was still working. Actually it was more than that,
without vdpau I think I would not have been able to do this refactoring.
I also compared that for one begin/end frame the nouveau_bo buffer contains
the same data for vdpau and vaapi. I dumped them for the same stream and
for several seconds. There were all the same.
Regression tests:
No regression for vdpau backend.
TODO:
Apply same logic for nv98 but I do not have the
material to test it. Ilia Mirkin suggested to do it after.
https://bugs.freedesktop.org/show_bug.cgi?id=89969
Julien Isorce (6):
nouveau: split nouveau_vp3_bsp in begin/next/end
nvc0: add support for st/va
nouveau: fix chunk decoding by updating number of slices
st/va: properly set max number of ref frames
build: enable st/va with nouveau driver
WIP: implement vaapi export / import and vpp
src/gallium/drivers/nouveau/nouveau_vp3_video.h | 22 +-
.../drivers/nouveau/nouveau_vp3_video_bsp.c | 115 ++++--
src/gallium/drivers/nouveau/nv50/nv98_video_bsp.c | 5 +-
src/gallium/drivers/nouveau/nvc0/nvc0_resource.c | 3 +-
src/gallium/drivers/nouveau/nvc0/nvc0_video.c | 44 +-
src/gallium/drivers/nouveau/nvc0/nvc0_video.h | 18 +-
src/gallium/drivers/nouveau/nvc0/nvc0_video_bsp.c | 141 +++++--
src/gallium/state_trackers/va/buffer.c | 175 +++++++-
src/gallium/state_trackers/va/config.c | 20 +
src/gallium/state_trackers/va/context.c | 101 +++--
src/gallium/state_trackers/va/image.c | 145 ++++++-
src/gallium/state_trackers/va/picture.c | 89 +++-
src/gallium/state_trackers/va/surface.c | 449 ++++++++++++++++++---
src/gallium/state_trackers/va/va_private.h | 69 +++-
src/gallium/targets/va/Makefile.am | 2 +
15 files changed, 1195 insertions(+), 203 deletions(-)
--
1.9.1
More information about the mesa-dev
mailing list