1*4882a593SmuzhiyunFrom 32ca76a1002b7cd5772ff1e425e42e5e216705b9 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Wed, 22 Dec 2021 16:04:46 +0800 4*4882a593SmuzhiyunSubject: [PATCH 27/41] waylandsink: Use the correct video info to access 5*4882a593Smuzhiyun allocated buffer 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunThe video info might changed after pool activated. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 10*4882a593Smuzhiyun--- 11*4882a593Smuzhiyun ext/wayland/gstwaylandsink.c | 10 +++++----- 12*4882a593Smuzhiyun ext/wayland/gstwaylandsink.h | 1 + 13*4882a593Smuzhiyun 2 files changed, 6 insertions(+), 5 deletions(-) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyundiff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c 16*4882a593Smuzhiyunindex b26b7ee..d75f2e4 100644 17*4882a593Smuzhiyun--- a/ext/wayland/gstwaylandsink.c 18*4882a593Smuzhiyun+++ b/ext/wayland/gstwaylandsink.c 19*4882a593Smuzhiyun@@ -956,7 +956,6 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) 20*4882a593Smuzhiyun GstVideoCropMeta *crop; 21*4882a593Smuzhiyun GstVideoMeta *vmeta; 22*4882a593Smuzhiyun GstVideoFormat format; 23*4882a593Smuzhiyun- GstVideoInfo old_vinfo; 24*4882a593Smuzhiyun GstMemory *mem; 25*4882a593Smuzhiyun struct wl_buffer *wbuf = NULL; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun@@ -1023,7 +1022,6 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) 28*4882a593Smuzhiyun /* update video info from video meta */ 29*4882a593Smuzhiyun mem = gst_buffer_peek_memory (buffer, 0); 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun- old_vinfo = self->video_info; 32*4882a593Smuzhiyun vmeta = gst_buffer_get_video_meta (buffer); 33*4882a593Smuzhiyun if (vmeta) { 34*4882a593Smuzhiyun gint i; 35*4882a593Smuzhiyun@@ -1065,9 +1063,6 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) 36*4882a593Smuzhiyun GstVideoFrame src, dst; 37*4882a593Smuzhiyun GstVideoInfo src_info = self->video_info; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun- /* rollback video info changes */ 40*4882a593Smuzhiyun- self->video_info = old_vinfo; 41*4882a593Smuzhiyun- 42*4882a593Smuzhiyun /* we don't know how to create a wl_buffer directly from the provided 43*4882a593Smuzhiyun * memory, so we have to copy the data to shm memory that we know how 44*4882a593Smuzhiyun * to handle... */ 45*4882a593Smuzhiyun@@ -1094,8 +1089,13 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) 46*4882a593Smuzhiyun if (!gst_buffer_pool_set_config (self->pool, config) || 47*4882a593Smuzhiyun !gst_buffer_pool_set_active (self->pool, TRUE)) 48*4882a593Smuzhiyun goto activate_failed; 49*4882a593Smuzhiyun+ 50*4882a593Smuzhiyun+ self->pool_vinfo = self->video_info; 51*4882a593Smuzhiyun } 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun+ /* rollback video info changes */ 54*4882a593Smuzhiyun+ self->video_info = self->pool_vinfo; 55*4882a593Smuzhiyun+ 56*4882a593Smuzhiyun ret = gst_buffer_pool_acquire_buffer (self->pool, &to_render, NULL); 57*4882a593Smuzhiyun if (ret != GST_FLOW_OK) 58*4882a593Smuzhiyun goto no_buffer; 59*4882a593Smuzhiyundiff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h 60*4882a593Smuzhiyunindex 6211fd6..de11859 100644 61*4882a593Smuzhiyun--- a/ext/wayland/gstwaylandsink.h 62*4882a593Smuzhiyun+++ b/ext/wayland/gstwaylandsink.h 63*4882a593Smuzhiyun@@ -56,6 +56,7 @@ struct _GstWaylandSink 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun gboolean video_info_changed; 66*4882a593Smuzhiyun GstVideoInfo video_info; 67*4882a593Smuzhiyun+ GstVideoInfo pool_vinfo; 68*4882a593Smuzhiyun gboolean fullscreen; 69*4882a593Smuzhiyun GstWlWindowLayer layer; 70*4882a593Smuzhiyun gdouble alpha; 71*4882a593Smuzhiyun-- 72*4882a593Smuzhiyun2.20.1 73*4882a593Smuzhiyun 74