Changeset 275510 in webkit
- Timestamp:
- Apr 6, 2021 6:24:32 AM (3 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r275509 r275510 1 2021-04-06 Philippe Normand <pnormand@igalia.com> 2 3 [GStreamer][MediaStream] AudioSource triggering critical warnings 4 https://bugs.webkit.org/show_bug.cgi?id=224180 5 6 Reviewed by Xabier Rodriguez-Calvar. 7 8 Keep track of audio channel offsets and store them as metadata in audio buffers. This is 9 used by downstream elements such as the audio convert elements. 10 11 * Modules/webaudio/MediaStreamAudioSourceGStreamer.cpp: 12 (WebCore::copyBusData): 13 (WebCore::MediaStreamAudioSource::consumeAudio): 14 1 15 2021-04-06 Antti Koivisto <antti@apple.com> 2 16 -
trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSourceGStreamer.cpp
r269849 r275510 30 30 namespace WebCore { 31 31 32 static voidcopyBusData(AudioBus& bus, GstBuffer* buffer, bool isMuted)32 static Vector<size_t> copyBusData(AudioBus& bus, GstBuffer* buffer, bool isMuted) 33 33 { 34 Vector<size_t> offsets; 34 35 GstMappedBuffer mappedBuffer(buffer, GST_MAP_WRITE); 35 36 if (isMuted) { 36 37 memset(mappedBuffer.data(), 0, mappedBuffer.size()); 37 return ;38 return offsets; 38 39 } 39 40 41 DisableMallocRestrictionsForCurrentThreadScope disableMallocRestrictions; 42 offsets.reserveInitialCapacity(sizeof(size_t) * bus.numberOfChannels()); 40 43 size_t size = mappedBuffer.size() / bus.numberOfChannels(); 41 44 for (size_t channelIndex = 0; channelIndex < bus.numberOfChannels(); ++channelIndex) { 42 AudioChannel& channel = *bus.channel(channelIndex); 43 float* destination = reinterpret_cast<float*>(mappedBuffer.data() + (channelIndex * size)); 44 memcpy(destination, channel.data(), size); 45 const auto& channel = *bus.channel(channelIndex); 46 auto offset = reinterpret_cast<size_t>(channelIndex * size); 47 memcpy(reinterpret_cast<float*>(mappedBuffer.data() + offset), channel.data(), sizeof(float) * channel.length()); 48 offsets.uncheckedAppend(offset); 45 49 } 50 return offsets; 46 51 } 47 52 … … 63 68 auto caps = adoptGRef(gst_audio_info_to_caps(&info)); 64 69 auto buffer = adoptGRef(gst_buffer_new_allocate(nullptr, size, nullptr)); 65 copyBusData(bus, buffer.get(), muted()); 70 auto offsets = copyBusData(bus, buffer.get(), muted()); 71 #if GST_CHECK_VERSION(1, 16, 0) 72 gst_buffer_add_audio_meta(buffer.get(), &info, numberOfFrames, offsets.data()); 73 #else 74 UNUSED_VARIABLE(offsets); 75 #endif 66 76 auto sample = adoptGRef(gst_sample_new(buffer.get(), caps.get(), nullptr, nullptr)); 67 77 GStreamerAudioData audioBuffer(WTFMove(sample), info);
Note: See TracChangeset
for help on using the changeset viewer.