blob: 2a178d6133d52e1e766edb54b345a4eeebe110c5 [file] [log] [blame]
atraczyk14ba30c2016-09-22 18:31:59 -04001/**************************************************************************
2* Copyright (C) 2016 by Savoir-faire Linux *
3* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com> *
4* Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com> *
5* *
6* This program is free software; you can redistribute it and/or modify *
7* it under the terms of the GNU General Public License as published by *
8* the Free Software Foundation; either version 3 of the License, or *
9* (at your option) any later version. *
10* *
11* This program 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 *
14* GNU General Public License for more details. *
15* *
16* You should have received a copy of the GNU General Public License *
17* along with this program. If not, see <http://www.gnu.org/licenses/>. *
18**************************************************************************/
19
20#include "pch.h"
21
22#include "Video.h"
23
24using namespace RingClientUWP;
25using namespace Video;
26
27using namespace Platform;
atraczykacc4c412016-11-10 22:56:52 -050028using namespace Windows::Media::MediaProperties;
atraczyk14ba30c2016-09-22 18:31:59 -040029
30/************************************************************
31 * *
32 * Rate *
33 * *
34 ***********************************************************/
atraczykacc4c412016-11-10 22:56:52 -050035Rate::Rate()
36{
37 m_validFormats = ref new Vector<String^>();
38}
atraczyk14ba30c2016-09-22 18:31:59 -040039
40String^
41Rate::name()
42{
43 return m_name;
44}
45
46unsigned int
47Rate::value()
48{
49 return m_value;
50}
51
atraczykacc4c412016-11-10 22:56:52 -050052String^
53Rate::format()
54{
55 return m_currentFormat;
56}
57
58Vector<String^>^
59Rate::formatList()
60{
61 return m_validFormats;
62}
63
64IMediaEncodingProperties^
65Rate::getMediaEncodingProperties()
66{
67 return m_encodingProperties;
68}
69
atraczyk14ba30c2016-09-22 18:31:59 -040070void
71Rate::setName(String^ name)
72{
73 m_name = name;
74}
75
76void
77Rate::setValue(unsigned int value)
78{
79 m_value = value;
80}
81
atraczykacc4c412016-11-10 22:56:52 -050082void
83Rate::setFormat(String^ format)
atraczyk14ba30c2016-09-22 18:31:59 -040084{
atraczykacc4c412016-11-10 22:56:52 -050085 m_currentFormat = format;
atraczyk14ba30c2016-09-22 18:31:59 -040086}
87
88void
atraczykacc4c412016-11-10 22:56:52 -050089Rate::setMediaEncodingProperties(IMediaEncodingProperties^ props)
atraczyk14ba30c2016-09-22 18:31:59 -040090{
atraczykacc4c412016-11-10 22:56:52 -050091 m_encodingProperties = props;
atraczyk14ba30c2016-09-22 18:31:59 -040092}
93
94/************************************************************
95 * *
96 * Resolution *
97 * *
98 ***********************************************************/
99
atraczykacc4c412016-11-10 22:56:52 -0500100Resolution::Resolution(IMediaEncodingProperties^ encodingProperties):
101 m_encodingProperties(encodingProperties)
atraczyk14ba30c2016-09-22 18:31:59 -0400102{
atraczyk14ba30c2016-09-22 18:31:59 -0400103 m_validRates = ref new Vector<Rate^>();
atraczykacc4c412016-11-10 22:56:52 -0500104 VideoEncodingProperties^ vidprops = static_cast<VideoEncodingProperties^>(encodingProperties);
105 m_width = vidprops->Width;
106 m_height = vidprops->Height;
atraczyk14ba30c2016-09-22 18:31:59 -0400107}
108
atraczykacc4c412016-11-10 22:56:52 -0500109String^
110Resolution::getFriendlyName()
111{
112 std::wstringstream ss;
113 ss << m_width << "x" << m_height;
114 return ref new String(ss.str().c_str());
115}
116
117IMediaEncodingProperties^
118Resolution::getMediaEncodingProperties()
119{
120 return m_encodingProperties;
121}
atraczyk14ba30c2016-09-22 18:31:59 -0400122
123String^
124Resolution::name()
125{
atraczykacc4c412016-11-10 22:56:52 -0500126 return m_width.ToString() + "x" + m_height.ToString();
atraczyk14ba30c2016-09-22 18:31:59 -0400127}
128
129Rate^
130Resolution::activeRate()
131{
132 return m_currentRate;
133}
134
135Vector<Rate^>^
136Resolution::rateList()
137{
138 return m_validRates;
139}
140
atraczykacc4c412016-11-10 22:56:52 -0500141unsigned int
142Resolution::width()
atraczyk14ba30c2016-09-22 18:31:59 -0400143{
atraczykacc4c412016-11-10 22:56:52 -0500144 return m_width;
145}
146
147unsigned int
148Resolution::height()
149{
150 return m_height;
151}
152
153void
154Resolution::setWidth(unsigned int width)
155{
156 m_width = width;
157}
158
159void
160Resolution::setHeight(unsigned int height)
161{
162 m_height = height;
atraczyk14ba30c2016-09-22 18:31:59 -0400163}
164
165String^
166Resolution::format()
167{
168 return m_format;
169}
170
171void
atraczyk14ba30c2016-09-22 18:31:59 -0400172Resolution::setFormat(String^ format)
173{
174 m_format = format;
175}
176
177bool
178Resolution::setActiveRate(Rate^ rate)
179{
Nicolas Jagerdf0a0672016-10-18 09:25:37 -0400180 if (m_currentRate == rate)
181 return false;
atraczyk14ba30c2016-09-22 18:31:59 -0400182
Nicolas Jagerdf0a0672016-10-18 09:25:37 -0400183 m_currentRate = rate;
Nicolas Jagerdf0a0672016-10-18 09:25:37 -0400184 return true;
atraczyk14ba30c2016-09-22 18:31:59 -0400185}
186
atraczykacc4c412016-11-10 22:56:52 -0500187void
188Resolution::setMediaEncodingProperties(IMediaEncodingProperties^ props)
189{
190 m_encodingProperties = props;
191}
192
atraczyk14ba30c2016-09-22 18:31:59 -0400193/************************************************************
194 * *
195 * Device *
196 * *
197 ***********************************************************/
198
199Device::Device(String^ id)
200{
201 m_deviceId = id;
atraczykacc4c412016-11-10 22:56:52 -0500202 m_validResolutions = ref new Vector<Resolution^>();
atraczyk14ba30c2016-09-22 18:31:59 -0400203}
204
205String^
206Device::id()
207{
208 return m_deviceId;
209}
210
atraczyk14ba30c2016-09-22 18:31:59 -0400211String^
212Device::name()
213{
214 return m_name;
215}
216
atraczykacc4c412016-11-10 22:56:52 -0500217Resolution^
218Device::currentResolution()
atraczyk14ba30c2016-09-22 18:31:59 -0400219{
atraczykacc4c412016-11-10 22:56:52 -0500220 return m_currentResolution;
atraczyk14ba30c2016-09-22 18:31:59 -0400221}
222
atraczykacc4c412016-11-10 22:56:52 -0500223Vector<Resolution^>^
224Device::resolutionList()
atraczyk14ba30c2016-09-22 18:31:59 -0400225{
atraczykacc4c412016-11-10 22:56:52 -0500226 return m_validResolutions;
atraczyk14ba30c2016-09-22 18:31:59 -0400227}
228
229void
230Device::setName(String^ name)
231{
232 m_name = name;
233}
234
235void
atraczykacc4c412016-11-10 22:56:52 -0500236Device::setCurrentResolution(Resolution^ currentResolution)
237{
238 m_currentResolution = currentResolution;
239}
240
241void
atraczyk14ba30c2016-09-22 18:31:59 -0400242Device::save()
243{
244}
245
246bool
247Device::isActive()
248{
atraczykacc4c412016-11-10 22:56:52 -0500249 return Video::VideoManager::instance->captureManager()->activeDevice == this;
atraczyk14ba30c2016-09-22 18:31:59 -0400250}
251
252void
253Device::SetDeviceProperties(String^ format, int width, int height, int rate)
254{
atraczykacc4c412016-11-10 22:56:52 -0500255 for (auto resolution_ : m_validResolutions) {
256 if ( resolution_->width() == width &&
257 resolution_->height() == height )
atraczyk14ba30c2016-09-22 18:31:59 -0400258 {
atraczykacc4c412016-11-10 22:56:52 -0500259 setCurrentResolution(resolution_);
260 for (auto rate_ : resolution_->rateList()) {
261 if (rate_->value() == rate &&
262 (format->IsEmpty()? true : rate_->format() == format))
263 currentResolution()->setActiveRate(rate_);
264 }
atraczyk14ba30c2016-09-22 18:31:59 -0400265 return;
266 }
267 }
268}