AnsweredAssumed Answered

Problem in flushing buffer in waylandsink wldisplay

Question asked by Saseendranath VS on Aug 22, 2017



I am using waylandsink to play h264 file. My decoder gives output in NV12 format, But my wayland accepts only BGRA, BGRx, RGB16. So I am using a video convertor. I cannot use a software video convert as its very slow. I want to use hardware video convert. 


Pipeline using software video convert :

   gst-launch-1.0 filesrc location=/home/root/VSS/video_with_display.h264 ! h264parse ! vpudec ! videoconvert ! waylandsink -v


Pipeline using hardware video convert :

gst-launch-1.0 filesrc location=/home/root/VSS/video_with_display.h264 ! h264parse ! vpudec ! imxvideoconvert_ipu ! waylandsink -v 


I am using gstreamer1.0-plugins-bad, version : 1.6.0 

You  could get it from here : 


But when I use hardware video convert, the buffer release function, which is a call back, is not getting called. There fore, I am not able to pick next buffers in pipeline.


Code flow as I understood.

In gst_wayland_sink_render (in gstwaylandsink.c ) function, we will get the buffer from pipeline.

  • For the first time, we have to create the wlbuffer and add register with  sink display. This is done using gst_buffer_add_wl_buffer (in wlbuffer.c ) function. Here we will add a listener buffer_listener for this buffer, which in turn calls buffer_release (void *data, struct wl_buffer *wl_buffer) and releases the buffer and unref it. 
  • Then we will replace sink's last buffer with this buffer to be rendered and call render_last_buffer. At end we calls gst_wl_window_render (in wlwindow.c), here we will attach our buffer to window video surface using gst_wl_buffer_attach. Then we will call wl_display_flush (window->display->display);

When I use hardware video convert, I am able to see that data is coming upto gst_wl_buffer_attach, but buffer releasing is not done. 

What can be the reason ?

I am attaching the logs taken for both software videoconvert and hardware videoconvert, And our gst-plugins-bad-1.6.0 code with my own debug logs added. I have added the logs containing ** VSS ** .