Use "= default" to denote default constructor or destructor
[WebKit-https.git] / Source / WebCore / platform / audio / AudioSession.h
1 /*
2  * Copyright (C) 2013-2014 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef AudioSession_h
27 #define AudioSession_h
28
29 #include "PlatformExportMacros.h"
30
31 #if USE(AUDIO_SESSION)
32
33 #include <memory>
34 #include <wtf/HashSet.h>
35 #include <wtf/NeverDestroyed.h>
36 #include <wtf/Noncopyable.h>
37
38 namespace WebCore {
39
40 class AudioSessionPrivate;
41
42 class AudioSession {
43     WTF_MAKE_NONCOPYABLE(AudioSession);
44 public:
45     WEBCORE_EXPORT static AudioSession& sharedSession();
46
47     enum CategoryType {
48         None,
49         AmbientSound,
50         SoloAmbientSound,
51         MediaPlayback,
52         RecordAudio,
53         PlayAndRecord,
54         AudioProcessing,
55     };
56     WEBCORE_EXPORT void setCategory(CategoryType);
57     WEBCORE_EXPORT CategoryType category() const;
58
59     void setCategoryOverride(CategoryType);
60     CategoryType categoryOverride() const;
61
62     float sampleRate() const;
63     size_t bufferSize() const;
64     size_t numberOfOutputChannels() const;
65
66     bool tryToSetActive(bool);
67
68     size_t preferredBufferSize() const;
69     void setPreferredBufferSize(size_t);
70
71     class MutedStateObserver {
72     public:
73         virtual ~MutedStateObserver() = default;
74
75         virtual void hardwareMutedStateDidChange(AudioSession*) = 0;
76     };
77
78     void addMutedStateObserver(MutedStateObserver*);
79     void removeMutedStateObserver(MutedStateObserver*);
80
81     bool isMuted() const;
82     void handleMutedStateChange();
83
84 private:
85     friend class NeverDestroyed<AudioSession>;
86     AudioSession();
87     ~AudioSession();
88
89     std::unique_ptr<AudioSessionPrivate> m_private;
90     HashSet<MutedStateObserver*> m_observers;
91 };
92
93 }
94
95 #endif // USE(AUDIO_SESSION)
96
97 #endif // AudioSession_h