I am using GStreamer-vaapi on Intel Atom x5-Z8550. I cannot access the encoding feature called "variable bitrate" (VBR) which is available as a "rate-control" option for the GStreamer vaapih264enc plugin like this: "vaapih264enc rate-control=vbr"
Our questions:
1. Is variable bitrate supported on our processor?
2. Where can I find documentation that indicates support or the lack thereof for this feature?
I am building GStreamer-vaapi from source. I have been able to trace the problem into a VA-API library call: vaGetConfigAttributes().
For our processor, vaGetConfigAttributes() indicates support for only CBR 0x02 (constant-bitrate) and CQP 0x10 (constant-quality). vaGetConfigAttributes comes from the core VA-API library as documented here: http://intel.github.io/libva/group__api__core.html#gae51cad2e388d6cc63ce.... We need access to VBR 0x04 (variable-bitrate).
Environment:
Linux kernel: v4.9.115
vainfo
libva info: VA-API version 0.39.4
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.39 (libva 1.7.3)
vainfo: Driver version: Intel i965 driver for Intel(R) CherryView - 1.7.3
Replication Steps:
This problem can be demonstrated by using the standard GStreamer command line application: "gst-launch-1.0".
I have tried similar pipelines in GStreamer 1.14.1, 1.14.5, and 1.16.0 with identical results.
This pipeline works with rate-control=constant bitrate (CBR):
gst-launch-1.0 -v videotestsrc num-buffers=1000 ! videoconvert ! vaapipostproc width=1280 height=720 ! vaapih264enc rate-control=cbr bitrate=8000 ! mp4mux ! filesink location=video.mp4
This pipeline fails with rate-control=variable bitrate (VBR):
gst-launch-1.0 -v videotestsrc num-buffers=1000 ! videoconvert ! vaapipostproc width=1280 height=720 ! vaapih264enc rate-control=vbr bitrate=8000 ! mp4mux ! filesink location=video.mp4
ERROR: from element /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: Internal data stream error. streaming stopped, reason not-negotiated (-4) ERROR: pipeline doesn't want to preroll.