/*!
* This file is part of CameraPlus.
*
- * Copyright (C) 2012 Mohammed Sameer <msameer@foolab.org>
+ * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
class QtCamMode;
class QtCamImageMode;
class QtCamVideoMode;
+class QtCamPropertySetter;
+class QtCamAnalysisBin;
class QtCamDevicePrivate {
public:
cameraBin(0),
videoSource(0),
wrapperVideoSource(0),
+ sink(0),
image(0),
video(0),
active(0),
viewfinder(0),
conf(0),
- error(false) {
+ error(false),
+ 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;
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;
}
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);
}
}
- 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;
}
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;
GstElement *cameraBin;
GstElement *videoSource;
GstElement *wrapperVideoSource;
+ GstElement *sink;
QtCamImageMode *image;
QtCamVideoMode *video;
QtCamConfig *conf;
QtCamGStreamerMessageListener *listener;
bool error;
+ QtCamNotifications *notifications;
+ QtCamPropertySetter *propertySetter;
+ QtCamAnalysisBin *viewfinderFilters;
};
#endif /* QT_CAM_DEVICE_P_H */