return pad;
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
static GstPad *
gst_hls_demux_stream_create_pad (GstAdaptiveDemuxStream * stream)
{
GST_DEBUG_OBJECT (hlsdemux, "Typefind result: %" GST_PTR_FORMAT " prob:%d",
caps, prob);
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
gst_adaptive_demux_stream_check_switch_pad (stream, caps,
gst_hls_demux_stream_create_pad);
GST_DEBUG_OBJECT (stream->pad, "Overwriting PTS to %" GST_TIME_FORMAT,
}
/* set up our source for download */
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
hlsdemux->current_pts = timestamp;
#endif
if (hlsdemux->reset_pts || discont) {
return FALSE;
gst_hls_demux_change_playlist (hlsdemux, bitrate, &changed);
-#ifndef GST_EXT_AVOID_PAD_SWITCHING
+#ifndef TIZEN_FEATURE_AVOID_PAD_SWITCHING
if (changed)
gst_hls_demux_setup_streams (GST_ADAPTIVE_DEMUX_CAST (hlsdemux));
#endif
GstM3U8Client *client; /* M3U8 client */
gboolean do_typefind; /* Whether we need to typefind the next buffer */
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
GstClockTime current_pts;
#endif
#endif
#include "gstwaylandsink.h"
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
#include <mm_types.h>
#include "tizen-wlvideoformat.h"
#endif
#include <stdlib.h>
#include <string.h>
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
#define GST_APP_EVENT_FLUSH_BUFFER_NAME "application/flush-buffer"
#define GST_TYPE_WAYLANDSINK_DISPLAY_GEOMETRY_METHOD (gst_waylandsink_display_geometry_method_get_type())
enum
{
SIGNAL_0,
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
SIGNAL_HANDOFF,
SIGNAL_PREROLL_HANDOFF,
#endif
{
PROP_0,
PROP_DISPLAY,
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
PROP_SIGNAL_HANDOFFS,
PROP_USE_GAPLESS,
PROP_KEEP_CAMERA_PREVIEW,
GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE
("{ BGRx, BGRA, RGBx, xBGR, xRGB, RGBA, ABGR, ARGB, RGB, BGR, "
"RGB16, BGR16, YUY2, YVYU, UYVY, AYUV, NV12, NV21, NV16, "
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
"SN12, ST12, "
#endif
"YUV9, YVU9, Y41B, I420, YV12, Y42B, v308 }"))
iface);
static void gst_wayland_sink_begin_geometry_change (GstWaylandVideo * video);
static void gst_wayland_sink_end_geometry_change (GstWaylandVideo * video);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
static gboolean gst_wayland_sink_event (GstBaseSink * bsink, GstEvent * event);
static void gst_wayland_sink_update_window_geometry (GstWaylandSink * sink);
static void render_last_buffer (GstWaylandSink * sink);
gstbasesink_class->propose_allocation =
GST_DEBUG_FUNCPTR (gst_wayland_sink_propose_allocation);
gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_wayland_sink_render);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_wayland_sink_event);
#endif
"display name to connect to, if not supplied via the GstContext",
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
g_object_class_install_property (gobject_class, PROP_KEEP_CAMERA_PREVIEW,
g_param_spec_boolean ("keep-camera-preview", "use flush buffer mechanism",
"Last tbm buffer is copied and returned to camerasrc immediately "
gst_wayland_sink_init (GstWaylandSink * sink)
{
FUNCTION;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
sink->signal_handoffs = FALSE;
sink->keep_camera_preview = FALSE;
sink->got_costum_event = FALSE;
g_mutex_init (&sink->render_lock);
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
static void
gst_wayland_sink_stop_video (GstWaylandSink * sink)
{
g_value_set_string (value, sink->display_name);
GST_OBJECT_UNLOCK (sink);
break;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
case PROP_KEEP_CAMERA_PREVIEW:
g_value_set_boolean (value, sink->keep_camera_preview);
break;
sink->display_name = g_value_dup_string (value);
GST_OBJECT_UNLOCK (sink);
break;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
case PROP_SIGNAL_HANDOFFS:
sink->signal_handoffs = g_value_get_boolean (value);
GST_LOG ("set signal_handoffs(%d)", sink->signal_handoffs);
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (sink->video_info_changed && sink->window) {
gst_wl_window_set_video_info_change (sink->window, TRUE);
if (GST_STATE (sink) == GST_STATE_PAUSED)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
static gboolean
gst_wayland_sink_event (GstBaseSink * bsink, GstEvent * event)
{
("Failed to use the external wayland display: '%s'", error->message));
g_error_free (error);
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
sink->display->USE_TBM = sink->USE_TBM;
#endif
}
g_error_free (error);
ret = FALSE;
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (sink->display)
sink->display->USE_TBM = sink->USE_TBM;
#endif
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
GST_LOG ("WAYLANDSINK TRANSITION: PAUSED_TO_READY");
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (sink->keep_camera_preview) {
if (sink->window) {
if (!gst_wl_window_is_toplevel (sink->window)) {
gst_wayland_sink_set_display_from_context (sink, context);
else {
GST_WARNING_OBJECT (element, "changing display handle is not supported");
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
g_mutex_unlock (&sink->display_lock);
return;
#endif
GValue value = G_VALUE_INIT;
GArray *formats;
gint i;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
uint32_t tbm_fmt;
#endif
enum wl_shm_format fmt;
g_value_init (&list, GST_TYPE_LIST);
g_value_init (&value, G_TYPE_STRING);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (sink->display->USE_TBM)
formats = sink->display->tbm_formats;
else /* SHM */
formats = sink->display->formats;
for (i = 0; i < formats->len; i++) {
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (sink->USE_TBM) {
tbm_fmt = g_array_index (formats, uint32_t, i);
g_value_set_string (&value, gst_wl_tbm_format_to_string (tbm_fmt));
GstWaylandSink *sink;
GstBufferPool *newpool;
GstVideoInfo info;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
uint32_t tbm_format = -1;
#endif
enum wl_shm_format format = -1;
/* extract info from caps */
if (!gst_video_info_from_caps (&info, caps))
goto invalid_format;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (sink->USE_TBM) {
tbm_format =
gst_video_format_to_wl_tbm_format (GST_VIDEO_INFO_FORMAT (&info));
#endif
/* verify we support the requested format */
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (sink->display->USE_TBM) {
GST_LOG ("USE TBM FORMAT");
formats = sink->display->tbm_formats;
if (i >= formats->len)
goto unsupported_format;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (sink->USE_TBM) {
if (GST_VIDEO_INFO_FORMAT (&info) == GST_VIDEO_FORMAT_SN12 ||
GST_VIDEO_INFO_FORMAT (&info) == GST_VIDEO_FORMAT_ST12) {
gst_object_replace ((GstObject **) & sink->pool, (GstObject *) newpool);
gst_object_unref (newpool);
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (sink->window)
gst_wayland_sink_update_window_geometry (sink);
#endif
}
unsupported_format:
{
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (sink->USE_TBM)
GST_DEBUG_OBJECT (sink, "Format %s is not available on the display",
gst_wl_tbm_format_to_string (tbm_format));
GstWaylandSink *sink = GST_WAYLAND_SINK (bsink);
GstStructure *config;
guint size, min_bufs, max_bufs;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
gboolean need_pool;
GstCaps *caps;
FUNCTION;
static GstFlowReturn
gst_wayland_sink_preroll (GstBaseSink * bsink, GstBuffer * buffer)
{
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
GstWaylandSink *sink = GST_WAYLAND_SINK (bsink);
FUNCTION;
frame_redraw_callback
};
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
static void
gst_wayland_sink_update_window_geometry (GstWaylandSink * sink)
{
struct wl_surface *surface;
struct wl_callback *callback;
FUNCTION;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
g_return_if_fail (sink->last_buffer != NULL);
g_return_if_fail (sink->window != NULL);
#endif
wl_callback_add_listener (callback, &frame_callback_listener, sink);
if (G_UNLIKELY (sink->video_info_changed)) {
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
gst_wl_window_set_video_info_change (sink->window, TRUE);
#endif
info = &sink->video_info;
sink->window =
gst_wl_window_new_toplevel (sink->display, &sink->video_info);
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
gst_wayland_sink_update_window_geometry (sink);
#endif
}
&& !gst_wayland_sink_check_use_gapless (sink))
goto done;
-#ifndef GST_WLSINK_ENHANCEMENT /* for tizen view_port, we don't know window size */
+#ifndef TIZEN_FEATURE_WLSINK_ENHANCEMENT /* for tizen view_port, we don't know window size */
/* make sure that the application has called set_render_rectangle() */
if (G_UNLIKELY (sink->window->render_rectangle.w == 0))
goto no_window_size;
#endif
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
wlbuffer = gst_buffer_get_wl_buffer (buffer);
if (G_LIKELY (wlbuffer && wlbuffer->display == sink->display)
goto done;
-#endif /* GST_WLSINK_ENHANCEMENT */
+#endif /* TIZEN_FEATURE_WLSINK_ENHANCEMENT */
-#ifndef GST_WLSINK_ENHANCEMENT
+#ifndef TIZEN_FEATURE_WLSINK_ENHANCEMENT
no_window_size:
{
GST_ELEMENT_ERROR (sink, RESOURCE, WRITE,
iface->set_window_handle = gst_wayland_sink_set_window_handle;
iface->set_render_rectangle = gst_wayland_sink_set_render_rectangle;
iface->expose = gst_wayland_sink_expose;
-#ifdef GST_WLSINK_ENHANCEMENT /* use unique_id */
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT /* use unique_id */
iface->set_wl_window_wl_surface_id =
gst_wayland_sink_set_wl_window_wl_surface_id;
#endif
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
/* use unique_id */
static void
gst_wayland_sink_set_wl_window_wl_surface_id (GstVideoOverlay * overlay,
g_return_if_fail (sink != NULL);
-#ifdef GST_WLSINK_ENHANCEMENT /* use unique_id */
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT /* use unique_id */
if (sink->window != NULL) {
GST_WARNING_OBJECT (sink, "changing window handle is not supported");
return;
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_WAYLAND_SINK))
#define GST_WAYLAND_SINK_GET_CLASS(inst) \
(G_TYPE_INSTANCE_GET_CLASS ((inst), GST_TYPE_WAYLAND_SINK, GstWaylandSinkClass))
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
enum
{
DISP_GEO_METHOD_LETTER_BOX = 0,
GMutex render_lock;
GstBuffer *last_buffer;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
gboolean signal_handoffs;
gboolean keep_camera_preview;
struct _GstWaylandSinkClass
{
GstVideoSinkClass parent;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
/* signals */
void (*handoff) (GstElement *element, GstBuffer *buf, GstPad *pad);
void (*preroll_handoff) (GstElement *element, GstBuffer *buf, GstPad *pad);
#include <config.h>
#endif
#include "tizen-wlvideoformat.h"
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
GST_DEBUG_CATEGORY_EXTERN (gstwayland_debug);
#define GST_CAT_DEFAULT gstwayland_debug
#include <wayland-client.h>
#include <gst/video/video.h>
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
#include <tbm_surface.h>
G_BEGIN_DECLS
FUNCTION;
GST_TRACE_OBJECT (self, "finalize");
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (self->tsurface) {
GST_LOG ("tbm_surface_destroy (tbm_surface_h@%p)", self->tsurface);
tbm_surface_destroy (self->tsurface);
self->gstbuffer = gstbuffer;
self->wlbuffer = wlbuffer;
self->display = display;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (display->tsurface)
self->tsurface = display->tsurface;
else
("wl_buffer_add_listener (wl_buffer@%p, wl_buffer_listener@%p, GstWlBuffer@%p)",
self->wlbuffer, &buffer_listener, self);
wl_buffer_add_listener (self->wlbuffer, &buffer_listener, self);
-#ifdef GST_WLSINK_ENHANCEMENT //need to contribute to upstream !!
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT //need to contribute to upstream !!
wl_proxy_set_queue ((struct wl_proxy *) self->wlbuffer, self->display->queue);
#endif
gst_mini_object_set_qdata ((GstMiniObject *) gstbuffer,
wl_buffer_destroy (self->wlbuffer);
self->wlbuffer = NULL;
self->display = NULL;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
GST_LOG ("self->tsurface(%p)", self->tsurface);
if (self->tsurface)
tbm_surface_destroy (self->tsurface);
gboolean used_by_compositor;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
gboolean is_flush_request;
tbm_surface_h tsurface;
#endif
#include "wlbuffer.h"
#include <errno.h>
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
#include <fcntl.h>
#include <unistd.h>
#include <xf86drm.h>
{
FUNCTION;
self->formats = g_array_new (FALSE, FALSE, sizeof (uint32_t));
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
self->tbm_formats = g_array_new (FALSE, FALSE, sizeof (uint32_t));
#endif
self->wl_fd_poll = gst_poll_new (TRUE);
self->buffers = g_hash_table_new (g_direct_hash, g_direct_equal);
g_mutex_init (&self->buffers_mutex);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
self->tbm_bo_idx = 0;
self->wl_surface_id = -1;
#endif
g_hash_table_remove_all (self->buffers);
g_array_unref (self->formats);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
g_array_unref (self->tbm_formats);
#endif
gst_poll_free (self->wl_fd_poll);
g_hash_table_unref (self->buffers);
g_mutex_clear (&self->buffers_mutex);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (self->USE_TBM) {
if (self->is_native_format == FALSE) {
/*in case of normal video format */
wl_display_flush (self->display);
wl_display_disconnect (self->display);
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (self->scaler)
wl_scaler_destroy (self->scaler);
if (self->tizen_policy)
GST_INFO
("wl_scaler@%p = wl_registry_bind (wl_registry@%p, id@%d, wl_scaler_interface@%p, version@%d)",
self->scaler, registry, id, &wl_scaler_interface, 2);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
} else if (g_strcmp0 (interface, "tizen_policy") == 0) {
self->tizen_policy =
wl_registry_bind (registry, id, &tizen_policy_interface, 1);
VERIFY_INTERFACE_EXISTS (compositor, "wl_compositor");
VERIFY_INTERFACE_EXISTS (subcompositor, "wl_subcompositor");
VERIFY_INTERFACE_EXISTS (shell, "wl_shell");
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
VERIFY_INTERFACE_EXISTS (tizen_video, "tizen_video");
self->tbm_client = wayland_tbm_client_init (self->display);
#include <gst/gst.h>
#include <wayland-client.h>
#include "scaler-client-protocol.h"
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
#include <tbm_bufmgr.h>
#include <wayland-tbm-client.h>
#include <tizen-extension-client-protocol.h>
struct wl_shm *shm;
struct wl_scaler *scaler;
GArray *formats;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
GArray *tbm_formats;
#endif
/* private */
GHashTable *buffers;
gboolean shutting_down;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
/*video output layer */
struct tizen_policy *tizen_policy;
struct tizen_video *tizen_video;
#include "wlshmallocator.h"
#include "wlvideoformat.h"
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
#include "tizen-wlvideoformat.h"
#include <tbm_surface_internal.h>
#endif
GstWlShmMemory *mem;
FUNCTION;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (self->display->USE_TBM) {
tbm_bo_handle virtual_addr;
struct wl_buffer *wbuffer;
FUNCTION;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (display->USE_TBM) {
tbm_surface_info_s ts_info;
int num_bo;
gpointer data;
gint fd;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
gpointer tbm_bo_ptr;
#endif
};
struct _GstWlShmAllocator
{
GstAllocator parent_instance;
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
GstWlDisplay *display;
#endif
};
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
#include "gstwaylandsink.h"
#else
#include "wlwindow.h"
if (self->shell_surface) {
wl_shell_surface_destroy (self->shell_surface);
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (self->video_object)
tizen_video_object_destroy (self->video_object);
if (self->tizen_area_viewport)
G_OBJECT_CLASS (gst_wl_window_parent_class)->finalize (gobject);
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
static void
gst_wl_window_map_sub_surface (GstWlDisplay * display, GstWlWindow * window,
GstVideoInfo * info)
{
GstWlWindow *window;
GstVideoInfo info;
-#ifndef GST_WLSINK_ENHANCEMENT
+#ifndef TIZEN_FEATURE_WLSINK_ENHANCEMENT
GstBuffer *buf;
GstMapInfo mapinfo;
struct wl_buffer *wlbuf;
window->shell_surface =
wl_shell_get_shell_surface (display->shell, window->area_surface);
} else if (display->use_parent_wl_surface) {
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (display->wl_surface_id && parent == NULL) {
window->area_subsurface =
tizen_policy_get_subsurface (display->tizen_policy,
GST_INFO ("wl_surface_commit (%p)", window->video_surface);
wl_surface_commit (window->video_surface);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
window->tizen_area_viewport =
tizen_video_get_viewport (display->tizen_video, window->area_surface);
GST_INFO
#endif
1, 1);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
if (window->display->USE_TBM) {
/* Inform enlightenment of surface which render video */
/* tizen_video(tbm) render on video_surface */
GST_INFO ("wl_region_destroy (wl_region@%p)", region);
wl_region_destroy (region);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
/* set area surface size by full mode(full size of parent window) , toplevel is set to fullmode too for convenient test */
if (window->tizen_area_viewport) {
int tizen_disp_mode = TIZEN_DESTINATION_MODE_TYPE_FULL;
GstWlWindow *
gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info)
{
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
GstWlWindow *window;
FUNCTION;
gst_wl_window_new_in_surface (GstWlDisplay * display,
struct wl_surface * parent)
{
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
/* use App window */
GstWlWindow *window;
FUNCTION;
return (window->shell_surface != NULL);
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
static gint
gst_wl_window_find_transform (guint rotate_angle, guint flip)
{
}
#endif
-#if GST_WLSINK_ENHANCEMENT
+#if TIZEN_FEATURE_WLSINK_ENHANCEMENT
static void
gst_wl_window_resize_tizen_video_viewport (GstWlWindow * window,
gboolean commit)
gst_wl_window_render (GstWlWindow * window, GstWlBuffer * buffer,
const GstVideoInfo * info)
{
-#if GST_WLSINK_ENHANCEMENT
+#if TIZEN_FEATURE_WLSINK_ENHANCEMENT
FUNCTION;
if (G_UNLIKELY (info)) {
window->video_width =
gst_wl_window_set_render_rectangle (GstWlWindow * window, gint x, gint y,
gint w, gint h)
{
-#if GST_WLSINK_ENHANCEMENT
+#if TIZEN_FEATURE_WLSINK_ENHANCEMENT
FUNCTION;
g_return_if_fail (window != NULL);
#endif
}
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
void
gst_wl_window_set_rotate_angle (GstWlWindow * window, guint rotate_angle)
{
struct wl_surface *video_surface;
struct wl_subsurface *video_subsurface;
struct wl_shell_surface *shell_surface;
-#ifndef GST_WLSINK_ENHANCEMENT /* no define */
+#ifndef TIZEN_FEATURE_WLSINK_ENHANCEMENT /* no define */
struct wl_viewport *video_viewport;
struct wl_viewport *area_viewport;
#else
const GstVideoInfo * info);
void gst_wl_window_set_render_rectangle (GstWlWindow * window, gint x, gint y,
gint w, gint h);
-#ifdef GST_WLSINK_ENHANCEMENT
+#ifdef TIZEN_FEATURE_WLSINK_ENHANCEMENT
void gst_wl_window_set_video_info (GstWlWindow * window,
const GstVideoInfo * info);
void gst_wl_window_set_rotate_angle (GstWlWindow * window, guint rotate_angle);
demux->stream_struct_size = struct_size;
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
static void
gst_adaptive_demux_stream_push_stream_start (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream)
{
GstPad *pad = stream->pad;
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
gst_pad_set_active (pad, TRUE);
stream->need_header = TRUE;
}
GST_MANIFEST_UNLOCK (demux);
break;
-#ifdef GST_ADAPTIVE_MODIFICATION
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
case GST_QUERY_CUSTOM:{
/* Let decoder(which can not support DRC automatically) know the current streaming mode */
gst_caps_replace (&stream->pending_caps, caps);
gst_caps_unref (caps);
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
/**
* gst_adaptive_demux_stream_check_switch_pad:
typedef struct _GstAdaptiveDemuxClass GstAdaptiveDemuxClass;
typedef struct _GstAdaptiveDemuxPrivate GstAdaptiveDemuxPrivate;
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
typedef GstPad * (*GstAdaptiveDemuxStreamCreatePadFunc) (GstAdaptiveDemuxStream * stream);
#endif
GstAdaptiveDemux *demux;
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
gint stream_id_counter;
#endif
GstSegment segment;
gst_adaptive_demux_stream_advance_fragment_unlocked (GstAdaptiveDemux * demux,
GstAdaptiveDemuxStream * stream, GstClockTime duration);
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
gboolean gst_adaptive_demux_stream_check_switch_pad (GstAdaptiveDemuxStream * stream,
GstCaps * caps, GstAdaptiveDemuxStreamCreatePadFunc create_pad_func);
#endif
}
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
static void
mpegts_base_clear (MpegTSBase * base)
{
{
MpegTSBaseClass *klass = GST_MPEGTS_BASE_GET_CLASS (base);
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
mpegts_base_clear (base);
base->mode = BASE_MODE_STREAMING;
#else
G_OBJECT_CLASS (parent_class)->finalize (object);
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
MpegTSBaseStream *
mpegts_base_stream_ref (MpegTSBaseStream * stream)
{
}
bstream = g_malloc0 (base->stream_size);
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
bstream->refcount = 1;
#endif
bstream->pid = pid;
klass->stream_removed (base, stream);
program->stream_list = g_list_remove_all (program->stream_list, stream);
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
mpegts_base_stream_unref (stream);
#else
g_free (stream);
res = GST_MPEGTS_BASE_GET_CLASS (base)->push_event (base, event);
break;
case GST_EVENT_STREAM_START:
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
GST_DEBUG_OBJECT (base,
"Handling stream-start, flushing all pending data");
mpegts_base_drain (base);
struct _MpegTSBaseStream
{
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
gint refcount;
#endif
guint16 pid;
G_GNUC_INTERNAL GType mpegts_base_get_type(void);
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
G_GNUC_INTERNAL MpegTSBaseStream *mpegts_base_stream_ref (MpegTSBaseStream * stream);
G_GNUC_INTERNAL void mpegts_base_stream_unref (MpegTSBaseStream * stream);
#endif
GstTsDemuxKeyFrameScanFunction scan_function;
TSDemuxH264ParsingInfos h264infos;
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
/* For pad matching to avoid switching pads */
TSDemuxStream *matched_stream;
#endif
gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream);
static void gst_ts_demux_stream_flush (TSDemuxStream * stream,
GstTSDemux * demux, gboolean hard);
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
static void gst_ts_demux_remove_stream (GstTSDemux * tsdemux,
TSDemuxStream * stream, gboolean push_eos);
static void gst_ts_demux_remove_old_streams (GstTSDemux * demux,
demux->group_id = G_MAXUINT;
demux->last_seek_offset = -1;
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
gst_ts_demux_remove_old_streams (demux, FALSE);
#endif
}
}
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
static void
gst_ts_demux_stream_send_stream_start (MpegTSBase * base,
MpegTSBaseStream * bstream, GstPad * pad)
create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
MpegTSBaseProgram * program)
{
-#ifndef GST_EXT_AVOID_PAD_SWITCHING
+#ifndef TIZEN_FEATURE_AVOID_PAD_SWITCHING
GstTSDemux *demux = GST_TS_DEMUX (base);
#endif
TSDemuxStream *stream = (TSDemuxStream *) bstream;
}
if (template && name && caps) {
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
GST_LOG ("stream:%p creating pad with name %s and caps %" GST_PTR_FORMAT,
stream, name, caps);
pad = gst_pad_new_from_template (template, name);
return pad;
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
static void
gst_ts_demux_remove_old_streams (GstTSDemux * demux, gboolean push_eos)
{
}
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
static void
gst_ts_demux_stream_rename_stopping_pad (GstTSDemux * demux,
TSDemuxStream * stream)
gst_ts_demux_stream_removed (MpegTSBase * base, MpegTSBaseStream * bstream)
{
TSDemuxStream *stream = (TSDemuxStream *) bstream;
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
GstTSDemux *tsdemux = (GstTSDemux *) base;
#endif
/* Flush out all data */
GST_DEBUG_OBJECT (stream->pad, "Flushing out pending data");
gst_ts_demux_push_pending_data ((GstTSDemux *) base, stream);
-#ifndef GST_EXT_AVOID_PAD_SWITCHING
+#ifndef TIZEN_FEATURE_AVOID_PAD_SWITCHING
GST_DEBUG_OBJECT (stream->pad, "Pushing out EOS");
gst_pad_push_event (stream->pad, gst_event_new_eos ());
gst_pad_set_active (stream->pad, FALSE);
#endif
}
-#ifndef GST_EXT_AVOID_PAD_SWITCHING
+#ifndef TIZEN_FEATURE_AVOID_PAD_SWITCHING
GST_DEBUG_OBJECT (stream->pad, "Removing pad");
gst_element_remove_pad (GST_ELEMENT_CAST (base), stream->pad);
stream->active = FALSE;
#endif
}
-#ifndef GST_EXT_AVOID_PAD_SWITCHING
+#ifndef TIZEN_FEATURE_AVOID_PAD_SWITCHING
stream->pad = NULL;
#endif
}
}
tsdemux_h264_parsing_info_clear (&stream->h264infos);
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
/* Keep our reference as we can only finish the stream once we added
* pads for the new program or the pipeline might go EOS */
mpegts_base_stream_ref (bstream);
gst_ts_demux_stream_flush (walk->data, demux, hard);
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
static gboolean
gst_ts_demux_find_matching_stream (GstTSDemux * demux, TSDemuxStream * stream,
GList * streams_list)
gst_event_unref (demux->segment_event);
demux->segment_event = NULL;
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
/* Check if the new streams match the old ones to
* prevent switching pads if not needed */
if (gst_ts_demux_check_streams_match (demux))
/*< private >*/
MpegTSBaseProgram *program; /* Current program */
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
GList *old_streams;
#endif
{
gint i;
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
h264parse->state = 0;
#endif
h264parse->width = 0;
|| format == GST_H264_PARSE_FORMAT_AVC3) {
tmp = GUINT32_TO_BE (size << (32 - 8 * nl));
} else {
- /* HACK: nl should always be 4 here, otherwise this won't work.
+ /* HACK: nl should always be 4 here, otherwise this won't work.
* There are legit cases where nl in avc stream is 2, but byte-stream
* SC is still always 4 bytes. */
nl = 4;
res = GST_BASE_PARSE_CLASS (parent_class)->sink_event (parse, event);
break;
}
-#ifdef GST_EXT_AVOID_PAD_SWITCHING
+#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
case GST_EVENT_STREAM_START:
res = GST_BASE_PARSE_CLASS (parent_class)->sink_event (parse, event);
gst_h264_parse_reset ((GstH264Parse *) parse);
Name: gst-plugins-bad
Version: 1.6.1
-Release: 5
+Release: 6
Summary: GStreamer Streaming-Media Framework Plug-Ins
License: LGPL-2.0+
Group: Multimedia/Framework
%build
export V=1
NOCONFIGURE=1 ./autogen.sh
-export CFLAGS+=" -Wall -g -fPIC -DGST_WLSINK_ENHANCEMENT -DGST_TBM_SUPPORT -DMESA_EGL_NO_X11_HEADERS -DGST_EXT_AVOID_PAD_SWITCHING -DGST_ADAPTIVE_MODIFICATION"
+export CFLAGS+=" -Wall -g -fPIC -DTIZEN_FEATURE_WLSINK_ENHANCEMENT -DTIZEN_FEATURE_AVOID_PAD_SWITCHING -DTIZEN_FEATURE_ADAPTIVE_MODIFICATION"
%configure\
--disable-static\
--disable-examples\
plugin_LTLIBRARIES = libgstshm.la
libgstshm_la_SOURCES = shmpipe.c shmalloc.c gstshm.c gstshmsrc.c gstshmsink.c
-libgstshm_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_CFLAGS) -DSHM_PIPE_USE_GLIB \
- $(DRM_CFLAGS) $(TBM_CFLAGS) $(MMCOMMON_CFLAGS)
+libgstshm_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_CFLAGS) -DSHM_PIPE_USE_GLIB
libgstshm_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstshm_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(SHM_LIBS) \
- $(DRM_LIBS) $(TBM_LIBS)
+libgstshm_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(SHM_LIBS)
libgstshm_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
#include <string.h>
-#ifdef GST_TBM_SUPPORT
-#include <mm_types.h>
-#include <tbm_bufmgr.h>
-#endif
-
/* signals */
enum
{
PROP_SHM_SIZE,
PROP_WAIT_FOR_CONNECTION,
PROP_BUFFER_TIME
-#ifdef GST_TBM_SUPPORT
- ,PROP_USE_TBM
-#endif
};
struct GstShmClient
"Maximum Size of the shm buffer in nanoseconds (-1 to disable)",
-1, G_MAXINT64, -1,
G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-#ifdef GST_TBM_SUPPORT
- g_object_class_install_property (gobject_class, PROP_USE_TBM,
- g_param_spec_boolean ("use-tbm",
- "Use of not the tizen buffer",
- "Flags of using tizen buffer",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-#endif
signals[SIGNAL_CLIENT_CONNECTED] = g_signal_new ("client-connected",
GST_TYPE_SHM_SINK, G_SIGNAL_RUN_LAST, 0, NULL, NULL,
GST_OBJECT_UNLOCK (object);
g_cond_broadcast (&self->cond);
break;
-#ifdef GST_TBM_SUPPORT
- case PROP_USE_TBM:
- GST_OBJECT_LOCK (object);
- self->use_tbm = g_value_get_boolean (value);
- GST_OBJECT_UNLOCK (object);
- g_cond_broadcast (&self->cond);
- break;
-#endif
default:
break;
}
case PROP_BUFFER_TIME:
g_value_set_int64 (value, self->buffer_time);
break;
-#ifdef GST_TBM_SUPPORT
- case PROP_USE_TBM:
- g_value_set_boolean (value, self->use_tbm);
- break;
-#endif
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
GstFlowReturn ret = GST_FLOW_OK;
GstMemory *memory = NULL;
GstBuffer *sendbuf = NULL;
- gsize buf_size = gst_buffer_get_size(buf);
-#ifdef GST_TBM_SUPPORT
- unsigned int key[MM_VIDEO_BUFFER_PLANE_MAX];
- gsize key_size = sizeof(key);
- int mm_buf_offset = 0;
- int key_offset = 0;
-#endif
GST_OBJECT_LOCK (self);
while (self->wait_for_connection && !self->clients) {
}
-#ifdef GST_TBM_SUPPORT
- memory = gst_buffer_peek_memory (buf, 0);
-
- if (memory->allocator != GST_ALLOCATOR (self->allocator)) {
- need_new_memory = TRUE;
- GST_LOG_OBJECT (self, "Memory in buffer %p was not allocated by "
- "%" GST_PTR_FORMAT ", will memcpy", buf, memory->allocator);
- }
- GST_DEBUG_OBJECT(self, "use-tbm %d, #memory in buffer %d", self->use_tbm,
- gst_buffer_n_memory (buf));
- if(self->use_tbm && gst_buffer_n_memory (buf) > 1) {
- /*in case of SN12 or ST12 video format */
- MMVideoBuffer *mm_video_buf = NULL;
-
- memory = gst_buffer_peek_memory (buf, 1);
- gst_memory_map (memory, &map, GST_MAP_READ);
-
- mm_video_buf = (MMVideoBuffer *) map.data;
- if (mm_video_buf == NULL) {
- GST_ERROR_OBJECT (self, "mm_video_buf is NULL. Skip rendering");
- gst_memory_unmap (memory, &map);
- goto flushing;
- }
-
- mm_buf_offset = buf_size - map.size;
- key_offset = buf_size;
-
- GST_LOG_OBJECT(self, "mm_buf_offset %d, key_offset %d",
- mm_buf_offset, key_offset);
-
- /* export bo key */
- if (mm_video_buf->type == MM_VIDEO_BUFFER_TYPE_TBM_BO) {
- int i;
- GST_DEBUG_OBJECT (self, "GstBuffer size %d, tbm bo key size %d, info size %d",
- buf_size, key_size, sizeof(int));
- buf_size += (key_size + sizeof(int));
- for(i = 0; i < MM_VIDEO_BUFFER_PLANE_MAX; i++) {
- if(mm_video_buf->handle.bo[i]) {
- key[i] = tbm_bo_export(mm_video_buf->handle.bo[i]);
- GST_DEBUG_OBJECT (self, "key %d, bo %p", key[i], mm_video_buf->handle.bo[i]);
- } else
- key[i] = 0;
- }
- gst_memory_unmap (memory, &map);
- } else {
- GST_ERROR_OBJECT (self, "Buffer type is not TBM");
- gst_memory_unmap (memory, &map);
- goto flushing;
- }
- }
-#else
if (gst_buffer_n_memory (buf) > 1) {
GST_LOG_OBJECT (self, "Buffer %p has %d GstMemory, we only support a single"
" one, need to do a memcpy", buf, gst_buffer_n_memory (buf));
"%" GST_PTR_FORMAT ", will memcpy", buf, memory->allocator);
}
}
-#endif
if (need_new_memory) {
- if (buf_size > sp_writer_get_max_buf_size (self->pipe)) {
+ if (gst_buffer_get_size (buf) > sp_writer_get_max_buf_size (self->pipe)) {
gsize area_size = sp_writer_get_max_buf_size (self->pipe);
GST_OBJECT_UNLOCK (self);
GST_ELEMENT_ERROR (self, RESOURCE, NO_SPACE_LEFT,
("Shared memory area is too small"),
("Shared memory area of size %" G_GSIZE_FORMAT " is smaller than"
"buffer of size %" G_GSIZE_FORMAT, area_size,
- buf_size));
+ gst_buffer_get_size (buf)));
return GST_FLOW_ERROR;
}
while ((memory =
gst_shm_sink_allocator_alloc_locked (self->allocator,
- buf_size, &self->params)) == NULL) {
+ gst_buffer_get_size (buf), &self->params)) == NULL) {
g_cond_wait (&self->cond, GST_OBJECT_GET_LOCK (self));
if (self->unlock)
goto flushing;
gst_memory_map (memory, &map, GST_MAP_WRITE);
gst_buffer_extract (buf, 0, map.data, map.size);
-#ifdef GST_TBM_SUPPORT
- if(self->use_tbm && gst_buffer_n_memory (buf) > 1) {
- memcpy(map.data + key_offset, key, key_size);
- /* set offset info */
- *(map.data + key_offset + key_size) = mm_buf_offset;
- }
-#endif
gst_memory_unmap (memory, &map);
sendbuf = gst_buffer_new ();
GstShmSinkAllocator *allocator;
GstAllocationParams params;
-#ifdef GST_TBM_SUPPORT
- gboolean use_tbm;
-#endif
};
struct _GstShmSinkClass
#include <string.h>
-#ifdef GST_TBM_SUPPORT
-#include <mm_types.h>
-#endif
/* signals */
enum
{
PROP_SOCKET_PATH,
PROP_IS_LIVE,
PROP_SHM_AREA_NAME
-#ifdef GST_TBM_SUPPORT
- ,PROP_USE_TBM
-#endif
};
struct GstShmBuffer
"Name of the shared memory area",
"The name of the shared memory area used to get buffers",
NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-#ifdef GST_TBM_SUPPORT
- g_object_class_install_property (gobject_class, PROP_USE_TBM,
- g_param_spec_boolean ("use-tbm",
- "Use of not the tizen buffer",
- "Flags of using tizen buffer",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-#endif
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&srctemplate));
{
self->poll = gst_poll_new (TRUE);
gst_poll_fd_init (&self->pollfd);
- self->h_bufmgr = tbm_bufmgr_init(-1);
}
static void
gst_poll_free (self->poll);
g_free (self->socket_path);
- tbm_bufmgr_deinit(self->h_bufmgr);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
gst_base_src_set_live (GST_BASE_SRC (object),
g_value_get_boolean (value));
break;
-#ifdef GST_TBM_SUPPORT
- case PROP_USE_TBM:
- GST_OBJECT_LOCK (object);
- self->use_tbm = g_value_get_boolean (value);
- GST_OBJECT_UNLOCK (object);
- break;
-#endif
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
g_value_set_string (value, sp_get_shm_area_name (self->pipe->pipe));
GST_OBJECT_UNLOCK (object);
break;
-#ifdef GST_TBM_SUPPORT
- case PROP_USE_TBM:
- g_value_set_boolean (value, self->use_tbm);
- break;
-#endif
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
g_slice_free (struct GstShmBuffer, gsb);
}
-#ifdef GST_TBM_SUPPORT
-static void
-free_tbm_buffer (gpointer data)
-{
- MMVideoBuffer * mm_video_buf = data;
- int i;
- GST_LOG ("Freeing tbm buffer %p", data);
-
- for(i = 0; i < MM_VIDEO_BUFFER_PLANE_MAX; i++) {
- if(mm_video_buf->handle.bo[i])
- tbm_bo_unref(mm_video_buf->handle.bo[i]);
- else
- break;
- }
-
- g_free(mm_video_buf);
-}
-#endif
-
static GstFlowReturn
gst_shm_src_create (GstPushSrc * psrc, GstBuffer ** outbuf)
{
*outbuf = gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
buf, rv, 0, rv, gsb, free_buffer);
-#ifdef GST_TBM_SUPPORT
- GST_DEBUG_OBJECT(self, "use-tbm %d", self->use_tbm);
- if (self->use_tbm) {
- MMVideoBuffer *mm_video_buf = NULL;
- GstMemory *mem_imgb = NULL;
- unsigned key[MM_VIDEO_BUFFER_PLANE_MAX];
- int offset = *(buf + rv - sizeof(int));
- if(offset < 0) {
- GST_ERROR_OBJECT(self, "offset error %d", offset);
- return GST_FLOW_ERROR;
- }
-
- GST_LOG_OBJECT(self, "mm_buf offset %d", offset);
-
- mm_video_buf = g_malloc0(sizeof(MMVideoBuffer));
- mem_imgb = gst_memory_new_wrapped(0, mm_video_buf, sizeof(MMVideoBuffer), 0,
- sizeof(MMVideoBuffer), mm_video_buf, free_tbm_buffer);
- gst_buffer_append_memory(*outbuf, mem_imgb);
-
- memcpy(mm_video_buf, buf + offset, sizeof(MMVideoBuffer));
- memcpy(key, buf + rv - (sizeof(key) + sizeof(int)), sizeof(key));
- if (mm_video_buf->type == MM_VIDEO_BUFFER_TYPE_TBM_BO) {
- int i;
- GST_DEBUG_OBJECT(self, "width %d, height %d", mm_video_buf->width[0],
- mm_video_buf->height[0]);
-
- memset(mm_video_buf->handle.bo, 0, sizeof(void *) * MM_VIDEO_BUFFER_PLANE_MAX);
- for(i = 0; i < MM_VIDEO_BUFFER_PLANE_MAX; i++) {
- GST_DEBUG_OBJECT(self, "%d tbm bo key %d", i, key[i]);
- if(key[i] > 0)
- mm_video_buf->handle.bo[i] = tbm_bo_import(self->h_bufmgr, key[i]);
- else
- break;
- }
- GST_DEBUG_OBJECT (self, "TBM bo %p %p", mm_video_buf->handle.bo[0],
- mm_video_buf->handle.bo[1]);
- } else {
- GST_WARNING_OBJECT(self, "invaild type %d", mm_video_buf->type);
- return GST_FLOW_ERROR;
- }
- }
-#endif
return GST_FLOW_OK;
}
#include <gst/base/gstbasesrc.h>
#include "shmpipe.h"
-#ifdef GST_TBM_SUPPORT
-#include <tbm_bufmgr.h>
-#endif
G_BEGIN_DECLS
#define GST_TYPE_SHM_SRC \
GstFlowReturn flow_return;
gboolean unlocked;
-#ifdef GST_TBM_SUPPORT
- gboolean use_tbm;
- tbm_bufmgr h_bufmgr;
-#endif
};
struct _GstShmSrcClass