From: Yoann Lopes Date: Thu, 2 Oct 2014 12:21:20 +0000 (+0200) Subject: GStreamer: fix QMediaRecorder::duration() when recording with a camera X-Git-Tag: v5.3.99+beta1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ca94dc79b6f0e57ba7446a87c70398a178fbcac8;p=platform%2Fupstream%2Fqtmultimedia.git GStreamer: fix QMediaRecorder::duration() when recording with a camera To get the recording duration, we were using the camerabin's position, which represents the time since it was started, not the time it's been recording to a file. We now retrieve the camerabin's filesink position. Change-Id: I68eeb25d1718666288655d22deea23e25de73b90 Reviewed-by: Andrew den Exter --- diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp index 850f8c1..0197839 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp @@ -98,6 +98,8 @@ #define CAPTURE_START "start-capture" #define CAPTURE_STOP "stop-capture" +#define FILESINK_BIN_NAME "videobin-filesink" + #define CAMERABIN_IMAGE_MODE 1 #define CAMERABIN_VIDEO_MODE 2 @@ -721,13 +723,19 @@ void CameraBinSession::updateBusyStatus(GObject *o, GParamSpec *p, gpointer d) qint64 CameraBinSession::duration() const { - GstFormat format = GST_FORMAT_TIME; - gint64 duration = 0; + if (m_camerabin) { + GstElement *fileSink = gst_bin_get_by_name(GST_BIN(m_camerabin), FILESINK_BIN_NAME); + if (fileSink) { + GstFormat format = GST_FORMAT_TIME; + gint64 duration = 0; + bool ret = gst_element_query_position(fileSink, &format, &duration); + gst_object_unref(GST_OBJECT(fileSink)); + if (ret) + return duration / 1000000; + } + } - if ( m_camerabin && gst_element_query_position(m_camerabin, &format, &duration)) - return duration / 1000000; - else - return 0; + return 0; } bool CameraBinSession::isMuted() const