Remove "virtual" from all lines that have both "virtual" and "override".
[WebKit-https.git] / Source / WebCore / platform / graphics / avfoundation / AudioSourceProviderAVFObjC.h
1 /*
2  * Copyright (C) 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 COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef AudioSourceProviderAVFObjC_h
27 #define AudioSourceProviderAVFObjC_h
28
29 #if ENABLE(WEB_AUDIO) && USE(MEDIATOOLBOX)
30
31 #include "AudioSourceProvider.h"
32 #include <wtf/MediaTime.h>
33 #include <wtf/RefCounted.h>
34 #include <wtf/RefPtr.h>
35 #include <wtf/RetainPtr.h>
36
37 OBJC_CLASS AVAssetTrack;
38 OBJC_CLASS AVPlayerItem;
39 OBJC_CLASS AVMutableAudioMix;
40
41 typedef const struct opaqueMTAudioProcessingTap *MTAudioProcessingTapRef;
42 typedef struct AudioBufferList AudioBufferList;
43 typedef struct AudioStreamBasicDescription AudioStreamBasicDescription;
44 typedef struct OpaqueAudioConverter* AudioConverterRef;
45 typedef uint32_t MTAudioProcessingTapFlags;
46 typedef signed long CMItemCount;
47
48 namespace WebCore {
49
50 class CARingBuffer;
51
52 class AudioSourceProviderAVFObjC : public RefCounted<AudioSourceProviderAVFObjC>, public AudioSourceProvider {
53 public:
54     static RefPtr<AudioSourceProviderAVFObjC> create(AVPlayerItem*);
55     virtual ~AudioSourceProviderAVFObjC();
56
57     void setPlayerItem(AVPlayerItem *);
58     void setAudioTrack(AVAssetTrack *);
59
60 private:
61     AudioSourceProviderAVFObjC(AVPlayerItem *);
62
63     void destroyMix();
64     void createMix();
65
66     // AudioSourceProvider
67     void provideInput(AudioBus*, size_t framesToProcess) override;
68     void setClient(AudioSourceProviderClient*) override;
69
70     static void initCallback(MTAudioProcessingTapRef, void*, void**);
71     static void finalizeCallback(MTAudioProcessingTapRef);
72     static void prepareCallback(MTAudioProcessingTapRef, CMItemCount, const AudioStreamBasicDescription*);
73     static void unprepareCallback(MTAudioProcessingTapRef);
74     static void processCallback(MTAudioProcessingTapRef, CMItemCount, MTAudioProcessingTapFlags, AudioBufferList*, CMItemCount*, MTAudioProcessingTapFlags*);
75
76     void init(void* clientInfo, void** tapStorageOut);
77     void finalize();
78     void prepare(CMItemCount maxFrames, const AudioStreamBasicDescription *processingFormat);
79     void unprepare();
80     void process(CMItemCount numberFrames, MTAudioProcessingTapFlags flagsIn, AudioBufferList *bufferListInOut, CMItemCount *numberFramesOut, MTAudioProcessingTapFlags *flagsOut);
81
82     RetainPtr<AVPlayerItem> m_avPlayerItem;
83     RetainPtr<AVAssetTrack> m_avAssetTrack;
84     RetainPtr<AVMutableAudioMix> m_avAudioMix;
85     RetainPtr<MTAudioProcessingTapRef> m_tap;
86     RetainPtr<AudioConverterRef> m_converter;
87     std::unique_ptr<AudioBufferList> m_list;
88     std::unique_ptr<AudioStreamBasicDescription> m_tapDescription;
89     std::unique_ptr<AudioStreamBasicDescription> m_outputDescription;
90     std::unique_ptr<CARingBuffer> m_ringBuffer;
91
92     MediaTime m_startTimeAtLastProcess;
93     MediaTime m_endTimeAtLastProcess;
94     uint64_t m_writeAheadCount;
95     uint64_t m_writeCount;
96     uint64_t m_readCount;
97     bool m_paused;
98     AudioSourceProviderClient* m_client;
99 };
100     
101 }
102
103 #endif
104
105 #endif