diff --git a/src/imports/multimedia/plugins.qmltypes b/src/imports/multimedia/plugins.qmltypes index fe1c68af..da741171 100644 --- a/src/imports/multimedia/plugins.qmltypes +++ b/src/imports/multimedia/plugins.qmltypes @@ -371,6 +371,10 @@ Module { "ExposureParty": 18, "ExposureCandlelight": 19, "ExposureBarcode": 20, + "ExposureFlowers": 21, + "ExposureAR": 22, + "ExposureHDR": 23, + "ExposureCloseup": 24, "ExposureModeVendor": 1000 } } @@ -641,6 +645,10 @@ Module { "ExposureParty": 18, "ExposureCandlelight": 19, "ExposureBarcode": 20, + "ExposureFlowers": 21, + "ExposureAR": 22, + "ExposureHDR": 23, + "ExposureCloseup": 24, "ExposureModeVendor": 1000 } } @@ -848,6 +856,7 @@ Module { "WhiteBalanceFluorescent": 6, "WhiteBalanceFlash": 7, "WhiteBalanceSunset": 8, + "WhiteBalanceWarmFluorescent": 9, "WhiteBalanceVendor": 1000 } } @@ -863,6 +872,9 @@ Module { "ColorFilterWhiteboard": 6, "ColorFilterBlackboard": 7, "ColorFilterAqua": 8, + "ColorFilterEmboss": 9, + "ColorFilterSketch": 10, + "ColorFilterNeon": 11, "ColorFilterVendor": 1000 } } diff --git a/src/imports/multimedia/qdeclarativecamera_p.h b/src/imports/multimedia/qdeclarativecamera_p.h index b3f199a5..a8d11d1a 100644 --- a/src/imports/multimedia/qdeclarativecamera_p.h +++ b/src/imports/multimedia/qdeclarativecamera_p.h @@ -202,6 +202,10 @@ public: ExposureParty = QCameraExposure::ExposureParty, ExposureCandlelight = QCameraExposure::ExposureCandlelight, ExposureBarcode = QCameraExposure::ExposureBarcode, + ExposureFlowers = QCameraExposure::ExposureFlowers, + ExposureAR = QCameraExposure::ExposureAR, + ExposureHDR = QCameraExposure::ExposureHDR, + ExposureCloseup = QCameraExposure::ExposureCloseup, ExposureModeVendor = QCameraExposure::ExposureModeVendor }; diff --git a/src/imports/multimedia/qdeclarativecameraexposure.cpp b/src/imports/multimedia/qdeclarativecameraexposure.cpp index 4f820219..ff628b94 100644 --- a/src/imports/multimedia/qdeclarativecameraexposure.cpp +++ b/src/imports/multimedia/qdeclarativecameraexposure.cpp @@ -347,6 +347,10 @@ void QDeclarativeCameraExposure::setAutoIsoSensitivity() \row \li Camera.ExposureParty \li Party exposure mode. Since 5.5 \row \li Camera.ExposureCandlelight \li Candlelight exposure mode. Since 5.5 \row \li Camera.ExposureBarcode \li Barcode exposure mode. Since 5.5 + \row \li Camera.ExposureFlowers \li Flowers exposure mode. Since 5.x + \row \li Camera.ExposureAR \li Augmented reality exposure mode. Since 5.x + \row \li Camera.ExposureHDR \li High dynamic range exposure mode. Since 5.x + \row \li Camera.ExposureCloseup \li Closeup exposure mode. Since 5.x \row \li Camera.ExposureModeVendor \li The base value for device specific exposure modes. \endtable */ diff --git a/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp b/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp index de5aee85..f30509be 100644 --- a/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp +++ b/src/imports/multimedia/qdeclarativecameraimageprocessing.cpp @@ -89,16 +89,17 @@ QDeclarativeCameraImageProcessing::~QDeclarativeCameraImageProcessing() \table \header \li Value \li Description - \row \li WhiteBalanceManual \li Manual white balance. In this mode the manual white balance property value is used. - \row \li WhiteBalanceAuto \li Auto white balance mode. - \row \li WhiteBalanceSunlight \li Sunlight white balance mode. - \row \li WhiteBalanceCloudy \li Cloudy white balance mode. - \row \li WhiteBalanceShade \li Shade white balance mode. - \row \li WhiteBalanceTungsten \li Tungsten white balance mode. - \row \li WhiteBalanceFluorescent \li Fluorescent white balance mode. - \row \li WhiteBalanceFlash \li Flash white balance mode. - \row \li WhiteBalanceSunset \li Sunset white balance mode. - \row \li WhiteBalanceVendor \li Vendor defined white balance mode. + \row \li WhiteBalanceManual \li Manual white balance. In this mode the manual white balance property value is used. + \row \li WhiteBalanceAuto \li Auto white balance mode. + \row \li WhiteBalanceSunlight \li Sunlight white balance mode. + \row \li WhiteBalanceCloudy \li Cloudy white balance mode. + \row \li WhiteBalanceShade \li Shade white balance mode. + \row \li WhiteBalanceTungsten \li Tungsten white balance mode. + \row \li WhiteBalanceFluorescent \li Fluorescent white balance mode. + \row \li WhiteBalanceFlash \li Flash white balance mode. + \row \li WhiteBalanceSunset \li Sunset white balance mode. + \row \li WhiteBalanceWarmFluorescent \li Warm fluorescent white balance mode. + \row \li WhiteBalanceVendor \li Vendor defined white balance mode. \endtable \sa manualWhiteBalance @@ -234,6 +235,9 @@ void QDeclarativeCameraImageProcessing::setDenoisingLevel(qreal value) \row \li CameraImageProcessing.ColorFilterWhiteboard \li A whiteboard filter. \row \li CameraImageProcessing.ColorFilterBlackboard \li A blackboard filter. \row \li CameraImageProcessing.ColorFilterAqua \li An aqua filter. + \row \li CameraImageProcessing.ColorFilterEmboss \li An emboss filter. + \row \li CameraImageProcessing.ColorFilterSketch \li An sketch filter. + \row \li CameraImageProcessing.ColorFilterNeon \li An neon filter. \row \li CameraImageProcessing.ColorFilterVendor \li The base value for vendor defined filters. \endtable diff --git a/src/multimedia/camera/qcameraexposure.cpp b/src/multimedia/camera/qcameraexposure.cpp index 5bbce446..d400224c 100644 --- a/src/multimedia/camera/qcameraexposure.cpp +++ b/src/multimedia/camera/qcameraexposure.cpp @@ -642,6 +642,10 @@ void QCameraExposure::setAutoShutterSpeed() \value ExposureParty Party mode. Since 5.5 \value ExposureCandlelight Candlelight mode. Since 5.5 \value ExposureBarcode Barcode mode. Since 5.5 + \value ExposureFlowers Flowers exposure mode. Since 5.x + \value ExposureAR Augmented reality exposure mode. Since 5.x + \value ExposureHDR High dynamic range exposure mode. Since 5.x + \value ExposureCloseup Closeup exposure mode. Since 5.x \value ExposureModeVendor The base value for device specific exposure modes. */ diff --git a/src/multimedia/camera/qcameraimageprocessing.cpp b/src/multimedia/camera/qcameraimageprocessing.cpp index 4ce3759e..a57c17f0 100644 --- a/src/multimedia/camera/qcameraimageprocessing.cpp +++ b/src/multimedia/camera/qcameraimageprocessing.cpp @@ -305,17 +305,18 @@ void QCameraImageProcessing::setDenoisingLevel(qreal level) /*! \enum QCameraImageProcessing::WhiteBalanceMode - \value WhiteBalanceAuto Auto white balance mode. - \value WhiteBalanceManual Manual white balance. In this mode the white balance should be set with - setManualWhiteBalance() - \value WhiteBalanceSunlight Sunlight white balance mode. - \value WhiteBalanceCloudy Cloudy white balance mode. - \value WhiteBalanceShade Shade white balance mode. - \value WhiteBalanceTungsten Tungsten (incandescent) white balance mode. - \value WhiteBalanceFluorescent Fluorescent white balance mode. - \value WhiteBalanceFlash Flash white balance mode. - \value WhiteBalanceSunset Sunset white balance mode. - \value WhiteBalanceVendor Base value for vendor defined white balance modes. + \value WhiteBalanceAuto Auto white balance mode. + \value WhiteBalanceManual Manual white balance. In this mode the white balance should be set with + setManualWhiteBalance() + \value WhiteBalanceSunlight Sunlight white balance mode. + \value WhiteBalanceCloudy Cloudy white balance mode. + \value WhiteBalanceShade Shade white balance mode. + \value WhiteBalanceTungsten Tungsten (incandescent) white balance mode. + \value WhiteBalanceFluorescent Fluorescent white balance mode. + \value WhiteBalanceFlash Flash white balance mode. + \value WhiteBalanceSunset Sunset white balance mode. + \value WhiteBalanceWarmFluorescent Warm fluorescent white balance mode. + \value WhiteBalanceVendor Base value for vendor defined white balance modes. */ /*! @@ -330,6 +331,9 @@ void QCameraImageProcessing::setDenoisingLevel(qreal level) \value ColorFilterWhiteboard A whiteboard filter. \value ColorFilterBlackboard A blackboard filter. \value ColorFilterAqua An aqua filter. + \value ColorFilterEmboss An emboss filter. + \value ColorFilterSketch A sketch filter. + \value ColorFilterNeon A neon filter. \value ColorFilterVendor The base value for vendor defined filters. \since 5.5 diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp index cdaee94b..f7035ba4 100644 --- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp @@ -458,6 +458,7 @@ void CameraBinSession::setAudioCaptureCaps() GstElement *CameraBinSession::buildCameraSource() { + bool connectReadyForCapture = false; #if CAMERABIN_DEBUG qDebug() << Q_FUNC_INFO; #endif @@ -525,6 +526,14 @@ GstElement *CameraBinSession::buildCameraSource() if (m_videoSrc) g_object_set(G_OBJECT(m_cameraSrc), "video-source", m_videoSrc, NULL); + + // CameraBin doesn't emit ready-for-capture notify signal + // in the same manner that gst-droid does, thus making + // Qt report "Camera not ready error" due to changes in + // 46c29f5b and b04854b4. Workaround this by assuming that + // camera is ready. + m_reportedReadyForCapture = true; + m_readyForCapture = true; } if (m_videoSrc) @@ -536,12 +545,21 @@ GstElement *CameraBinSession::buildCameraSource() } else { g_object_set(G_OBJECT(m_cameraSrc), "camera-device", 0, NULL); } + + // Explicitly reset those values in case of + // camera changing from v4l to this + m_reportedReadyForCapture = false; + m_readyForCapture = false; + + connectReadyForCapture = true; } } if (m_cameraSrc != camSrc) { g_object_set(G_OBJECT(m_camerabin), CAMERA_SOURCE_PROPERTY, m_cameraSrc, NULL); - g_signal_connect(G_OBJECT(m_cameraSrc), "notify::ready-for-capture", G_CALLBACK(updateReadyForCapture), this); + if (connectReadyForCapture) { + g_signal_connect(G_OBJECT(m_cameraSrc), "notify::ready-for-capture", G_CALLBACK(updateReadyForCapture), this); + } } diff --git a/src/plugins/gstreamer/camerabin/camerabinzoom.cpp b/src/plugins/gstreamer/camerabin/camerabinzoom.cpp index 372d8459..336ed2d5 100644 --- a/src/plugins/gstreamer/camerabin/camerabinzoom.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinzoom.cpp @@ -133,7 +133,7 @@ void CameraBinZoom::updateMaxZoom(GObject *o, GParamSpec *p, gpointer d) CameraBinZoom *zoom = reinterpret_cast(d); - QMetaObject::invokeMethod(zoom, "maximumOpticalZoomChanged", + QMetaObject::invokeMethod(zoom, "maximumDigitalZoomChanged", Qt::QueuedConnection, Q_ARG(qreal, zoomFactor)); } diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp index 5a841c0f..8b0aaf1b 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp @@ -46,6 +46,7 @@ #include #include +#include #include #include @@ -57,7 +58,7 @@ #include //#define DEBUG_PLAYBIN -//#define DEBUG_VO_BIN_DUMP +#define DEBUG_VO_BIN_DUMP QT_BEGIN_NAMESPACE @@ -558,7 +559,7 @@ void QGstreamerPlayerSession::setVideoRenderer(QObject *videoOutput) m_renderer = renderer; #ifdef DEBUG_VO_BIN_DUMP - gst_debug_bin_to_dot_file_with_ts(GST_BIN(m_playbin), + GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_playbin), GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_ALL /* GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE | GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS | GST_DEBUG_GRAPH_SHOW_STATES*/), "playbin_set"); #endif @@ -824,7 +825,7 @@ void QGstreamerPlayerSession::finishVideoOutputChange() gst_object_unref(GST_OBJECT(srcPad)); #ifdef DEBUG_VO_BIN_DUMP - gst_debug_bin_to_dot_file_with_ts(GST_BIN(m_playbin), + GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_playbin), GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_ALL /* | GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE | GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS | GST_DEBUG_GRAPH_SHOW_STATES */), "playbin_finish"); #endif @@ -901,11 +902,21 @@ bool QGstreamerPlayerSession::play() if (!m_isPlaylist) { qWarning() << "GStreamer; Unable to play -" << m_request.url().toString(); m_pendingState = m_state = QMediaPlayer::StoppedState; +#ifdef DEBUG_VO_BIN_DUMP + GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_playbin), + GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_ALL /* GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE | GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS | GST_DEBUG_GRAPH_SHOW_STATES*/), + "playbin_error"); +#endif emit stateChanged(m_state); } else { return true; } } else { +#ifdef DEBUG_VO_BIN_DUMP + GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_playbin), + GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_ALL /* GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE | GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS | GST_DEBUG_GRAPH_SHOW_STATES*/), + "playbin_playing"); +#endif resumeVideoProbes(); return true; } @@ -1299,13 +1310,15 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message handlePlaybin2 = true; } + if (gst_is_missing_plugin_message(gm)) { + emit error(int(QMediaPlayer::FormatError), gst_missing_plugin_message_get_description(gm)); + } + if (handlePlaybin2) { if (GST_MESSAGE_TYPE(gm) == GST_MESSAGE_WARNING) { GError *err; gchar *debug; gst_message_parse_warning(gm, &err, &debug); - if (err->domain == GST_STREAM_ERROR && err->code == GST_STREAM_ERROR_CODEC_NOT_FOUND) - emit error(int(QMediaPlayer::FormatError), tr("Cannot play stream of type: ")); // GStreamer shows warning for HTTP playlists if (!m_isPlaylist) qWarning() << "Warning:" << QString::fromUtf8(err->message);