From 7b1c7315966b3263dc9a67f93b035a6f07bba262 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 31 May 2022 09:38:18 +0200 Subject: Add QAudioBuffer.data()/constData() Fixes: PYSIDE-1947 Change-Id: I9e1799f245b8d75f61ad9551cb847994ea59bdb9 Reviewed-by: Cristian Maureira-Fredes (cherry picked from commit 41de0c478794a7cd67a9e118d6be600ecc15e5e8) Reviewed-by: Qt Cherry-pick Bot --- .../PySide6/QtMultimedia/typesystem_multimedia.xml | 9 ++++- sources/pyside6/PySide6/glue/qtmultimedia.cpp | 12 +++++++ sources/pyside6/tests/QtMultimedia/audio_test.py | 40 +++++++++++++++------- 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/sources/pyside6/PySide6/QtMultimedia/typesystem_multimedia.xml b/sources/pyside6/PySide6/QtMultimedia/typesystem_multimedia.xml index 61ee89cbf..1bf22761b 100644 --- a/sources/pyside6/PySide6/QtMultimedia/typesystem_multimedia.xml +++ b/sources/pyside6/PySide6/QtMultimedia/typesystem_multimedia.xml @@ -51,7 +51,14 @@ - + + + + + + + + diff --git a/sources/pyside6/PySide6/glue/qtmultimedia.cpp b/sources/pyside6/PySide6/glue/qtmultimedia.cpp index 36f831f07..648ec5329 100644 --- a/sources/pyside6/PySide6/glue/qtmultimedia.cpp +++ b/sources/pyside6/PySide6/glue/qtmultimedia.cpp @@ -44,3 +44,15 @@ const auto size = %CPPSELF.mappedBytes(%1); %PYARG_0 = Shiboken::Buffer::newObject(%0, size, Shiboken::Buffer::ReadWrite); // @snippet qvideoframe-bits + +// @snippet qaudiobuffer-data +unsigned char *data = %CPPSELF.%FUNCTION_NAME(); +const auto size = %CPPSELF.byteCount(); +%PYARG_0 = Shiboken::Buffer::newObject(data, size, Shiboken::Buffer::ReadWrite); +// @snippet qaudiobuffer-data + +// @snippet qaudiobuffer-const-data +const unsigned char *data = %CPPSELF.%FUNCTION_NAME(); +const auto size = %CPPSELF.byteCount(); +%PYARG_0 = Shiboken::Buffer::newObject(data, size); +// @snippet qaudiobuffer-const-data diff --git a/sources/pyside6/tests/QtMultimedia/audio_test.py b/sources/pyside6/tests/QtMultimedia/audio_test.py index a02eeeaa3..263ab0fc8 100644 --- a/sources/pyside6/tests/QtMultimedia/audio_test.py +++ b/sources/pyside6/tests/QtMultimedia/audio_test.py @@ -38,25 +38,26 @@ from init_paths import init_test_paths init_test_paths(False) from helper.usesqguiapplication import UsesQGuiApplication -from PySide6.QtMultimedia import QAudioDevice, QAudioFormat, QMediaDevices +from PySide6.QtCore import QByteArray +from PySide6.QtMultimedia import QAudioBuffer, QAudioFormat, QMediaDevices class testAudioDevices(UsesQGuiApplication): - def testListDevices(self): - valid = False - devices = QMediaDevices.audioOutputs() - if not len(devices): + def setUp(self): + super().setUp() + self._devices = [] + for d in QMediaDevices.audioOutputs(): + if d: + self._devices.append(d) + + def test_list_devices(self): + if not self._devices: + print("No audio outputs found") return - valid = True - for dev_info in devices: - if dev_info.id() == 'null': - # skip the test if the only device found is a invalid device - if len(devices) == 1: - return - else: - continue + for dev_info in self._devices: + print("Testing ", dev_info.id()) fmt = QAudioFormat() for sample_format in dev_info.supportedSampleFormats(): fmt.setSampleFormat(sample_format) @@ -64,6 +65,19 @@ class testAudioDevices(UsesQGuiApplication): fmt.setSampleRate(dev_info.maximumSampleRate()) self.assertTrue(dev_info.isFormatSupported(fmt)) + def test_audiobuffer(self): + """PYSIDE-1947: Test QAudioBuffer.data().""" + if not self._devices: + print("No audio outputs found") + return + size = 256 + byte_array = QByteArray(size, '7') + buffer = QAudioBuffer(byte_array, self._devices[0].preferredFormat()) + self.assertEqual(buffer.byteCount(), 256) + data = buffer.data() + actual_byte_array = QByteArray(bytearray(data)) + self.assertEqual(byte_array, actual_byte_array) + if __name__ == '__main__': unittest.main() -- cgit v1.2.3