X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lib%2Fqtcamdevice_p.h;h=c8c09fb1348cff72e05c6c3b6b2cc4b0cf69ca28;hb=f16f2d7afbd39e1adeb193031b3be10279e3cb85;hp=914928b9b1a84e8771131840af3d0b39273bd184;hpb=4b5634ce74ce85fbf0a5dbbcf85bd89bc3b1b42e;p=harmattan%2Fcameraplus diff --git a/lib/qtcamdevice_p.h b/lib/qtcamdevice_p.h index 914928b..c8c09fb 100644 --- a/lib/qtcamdevice_p.h +++ b/lib/qtcamdevice_p.h @@ -3,7 +3,7 @@ /*! * This file is part of CameraPlus. * - * Copyright (C) 2012 Mohammed Sameer + * Copyright (C) 2012-2013 Mohammed Sameer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -34,6 +34,8 @@ class QtCamGStreamerMessageListener; class QtCamMode; class QtCamImageMode; class QtCamVideoMode; +class QtCamPropertySetter; +class QtCamAnalysisBin; class QtCamDevicePrivate { public: @@ -41,6 +43,7 @@ public: cameraBin(0), videoSource(0), wrapperVideoSource(0), + sink(0), image(0), video(0), active(0), @@ -48,12 +51,12 @@ public: conf(0), error(false), notifications(0), - stopping(false) { + viewfinderFilters(0) { } GstElement *createAndAddElement(const QString& elementName, const char *prop, const char *name) { - GstElement *elem = gst_element_factory_make(elementName.toAscii(), name); + GstElement *elem = gst_element_factory_make(elementName.toLatin1(), name); if (!elem) { qWarning() << "Failed to create" << elementName; return 0; @@ -64,59 +67,57 @@ public: return elem; } - void createAndAddVideoSource() { - // TODO: rework this function - GstElement *src, *wrapper; - QString wrapperSrc = conf->wrapperVideoSource(); - QString prop = conf->wrapperVideoSourceProperty(); - - if (!prop.isEmpty() && !wrapperSrc.isEmpty()) { - wrapper = gst_element_factory_make(wrapperSrc.toAscii(), "QCameraWrapperVideoSrc"); - if (!wrapper) { - qCritical() << "Failed to create wrapper source" << wrapperSrc; - return; - } - } + void createAndAddVideoSourceAndWrapper() { + videoSource = gst_element_factory_make(conf->videoSource().toUtf8().constData(), + "QtCameraVideoSrc"); + wrapperVideoSource = gst_element_factory_make(conf->wrapperVideoSource().toUtf8().constData(), + "QCameraWrapperVideoSrc"); - src = gst_element_factory_make(conf->videoSource().toAscii(), - "QtCameraVideoSrc"); - if (!src) { - qCritical() << "Failed to create video source"; - if (wrapper) { - gst_object_unref(wrapper); - } - return; + if (wrapperVideoSource && videoSource) { + g_object_set(wrapperVideoSource, conf->wrapperVideoSourceProperty().toUtf8().constData(), + videoSource, NULL); + g_object_set(cameraBin, "camera-source", wrapperVideoSource, NULL); } - - if (wrapper) { - g_object_set(wrapper, prop.toAscii(), src, NULL); - g_object_set(cameraBin, "camera-source", wrapper, NULL); + else if (wrapperVideoSource) { + qWarning() << "Failed to create video source"; + g_object_set(cameraBin, "camera-source", wrapperVideoSource, NULL); } - - videoSource = src; - wrapperVideoSource = wrapper; - - if (!id.isValid() || id.isNull()) { - return; + else if (videoSource) { + qWarning() << "Failed to create wrapper source"; + g_object_set(cameraBin, "camera-source", videoSource, NULL); + } + else { + qWarning() << "Failed to create both video and wrapper sources"; } + } - if (conf->deviceScannerType() == SCANNER_TYPE_ENUM) { - int dev = id.toInt(); - g_object_set(src, conf->deviceScannerProperty().toAscii().data(), dev, NULL); + void createAndAddVideoSource() { + videoSource = gst_element_factory_make(conf->videoSource().toUtf8().constData(), + "QtCameraVideoSrc"); + if (!videoSource) { + qCritical() << "Failed to create video source"; } else { - QString dev = id.toString(); - g_object_set(src, conf->deviceScannerProperty().toAscii().data(), - dev.toAscii().data(), NULL); + g_object_set(cameraBin, "camera-source", videoSource, NULL); } } - bool setViewfinderSink() { - GstElement *sink; - g_object_get(cameraBin, "viewfinder-sink", &sink, NULL); + void setDevicePoperty() { + if (videoSource) { + if (conf->deviceScannerType() == SCANNER_TYPE_ENUM) { + int dev = id.toInt(); + g_object_set(videoSource, conf->deviceScannerProperty().toLatin1().constData(), dev, NULL); + } + else { + QString dev = id.toString(); + g_object_set(videoSource, conf->deviceScannerProperty().toLatin1().constData(), + dev.toLatin1().constData(), NULL); + } + } + } + bool setViewfinderSink() { if (sink) { - gst_object_unref(sink); return true; } @@ -132,11 +133,6 @@ public: } void _d_error(const QString& message, int code, const QString& debug) { - if (stopping) { - // TODO: is it wise to ignore errors while stopping?? - return; - } - error = true; QMetaObject::invokeMethod(q_ptr, "error", Q_ARG(QString, message), @@ -174,7 +170,7 @@ public: void setAudioCaptureCaps() { QString captureCaps = conf->audioCaptureCaps(); if (!captureCaps.isEmpty()) { - GstCaps *caps = gst_caps_from_string(captureCaps.toAscii().data()); + GstCaps *caps = gst_caps_from_string(captureCaps.toLatin1().data()); if (caps) { g_object_set(cameraBin, "audio-capture-caps", caps, NULL); gst_caps_unref(caps); @@ -182,13 +178,18 @@ public: } } - bool isWrapperReady() { - if (!wrapperVideoSource) { + bool isReadyForCapture() { + GstElement *src = videoSource; + if (wrapperVideoSource) { + src = wrapperVideoSource; + } + + if (!src) { return false; } gboolean ready = FALSE; - g_object_get(wrapperVideoSource, "ready-for-capture", &ready, NULL); + g_object_get(src, "ready-for-capture", &ready, NULL); return ready == TRUE; } @@ -213,16 +214,6 @@ public: Q_ARG(bool, d->q_ptr->isIdle())); } -#if 0 - void resetCapabilities() { - g_object_set(cameraBin, "zoom", 1.0, NULL); - g_object_set(videoSource, "flash-mode", 0, NULL); - - // TODO: should scene mode be manual or automatic ? - g_object_set(videoSource, "scene-mode", 0, NULL); - } -#endif - QString name; QVariant id; @@ -231,6 +222,7 @@ public: GstElement *cameraBin; GstElement *videoSource; GstElement *wrapperVideoSource; + GstElement *sink; QtCamImageMode *image; QtCamVideoMode *video; @@ -241,7 +233,8 @@ public: QtCamGStreamerMessageListener *listener; bool error; QtCamNotifications *notifications; - bool stopping; + QtCamPropertySetter *propertySetter; + QtCamAnalysisBin *viewfinderFilters; }; #endif /* QT_CAM_DEVICE_P_H */