minor optimisation of the audio processing 58/5858/1
authorJosé Bollo <jose.bollo@eurogiciel.fr>
Wed, 17 Jul 2013 09:42:49 +0000 (11:42 +0200)
committerJosé Bollo <jose.bollo@eurogiciel.fr>
Wed, 17 Jul 2013 09:44:01 +0000 (11:44 +0200)
Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp

index 0f033e0..ad165c5 100644 (file)
@@ -94,16 +94,14 @@ private:
 static void copyGstreamerBuffersToAudioChannel(GstBufferList* buffers, AudioChannel* audioChannel)
 {
 #ifdef GST_API_VERSION_1
-    gsize offset = 0;
-    for (unsigned i = 0; i < gst_buffer_list_length(buffers); i++) {
+    float* destination = audioChannel->mutableData();
+    unsigned bufferCount = gst_buffer_list_length(buffers);
+    for (unsigned i = 0; i < bufferCount; ++i) {
         GstBuffer* buffer = gst_buffer_list_get(buffers, i);
-        if (!buffer)
-            continue;
-        GstMapInfo info;
-        gst_buffer_map(buffer, &info, GST_MAP_READ);
-        memcpy(audioChannel->mutableData() + offset, reinterpret_cast<float*>(info.data), info.size);
-        offset += info.size / sizeof(float);
-        gst_buffer_unmap(buffer, &info);
+        ASSERT(buffer);
+        gsize bufferSize = gst_buffer_get_size(buffer);
+        gst_buffer_extract(buffer, 0, destination, bufferSize);
+        destination += bufferSize / sizeof(float);
     }
 #else
     GstBufferListIterator* iter = gst_buffer_list_iterate(buffers);