waylandsink : (bug fix) changed to use original image size for tbm surface size 60/119960/3
authorHyunil <hyunil46.park@samsung.com>
Tue, 21 Mar 2017 02:00:16 +0000 (11:00 +0900)
committerHyunil <hyunil46.park@samsung.com>
Wed, 22 Mar 2017 02:02:41 +0000 (11:02 +0900)
Change-Id: I0788e441d114e5b66f4184c0cca2c6aa98d488bc
Signed-off-by: Hyunil <hyunil46.park@samsung.com>
ext/wayland/gstwaylandsink.c
ext/wayland/wldisplay.h
ext/wayland/wlshmallocator.c

index ae9e59f..dac33a6 100755 (executable)
@@ -745,9 +745,17 @@ gst_wayland_sink_copy_mm_video_buf_info_to_flush_buffer (GstWlDisplay * display,
         display->bo[i] = 0;
       }
       display->plane_size[i] = mm_video_buf->size[i];
+      display->width[i] = mm_video_buf->width[i];
+      display->height[i] = mm_video_buf->height[i];
       display->stride_width[i] = mm_video_buf->stride_width[i];
       display->stride_height[i] = mm_video_buf->stride_height[i];
       display->native_video_size += display->plane_size[i];
+      GST_LOG ("TBM bo[%d]:%p", i, display->bo[i]);
+      GST_LOG ("width[%d]:%d, height[%d]:%d", i, display->width[i], i,
+          display->height[i]);
+      GST_LOG ("stride_width[%d]:%d, stride_height[%d]:%d", i,
+          display->stride_width[i], i, display->stride_height[i]);
+      GST_LOG ("plane size[%d]:%d", i, display->plane_size[i]);
     }
     memset (mm_video_buf, 0, sizeof (MMVideoBuffer));
   }
@@ -771,9 +779,17 @@ gst_wayland_sink_add_mm_video_buf_info (GstWlDisplay * display,
       display->bo[i] = 0;
     }
     display->plane_size[i] = mm_video_buf->size[i];
+    display->width[i] = mm_video_buf->width[i];
+    display->height[i] = mm_video_buf->height[i];
     display->stride_width[i] = mm_video_buf->stride_width[i];
     display->stride_height[i] = mm_video_buf->stride_height[i];
     display->native_video_size += display->plane_size[i];
+    GST_LOG ("TBM bo[%d]:%p", i, display->bo[i]);
+    GST_LOG ("width[%d]:%d, height[%d]:%d", i, display->width[i], i,
+        display->height[i]);
+    GST_LOG ("stride_width[%d]:%d, stride_height[%d]:%d", i,
+        display->stride_width[i], i, display->stride_height[i]);
+    GST_LOG ("plane size[%d]:%d", i, display->plane_size[i]);
   }
 }
 
@@ -801,8 +817,8 @@ gst_wayland_sink_get_mm_video_buf (GstBuffer * buffer)
     GST_ERROR ("Buffer type is not TBM");
     return NULL;
   }
-  GST_DEBUG ("TBM bo %p %p", mm_video_buf->handle.bo[0],
-      mm_video_buf->handle.bo[1]);
+  GST_DEBUG ("TBM: handle.bo[0]:%p, handle.bo[1]:%p",
+      mm_video_buf->handle.bo[0], mm_video_buf->handle.bo[1]);
 
   return mm_video_buf;
 }
index 05bd30e..c7647c9 100644 (file)
@@ -104,6 +104,8 @@ struct _GstWlDisplay
   int plane_size[NV_BUF_PLANE_NUM];
   int stride_width[NV_BUF_PLANE_NUM];
   int stride_height[NV_BUF_PLANE_NUM];
+  int width[NV_BUF_PLANE_NUM];
+  int height[NV_BUF_PLANE_NUM];
   int native_video_size;
   unsigned int wl_surface_id;
   int buffer_width, buffer_height;
index 3dc1ba8..f5f7510 100644 (file)
@@ -284,7 +284,7 @@ gst_wl_shm_memory_construct_wl_buffer (GstMemory * mem, GstWlDisplay * display,
     const GstVideoInfo * info)
 {
   GstWlShmMemory *shm_mem = (GstWlShmMemory *) mem;
-  gint width, height, stride;
+  gint width, height, stride, offset;
   gsize size;
   enum wl_shm_format format;
   struct wl_shm_pool *wl_pool;
@@ -297,44 +297,42 @@ gst_wl_shm_memory_construct_wl_buffer (GstMemory * mem, GstWlDisplay * display,
     int num_bo;
 
     if (display->is_native_format == TRUE) {
-      width = GST_VIDEO_INFO_WIDTH (info);
-      height = GST_VIDEO_INFO_HEIGHT (info);
+      /* In case of native format, use MMVideoBuffer data instead of GstVideoInfo */
       size = display->native_video_size;
-      format = gst_video_format_to_wl_tbm_format (GST_VIDEO_INFO_FORMAT (info));
-      GST_LOG ("format %s, width(%d), height(%d), size(%d)",
-          gst_wl_tbm_format_to_string (format), width, height, size);
-
       if (display->dump_video)
         gst_wl_tbm_dump_native_raw_video (display->bo[0], size,
             display->dump_count++, display->total_dump);
 
-      GST_LOG ("TBM bo %p %p", display->bo[0], display->bo[1]);
-      GST_LOG ("stride_width[0]: %d stride_height[0]:%d",
-          display->stride_width[0], display->stride_height[0]);
-      width = display->stride_width[0];
-      height = display->stride_height[0];
+      width = display->width[0];
+      height = display->height[0];
+      format = gst_video_format_to_wl_tbm_format (GST_VIDEO_INFO_FORMAT (info));
+      offset = display->stride_width[0] * display->stride_height[0];
       ts_info.width = width;
       ts_info.height = height;
       ts_info.format = format;
       ts_info.bpp = tbm_surface_internal_get_bpp (ts_info.format);
       ts_info.num_planes = tbm_surface_internal_get_num_planes (ts_info.format);
-      GST_DEBUG
-          ("ts_info.width(%d) height(%d) bpp(%d) num_planes(%d)",
-          ts_info.width, ts_info.height, ts_info.bpp, ts_info.num_planes);
-
       ts_info.planes[0].stride = display->stride_width[0];
       ts_info.planes[1].stride = display->stride_width[1];
       ts_info.planes[0].offset = 0;
-      ts_info.planes[1].offset = (display->bo[1]) ? 0 : display->plane_size[0];
+      ts_info.planes[1].offset = (display->bo[1]) ? 0 : offset;
+
+      GST_LOG
+          ("set tbm_surface_info_s: width(%d) height(%d) format(%s) bpp(%d) num_planes(%d)",
+          ts_info.width, ts_info.height, gst_wl_tbm_format_to_string (format),
+          ts_info.bpp, ts_info.num_planes);
+      GST_LOG
+          ("set tbm_surface_info_s: planse[0].stride(%d) planes[1].stride(%d) planes[0].offset(%d) planes[1].offset(%d)",
+          ts_info.planes[0].stride, ts_info.planes[1].stride,
+          ts_info.planes[0].offset, ts_info.planes[1].offset);
+
       num_bo = (display->bo[1]) ? 2 : 1;
       GST_LOG ("num_bo(%d)", num_bo);
 
       display->tsurface =
           tbm_surface_internal_create_with_bos (&ts_info,
           (tbm_bo *) display->bo, num_bo);
-      GST_LOG ("display->tsurface(%p)", display->tsurface);
-      GST_LOG ("tbm_client(%p),tsurface(%p)", display->tbm_client,
-          display->tsurface);
+      GST_LOG ("create tbm surface(%p)", display->tsurface);
       wbuffer =
           wayland_tbm_client_create_buffer (display->tbm_client,
           display->tsurface);
@@ -378,7 +376,7 @@ gst_wl_shm_memory_construct_wl_buffer (GstMemory * mem, GstWlDisplay * display,
           wayland_tbm_client_create_buffer (display->tbm_client,
           display->tsurface);
     }
-    GST_LOG ("wayland_tbm_client_create_buffer create wl_buffer %p", wbuffer);
+    GST_LOG ("create wbuffer(%p)", wbuffer);
 
   } else {                      /* USE SHM */
     width = GST_VIDEO_INFO_WIDTH (info);