Changeset 211539 in webkit
- Timestamp:
- Feb 1, 2017, 3:38:04 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/Source/WebCore/ChangeLog ¶
r211531 r211539 1 2017-02-01 Eric Carlson <eric.carlson@apple.com> 2 3 [Mac] Update CARingBuffer class 4 https://bugs.webkit.org/show_bug.cgi?id=167656 5 6 Reviewed by Jer Noble. 7 8 API test CARingBufferTest added. 9 10 * WebCore.xcodeproj/project.pbxproj: Add headers to framework so they can be used from the API test. 11 12 * platform/audio/AudioStreamDescription.h: Add Int32. 13 14 * platform/audio/mac/CAAudioStreamDescription.cpp: 15 (WebCore::CAAudioStreamDescription::CAAudioStreamDescription): 16 (WebCore::CAAudioStreamDescription::~CAAudioStreamDescription): 17 (WebCore::CAAudioStreamDescription::format): Support Int32. 18 (WebCore::CAAudioStreamDescription::operator==): Make inline. 19 * platform/audio/mac/CAAudioStreamDescription.h: 20 21 * platform/audio/mac/CARingBuffer.cpp: 22 (WebCore::CARingBuffer::CARingBuffer): Move initializers into class declaration. 23 (WebCore::CARingBuffer::allocate): Use flush method, get allocation info from a CAAudioStreamDescription. 24 (WebCore::FetchABL): Add a mode parameter to allow samples to replace or mix into destination. 25 (WebCore::CARingBuffer::flush): New. 26 (WebCore::CARingBuffer::fetch): Add mode parameter. 27 (WebCore::CARingBuffer::~CARingBuffer): Deleted. 28 * platform/audio/mac/CARingBuffer.h: 29 (WebCore::CARingBuffer::~CARingBuffer): 30 31 * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm: 32 (WebCore::AudioSourceProviderAVFObjC::prepare): Use new CARingBuffer constructor. 33 (WebCore::operator==): Deleted. 34 (WebCore::operator!=): Deleted. 35 36 * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: 37 (WebCore::WebAudioSourceProviderAVFObjC::prepare): Use new CARingBuffer constructor 38 (WebCore::operator==): Deleted. 39 (WebCore::operator!=): Deleted. 40 1 41 2017-02-01 Zalan Bujtas <zalan@apple.com> 2 42 -
TabularUnified trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj ¶
r211473 r211539 279 279 07B7116E1D899E63009F0FFB /* CaptureDeviceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07B7116B1D899E63009F0FFB /* CaptureDeviceManager.cpp */; }; 280 280 07B7116F1D899E63009F0FFB /* CaptureDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B7116C1D899E63009F0FFB /* CaptureDeviceManager.h */; }; 281 07C046C31E42508B007201E7 /* CAAudioStreamDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073B87571E40DCFD0071C0EC /* CAAudioStreamDescription.cpp */; }; 282 07C046C41E42508B007201E7 /* CAAudioStreamDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 073B87581E40DCFD0071C0EC /* CAAudioStreamDescription.h */; settings = {ATTRIBUTES = (Private, ); }; }; 283 07C046C71E425155007201E7 /* AudioTrackPrivateMediaStreamCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C046C51E42512F007201E7 /* AudioTrackPrivateMediaStreamCocoa.cpp */; }; 284 07C046C81E425155007201E7 /* AudioTrackPrivateMediaStreamCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C046C61E42512F007201E7 /* AudioTrackPrivateMediaStreamCocoa.h */; }; 285 07C046CB1E426413007201E7 /* AudioStreamDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 073B87561E40DCE50071C0EC /* AudioStreamDescription.h */; settings = {ATTRIBUTES = (Private, ); }; }; 281 286 07C1C0E21BFB600100BD2256 /* MediaTrackSupportedConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C1C0E01BFB600100BD2256 /* MediaTrackSupportedConstraints.h */; }; 282 287 07C1C0E51BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C1C0E41BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 5898 5903 CDC69DDB16371FD4007C38DF /* WebCoreFullScreenPlaceholderView.mm in Sources */ = {isa = PBXBuildFile; fileRef = CDC69DD916371FD3007C38DF /* WebCoreFullScreenPlaceholderView.mm */; }; 5899 5904 CDC734141977896C0046BFC5 /* CARingBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDC734121977896C0046BFC5 /* CARingBuffer.cpp */; }; 5900 CDC734151977896D0046BFC5 /* CARingBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC734131977896C0046BFC5 /* CARingBuffer.h */; };5905 CDC734151977896D0046BFC5 /* CARingBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC734131977896C0046BFC5 /* CARingBuffer.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5901 5906 CDC8B5A2180463470016E685 /* MediaPlayerPrivateMediaSourceAVFObjC.mm in Sources */ = {isa = PBXBuildFile; fileRef = CDC8B5A0180463470016E685 /* MediaPlayerPrivateMediaSourceAVFObjC.mm */; }; 5902 5907 CDC8B5A3180463470016E685 /* MediaPlayerPrivateMediaSourceAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC8B5A1180463470016E685 /* MediaPlayerPrivateMediaSourceAVFObjC.h */; }; … … 15352 15357 07707CB11E20649C00005BF7 /* AudioCaptureSourceProviderObjC.h */, 15353 15358 07707CAF1E205EC400005BF7 /* AudioSourceObserverObjC.h */, 15359 07C046C51E42512F007201E7 /* AudioTrackPrivateMediaStreamCocoa.cpp */, 15360 07C046C61E42512F007201E7 /* AudioTrackPrivateMediaStreamCocoa.h */, 15354 15361 070363D8181A1CDC00C074A5 /* AVAudioCaptureSource.h */, 15355 15362 070363D9181A1CDC00C074A5 /* AVAudioCaptureSource.mm */, … … 24890 24897 isa = PBXGroup; 24891 24898 children = ( 24892 073B87571E40DCFD0071C0EC /* CAAudioStreamDescription.cpp */,24893 073B87581E40DCFD0071C0EC /* CAAudioStreamDescription.h */,24894 24899 FD3160B512B0272A00C1A359 /* AudioBusMac.mm */, 24895 24900 FD3160B612B0272A00C1A359 /* AudioDestinationMac.cpp */, … … 24902 24907 CDC734121977896C0046BFC5 /* CARingBuffer.cpp */, 24903 24908 CDC734131977896C0046BFC5 /* CARingBuffer.h */, 24909 073B87571E40DCFD0071C0EC /* CAAudioStreamDescription.cpp */, 24910 073B87581E40DCFD0071C0EC /* CAAudioStreamDescription.h */, 24904 24911 FD3160BA12B0272A00C1A359 /* FFTFrameMac.cpp */, 24905 24912 CD669D671D232E10004D1866 /* MediaSessionManagerMac.h */, … … 26572 26579 75793EC90D0CE72D007FC0AC /* JSMessageEvent.h in Headers */, 26573 26580 E1ADEDDA0E76BD93004A1A5E /* JSMessagePort.h in Headers */, 26581 07C046CB1E426413007201E7 /* AudioStreamDescription.h in Headers */, 26574 26582 CDF4B7301E03CA4A00E235A2 /* JSMockCDMFactory.h in Headers */, 26575 26583 2D6F3E951C1F85550061DBD4 /* JSMockPageOverlay.h in Headers */, … … 27696 27704 2D76BB821945632400CFD29A /* RunLoopObserver.h in Headers */, 27697 27705 1A569D1F0D7E2B82007C3983 /* runtime_array.h in Headers */, 27706 07C046C41E42508B007201E7 /* CAAudioStreamDescription.h in Headers */, 27698 27707 1A569D210D7E2B82007C3983 /* runtime_method.h in Headers */, 27699 27708 1A569D230D7E2B82007C3983 /* runtime_object.h in Headers */, … … 27761 27770 0FEA3E80191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.h in Headers */, 27762 27771 9391A99D1629D70000297330 /* ScrollingTreeScrollingNode.h in Headers */, 27772 07C046C81E425155007201E7 /* AudioTrackPrivateMediaStreamCocoa.h in Headers */, 27763 27773 0FB8890A167D2FA10010CDA5 /* ScrollingTreeStickyNode.h in Headers */, 27764 27774 7AAFE8D019CB8672000F56D8 /* ScrollLatchingState.h in Headers */, … … 28316 28326 FFAC30FE184FB145008C4F1E /* TrailingObjects.h in Headers */, 28317 28327 516071321BD8308B00DBC4F2 /* TransactionOperation.h in Headers */, 28328 07C046C21E425022007201E7 /* AudioSampleDataSource.h in Headers */, 28318 28329 49E911C40EF86D47009D0CAF /* TransformationMatrix.h in Headers */, 28319 28330 FB484F4D171F821E00040755 /* TransformFunctions.h in Headers */, … … 30423 30434 FDA15EB112B03EE1003A583A /* JSPannerNode.cpp in Sources */, 30424 30435 E51A81DF17298D7700BFCA61 /* JSPerformance.cpp in Sources */, 30436 07C046C11E425022007201E7 /* AudioSampleDataSource.cpp in Sources */, 30425 30437 CB38FD511CCF938900592A3F /* JSPerformanceEntry.cpp in Sources */, 30426 30438 CB38FD571CD21E2A00592A3F /* JSPerformanceEntryCustom.cpp in Sources */, … … 30768 30780 A513B3D8114B166A001C429B /* KeyEventCocoa.mm in Sources */, 30769 30781 2655413A1489811C000DFC5D /* KeyEventIOS.mm in Sources */, 30782 07C046C31E42508B007201E7 /* CAAudioStreamDescription.cpp in Sources */, 30770 30783 935C477009AC4D7300A6AAB4 /* KeyEventMac.mm in Sources */, 30771 30784 316FE1190E6E1DA700BF6088 /* KeyframeAnimation.cpp in Sources */, … … 32014 32027 6F995A231A7078B100A735F4 /* WebGLTransformFeedback.cpp in Sources */, 32015 32028 0C3F1F5A10C8871200D72CE1 /* WebGLUniformLocation.cpp in Sources */, 32029 07C046C71E425155007201E7 /* AudioTrackPrivateMediaStreamCocoa.cpp in Sources */, 32016 32030 6F995A251A7078B100A735F4 /* WebGLVertexArrayObject.cpp in Sources */, 32017 32031 6F222B761AB52D8A0094651A /* WebGLVertexArrayObjectBase.cpp in Sources */, -
TabularUnified trunk/Source/WebCore/platform/audio/AudioStreamDescription.h ¶
r211437 r211539 49 49 None, 50 50 Int16, 51 Int32, 51 52 Float32, 52 53 Float64 -
TabularUnified trunk/Source/WebCore/platform/audio/mac/CAAudioStreamDescription.cpp ¶
r211437 r211539 29 29 namespace WebCore { 30 30 31 CAAudioStreamDescription::CAAudioStreamDescription() 32 : m_streamDescription({ }) 33 { 34 } 35 36 CAAudioStreamDescription::~CAAudioStreamDescription() 37 { 38 } 39 31 40 CAAudioStreamDescription::CAAudioStreamDescription(const AudioStreamBasicDescription &desc) 32 41 : m_streamDescription(desc) … … 47 56 int wordsize; 48 57 switch (format) { 58 case Int16: 59 wordsize = 2; 60 m_streamDescription.mFormatFlags |= kAudioFormatFlagIsSignedInteger; 61 break; 62 case Int32: 63 wordsize = 4; 64 m_streamDescription.mFormatFlags |= kAudioFormatFlagIsSignedInteger; 65 break; 49 66 case Float32: 50 67 wordsize = 4; … … 54 71 wordsize = 8; 55 72 m_streamDescription.mFormatFlags |= kAudioFormatFlagIsFloat; 56 break;57 case Int16:58 wordsize = 2;59 m_streamDescription.mFormatFlags |= kAudioFormatFlagIsSignedInteger;60 73 break; 61 74 case None: … … 110 123 if (wordsize == sizeof(float)) 111 124 return m_format = Float32; 112 elseif (wordsize == sizeof(double))125 if (wordsize == sizeof(double)) 113 126 return m_format = Float64; 114 127 … … 118 131 if (m_streamDescription.mFormatFlags & kLinearPCMFormatFlagIsSignedInteger) { 119 132 unsigned fractionBits = (m_streamDescription.mFormatFlags & kLinearPCMFormatFlagsSampleFractionMask) >> kLinearPCMFormatFlagsSampleFractionShift; 120 if (wordsize == 2 && !fractionBits) 121 return m_format = Int16; 133 if (!fractionBits) { 134 if (wordsize == sizeof(int16_t)) 135 return m_format = Int16; 136 if (wordsize == sizeof(int32_t)) 137 return m_format = Int32; 138 } 122 139 } 123 140 } 124 141 125 142 return None; 126 }127 128 bool CAAudioStreamDescription::operator==(const AudioStreamDescription& other)129 {130 if (other.platformDescription().type != PlatformDescription::CAAudioStreamBasicType)131 return false;132 133 return operator==(*WTF::get<const AudioStreamBasicDescription*>(other.platformDescription().description));134 143 } 135 144 -
TabularUnified trunk/Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h ¶
r211437 r211539 36 36 class CAAudioStreamDescription final : public AudioStreamDescription { 37 37 public: 38 CAAudioStreamDescription(const AudioStreamBasicDescription&); 39 CAAudioStreamDescription(double, uint32_t, PCMFormat, bool); 38 39 WEBCORE_EXPORT CAAudioStreamDescription(); 40 WEBCORE_EXPORT CAAudioStreamDescription(const AudioStreamBasicDescription&); 41 WEBCORE_EXPORT CAAudioStreamDescription(double, uint32_t, PCMFormat, bool); 42 WEBCORE_EXPORT ~CAAudioStreamDescription(); 40 43 41 44 const PlatformDescription& platformDescription() const final; … … 44 47 45 48 double sampleRate() const final { return m_streamDescription.mSampleRate; } 46 49 bool isPCM() const final { return m_streamDescription.mFormatID == kAudioFormatLinearPCM; } 47 50 bool isInterleaved() const final { return !(m_streamDescription.mFormatFlags & kAudioFormatFlagIsNonInterleaved); } 48 51 bool isSignedInteger() const final { return isPCM() && (m_streamDescription.mFormatFlags & kAudioFormatFlagIsSignedInteger); } … … 62 65 bool operator==(const AudioStreamBasicDescription& other) { return m_streamDescription == other; } 63 66 bool operator!=(const AudioStreamBasicDescription& other) { return !operator == (other); } 64 bool operator==(const AudioStreamDescription&); 67 bool operator==(const AudioStreamDescription& other) 68 { 69 if (other.platformDescription().type != PlatformDescription::CAAudioStreamBasicType) 70 return false; 71 72 return operator==(*WTF::get<const AudioStreamBasicDescription*>(other.platformDescription().description)); 73 } 65 74 bool operator!=(const AudioStreamDescription& other) { return !operator == (other); } 66 75 -
TabularUnified trunk/Source/WebCore/platform/audio/mac/CARingBuffer.cpp ¶
r201432 r211539 29 29 #if ENABLE(WEB_AUDIO) && USE(MEDIATOOLBOX) 30 30 31 #include "CAAudioStreamDescription.h" 32 #include <Accelerate/Accelerate.h> 31 33 #include <CoreAudio/CoreAudioTypes.h> 32 34 #include <wtf/MathExtras.h> … … 38 40 39 41 CARingBuffer::CARingBuffer() 40 : m_channelCount(0) 41 , m_frameCount(0) 42 , m_capacityBytes(0) 43 , m_timeBoundsQueue(kGeneralRingTimeBoundsQueueSize) 44 , m_timeBoundsQueuePtr(0) 45 { 46 } 47 48 CARingBuffer::~CARingBuffer() 49 { 50 deallocate(); 42 : m_timeBoundsQueue(kGeneralRingTimeBoundsQueueSize) 43 { 44 } 45 46 void CARingBuffer::allocate(const CAAudioStreamDescription& format, size_t frameCount) 47 { 48 m_description = format; 49 allocate(format.numberOfChannelStreams(), format.bytesPerFrame(), frameCount); 51 50 } 52 51 … … 75 74 } 76 75 77 for (auto timeBounds : m_timeBoundsQueue) { 78 timeBounds.m_startFrame = 0; 79 timeBounds.m_endFrame = 0; 80 timeBounds.m_updateCounter = 0; 81 } 82 m_timeBoundsQueuePtr = 0; 76 flush(); 83 77 } 84 78 … … 114 108 } 115 109 116 static void FetchABL(AudioBufferList* list, size_t destOffset, Byte** buffers, size_t srcOffset, size_t nbytes )110 static void FetchABL(AudioBufferList* list, size_t destOffset, Byte** buffers, size_t srcOffset, size_t nbytes, AudioStreamDescription::PCMFormat format, CARingBuffer::FetchMode mode) 117 111 { 118 112 int channelCount = list->mNumberBuffers; … … 121 115 if (destOffset > dest->mDataByteSize) 122 116 continue; 123 memcpy(static_cast<Byte*>(dest->mData) + destOffset, *buffers + srcOffset, std::min<size_t>(nbytes, dest->mDataByteSize - destOffset)); 117 118 nbytes = std::min<size_t>(nbytes, dest->mDataByteSize - destOffset); 119 if (mode == CARingBuffer::Copy) 120 memcpy(static_cast<Byte*>(dest->mData) + destOffset, *buffers + srcOffset, nbytes); 121 else { 122 switch (format) { 123 case AudioStreamDescription::Int16: { 124 int16_t* destination = static_cast<int16_t*>(dest->mData); 125 int16_t* source = reinterpret_cast<int16_t*>(*buffers + srcOffset); 126 for (size_t i = 0; i < nbytes / sizeof(int16_t); i++) 127 destination[i] += source[i]; 128 break; 129 } 130 case AudioStreamDescription::Int32: { 131 int32_t* destination = static_cast<int32_t*>(dest->mData); 132 vDSP_vaddi(destination, 1, reinterpret_cast<int32_t*>(*buffers + srcOffset), 1, destination, 1, nbytes / sizeof(int32_t)); 133 break; 134 } 135 case AudioStreamDescription::Float32: { 136 float* destination = static_cast<float*>(dest->mData); 137 vDSP_vadd(destination, 1, reinterpret_cast<float*>(*buffers + srcOffset), 1, destination, 1, nbytes / sizeof(float)); 138 break; 139 } 140 case AudioStreamDescription::Float64: { 141 double* destination = static_cast<double*>(dest->mData); 142 vDSP_vaddD(destination, 1, reinterpret_cast<double*>(*buffers + srcOffset), 1, destination, 1, nbytes / sizeof(double)); 143 break; 144 } 145 case AudioStreamDescription::None: 146 ASSERT_NOT_REACHED(); 147 break; 148 } 149 } 124 150 ++buffers; 125 151 ++dest; … … 137 163 ++dest; 138 164 } 165 } 166 167 void CARingBuffer::flush() 168 { 169 LockHolder locker(m_currentFrameBoundsLock); 170 for (auto& timeBounds : m_timeBoundsQueue) { 171 timeBounds.m_startFrame = 0; 172 timeBounds.m_endFrame = 0; 173 timeBounds.m_updateCounter = 0; 174 } 175 m_timeBoundsQueuePtr = 0; 139 176 } 140 177 … … 250 287 } 251 288 252 CARingBuffer::Error CARingBuffer::fetch(AudioBufferList* list, size_t nFrames, uint64_t startRead )289 CARingBuffer::Error CARingBuffer::fetch(AudioBufferList* list, size_t nFrames, uint64_t startRead, FetchMode mode) 253 290 { 254 291 if (!nFrames) … … 287 324 if (offset0 < offset1) { 288 325 nbytes = offset1 - offset0; 289 FetchABL(list, destStartByteOffset, buffers, offset0, nbytes );326 FetchABL(list, destStartByteOffset, buffers, offset0, nbytes, m_description.format(), mode); 290 327 } else { 291 328 nbytes = m_capacityBytes - offset0; 292 FetchABL(list, destStartByteOffset, buffers, offset0, nbytes); 293 FetchABL(list, destStartByteOffset + nbytes, buffers, 0, offset1); 329 FetchABL(list, destStartByteOffset, buffers, offset0, nbytes, m_description.format(), mode); 330 if (offset1) 331 FetchABL(list, destStartByteOffset + nbytes, buffers, 0, offset1, m_description.format(), mode); 294 332 nbytes += offset1; 295 333 } -
TabularUnified trunk/Source/WebCore/platform/audio/mac/CARingBuffer.h ¶
r201432 r211539 24 24 */ 25 25 26 #ifndef CARingBuffer_h 27 #define CARingBuffer_h 26 #pragma once 28 27 29 28 #if ENABLE(WEB_AUDIO) && USE(MEDIATOOLBOX) 30 29 30 #include "AudioStreamDescription.h" 31 #include "CAAudioStreamDescription.h" 31 32 #include <runtime/ArrayBuffer.h> 32 33 #include <wtf/Lock.h> … … 39 40 class CARingBuffer { 40 41 public: 41 CARingBuffer(); 42 ~CARingBuffer(); 42 WEBCORE_EXPORT CARingBuffer(); 43 WEBCORE_EXPORT ~CARingBuffer() 44 { 45 deallocate(); 46 } 43 47 44 48 enum Error { 45 49 Ok, 46 50 TooMuch, // fetch start time is earlier than buffer start time and fetch end time is later than buffer end time 47 CPUOverload, // the reader is unable to get enough CPU cycles to capture a consistent snapshot of the time bounds48 51 }; 49 52 50 void allocate(uint32_t m_channelCount, size_t bytesPerFrame, size_t frameCount); 51 void deallocate(); 52 Error store(const AudioBufferList*, size_t frameCount, uint64_t startFrame); 53 Error fetch(AudioBufferList*, size_t frameCount, uint64_t startFrame); 54 void getCurrentFrameBounds(uint64_t &startTime, uint64_t &endTime); 53 WEBCORE_EXPORT void allocate(const CAAudioStreamDescription&, size_t); 54 WEBCORE_EXPORT void deallocate(); 55 56 WEBCORE_EXPORT Error store(const AudioBufferList*, size_t frameCount, uint64_t startFrame); 57 58 enum FetchMode { Copy, Mix }; 59 WEBCORE_EXPORT Error fetch(AudioBufferList*, size_t frameCount, uint64_t startFrame, FetchMode mode = Copy); 60 61 WEBCORE_EXPORT void flush(); 62 63 WEBCORE_EXPORT void getCurrentFrameBounds(uint64_t &startTime, uint64_t &endTime); 55 64 56 65 uint32_t channelCount() const { return m_channelCount; } 57 66 58 67 private: 68 void allocate(uint32_t m_channelCount, size_t bytesPerFrame, size_t frameCount); 59 69 size_t frameOffset(uint64_t frameNumber) { return (frameNumber & m_frameCountMask) * m_bytesPerFrame; } 60 70 … … 66 76 67 77 RefPtr<ArrayBuffer> m_buffers; 68 uint32_t m_channelCount ;69 size_t m_bytesPerFrame ;70 uint32_t m_frameCount ;71 uint32_t m_frameCountMask ;72 size_t m_capacityBytes ;78 uint32_t m_channelCount { 0 }; 79 size_t m_bytesPerFrame { 0 }; 80 uint32_t m_frameCount { 0 }; 81 uint32_t m_frameCountMask { 0 }; 82 size_t m_capacityBytes { 0 }; 73 83 74 84 struct TimeBounds { … … 83 93 volatile uint32_t m_updateCounter; 84 94 }; 85 95 96 CAAudioStreamDescription m_description; 86 97 Vector<TimeBounds> m_timeBoundsQueue; 87 98 Lock m_currentFrameBoundsLock; 88 std::atomic<int32_t> m_timeBoundsQueuePtr ;99 std::atomic<int32_t> m_timeBoundsQueuePtr { 0 }; 89 100 }; 90 101 … … 92 103 93 104 #endif // ENABLE(WEB_AUDIO) && USE(MEDIATOOLBOX) 94 95 #endif // CARingBuffer_h -
TabularUnified trunk/Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm ¶
r203303 r211539 265 265 } 266 266 267 static bool operator==(const AudioStreamBasicDescription& a, const AudioStreamBasicDescription& b)268 {269 return a.mSampleRate == b.mSampleRate270 && a.mFormatID == b.mFormatID271 && a.mFormatFlags == b.mFormatFlags272 && a.mBytesPerPacket == b.mBytesPerPacket273 && a.mFramesPerPacket == b.mFramesPerPacket274 && a.mBytesPerFrame == b.mBytesPerFrame275 && a.mChannelsPerFrame == b.mChannelsPerFrame276 && a.mBitsPerChannel == b.mBitsPerChannel;277 }278 279 static bool operator!=(const AudioStreamBasicDescription& a, const AudioStreamBasicDescription& b)280 {281 return !(a == b);282 }283 284 267 void AudioSourceProviderAVFObjC::prepare(CMItemCount maxFrames, const AudioStreamBasicDescription *processingFormat) 285 268 { … … 290 273 m_tapDescription = std::make_unique<AudioStreamBasicDescription>(*processingFormat); 291 274 int numberOfChannels = processingFormat->mChannelsPerFrame; 292 size_t bytesPerFrame = processingFormat->mBytesPerFrame;293 275 double sampleRate = processingFormat->mSampleRate; 294 276 ASSERT(sampleRate >= 0); … … 315 297 316 298 m_ringBuffer = std::make_unique<CARingBuffer>(); 317 m_ringBuffer->allocate( numberOfChannels, bytesPerFrame, capacity);299 m_ringBuffer->allocate(CAAudioStreamDescription(*processingFormat), capacity); 318 300 319 301 // AudioBufferList is a variable-length struct, so create on the heap with a generic new() operator -
TabularUnified trunk/Source/WebCore/platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm ¶
r210742 r211539 135 135 } 136 136 137 static bool operator==(const AudioStreamBasicDescription& a, const AudioStreamBasicDescription& b)138 {139 return a.mSampleRate == b.mSampleRate140 && a.mFormatID == b.mFormatID141 && a.mFormatFlags == b.mFormatFlags142 && a.mBytesPerPacket == b.mBytesPerPacket143 && a.mFramesPerPacket == b.mFramesPerPacket144 && a.mBytesPerFrame == b.mBytesPerFrame145 && a.mChannelsPerFrame == b.mChannelsPerFrame146 && a.mBitsPerChannel == b.mBitsPerChannel;147 }148 149 static bool operator!=(const AudioStreamBasicDescription& a, const AudioStreamBasicDescription& b)150 {151 return !(a == b);152 }153 154 137 void WebAudioSourceProviderAVFObjC::prepare(const AudioStreamBasicDescription* format) 155 138 { … … 202 185 203 186 m_ringBuffer = std::make_unique<CARingBuffer>(); 204 m_ringBuffer->allocate( numberOfChannels, format->mBytesPerFrame, static_cast<size_t>(capacity));187 m_ringBuffer->allocate(CAAudioStreamDescription(*format), static_cast<size_t>(capacity)); 205 188 206 189 m_listBufferSize = static_cast<size_t>(bufferListSize); -
TabularUnified trunk/Tools/ChangeLog ¶
r211526 r211539 1 2017-02-01 Eric Carlson <eric.carlson@apple.com> 2 3 [Mac] Update CARingBuffer class 4 https://bugs.webkit.org/show_bug.cgi?id=167656 5 6 Reviewed by Jer Noble. 7 8 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 9 * TestWebKitAPI/Tests/WebCore/CARingBuffer.cpp: Added. 10 (TestWebKitAPI::CARingBufferTest::SetUp): 11 (TestWebKitAPI::CARingBufferTest::setup): 12 (TestWebKitAPI::CARingBufferTest::setListDataBuffer): 13 (TestWebKitAPI::CARingBufferTest::description): 14 (TestWebKitAPI::CARingBufferTest::bufferList): 15 (TestWebKitAPI::CARingBufferTest::ringBuffer): 16 (TestWebKitAPI::CARingBufferTest::capacity): 17 (TestWebKitAPI::CARingBufferTest::audioBufferListSizeForStream): 18 (TestWebKitAPI::CARingBufferTest::configureBufferListForStream): 19 (TestWebKitAPI::TEST_F): 20 (TestWebKitAPI::MixingTest::run): 21 1 22 2017-02-01 Alexey Proskuryakov <ap@apple.com> 2 23 -
TabularUnified trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj ¶
r211354 r211539 25 25 07492B3B1DF8B14C00633DE1 /* EnumerateMediaDevices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07492B3A1DF8AE2D00633DE1 /* EnumerateMediaDevices.cpp */; }; 26 26 07492B3C1DF8B86600633DE1 /* enumerateMediaDevices.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 07492B391DF8ADA400633DE1 /* enumerateMediaDevices.html */; }; 27 07C046CA1E4262A8007201E7 /* CARingBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C046C91E42573E007201E7 /* CARingBuffer.cpp */; }; 27 28 0F139E771A423A5B00F590F5 /* WeakObjCPtr.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F139E751A423A5300F590F5 /* WeakObjCPtr.mm */; }; 28 29 0F139E781A423A6B00F590F5 /* PlatformUtilitiesCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F139E721A423A2B00F590F5 /* PlatformUtilitiesCocoa.mm */; }; … … 786 787 07492B3A1DF8AE2D00633DE1 /* EnumerateMediaDevices.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EnumerateMediaDevices.cpp; sourceTree = "<group>"; }; 787 788 0766DD1F1A5AD5200023E3BB /* PendingAPIRequestURL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PendingAPIRequestURL.cpp; sourceTree = "<group>"; }; 789 07C046C91E42573E007201E7 /* CARingBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CARingBuffer.cpp; sourceTree = "<group>"; }; 788 790 0BCD833414857CE400EA2003 /* HashMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HashMap.cpp; sourceTree = "<group>"; }; 789 791 0BCD85691485C98B00EA2003 /* SetForScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetForScope.cpp; sourceTree = "<group>"; }; … … 1591 1593 CD89D0371C4EDB1300040A04 /* cocoa */, 1592 1594 7A909A6F1D877475007E10F8 /* AffineTransform.cpp */, 1595 07C046C91E42573E007201E7 /* CARingBuffer.cpp */, 1593 1596 7A909A701D877475007E10F8 /* FloatPoint.cpp */, 1594 1597 7A909A711D877475007E10F8 /* FloatRect.cpp */, … … 2672 2675 7C83E0C31D0A653A00FEBCF3 /* RemoteObjectRegistry.mm in Sources */, 2673 2676 7CCE7EC91A411A7E00447C4C /* RenderedImageFromDOMNode.mm in Sources */, 2677 07C046CA1E4262A8007201E7 /* CARingBuffer.cpp in Sources */, 2674 2678 7A909A7D1D877480007E10F8 /* AffineTransform.cpp in Sources */, 2675 2679 7CCE7ECA1A411A7E00447C4C /* RenderedImageFromDOMRange.mm in Sources */,
Note:
See TracChangeset
for help on using the changeset viewer.