vaapi and x-forwarding

Marianna S. Buschle msb at
Tue Jun 15 11:44:33 UTC 2021

I have just tried the solution with having multiple pipelines and using the
HAVE / NEED_CONTEXT messages on the bus.

pipelines.append("videotestsrc num-buffers=1 ! vaapisink display=drm

pipelines.append("videotestsrc is-live=true pattern=ball !
video/x-raw,framerate=30/1,format=NV12 ! "
                 "tee name=t ! queue ! vaapih264enc rate-control=4
bitrate=15000 ! video/x-h264,profile=high ! h264parse ! "
                 "interpipesink name=vtest sync=false async=false "
                 "t. ! queue ! videoconvert ! timeoverlay ! textoverlay
text=src ! ximagesink sync=0 ")

pipelines.append("interpipesrc listen-to=vtest is-live=false
stream-sync=restart-ts ! "
                 "identity sync=true ! h264parse ! vaapih264dec
low-latency=true ! queue ! videoconvert ! timeoverlay ! textoverlay
name=text_out text=out ! ximagesink sync=0 ")

The first pipeline goes to playing from start, and then after I got the
context from it I start the other 2.

However it doesn't work, I end up getting the error as soon as the 2 other
pipelines go into playing/ready/paused, before I get the NEED_CONTEXT
message from them...

X Error of failed request:  BadRequest (invalid request code or no such
  Major opcode of failed request:  154 (DRI2)
  Minor opcode of failed request:  1 (DRI2Connect)
  Serial number of failed request:  12
  Current serial number in output stream:  12

The only way I can avoid the error is by adding fx "videotestsrc
num-buffers=1 ! vaapisink display=drm" to each pipeline.
Then I can see the NEED/HAVE context messages from all the vaapisinks, but
not from encoder/decoder.
I guess their contexts are being set by upstream/downstream queries.

Sent from:

More information about the gstreamer-devel mailing list