Name: %{_name}
Version: 1.20.0
-Release: 5
+Release: 6
Summary: Streaming-Media Framework Runtime
License: LGPL-2.0+
Group: Multimedia/Framework
}
#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
-static tbm_format __get_tbm_format (GstVideoFormat gst_format)
+static tbm_format
+__get_tbm_format (GstVideoFormat gst_format)
{
switch (gst_format) {
case GST_VIDEO_FORMAT_NV12:
#include <gst/glib-compat-private.h>
#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
#include <gst/allocators/gsttizenmemory.h>
+
+#define TIZEN_BUFFER_DUMP_PATH "/tmp/v4l2_output.raw"
#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
GST_DEBUG_CATEGORY_STATIC (v4l2bufferpool_debug);
GstV4l2BufferPool *v4l2_pool;
};
-static void gst_v4l2_tizen_buffer_finalize (GstV4l2TizenBuffer *tizen_buffer)
+static void
+gst_v4l2_tizen_buffer_finalize (GstV4l2TizenBuffer *tizen_buffer)
{
GstV4l2BufferPool *pool = NULL;
g_free(tizen_buffer);
}
-static GstV4l2TizenBuffer *gst_v4l2_tizen_buffer_new (GstBuffer *v4l2_buffer, int index, GstV4l2BufferPool *v4l2_pool)
+static GstV4l2TizenBuffer *
+gst_v4l2_tizen_buffer_new (GstBuffer *v4l2_buffer, int index, GstV4l2BufferPool *v4l2_pool)
{
GstV4l2TizenBuffer *tizen_buffer = NULL;
GstMemory *memory = NULL;
return tizen_buffer;
}
+
+static void
+gst_v4l2_tizen_buffer_dump (tbm_surface_h surface)
+{
+ int i;
+ FILE *fp;
+ tbm_surface_info_s sinfo;
+
+ if (!surface) {
+ GST_WARNING ("NULL surface");
+ return;
+ }
+
+ memset (&sinfo, 0x0, sizeof(tbm_surface_info_s));
+
+ if (tbm_surface_get_info (surface, &sinfo) != TBM_ERROR_NONE) {
+ GST_ERROR ("get tbm surface[%p] info failed", surface);
+ return;
+ }
+
+ fp = fopen (TIZEN_BUFFER_DUMP_PATH, "a");
+ if (!fp) {
+ GST_ERROR ("file open failed[%s], errno[%d]", TIZEN_BUFFER_DUMP_PATH, errno);
+ return;
+ }
+
+ for (i = 0 ; i < sinfo.num_planes ; i++) {
+ GST_DEBUG ("[%d] %ux%u, stride[%u], size[%u], offset[%u]",
+ i, sinfo.width, sinfo.height, sinfo.planes[i].stride,
+ sinfo.planes[i].size, sinfo.planes[i].offset);
+ fwrite (sinfo.planes[i].ptr, 1, sinfo.planes[i].size, fp);
+ }
+
+ fclose(fp);
+}
#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
static gboolean
goto no_buffer;
}
outbuf = tizen_buffer->gst_buffer;
+
+ if (pool->tbm_output_dump)
+ gst_v4l2_tizen_buffer_dump (group->surface);
}
#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
g_mutex_init (&pool->buffer_lock);
g_cond_init (&pool->buffer_cond);
+
+ pool->tbm_output_dump = obj->tbm_output_dump;
+
+ GST_INFO ("tbm output dump [%d]", pool->tbm_output_dump);
#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
pool->vallocator = gst_v4l2_allocator_new (GST_OBJECT (pool), obj);
if (pool->vallocator == NULL)
gint live_buffer_count;
GMutex buffer_lock;
GCond buffer_cond;
+ gboolean tbm_output_dump;
#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
GstAllocationParams params;
GstBufferPool *other_pool;
gboolean auto_scan_device;
#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+ gboolean tbm_output_dump;
gboolean tbm_output;
#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
GType gst_v4l2_object_get_type (void);
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+#define V4L2_STD_OBJECT_PROPS \
+ PROP_DEVICE, \
+ PROP_DEVICE_NAME, \
+ PROP_DEVICE_FD, \
+ PROP_FLAGS, \
+ PROP_BRIGHTNESS, \
+ PROP_CONTRAST, \
+ PROP_SATURATION, \
+ PROP_HUE, \
+ PROP_TV_NORM, \
+ PROP_IO_MODE, \
+ PROP_OUTPUT_IO_MODE, \
+ PROP_CAPTURE_IO_MODE, \
+ PROP_EXTRA_CONTROLS, \
+ PROP_PIXEL_ASPECT_RATIO, \
+ PROP_FORCE_ASPECT_RATIO, \
+ PROP_TBM_OUTPUT, \
+ PROP_TBM_OUTPUT_DUMP
+#else
#define V4L2_STD_OBJECT_PROPS \
PROP_DEVICE, \
PROP_DEVICE_NAME, \
PROP_EXTRA_CONTROLS, \
PROP_PIXEL_ASPECT_RATIO, \
PROP_FORCE_ASPECT_RATIO
+#endif
/* create/destroy */
GstV4l2Object* gst_v4l2_object_new (GstElement * element,
#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
PROP_AUTO_SCAN_DEVICE,
#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
-#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
- PROP_TBM_OUTPUT,
-#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
PROP_LAST
};
{
PROP_0,
V4L2_STD_OBJECT_PROPS
-#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
- , PROP_TBM_OUTPUT
-#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
};
#define gst_v4l2_video_dec_parent_class parent_class
static GstFlowReturn gst_v4l2_video_dec_finish (GstVideoDecoder * decoder);
#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
-static void gst_v4l2_video_dec_flush_buffer_event (GstVideoDecoder * decoder)
+static void
+gst_v4l2_video_dec_flush_buffer_event (GstVideoDecoder * decoder)
{
gboolean ret = FALSE;
#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
case PROP_TBM_OUTPUT:
self->v4l2capture->tbm_output = g_value_get_boolean (value);
- GST_INFO_OBJECT (self, "tbm output [%d]", self->v4l2capture->tbm_output);
+ GST_INFO_OBJECT (self, "tbm output[%d]", self->v4l2capture->tbm_output);
+ break;
+ case PROP_TBM_OUTPUT_DUMP:
+ self->v4l2capture->tbm_output_dump = g_value_get_boolean (value);
+ GST_INFO_OBJECT (self, "tbm output dump[%d], pool[%p]",
+ self->v4l2capture->tbm_output_dump, self->v4l2capture->pool);
+ if (self->v4l2capture->pool)
+ GST_V4L2_BUFFER_POOL (self->v4l2capture->pool)->tbm_output_dump = self->v4l2capture->tbm_output_dump;
break;
#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
break;
#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
case PROP_TBM_OUTPUT:
- GST_INFO_OBJECT (self, "tbm output [%d]", self->v4l2capture->tbm_output);
+ GST_INFO_OBJECT (self, "tbm output[%d]", self->v4l2capture->tbm_output);
g_value_set_boolean (value, self->v4l2capture->tbm_output);
break;
+ case PROP_TBM_OUTPUT_DUMP:
+ GST_INFO_OBJECT (self, "tbm output dump[%d]", self->v4l2capture->tbm_output_dump);
+ g_value_set_boolean (value, self->v4l2capture->tbm_output_dump);
+ break;
#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
/* By default read from output */
gst_v4l2_object_install_m2m_properties_helper (gobject_class);
#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
g_object_class_install_property (gobject_class, PROP_TBM_OUTPUT,
- g_param_spec_boolean ("tbm-output", "Enable TBM for output buffer",
- "It works for only DMABUF mode.",
+ g_param_spec_boolean ("tbm-output", "Enable TBM output",
+ "Enable TBM for output buffer. It works for only DMABUF mode.",
TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_TBM_OUTPUT_DUMP,
+ g_param_spec_boolean ("tbm-output-dump", "Enable dump for TBM output",
+ "Enable dump for TBM output buffer. It works for only DMABUF mode.",
+ FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
}