vaapisink and multiple heads/displays

jim at chaseandscout.com jim at chaseandscout.com
Tue Oct 17 19:37:33 UTC 2017


Hi,

I am hoping that someone can point me in the right direction here.
I've either messed up on my end, or I am hitting some potential
limitation of vaapisink...

I have my (linux) X server configured with 2 heads (:0.0 and :0.1). 

In my (very) basic gstreamer app, I:
1. start a pipeline with vaapisink display-name=:0.0
 -- this works
2. while #1 is running, I start another pipeline with vaapisink
display-name=:0.1
 -- this not only fails, but it also core dumps

The above is all within one application/process (if I run the
pipelines in different apps/processes, there is no problem).

I actually hit this issue a month or so ago, and after some searching
began to think that this was some context issue, but then I moved onto
something else for awhile and I didn't pursue it further at the time.
Any help and/or suggestions would be greatly appreciated.
Best,
-jim

Source code is pretty basic (full app would build the pipelines
without relying on gst_parse_launch()) and is included below. Also
attached is a log with  "GST_DEBUG=vaapi*:6,2"

Output to stdout/stderr is:

/dev/video0 on :0.0
libva info: VA-API version 0.40.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
libva info: VA-API version 0.40.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
libva info: VA-API version 0.40.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
/dev/video1 on :0.1

** (2windows_2displays:19650): CRITICAL **:
gst_vaapi_display_get_display_type: assertion 'display != NULL' failed
**
ERROR:gstvaapisink.c:992:gst_vaapisink_ensure_backend: code should not
be reached
Aborted (core dumped)

------ SOURCE CODE ------

#include <gst/gst.h>
#include <gst/video/videooverlay.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>

GstElement *pipeline1;
GstElement *pipeline2;

int main(int argc, char *argv[]) {
  GstBus *bus1;
  GstBus *bus2;
  GstMessage *msg1;
  GstMessage *msg2;
  int mydata = 1;

  XInitThreads();

  /* Initialize GStreamer */
  gst_init (&argc, 

  /* Build the pipeline */
  printf("/dev/video0 on :0.0n");
  pipeline1 = gst_parse_launch("v4l2src device=/dev/video0 !
video/x-raw,format=I420,width=1920,height=1080 ! vaapisink sync=false
display-name=:0.0", NULL);

  /* Start playing */
  gst_element_set_state (pipeline1, GST_STATE_PLAYING);
  sleep(5);

  /* Build the pipeline */
  printf("/dev/video1 on :0.1n");
  pipeline2 = gst_parse_launch("v4l2src device=/dev/video1 !
video/x-raw,format=I420,width=1920,height=1080 ! vaapisink sync=false
display-name=:0.1 display=1", NULL);

  /* Start playing */
  gst_element_set_state (pipeline2, GST_STATE_PLAYING);
  sleep(10);
 
  printf("donen");

  gst_element_set_state (pipeline1, GST_STATE_NULL);
  gst_object_unref (pipeline1);

  gst_element_set_state (pipeline2, GST_STATE_NULL);
  gst_object_unref (pipeline2);

  return 0;
}


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20171017/f3be6e6e/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: save_gst.log
Type: application/octet-stream
Size: 187407 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20171017/f3be6e6e/attachment-0001.obj>


More information about the gstreamer-devel mailing list