1/* This file is part of the KDE project
2 Copyright (C) 2006 Matthias Kretz <kretz@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) version 3, or any
8 later version accepted by the membership of KDE e.V. (or its
9 successor approved by the membership of KDE e.V.), Nokia Corporation
10 (or its successors, if any) and the KDE Free Qt Foundation, which shall
11 act as a proxy defined in Section 6 of version 3 of the license.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library. If not, see <http://www.gnu.org/licenses/>.
20
21*/
22
23#ifndef AUDIOOUTPUT_P_H
24#define AUDIOOUTPUT_P_H
25
26#include "audiooutput.h"
27#include "abstractaudiooutput_p.h"
28#include "platform_p.h"
29
30QT_BEGIN_NAMESPACE
31
32namespace Phonon
33{
34class AudioOutputAdaptor;
35
36class AudioOutputPrivate : public AbstractAudioOutputPrivate
37{
38 Q_DECLARE_PUBLIC(AudioOutput)
39 PHONON_PRIVATECLASS
40 public:
41 inline static AudioOutputPrivate *cast(MediaNodePrivate *x)
42 {
43 if (x && x->castId == MediaNodePrivate::AudioOutputType) {
44 return static_cast<AudioOutputPrivate *>(x);
45 }
46 return 0;
47 }
48 void init(Phonon::Category c);
49 QString getStreamUuid();
50
51
52 protected:
53 AudioOutputPrivate(CastId castId = MediaNodePrivate::AudioOutputType)
54 : AbstractAudioOutputPrivate(castId),
55 name(Platform::applicationName()),
56 volume(Platform::loadVolume(name)),
57#ifndef QT_NO_DBUS
58 adaptor(0),
59#endif
60 deviceBeforeFallback(-1),
61 outputDeviceOverridden(false),
62 forceMove(false),
63 muted(false)
64 {
65 }
66
67 ~AudioOutputPrivate();
68
69 enum DeviceChangeType {
70 FallbackChange,
71 HigherPreferenceChange,
72 SoundSystemChange
73 };
74 void handleAutomaticDeviceChange(const AudioOutputDevice &newDev, DeviceChangeType type);
75
76 void _k_volumeChanged(qreal);
77 void _k_revertFallback();
78 void _k_audioDeviceFailed();
79 void _k_deviceListChanged();
80 void _k_deviceChanged(QString streamUuid, int deviceIndex);
81
82 private:
83 QString name;
84 Phonon::AudioOutputDevice device;
85 qreal volume;
86 QString streamUuid;
87#ifndef QT_NO_DBUS
88 Phonon::AudioOutputAdaptor *adaptor;
89#endif
90 Category category;
91 int deviceBeforeFallback;
92 bool outputDeviceOverridden;
93 bool forceMove;
94 bool muted;
95};
96} //namespace Phonon
97
98QT_END_NAMESPACE
99
100#endif // AUDIOOUTPUT_P_H
101// vim: sw=4 ts=4 tw=80
102