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++) {
        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);
    }
#else
    GstBufferListIterator* iter = gst_buffer_list_iterate(buffers);
    gst_buffer_list_iterator_next_group(iter);
    GstBuffer* buffer = gst_buffer_list_iterator_merge_group(iter);
    if (buffer) {
        memcpy(audioChannel->mutableData(), reinterpret_cast<float*>(GST_BUFFER_DATA(buffer)), GST_BUFFER_SIZE(buffer));
        gst_buffer_unref(buffer);
    }

    gst_buffer_list_iterator_free(iter);
#endif
}
Esempio n. 2
0
BufferPtr BufferListIterator::mergeGroup() const
{
    return BufferPtr::wrap(gst_buffer_list_iterator_merge_group(m_it), false);
}