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 <andrew.den.exter@qinetic.com.au>
This commit is contained in:
@@ -98,6 +98,8 @@
|
|||||||
#define CAPTURE_START "start-capture"
|
#define CAPTURE_START "start-capture"
|
||||||
#define CAPTURE_STOP "stop-capture"
|
#define CAPTURE_STOP "stop-capture"
|
||||||
|
|
||||||
|
#define FILESINK_BIN_NAME "videobin-filesink"
|
||||||
|
|
||||||
#define CAMERABIN_IMAGE_MODE 1
|
#define CAMERABIN_IMAGE_MODE 1
|
||||||
#define CAMERABIN_VIDEO_MODE 2
|
#define CAMERABIN_VIDEO_MODE 2
|
||||||
|
|
||||||
@@ -721,13 +723,19 @@ void CameraBinSession::updateBusyStatus(GObject *o, GParamSpec *p, gpointer d)
|
|||||||
|
|
||||||
qint64 CameraBinSession::duration() const
|
qint64 CameraBinSession::duration() const
|
||||||
{
|
{
|
||||||
GstFormat format = GST_FORMAT_TIME;
|
if (m_camerabin) {
|
||||||
gint64 duration = 0;
|
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 0;
|
||||||
return duration / 1000000;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CameraBinSession::isMuted() const
|
bool CameraBinSession::isMuted() const
|
||||||
|
|||||||
Reference in New Issue
Block a user