PROP_0,
PROP_DISPLAY,
#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
+ PROP_DUMP_VIDEO,
+ PROP_DUMP_COUNT,
PROP_SIGNAL_HANDOFFS,
PROP_USE_GAPLESS,
PROP_KEEP_CAMERA_PREVIEW,
PROP_ALIGN_HEIGHT
#endif
};
-int dump__cnt = 0;
GST_DEBUG_CATEGORY (gstwayland_debug);
#define GST_CAT_DEFAULT gstwayland_debug
gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_wayland_sink_event);
#endif
+ g_object_class_install_property (gobject_class, PROP_DUMP_VIDEO,
+ g_param_spec_boolean ("dump-video", "dump raw video buffer",
+ "Dump raw video buffer", FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_DUMP_COUNT,
+ g_param_spec_uint ("dump-video-count", "dump video count",
+ "Dump video count", 1, G_MAXUINT, DEFAULT_DUMP_COUNT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
g_object_class_install_property (gobject_class, PROP_DISPLAY,
g_param_spec_string ("display", "Wayland Display name", "Wayland "
"display name to connect to, if not supplied via the GstContext",
#endif
}
-#ifdef DUMP_BUFFER
-int
-__write_rawdata (const char *file, const void *data, unsigned int size)
+static void
+gst_wayland_sink_dump_raw_video (GstWaylandSink * sink, GstBuffer * buffer,
+ guint dump_count, guint dump_total)
{
- FILE *fp;
+ GstMemory *mem;
+ GstMapInfo mem_info = GST_MAP_INFO_INIT;
+ gpointer data;
+ gint ret, size;
+ gchar file_name[128];
- fp = fopen (file, "wb");
- if (fp == NULL)
- return -1;
+ g_return_if_fail (sink != NULL);
+ g_return_if_fail (buffer != NULL);
+
+ if (dump_count > dump_total)
+ return;
- fwrite ((char *) data, sizeof (char), size, fp);
- fclose (fp);
+ size = GST_VIDEO_INFO_SIZE (&sink->video_info);
+ mem = gst_buffer_peek_memory (buffer, 0);
+ gst_memory_map (mem, &mem_info, GST_MAP_READ);
+
+ data = mem_info.data;
+ snprintf (file_name, sizeof(file_name), "/tmp/WLSINK_OUT_DUMP_%2.2d.dump", dump_count);
+ ret = gst_wl_fwrite_data (file_name, data, size);
+ if (ret) {
+ GST_ERROR ("_write_rawdata() failed");
+ }
- return 0;
+ GST_LOG ("DUMP IMAGE %d, size (%d)", dump_count, size);
+ gst_memory_unmap (mem, &mem_info);
}
-#endif
+
static void
gst_wayland_sink_init (GstWaylandSink * sink)
{
FUNCTION;
#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
+ sink->dump_video = FALSE;
+ sink->total_dump = DEFAULT_DUMP_COUNT;
sink->signal_handoffs = FALSE;
sink->request_camera_flush_buf = FALSE;
sink->keep_camera_preview = FALSE;
GST_OBJECT_UNLOCK (sink);
break;
#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
+ case PROP_DUMP_VIDEO:
+ g_value_set_boolean (value, sink->dump_video);
+ break;
+ case PROP_DUMP_COUNT:
+ g_value_set_uint (value, sink->total_dump);
+ break;
case PROP_KEEP_CAMERA_PREVIEW:
g_value_set_boolean (value, sink->keep_camera_preview);
break;
GST_OBJECT_UNLOCK (sink);
break;
#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
+ case PROP_DUMP_VIDEO:
+ sink->dump_video = g_value_get_boolean (value);
+ if (sink->display) {
+ sink->display->dump_video = sink->dump_video;
+ GST_LOG ("Dump video set (%d):", sink->dump_video);
+ }
+ break;
+ case PROP_DUMP_COUNT:
+ sink->total_dump = g_value_get_uint (value);
+ if (sink->display)
+ sink->display->total_dump = sink->total_dump;
+ break;
case PROP_SIGNAL_HANDOFFS:
sink->signal_handoffs = g_value_get_boolean (value);
GST_LOG ("set signal_handoffs(%d)", sink->signal_handoffs);
GST_LOG_OBJECT (sink, "buffer %p has a wl_buffer from our display, " "writing directly", buffer); //buffer is from our pool and have wl_buffer
GST_LOG ("wl_buffer (%p)", wlbuffer->wlbuffer);
to_render = buffer;
-#ifdef DUMP_BUFFER
- GstMemory *mem;
- GstMapInfo mem_info = GST_MAP_INFO_INIT;
- int size = GST_VIDEO_INFO_SIZE (&sink->video_info);
- mem = gst_buffer_peek_memory (to_render, 0);
- gst_memory_map (mem, &mem_info, GST_MAP_READ);
- void *data;
- data = mem_info.data;
- int ret;
- char file_name[128];
-
- sprintf (file_name, "/home/owner/DUMP/_WLSINK_OUT_DUMP_%2.2d.dump",
- dump__cnt++);
- ret = __write_rawdata (file_name, data, size);
- if (ret) {
- GST_ERROR ("_write_rawdata() failed");
- }
- GST_LOG ("DUMP IMAGE %d, size (%d)", dump__cnt, size);
- gst_memory_unmap (mem, &mem_info);
-#endif
+
+ if (sink->dump_video)
+ gst_wayland_sink_dump_raw_video (sink, to_render,
+ sink->display->dump_count++, sink->total_dump);
+
} else {
GstMemory *mem;
struct wl_buffer *wbuf = NULL;
#define DEF_DISPLAY_FLIP FLIP_NONE
#define DEF_DISPLAY_GEOMETRY_METHOD DISP_GEO_METHOD_LETTER_BOX
+#define DEFAULT_DUMP_COUNT 10
#endif
typedef struct _GstWaylandSink GstWaylandSink;
GstBuffer *last_buffer;
#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
+ gboolean dump_video;
gboolean signal_handoffs;
gboolean request_camera_flush_buf;
gboolean keep_camera_preview;
gboolean visible;
gboolean follow_parent_transform;
gboolean USE_TBM;
+ guint total_dump;
guint rotate_angle;
guint display_geometry_method;
guint flip;
#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
self->tbm_bo_idx = 0;
self->wl_surface_id = -1;
+ self->dump_count = 1;
#endif
}
tbm_bufmgr flush_tbm_bufmgr;
int flush_request;
#endif
+ gboolean dump_video;
+ guint total_dump;
+ guint dump_count;
gboolean is_native_format; /*SN12, ST12 */
void *bo[NV_BUF_PLANE_NUM];
#include <sys/mman.h>
#include <sys/types.h>
-#ifdef DUMP_BUFFER
-int dump_cnt = 0;
-int _write_rawdata (const char *file, const void *data, unsigned int size);
-#endif
-
GST_DEBUG_CATEGORY_EXTERN (gstwayland_debug);
#define GST_CAT_DEFAULT gstwayland_debug
G_DEFINE_TYPE (GstWlShmAllocator, gst_wl_shm_allocator, GST_TYPE_ALLOCATOR);
+gint
+gst_wl_fwrite_data (gchar * file, gpointer data, guint size)
+{
+ FILE *fp;
+
+ fp = fopen (file, "wb");
+ if (fp == NULL)
+ return -1;
+
+ fwrite ((gchar *) data, sizeof (gchar), size, fp);
+ fclose (fp);
+
+ return 0;
+}
+
+static void
+gst_wl_tbm_dump_native_raw_video (gpointer bo, guint size, guint dump_count,
+ guint dump_total)
+{
+ tbm_bo_handle virtual_addr;
+ gint ret;
+ gchar file_name[128];
+ gchar err_str[256];
+ g_return_if_fail (bo != NULL);
+
+ if (dump_count > dump_total)
+ return;
+
+ virtual_addr = tbm_bo_get_handle (bo, TBM_DEVICE_CPU);
+ if (!virtual_addr.ptr) {
+ strerror_r (errno, err_str, sizeof (err_str));
+ GST_ERROR ("get tbm bo handle failed: %s (%d)", err_str, (errno));
+ return;
+ }
+
+ snprintf (file_name, sizeof (file_name), "/tmp/WLSINK_OUT_DUMP_%2.2d.dump",
+ dump_count);
+ ret = gst_wl_fwrite_data (file_name, virtual_addr.ptr, size);
+ if (ret) {
+ GST_ERROR ("_write_rawdata() failed");
+ }
+
+}
+
static GstMemory *
gst_wl_shm_allocator_alloc (GstAllocator * allocator, gsize size,
GstAllocationParams * params)
if (display->USE_TBM) {
tbm_surface_info_s ts_info;
int num_bo;
-#ifdef DUMP_BUFFER
- tbm_bo_handle virtual_addr;
- void *data;
-#endif
+
if (display->is_native_format == TRUE) {
width = GST_VIDEO_INFO_WIDTH (info);
height = GST_VIDEO_INFO_HEIGHT (info);
GST_LOG ("format %s, width(%d), height(%d), size(%d)",
gst_wl_tbm_format_to_string (format), width, height, size);
-#ifdef DUMP_BUFFER
- virtual_addr = tbm_bo_get_handle (display->bo[0], TBM_DEVICE_CPU);
- if (!virtual_addr.ptr) {
- GST_ERROR ("get tbm bo handle failed: %s", strerror (errno));
- return FALSE;
- }
- data = virtual_addr.ptr;
- int ret;
- char file_name[128];
- if (dump_cnt < 60) {
- sprintf (file_name, "/home/owner/WLSINK_OUT_DUMP_%2.2d.dump",
- dump_cnt++);
- ret = _write_rawdata (file_name, virtual_addr.ptr, size);
- if (ret) {
- GST_ERROR ("_write_rawdata() failed");
- }
- }
-#endif
+ 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]);
GST_DEBUG_OBJECT (mem->allocator, "Creating wl_buffer of size %"
G_GSSIZE_FORMAT " (%d x %d, stride %d)", size, width, height, stride);
-#ifdef DUMP_BUFFER
- virtual_addr = tbm_bo_get_handle (shm_mem->tbm_bo_ptr, TBM_DEVICE_CPU);
- if (!virtual_addr.ptr) {
- GST_ERROR ("get tbm bo handle failed: %s", strerror (errno));
- return FALSE;
- }
- data = virtual_addr.ptr;
- int ret;
- char file_name[128];
- GST_LOG ("DUMP %d ", dump_cnt);
- sprintf (file_name, "/home/owner/WLSINK_OUT_DUMP_%2.2d.dump", dump_cnt++);
- ret = _write_rawdata (file_name, virtual_addr.ptr, size);
- if (ret) {
- GST_ERROR ("_write_rawdata() failed");
- }
-#endif
+ if (display->dump_video)
+ gst_wl_tbm_dump_native_raw_video (shm_mem->tbm_bo_ptr, size,
+ display->dump_count++, display->total_dump);
+
ts_info.width = width;
ts_info.height = height;
ts_info.format = format;
return wbuffer;
#endif
}
-
-#ifdef DUMP_BUFFER
-int
-_write_rawdata (const char *file, const void *data, unsigned int size)
-{
- FILE *fp;
-
- fp = fopen (file, "wb");
- if (fp == NULL)
- return -1;
-
- fwrite ((char *) data, sizeof (char), size, fp);
- fclose (fp);
-
- return 0;
-}
-#endif
struct wl_buffer *gst_wl_shm_memory_construct_wl_buffer (GstMemory * mem,
GstWlDisplay * display, const GstVideoInfo * info);
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
+gint gst_wl_fwrite_data (gchar * file, gpointer data, guint size);
+#endif
G_END_DECLS
#endif /* __GST_WL_SHM_ALLOCATOR_H__ */