1/*
2 Copyright (C) 2009-2010 vlc-phonon AUTHORS <kde-multimedia@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef Phonon_VLC_DEVICEMANAGER_H
19#define Phonon_VLC_DEVICEMANAGER_H
20
21#include <QtCore/QObject>
22
23#include <phonon/ObjectDescription>
24
25namespace Phonon
26{
27namespace VLC
28{
29
30class Backend;
31
32/** \brief Container for information about devices supported by libVLC
33 *
34 * It includes a (hopefully unique) device identifier, a name identifier, a
35 * description, a hardware identifier (may be a platform dependent device name),
36 * and other relevant info.
37 */
38class DeviceInfo
39{
40public:
41 enum Capability {
42 None = 0x0000,
43 AudioOutput = 0x0001,
44 AudioCapture = 0x0002,
45 VideoCapture = 0x0004
46 };
47public:
48 /**
49 * Constructs a device info object and sets it's device identifiers.
50 */
51 explicit DeviceInfo(const QString &name, bool isAdvanced = true);
52
53 int id() const;
54 const QString& name() const;
55 const QString& description() const;
56 bool isAdvanced() const;
57 void setAdvanced(bool advanced);
58 const DeviceAccessList& accessList() const;
59 void addAccess(const DeviceAccess &access);
60 quint16 capabilities() const;
61 void setCapabilities(quint16 cap);
62
63private:
64 int m_id;
65 QString m_name;
66 QString m_description;
67 bool m_isAdvanced;
68 DeviceAccessList m_accessList;
69 quint16 m_capabilities;
70};
71
72/** \brief Keeps track of audio/video devices that libVLC supports
73 *
74 * This class maintains a device list. Types of devices:
75 * \li audio output devices
76 * \li audio capture devices
77 * \li video capture devices
78 *
79 * Methods are provided to retrieve information about these devices.
80 *
81 * \see EffectManager
82 */
83class DeviceManager : public QObject
84{
85 Q_OBJECT
86
87public:
88 /**
89 * Constructs a device manager and immediately updates the devices.
90 */
91 explicit DeviceManager(Backend *parent);
92
93 /**
94 * Clears all the devices before destroying.
95 */
96 virtual ~DeviceManager();
97
98 /**
99 * \param type Only devices with a capability of this type are returned
100 * The following are supported:
101 * \li AudioOutputDeviceType
102 * \li AudioCaptureDeviceType
103 * \li VideoCaptureDeviceType
104 *
105 * \return A list of device identifiers that have capabilities that
106 * match the desired type
107 *
108 * \note The capture devices are temporarily not implemented / removed
109 */
110 QList<int> deviceIds(ObjectDescriptionType type);
111
112 /**
113 * \param id The identifier for the device
114 * \return Object description properties for a device
115 */
116 QHash<QByteArray, QVariant> deviceProperties(int id);
117
118 /**
119 * \param id The identifier for the device
120 * \return Pointer to DeviceInfo, or NULL if the id is invalid
121 */
122 const DeviceInfo *device(int id) const;
123
124Q_SIGNALS:
125 void deviceAdded(int);
126 void deviceRemoved(int);
127
128public Q_SLOTS:
129 /**
130 * Update the current list of active devices. It probes for audio output devices,
131 * audio capture devices, video capture devices. The methods depend on the
132 * device types.
133 */
134 void updateDeviceList();
135
136private:
137 static bool listContainsDevice(const QList<DeviceInfo> &list, int id);
138
139private:
140 Backend *m_backend;
141 QList<DeviceInfo> m_devices;
142};
143}
144} // namespace Phonon::VLC
145
146#endif // Phonon_VLC_DEVICEMANAGER_H
147

source code of phonon-vlc/src/devicemanager.h