#if ENABLE(TIZEN_MEDIA_STREAM)
#include "FileSystem.h"
-#include "MediaRecorder.h"
+#include "GStreamerVersioning.h"
#include "MediaStreamComponent.h"
#include "MediaStreamDescriptor.h"
#include "MediaStreamSource.h"
namespace WebCore {
-PassOwnPtr<MediaRecorderPrivateInterface> MediaRecorderPrivate::create(MediaRecorder* recorder)
+PassOwnPtr<MediaRecorderPrivateInterface> MediaRecorderPrivate::create()
{
- return adoptPtr(new MediaRecorderPrivate(recorder));
+ return adoptPtr(new MediaRecorderPrivate());
}
-MediaRecorderPrivate::MediaRecorderPrivate(MediaRecorder* recorder)
- : m_recorder(recorder)
- , m_pipeline(0)
+MediaRecorderPrivate::MediaRecorderPrivate()
+ : m_pipeline(0)
, m_recordMode(RECORD_MODE_NONE)
{
gst_init(0, 0);
#if ENABLE(TIZEN_DLOG_SUPPORT)
TIZEN_LOGI("");
#endif
-
m_pipeline = gst_pipeline_new(0);
- m_bus = gst_pipeline_get_bus(GST_PIPELINE(m_pipeline));
+ GstElement* audioSrc, *audioEncoder, *audioQueue;
if (m_recordMode & RECORD_MODE_AUDIO_ONLY) {
- m_asrc = gst_element_factory_make("pulsesrc", 0);
- m_aenc = gst_element_factory_make("amrnbenc", 0);
- m_aqueue = gst_element_factory_make("queue", 0);
+ audioSrc = gst_element_factory_make("pulsesrc", 0);
+ audioEncoder = gst_element_factory_make("amrnbenc", 0);
+ audioQueue = gst_element_factory_make("queue", 0);
}
+ GstElement* videoSrc, *videoEncoder, *videoQueue;
if (m_recordMode & RECORD_MODE_VIDEO_ONLY) {
- m_vsrc = gst_element_factory_make("webkitcamerasrc", 0);
- m_venc = gst_element_factory_make("ffenc_h263p", 0);
- m_vqueue = gst_element_factory_make("queue", 0);
+ videoSrc = gst_element_factory_make("webkitcamerasrc", 0);
+ videoEncoder = gst_element_factory_make("ffenc_h263p", 0);
+ videoQueue = gst_element_factory_make("queue", 0);
}
- m_mux = gst_element_factory_make("ffmux_3gp", 0);
- m_fsink = gst_element_factory_make("filesink", 0);
-
if (m_recordMode & RECORD_MODE_VIDEO_ONLY) {
String cameraUrl = String::format("camera://%d", m_cameraId);
- g_object_set(G_OBJECT(m_vsrc), "location", cameraUrl.utf8().data(), NULL);
- g_object_set(G_OBJECT(m_vsrc), "is-recording", TRUE, NULL);
+ g_object_set(G_OBJECT(videoSrc), "location", cameraUrl.utf8().data(), NULL);
+ g_object_set(G_OBJECT(videoSrc), "is-recording", TRUE, NULL);
}
GTimeZone* tz = g_time_zone_new_local();
GDateTime* dt = g_date_time_new_now(tz);
- gchar* tstr;
+ gchar* tstr = 0;
if (m_recordMode == RECORD_MODE_AUDIO_ONLY)
tstr = g_date_time_format(dt, "/opt/usr/media/Sounds/%s.3gp");
else
tstr = g_date_time_format(dt, "/opt/usr/media/Videos/%s.3gp");
m_recordedFileName = String(tstr);
- g_object_set(G_OBJECT(m_fsink), "location", tstr, NULL);
+ GstElement* fileSink = gst_element_factory_make("filesink", 0);
+ g_object_set(G_OBJECT(fileSink), "location", tstr, NULL);
g_date_time_unref(dt);
g_time_zone_unref(tz);
g_free(tstr);
+ GstElement* muxer = gst_element_factory_make("ffmux_3gp", 0);
+
if (m_recordMode == RECORD_MODE_AUDIO_ONLY) {
- gst_bin_add_many(GST_BIN(m_pipeline), m_asrc, m_aenc, m_aqueue, m_mux, m_fsink, NULL);
- gst_element_link_many(m_asrc, m_aenc, m_aqueue, m_mux, m_fsink, NULL);
+ gst_bin_add_many(GST_BIN(m_pipeline), audioSrc, audioEncoder, audioQueue, muxer, fileSink, NULL);
+ gst_element_link_many(audioSrc, audioEncoder, audioQueue, muxer, fileSink, NULL);
} else {
- gst_bin_add_many(GST_BIN(m_pipeline), m_asrc, m_vsrc, m_aenc, m_venc, m_aqueue, m_vqueue, m_mux, m_fsink, NULL);
- gst_element_link_many(m_asrc, m_aenc, m_aqueue, m_mux, NULL);
- gst_element_link_many(m_vsrc, m_venc, m_vqueue, m_mux, NULL);
- gst_element_link(m_mux, m_fsink);
+ gst_bin_add_many(GST_BIN(m_pipeline), audioSrc, videoSrc, audioEncoder, videoEncoder, audioQueue, videoQueue, muxer, fileSink, NULL);
+ gst_element_link_many(audioSrc, audioEncoder, audioQueue, muxer, NULL);
+ gst_element_link_many(videoSrc, videoEncoder, videoQueue, muxer, NULL);
+ gst_element_link(muxer, fileSink);
}
if (GST_STATE_CHANGE_FAILURE == gst_element_set_state(m_pipeline, GST_STATE_READY))
g_warning("can't set pipeline to ready");
}
-
void MediaRecorderPrivate::deletePipeline()
{
if (!m_pipeline)
#endif
gst_element_send_event(m_pipeline, gst_event_new_eos());
- GstBus* bus = gst_element_get_bus(GST_ELEMENT(m_pipeline));
- GstMessage* message = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_EOS | GST_MESSAGE_ERROR));
+ GRefPtr<GstBus> bus = webkitGstPipelineGetBus(GST_PIPELINE(m_pipeline));
+ GstMessage* message = gst_bus_timed_pop_filtered(bus.get(), GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_EOS | GST_MESSAGE_ERROR));
if (!message)
g_warning("Message is NULL");
filename.swap(m_recordedFileName);
}
-void MediaRecorderPrivate::consumeEvents()
-{
- GstBus* bus = gst_element_get_bus(GST_ELEMENT(m_pipeline));
-
- GstMessage* message = 0;
- while (1) {
- message = gst_bus_poll(bus, GST_MESSAGE_ANY, GST_SECOND * 0.1);
- if (!message) {
- g_warning("Message is NULL");
- break;
- }
-
- switch (message->type) {
- case GST_MESSAGE_EOS:
- gst_message_unref(message);
- break;
- default:
- gst_message_unref(message);
- break;
- }
- }
-}
-
} // namespace WebCore
#endif // ENABLE(TIZEN_MEDIA_STREAM)