LOG_MEDIA_MESSAGE("Load %s", cleanUrl.utf8().data());
+#if ENABLE(TIZEN_MEDIA_STREAM)
+ // Workaround modification for getUserMedia.
+ // When 'playing' event is fired videoWidth and videoHeight are not available.
+ // Set m_videoSize as frame size which comes from webkitCameraSource.
+ // This size is fixed.
+ if (isLocalMediaStream())
+ m_videoSize = IntSize(480, 640);
+#endif
+
if (m_preload == MediaPlayer::None) {
LOG_MEDIA_MESSAGE("Delaying load.");
m_delayingLoad = true;
// On-disk buffering was attempted but the media is live. This
// can't work so disable on-disk buffering and reset the
// pipeline.
+
+#if ENABLE(TIZEN_MEDIA_STREAM)
+ if (state == GST_STATE_READY && isLiveStream() && m_preload == MediaPlayer::Auto && !isLocalMediaStream()) {
+#else
if (state == GST_STATE_READY && isLiveStream() && m_preload == MediaPlayer::Auto) {
+#endif
setPreload(MediaPlayer::None);
gst_element_set_state(m_playBin.get(), GST_STATE_NULL);
gst_element_set_state(m_playBin.get(), GST_STATE_PAUSED);
}
// A live stream was paused, reset the pipeline.
+#if ENABLE(TIZEN_MEDIA_STREAM)
+ if (state == GST_STATE_PAUSED && pending == GST_STATE_PLAYING && isLiveStream() && !isLocalMediaStream()) {
+#else
if (state == GST_STATE_PAUSED && pending == GST_STATE_PLAYING && isLiveStream()) {
+#endif
gst_element_set_state(m_playBin.get(), GST_STATE_NULL);
gst_element_set_state(m_playBin.get(), GST_STATE_PLAYING);
#if ENABLE(TIZEN_GSTREAMER_AUDIO)
#endif
#define RADIAN_VALUE (57.2957)
-#define VCAPS "video/x-raw-yuv, format=(fourcc)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1"
+#define VIDEO_CAPS "video/x-raw-yuv, format=(fourcc)I420, width=(int)640, height=(int)480, framerate=(fraction)30/1"
enum {
ROTATE_0,
#define WEBKIT_CAMERA_SRC_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_CAMERA_SRC, WebKitCameraSrcPrivate))
struct _WebKitCameraSrcPrivate {
- GstElement* src;
- GstElement* demux;
- GstElement* dec;
GstElement* flip;
- GstElement* autoconv;
- GstElement* videoCaps;
- GstElement* videoRate;
- GstPad* srcpad;
gchar* uri;
gboolean isRecording;
static void webKitCameraSrcGetProperty(GObject*, guint propertyID, GValue*, GParamSpec*);
static GstStateChangeReturn webKitCameraSrcChangeState(GstElement*, GstStateChange);
-/*
-// Defined but not used.
-static gboolean webKitCameraSrcQueryWithParent(GstPad*, GstObject*, GstQuery*);
-#ifndef GST_API_VERSION_1
-static gboolean webKitCameraSrcQuery(GstPad*, GstQuery*);
-#endif
-*/
-
static void webKitCameraSrcStop(WebKitCameraSrc*, bool);
#define webkit_camera_src_parent_class parent_class
g_type_class_add_private(klass, sizeof(WebKitCameraSrcPrivate));
}
-static void newPadCallback(GstElement* element, GstPad* pad, WebKitCameraSrc* src)
-{
-#if ENABLE(TIZEN_DLOG_SUPPORT)
- TIZEN_LOGI("");
-#endif
-
- WebKitCameraSrcPrivate* priv = WEBKIT_CAMERA_SRC_GET_PRIVATE(src);
-
- gst_pad_link(pad, gst_element_get_static_pad(priv->dec, "sink"));
- gst_element_link_many(priv->dec, priv->autoconv, priv->videoRate, priv->videoCaps, priv->flip, NULL);
-
-}
-
-#define DEFAULT_IP_CAMERA_PORT 8888
static void webkit_camera_src_init(WebKitCameraSrc* src)
{
GRefPtr<GstPadTemplate> padTemplate = adoptGRef(gst_static_pad_template_get(&srcTemplate));
WebKitCameraSrcPrivate* priv = WEBKIT_CAMERA_SRC_GET_PRIVATE(src);
src->priv = priv;
- GstCaps* caps = 0;
- caps = gst_caps_from_string(VCAPS);
+ priv->rotationManager = new RotationManager(src);
- LocalMediaServer::instance().add(src);
+ GstElement* source = gst_element_factory_make("camerasrc", 0);
+ if (source) {
+ g_object_set(source, "camera-id", 1, NULL);
+ g_object_set(source, "hflip", 1, NULL);
+ } else
+ source = gst_element_factory_make("v4l2src", 0);
- priv->rotationManager = new RotationManager(src);
- priv->src = gst_element_factory_make("tcpclientsrc", 0);
- priv->demux = gst_element_factory_make("multipartdemux", 0);
- priv->dec = gst_element_factory_make("jpegdec", 0);
- priv->autoconv = gst_element_factory_make("ffmpegcolorspace", "autoconv");
- priv->flip = gst_element_factory_make("videoflip", 0);
- priv->videoRate = gst_element_factory_make("videorate", 0);
- priv->videoCaps = gst_element_factory_make("capsfilter", 0);
- g_object_set(G_OBJECT(priv->videoCaps), "caps", caps, NULL);
- gst_caps_unref(caps);
- g_object_set(priv->src, "protocol", 0, NULL);
- g_object_set(priv->src, "host", "127.0.0.1", NULL);
- g_object_set(priv->src, "port", DEFAULT_IP_CAMERA_PORT, NULL);
- g_object_set(priv->src, "do-timestamp", true, NULL);
+ GRefPtr<GstCaps> caps = adoptGRef(gst_caps_from_string(VIDEO_CAPS));
+ GstElement* capsFilter = gst_element_factory_make("capsfilter", 0);
+ g_object_set(G_OBJECT(capsFilter), "caps", caps.get(), NULL);
+ priv->flip = gst_element_factory_make("videoflip", 0);
if (gst_element_factory_find("camerasrc"))
g_object_set(priv->flip, "method", 1, NULL);
- gst_bin_add_many(GST_BIN(src), priv->src, priv->demux, priv->dec, priv->flip, priv->videoRate, priv->videoCaps, priv->autoconv, NULL);
- g_signal_connect(priv->demux, "pad-added", G_CALLBACK(newPadCallback), src);
+ gst_bin_add_many(GST_BIN(src), source, capsFilter, priv->flip, NULL);
GRefPtr<GstPad> targetPad = adoptGRef(gst_element_get_static_pad(GST_ELEMENT(priv->flip), "src"));
- priv->srcpad = gst_ghost_pad_new_from_template("src", targetPad.get(), padTemplate.get());
+ GstPad* ghostPad = gst_ghost_pad_new_from_template("src", targetPad.get(), padTemplate.get());
+ gst_pad_set_active(ghostPad, TRUE);
+ gst_element_add_pad(GST_ELEMENT(src), ghostPad);
- gst_pad_set_active(priv->srcpad, TRUE);
- gst_element_add_pad(GST_ELEMENT(src), priv->srcpad);
+ gst_element_link_many(source, capsFilter, priv->flip, NULL);
- gst_element_link(priv->src, priv->demux);
webKitCameraSrcStop(src, false);
}
WebKitCameraSrc* src = WEBKIT_CAMERA_SRC(object);
WebKitCameraSrcPrivate* priv = src->priv;
- LocalMediaServer::instance().remove(src);
delete priv->rotationManager;
g_free(priv->uri);
break;
}
- if (ret != GST_STATE_CHANGE_FAILURE)
- LocalMediaServer::instance().stateChanged(src, transition);
-
return ret;
}
-/*
-// Defined but not used.
-static gboolean webKitCameraSrcQueryWithParent(GstPad* pad, GstObject* parent, GstQuery* query)
-{
- WebKitCameraSrc* webkitSrc = WEBKIT_CAMERA_SRC(GST_ELEMENT(parent));
- gboolean result = FALSE;
-
- switch (GST_QUERY_TYPE(query)) {
- case GST_QUERY_URI: {
- gst_query_set_uri(query, webkitSrc->priv->uri);
- result = TRUE;
- break;
- }
- default: {
- GRefPtr<GstPad> target = adoptGRef(gst_ghost_pad_get_target(GST_GHOST_PAD_CAST(pad)));
-
- // Forward the query to the proxy target pad.
- if (target)
- result = gst_pad_query(target.get(), query);
- break;
- }
- }
-
- return result;
-}
-
-#ifndef GST_API_VERSION_1
-static gboolean webKitCameraSrcQuery(GstPad* pad, GstQuery* query)
-{
- GRefPtr<GstElement> src = adoptGRef(gst_pad_get_parent_element(pad));
- return webKitCameraSrcQueryWithParent(pad, GST_OBJECT(src.get()), query);
-}
-#endif
-*/
-
// uri handler interface
#ifdef GST_API_VERSION_1