Gstreamer media backend cleanup.
Moved controls specific bus/sync messages handling from player/camera/capture session to corresponding controls. Reviewed-by: Michael Goddard Change-Id: Ieb67976ed335b0ef1cde87dc60e8ad8da3409526 Reviewed-on: http://codereview.qt.nokia.com/2535 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
This commit is contained in:
committed by
Qt by Nokia
parent
6eac3bd648
commit
e70ebfd2ed
@@ -82,8 +82,8 @@ CameraBinImageCapture::CameraBinImageCapture(CameraBinSession *session)
|
||||
connect(m_session, SIGNAL(stateChanged(QCamera::State)), SLOT(updateState()));
|
||||
connect(m_session, SIGNAL(imageExposed(int)), this, SIGNAL(imageExposed(int)));
|
||||
connect(m_session, SIGNAL(imageCaptured(int,QImage)), this, SIGNAL(imageCaptured(int,QImage)));
|
||||
connect(m_session, SIGNAL(busMessage(QGstreamerMessage)), SLOT(handleBusMessage(QGstreamerMessage)));
|
||||
|
||||
m_session->bus()->installMessageFilter(this);
|
||||
g_signal_connect(G_OBJECT(m_session->cameraBin()), IMAGE_DONE_SIGNAL, G_CALLBACK(handleImageSaved), this);
|
||||
}
|
||||
|
||||
@@ -281,7 +281,7 @@ gboolean CameraBinImageCapture::jpegBufferProbe(GstPad *pad, GstBuffer *buffer,
|
||||
return destination & QCameraImageCapture::CaptureToFile;
|
||||
}
|
||||
|
||||
void CameraBinImageCapture::handleBusMessage(const QGstreamerMessage &message)
|
||||
bool CameraBinImageCapture::processBusMessage(const QGstreamerMessage &message)
|
||||
{
|
||||
//Install metadata event and buffer probes
|
||||
|
||||
@@ -298,7 +298,7 @@ void CameraBinImageCapture::handleBusMessage(const QGstreamerMessage &message)
|
||||
if (newState == GST_STATE_READY) {
|
||||
GstElement *element = GST_ELEMENT(GST_MESSAGE_SRC(gm));
|
||||
if (!element)
|
||||
return;
|
||||
return false;
|
||||
|
||||
QString elementName = QString::fromLatin1(gst_element_get_name(element));
|
||||
if (elementName.contains("jpegenc") && element != m_jpegEncoderElement) {
|
||||
@@ -339,4 +339,6 @@ void CameraBinImageCapture::handleBusMessage(const QGstreamerMessage &message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -48,9 +48,10 @@
|
||||
|
||||
QT_USE_NAMESPACE
|
||||
|
||||
class CameraBinImageCapture : public QCameraImageCaptureControl
|
||||
class CameraBinImageCapture : public QCameraImageCaptureControl, public QGstreamerBusMessageFilter
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_INTERFACES(QGstreamerBusMessageFilter)
|
||||
public:
|
||||
CameraBinImageCapture(CameraBinSession *session);
|
||||
virtual ~CameraBinImageCapture();
|
||||
@@ -62,9 +63,10 @@ public:
|
||||
int capture(const QString &fileName);
|
||||
void cancelCapture();
|
||||
|
||||
bool processBusMessage(const QGstreamerMessage &message);
|
||||
|
||||
private slots:
|
||||
void updateState();
|
||||
void handleBusMessage(const QGstreamerMessage &message);
|
||||
|
||||
private:
|
||||
static gboolean metadataEventProbe(GstPad *pad, GstEvent *event, CameraBinImageCapture *);
|
||||
|
||||
@@ -160,17 +160,16 @@ QMediaControl *CameraBinService::requestControl(const char *name)
|
||||
if (!m_videoOutput) {
|
||||
if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
|
||||
m_videoOutput = m_videoRenderer;
|
||||
m_captureSession->setViewfinder(m_videoRenderer);
|
||||
} else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
|
||||
m_videoOutput = m_videoWindow;
|
||||
m_captureSession->setViewfinder(m_videoWindow);
|
||||
} else if (qstrcmp(name, QVideoWidgetControl_iid) == 0) {
|
||||
m_captureSession->setViewfinder(m_videoWidgetControl);
|
||||
m_videoOutput = m_videoWidgetControl;
|
||||
}
|
||||
|
||||
if (m_videoOutput)
|
||||
if (m_videoOutput) {
|
||||
m_captureSession->setViewfinder(m_videoOutput);
|
||||
return m_videoOutput;
|
||||
}
|
||||
}
|
||||
|
||||
if (qstrcmp(name,QAudioEndpointSelector_iid) == 0)
|
||||
|
||||
@@ -145,8 +145,8 @@ CameraBinSession::CameraBinSession(QObject *parent)
|
||||
m_bus = gst_element_get_bus(m_pipeline);
|
||||
|
||||
m_busHelper = new QGstreamerBusHelper(m_bus, this);
|
||||
m_busHelper->installSyncEventFilter(this);
|
||||
connect(m_busHelper, SIGNAL(message(QGstreamerMessage)), SLOT(handleBusMessage(QGstreamerMessage)));
|
||||
m_busHelper->installMessageFilter(this);
|
||||
|
||||
m_audioEncodeControl = new CameraBinAudioEncoder(this);
|
||||
m_videoEncodeControl = new CameraBinVideoEncoder(this);
|
||||
m_imageEncodeControl = new CameraBinImageEncoder(this);
|
||||
@@ -534,6 +534,8 @@ void CameraBinSession::setViewfinder(QObject *viewfinder)
|
||||
this, SLOT(handleViewfinderChange()));
|
||||
disconnect(m_viewfinder, SIGNAL(readyChanged(bool)),
|
||||
this, SIGNAL(readyChanged(bool)));
|
||||
|
||||
m_busHelper->removeMessageFilter(m_viewfinder);
|
||||
}
|
||||
|
||||
m_viewfinder = viewfinder;
|
||||
@@ -544,6 +546,8 @@ void CameraBinSession::setViewfinder(QObject *viewfinder)
|
||||
this, SLOT(handleViewfinderChange()));
|
||||
connect(m_viewfinder, SIGNAL(readyChanged(bool)),
|
||||
this, SIGNAL(readyChanged(bool)));
|
||||
|
||||
m_busHelper->installMessageFilter(m_viewfinder);
|
||||
}
|
||||
|
||||
emit viewfinderChanged();
|
||||
@@ -795,24 +799,14 @@ bool CameraBinSession::processSyncMessage(const QGstreamerMessage &message)
|
||||
}
|
||||
}
|
||||
|
||||
if (gst_structure_has_name(gm->structure, "prepare-xwindow-id")) {
|
||||
if (m_viewfinderInterface)
|
||||
m_viewfinderInterface->precessNewStream();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (gst_structure_has_name(gm->structure, GST_PHOTOGRAPHY_AUTOFOCUS_DONE))
|
||||
m_cameraFocusControl->handleFocusMessage(gm);
|
||||
|
||||
if (m_viewfinderInterface && GST_MESSAGE_SRC(gm) == GST_OBJECT_CAST(m_viewfinderElement))
|
||||
m_viewfinderInterface->handleSyncMessage(gm);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CameraBinSession::handleBusMessage(const QGstreamerMessage &message)
|
||||
bool CameraBinSession::processBusMessage(const QGstreamerMessage &message)
|
||||
{
|
||||
GstMessage* gm = message.rawMessage();
|
||||
|
||||
@@ -911,12 +905,9 @@ void CameraBinSession::handleBusMessage(const QGstreamerMessage &message)
|
||||
}
|
||||
//qDebug() << "New session state:" << ENUM_NAME(CameraBinSession,"State",m_state);
|
||||
}
|
||||
|
||||
if (m_viewfinderInterface && GST_MESSAGE_SRC(gm) == GST_OBJECT_CAST(m_viewfinderElement))
|
||||
m_viewfinderInterface->handleBusMessage(gm);
|
||||
|
||||
emit busMessage(message);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CameraBinSession::recordVideo()
|
||||
|
||||
@@ -76,10 +76,13 @@ public:
|
||||
virtual GstElement *buildElement() = 0;
|
||||
};
|
||||
|
||||
class CameraBinSession : public QObject, public QGstreamerSyncEventFilter
|
||||
class CameraBinSession : public QObject,
|
||||
public QGstreamerBusMessageFilter,
|
||||
public QGstreamerSyncMessageFilter
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(qint64 duration READ duration NOTIFY durationChanged)
|
||||
Q_INTERFACES(QGstreamerBusMessageFilter QGstreamerSyncMessageFilter)
|
||||
public:
|
||||
enum CameraRole {
|
||||
FrontCamera, // Secondary camera
|
||||
@@ -91,6 +94,7 @@ public:
|
||||
|
||||
GstPhotography *photography();
|
||||
GstElement *cameraBin() { return m_pipeline; }
|
||||
QGstreamerBusHelper *bus() { return m_busHelper; }
|
||||
|
||||
CameraRole cameraRole() const;
|
||||
|
||||
@@ -146,6 +150,7 @@ public:
|
||||
bool isMuted() const;
|
||||
|
||||
bool processSyncMessage(const QGstreamerMessage &message);
|
||||
bool processBusMessage(const QGstreamerMessage &message);
|
||||
|
||||
signals:
|
||||
void stateChanged(QCamera::State state);
|
||||
@@ -157,7 +162,6 @@ signals:
|
||||
void viewfinderChanged();
|
||||
void readyChanged(bool);
|
||||
void busyChanged(bool);
|
||||
void busMessage(const QGstreamerMessage &message);
|
||||
|
||||
public slots:
|
||||
void setDevice(const QString &device);
|
||||
@@ -167,7 +171,6 @@ public slots:
|
||||
void setMuted(bool);
|
||||
|
||||
private slots:
|
||||
void handleBusMessage(const QGstreamerMessage &message);
|
||||
void handleViewfinderChange();
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user