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
30
QT_BEGIN_NAMESPACE
31
32
namespace Phonon
33
{
34
class AudioOutputAdaptor;
35
36
class 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
98
QT_END_NAMESPACE
99
100
#endif // AUDIOOUTPUT_P_H
101
// vim: sw=4 ts=4 tw=80