X-Git-Url: http://cgit.sxemacs.org/?p=harmattan%2Fcameraplus;a=blobdiff_plain;f=lib%2Fqtcamdevice_p.h;h=c8c09fb1348cff72e05c6c3b6b2cc4b0cf69ca28;hp=b5b8db516c7e52addaa9d0ee38d9e4f6cf75cef3;hb=f16f2d7afbd39e1adeb193031b3be10279e3cb85;hpb=16ee8584a0873c56c0b2fbde6e7ae0ae1e971b1b;ds=sidebyside diff --git a/lib/qtcamdevice_p.h b/lib/qtcamdevice_p.h index b5b8db5..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 @@ -29,13 +29,13 @@ #include "qtcamviewfinder.h" #include "qtcamdevice.h" #include "qtcammode.h" -#include "qtcamanalysisbin.h" class QtCamGStreamerMessageListener; class QtCamMode; class QtCamImageMode; class QtCamVideoMode; class QtCamPropertySetter; +class QtCamAnalysisBin; class QtCamDevicePrivate { public: @@ -43,18 +43,20 @@ public: cameraBin(0), videoSource(0), wrapperVideoSource(0), + sink(0), image(0), video(0), active(0), viewfinder(0), conf(0), error(false), - notifications(0) { + notifications(0), + 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; @@ -65,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; } @@ -170,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); @@ -178,17 +178,18 @@ public: } } - void addViewfinderFilters() { - addElements("viewfinder-filter", conf->viewfinderFilters()); - } + bool isReadyForCapture() { + GstElement *src = videoSource; + if (wrapperVideoSource) { + src = wrapperVideoSource; + } - bool isWrapperReady() { - if (!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,36 +214,6 @@ public: Q_ARG(bool, d->q_ptr->isIdle())); } - void addElements(const char *prop, const QStringList& elements) { - QList list; - - if (elements.isEmpty()) { - return; - } - - foreach (const QString& element, elements) { - GstElement *elem = gst_element_factory_make(element.toUtf8().constData(), NULL); - if (!elem) { - qWarning() << "Failed to create element" << element; - } - else { - list << elem; - } - } - - if (list.isEmpty()) { - return; - } - - GstElement *bin = qt_cam_analysis_bin_create(list, prop); - if (!bin) { - qWarning() << "Failed to create bin for" << prop; - return; - } - - g_object_set(cameraBin, prop, bin, NULL); - } - QString name; QVariant id; @@ -251,6 +222,7 @@ public: GstElement *cameraBin; GstElement *videoSource; GstElement *wrapperVideoSource; + GstElement *sink; QtCamImageMode *image; QtCamVideoMode *video; @@ -262,6 +234,7 @@ public: bool error; QtCamNotifications *notifications; QtCamPropertySetter *propertySetter; + QtCamAnalysisBin *viewfinderFilters; }; #endif /* QT_CAM_DEVICE_P_H */