2 * This file is part of CameraPlus.
4 * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 #include "videosettings.h"
22 #include "qtcamvideosettings.h"
24 #include "qtcamdevice.h"
25 #include "qtcamvideomode.h"
26 #include "videoresolutionmodel.h"
27 #include "videoresolution.h"
30 VideoSettings::VideoSettings(QObject *parent) :
35 m_currentResolution(0) {
39 VideoSettings::~VideoSettings() {
42 if (m_currentResolution) {
43 delete m_currentResolution;
44 m_currentResolution = 0;
48 QString VideoSettings::suffix() const {
49 return m_settings ? m_settings->suffix() : QString();
52 QStringList VideoSettings::aspectRatios() const {
53 return m_settings ? m_settings->aspectRatios() : QStringList();
56 Camera *VideoSettings::camera() {
60 void VideoSettings::setCamera(Camera *camera) {
61 if (camera == m_cam) {
66 QObject::disconnect(m_cam, SIGNAL(deviceChanged()), this, SLOT(deviceChanged()));
72 QObject::connect(m_cam, SIGNAL(deviceChanged()), this, SLOT(deviceChanged()));
77 if (m_cam->device()) {
81 delete m_currentResolution;
82 m_currentResolution = 0;
83 emit currentResolutionChanged();
87 void VideoSettings::deviceChanged() {
88 m_settings = m_cam->device()->videoMode()->settings();
90 emit settingsChanged();
97 delete m_currentResolution;
98 m_currentResolution = 0;
100 emit aspectRatioCountChanged();
101 emit resolutionsChanged();
102 emit currentResolutionChanged();
105 VideoResolutionModel *VideoSettings::resolutions() {
110 if (!m_resolutions) {
111 m_resolutions = new VideoResolutionModel(m_settings, this);
114 return m_resolutions;
117 bool VideoSettings::isReady() const {
118 return m_settings != 0;
121 bool VideoSettings::setResolution(const QString& aspectRatio, const QString& resolution) {
126 QList<QtCamVideoResolution> res = m_settings->resolutions(aspectRatio);
128 foreach (const QtCamVideoResolution& r, res) {
129 if (r.name() == resolution) {
130 return setResolution(r);
137 int VideoSettings::aspectRatioCount() const {
138 return aspectRatios().count();
141 VideoResolution *VideoSettings::currentResolution() {
142 if (m_currentResolution) {
143 return m_currentResolution;
146 if (!m_cam || !m_cam->device()) {
150 m_currentResolution = new VideoResolution(m_cam->device()->videoMode()->currentResolution());
152 return m_currentResolution;
155 VideoResolution *VideoSettings::findResolution(const QString& aspectRatio,
156 const QString& name) {
161 QList<QtCamVideoResolution> res = m_settings->resolutions(aspectRatio);
163 foreach (const QtCamVideoResolution& r, res) {
164 if (r.name() == name) {
165 return new VideoResolution(r);
172 bool VideoSettings::setResolution(VideoResolution *resolution) {
173 return setResolution(resolution->resolution());
176 bool VideoSettings::setResolution(const QtCamVideoResolution& resolution) {
181 if (!m_cam || !m_cam->device()) {
185 if (m_cam->device()->videoMode()->setResolution(resolution)) {
186 delete m_currentResolution;
187 m_currentResolution = 0;
189 emit currentResolutionChanged();