/*!
* 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
#include "qtcamnotifications.h"
#include "gst/gstcopy.h"
#include "qtcampropertysetter.h"
+#include "qtcamanalysisbin.h"
QtCamDevice::QtCamDevice(QtCamConfig *config, const QString& name,
const QVariant& id, QObject *parent) :
d_ptr->propertySetter = new QtCamPropertySetter(d_ptr);
d_ptr->createAndAddElement(d_ptr->conf->audioSource(), "audio-source", "QtCameraAudioSrc");
- d_ptr->createAndAddVideoSource();
+ if (!d_ptr->conf->wrapperVideoSource().isEmpty() &&
+ !d_ptr->conf->wrapperVideoSourceProperty().isEmpty()) {
+ d_ptr->createAndAddVideoSourceAndWrapper();
+ }
+ else {
+ d_ptr->createAndAddVideoSource();
+ }
+
+ d_ptr->setDevicePoperty();
int flags =
0x00000001 /* no-audio-conversion - Do not use audio conversion elements */
g_object_set(d_ptr->cameraBin, "flags", flags, NULL);
d_ptr->setAudioCaptureCaps();
- d_ptr->addViewfinderFilters();
+
+ QStringList viewfinderFilters = d_ptr->conf->viewfinderFilters();
+ if (!viewfinderFilters.isEmpty()) {
+ d_ptr->viewfinderFilters =
+ QtCamAnalysisBin::create(viewfinderFilters, "QtCamViewfinderFilters");
+
+ if (!d_ptr->viewfinderFilters) {
+ qWarning() << "Failed to create viewfinder filters";
+ }
+ else {
+ g_object_set(d_ptr->cameraBin, "viewfinder-filter", d_ptr->viewfinderFilters->bin(), NULL);
+ }
+ }
d_ptr->listener = new QtCamGStreamerMessageListener(gst_element_get_bus(d_ptr->cameraBin),
d_ptr, this);
g_signal_connect(d_ptr->cameraBin, "notify::idle",
G_CALLBACK(QtCamDevicePrivate::on_idle_changed), d_ptr);
- g_signal_connect(d_ptr->wrapperVideoSource, "notify::ready-for-capture",
- G_CALLBACK(QtCamDevicePrivate::on_ready_for_capture_changed), d_ptr);
+ if (d_ptr->wrapperVideoSource) {
+ g_signal_connect(d_ptr->wrapperVideoSource, "notify::ready-for-capture",
+ G_CALLBACK(QtCamDevicePrivate::on_ready_for_capture_changed), d_ptr);
+ }
+ else {
+ g_signal_connect(d_ptr->videoSource, "notify::ready-for-capture",
+ G_CALLBACK(QtCamDevicePrivate::on_ready_for_capture_changed), d_ptr);
+ }
d_ptr->image = new QtCamImageMode(d_ptr, this);
d_ptr->video = new QtCamVideoMode(d_ptr, this);
delete d_ptr->propertySetter;
+ delete d_ptr->viewfinderFilters;
+
if (d_ptr->cameraBin) {
gst_object_unref(d_ptr->cameraBin);
}
}
if (!viewfinder) {
- qWarning() << "QtCamDevice: viewfinder cannot be unset.";
- return false;
- }
+ if (d_ptr->cameraBin) {
+ g_object_set(d_ptr->cameraBin, "viewfinder-sink", NULL, NULL);
+ }
- if (d_ptr->viewfinder) {
- qWarning() << "QtCamDevice: viewfinder cannot be replaced.";
- return false;
- }
+ d_ptr->sink = 0;
- if (!viewfinder->setDevice(this)) {
- return false;
+ d_ptr->viewfinder = 0;
+ return true;
}
d_ptr->viewfinder = viewfinder;
+ d_ptr->sink = 0;
return true;
}