From 5f464b2de04c6b6e351c4046ec28e55839a7adf4 Mon Sep 17 00:00:00 2001 From: Falk David Date: Thu, 6 Mar 2025 16:30:35 +0100 Subject: [PATCH 1/9] Fix #135235: Grease Pencil: Crash when removing layers in python API When iterating over the layers in a Grease Pencil object, removing the layers can lead to crashes. This PR is a better alternative to !135253. Instead of checking if the layer is valid, simply fetch the latest layer cache for each iteration and check if the index is valid. This means that we will skip over layers if they get removed during iteration, but we no longer can crash. If users want to remove multiple layers at once, it's better to do this in two passes. E.g. by first collecting the names of the layers to remove, iterating over these names and then removing the layers by getting it by its name. Pull Request: https://projects.blender.org/blender/blender/pulls/135574 --- .../makesrna/intern/rna_grease_pencil.cc | 61 ++++++++++++++++--- 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/source/blender/makesrna/intern/rna_grease_pencil.cc b/source/blender/makesrna/intern/rna_grease_pencil.cc index 1e8ee03e3a8..39de3da54ff 100644 --- a/source/blender/makesrna/intern/rna_grease_pencil.cc +++ b/source/blender/makesrna/intern/rna_grease_pencil.cc @@ -309,10 +309,31 @@ static void rna_iterator_grease_pencil_layers_begin(CollectionPropertyIterator * { using namespace blender::bke::greasepencil; GreasePencil *grease_pencil = rna_grease_pencil(ptr); + const blender::Span layers = grease_pencil->layers(); + + iter->internal.count.item = 0; + iter->valid = !layers.is_empty(); +} + +static void rna_iterator_grease_pencil_layers_next(CollectionPropertyIterator *iter) +{ + using namespace blender::bke::greasepencil; + GreasePencil *grease_pencil = static_cast(iter->parent.data); + const blender::Span layers = grease_pencil->layers(); + + iter->internal.count.item++; + iter->valid = layers.index_range().contains(iter->internal.count.item); +} + +static PointerRNA rna_iterator_grease_pencil_layers_get(CollectionPropertyIterator *iter) +{ + using namespace blender::bke::greasepencil; + GreasePencil *grease_pencil = static_cast(iter->parent.data); blender::Span layers = grease_pencil->layers_for_write(); - rna_iterator_array_begin( - iter, (void *)layers.data(), sizeof(Layer *), layers.size(), false, nullptr); + return RNA_pointer_create_discrete(iter->parent.owner_id, + &RNA_GreasePencilLayer, + static_cast(layers[iter->internal.count.item])); } static int rna_iterator_grease_pencil_layers_length(PointerRNA *ptr) @@ -642,11 +663,31 @@ static void rna_iterator_grease_pencil_layer_groups_begin(CollectionPropertyIter { using namespace blender::bke::greasepencil; GreasePencil *grease_pencil = rna_grease_pencil(ptr); + const blender::Span groups = grease_pencil->layer_groups(); + iter->internal.count.item = 0; + iter->valid = !groups.is_empty(); +} + +static void rna_iterator_grease_pencil_layer_groups_next(CollectionPropertyIterator *iter) +{ + using namespace blender::bke::greasepencil; + GreasePencil *grease_pencil = static_cast(iter->parent.data); + const blender::Span groups = grease_pencil->layer_groups(); + + iter->internal.count.item++; + iter->valid = groups.index_range().contains(iter->internal.count.item); +} + +static PointerRNA rna_iterator_grease_pencil_layer_groups_get(CollectionPropertyIterator *iter) +{ + using namespace blender::bke::greasepencil; + GreasePencil *grease_pencil = static_cast(iter->parent.data); blender::Span groups = grease_pencil->layer_groups_for_write(); - rna_iterator_array_begin( - iter, (void *)groups.data(), sizeof(LayerGroup *), groups.size(), false, nullptr); + return RNA_pointer_create_discrete(iter->parent.owner_id, + &RNA_GreasePencilLayerGroup, + static_cast(groups[iter->internal.count.item])); } static int rna_iterator_grease_pencil_layer_groups_length(PointerRNA *ptr) @@ -1457,9 +1498,9 @@ static void rna_def_grease_pencil_data(BlenderRNA *brna) RNA_def_property_struct_type(prop, "GreasePencilLayer"); RNA_def_property_collection_funcs(prop, "rna_iterator_grease_pencil_layers_begin", - "rna_iterator_array_next", - "rna_iterator_array_end", - "rna_iterator_array_dereference_get", + "rna_iterator_grease_pencil_layers_next", + nullptr, + "rna_iterator_grease_pencil_layers_get", "rna_iterator_grease_pencil_layers_length", nullptr, /* TODO */ nullptr, /* TODO */ @@ -1472,9 +1513,9 @@ static void rna_def_grease_pencil_data(BlenderRNA *brna) RNA_def_property_struct_type(prop, "GreasePencilLayerGroup"); RNA_def_property_collection_funcs(prop, "rna_iterator_grease_pencil_layer_groups_begin", - "rna_iterator_array_next", - "rna_iterator_array_end", - "rna_iterator_array_dereference_get", + "rna_iterator_grease_pencil_layer_groups_next", + nullptr, + "rna_iterator_grease_pencil_layer_groups_get", "rna_iterator_grease_pencil_layer_groups_length", nullptr, /* TODO */ nullptr, /* TODO */ From 4fd96e61d54e2d4208934c5ae8aa6eb7f7936161 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 6 Mar 2025 12:40:46 -0500 Subject: [PATCH 2/9] Fix: Missing cache invalidation in grease pencil transform operator --- .../editors/transform/transform_convert_grease_pencil.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/transform/transform_convert_grease_pencil.cc b/source/blender/editors/transform/transform_convert_grease_pencil.cc index 7b7c7374744..7049a45f8af 100644 --- a/source/blender/editors/transform/transform_convert_grease_pencil.cc +++ b/source/blender/editors/transform/transform_convert_grease_pencil.cc @@ -249,10 +249,10 @@ static void recalcData_grease_pencil(TransInfo *t) bke::CurvesGeometry &curves = info.drawing.strokes_for_write(); if (t->mode == TFM_CURVE_SHRINKFATTEN) { - /* No cache to update currently. */ + curves.tag_radii_changed(); } else if (t->mode == TFM_TILT) { - /* No cache to update currently. */ + curves.tag_normals_changed(); } else { const Vector> positions_per_selection_attr = From b4a1a140d72558629d2149e5a3119f4a2780a503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Thu, 6 Mar 2025 18:48:56 +0100 Subject: [PATCH 3/9] Fix #134509: GPU: Node editor links are invisible on Intel GPU This bug also affects integrated GPU as well. Remove the GPU familly check. --- source/blender/gpu/opengl/gl_backend.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/blender/gpu/opengl/gl_backend.cc b/source/blender/gpu/opengl/gl_backend.cc index e745e7ab0d9..b64cddc7b00 100644 --- a/source/blender/gpu/opengl/gl_backend.cc +++ b/source/blender/gpu/opengl/gl_backend.cc @@ -497,9 +497,7 @@ static void detect_workarounds() /* #134509 Intel ARC GPU have a driver bug that break the display of batched node-links. * Disabling batching fixes the issue. */ if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_OFFICIAL)) { - if (strstr(renderer, "Arc")) { - GCaps.node_link_instancing_workaround = true; - } + GCaps.node_link_instancing_workaround = true; } /* Fix #123787: Multi viewport creates small triangle discard on RDNA2 GPUs with official From b9907cb60b3c37e55cc8ea186e6cca26e333a039 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Thu, 6 Mar 2025 19:01:10 +0100 Subject: [PATCH 4/9] Fix #134418: Double clicking a file crashes Blender if load UI is off Screen initialization is more context dependent than it used to be because of region polling, so the context needs to be set up correctly. Here was a case where the initialized window/screen passed to polling didn't match what's in context (UI context was unset in fact). Some asserts could be added to ensure data passed to screen initialization matches context, but can do that separately. Pull Request: https://projects.blender.org/blender/blender/pulls/135568 --- source/blender/editors/screen/screen_edit.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/blender/editors/screen/screen_edit.cc b/source/blender/editors/screen/screen_edit.cc index 67f0b9cbcf2..1e45f7c6e82 100644 --- a/source/blender/editors/screen/screen_edit.cc +++ b/source/blender/editors/screen/screen_edit.cc @@ -847,7 +847,13 @@ void ED_screen_refresh(bContext *C, wmWindowManager *wm, wmWindow *win) void ED_screens_init(bContext *C, Main *bmain, wmWindowManager *wm) { + wmWindow *prev_ctx_win = CTX_wm_window(C); + BLI_SCOPED_DEFER([&]() { CTX_wm_window_set(C, prev_ctx_win); }); + LISTBASE_FOREACH (wmWindow *, win, &wm->windows) { + /* Region polls may need window/screen context. */ + CTX_wm_window_set(C, win); + if (BKE_workspace_active_get(win->workspace_hook) == nullptr) { BKE_workspace_active_set(win->workspace_hook, static_cast(bmain->workspaces.first)); From 3a0e4fe316ea2fce3bedefce5decf0f9f9e18979 Mon Sep 17 00:00:00 2001 From: Jesse Yurkovich Date: Thu, 6 Mar 2025 20:53:52 +0100 Subject: [PATCH 5/9] Fix #134039: Alembic procedural proxy mesh should be owned by GeometrySet When using Alembic procedurals, the Mesh Sequence Cache attempts to replace the original geometry with a plain old cube. However, it never frees this new cube geometry. Transfer ownership to the underlying GeometrySet instead. Investigating the scenario also showed that the `~AlembicProcedural` dtor was removing an item from the `nodes` vector while iterating over it, which triggers debug asserts on at least MSVC. I believe the removal is unnecessary since this is the dtor and ASAN appears clean now. Pull Request: https://projects.blender.org/blender/blender/pulls/134085 --- intern/cycles/scene/alembic.cpp | 2 -- source/blender/modifiers/intern/MOD_meshsequencecache.cc | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/intern/cycles/scene/alembic.cpp b/intern/cycles/scene/alembic.cpp index 4bcd49462ae..fecf786b769 100644 --- a/intern/cycles/scene/alembic.cpp +++ b/intern/cycles/scene/alembic.cpp @@ -819,8 +819,6 @@ AlembicProcedural::~AlembicProcedural() geometries_set.insert(abc_object->get_object()->get_geometry()); } } - - delete_node(abc_object); } /* We may delete a Procedural before rendering started, so scene_ can be null. */ diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.cc b/source/blender/modifiers/intern/MOD_meshsequencecache.cc index e9616fe96b6..ae5c55c168c 100644 --- a/source/blender/modifiers/intern/MOD_meshsequencecache.cc +++ b/source/blender/modifiers/intern/MOD_meshsequencecache.cc @@ -208,7 +208,7 @@ static void modify_geometry_set(ModifierData *md, pointcloud->bounds_min_max(), pointcloud->mat, pointcloud->totcol); } - *geometry_set = bke::GeometrySet::from_mesh(bbox, bke::GeometryOwnershipType::Editable); + *geometry_set = bke::GeometrySet::from_mesh(bbox); return; } From 4c38380cc6d8d3a8e0f929c5af767a623e1fb669 Mon Sep 17 00:00:00 2001 From: Jesse Yurkovich Date: Thu, 6 Mar 2025 20:54:22 +0100 Subject: [PATCH 6/9] Fix #134043: Account for frame_offset in Alembic procedurals There's two places which perform the frame start and end time calculation and only one of them was respecting the frame_offset. Pull Request: https://projects.blender.org/blender/blender/pulls/134149 --- intern/cycles/scene/alembic_read.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/intern/cycles/scene/alembic_read.cpp b/intern/cycles/scene/alembic_read.cpp index 3a92bbce1ba..6a5f8ed9111 100644 --- a/intern/cycles/scene/alembic_read.cpp +++ b/intern/cycles/scene/alembic_read.cpp @@ -49,8 +49,9 @@ static set get_relevant_sample_times(AlembicProcedural *proc, } const double frame_rate = static_cast(proc->get_frame_rate()); - const double start_time = start_frame / frame_rate; - const double end_time = (end_frame + 1) / frame_rate; + const double frame_offset = proc->get_frame_offset(); + const double start_time = (start_frame - frame_offset) / frame_rate; + const double end_time = (end_frame - frame_offset + 1) / frame_rate; const size_t start_index = time_sampling.getFloorIndex(start_time, num_samples).first; const size_t end_index = time_sampling.getCeilIndex(end_time, num_samples).first; From 0a16ba9911efdac29226b303e995a54b5666c3bb Mon Sep 17 00:00:00 2001 From: Jesse Yurkovich Date: Thu, 6 Mar 2025 20:54:53 +0100 Subject: [PATCH 7/9] Fix #135502: Handle Alembic attribute size mismatch when reading points The Alembic file in the issue had 0 points, and 4 widths, defined for frame 33 which is certainly incorrect from whichever software produced said file. However, our import code should have proper guards in place to more gracefully handle the situation. Pull Request: https://projects.blender.org/blender/blender/pulls/135548 --- source/blender/io/alembic/intern/abc_reader_points.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/blender/io/alembic/intern/abc_reader_points.cc b/source/blender/io/alembic/intern/abc_reader_points.cc index 328525f98e2..313d3aa768b 100644 --- a/source/blender/io/alembic/intern/abc_reader_points.cc +++ b/source/blender/io/alembic/intern/abc_reader_points.cc @@ -19,6 +19,8 @@ #include "BKE_object.hh" #include "BKE_pointcloud.hh" +#include + using namespace Alembic::AbcGeom; namespace blender::io::alembic { @@ -164,7 +166,7 @@ void AbcPointsReader::read_geometry(bke::GeometrySet &geometry_set, MutableSpan point_radii = point_radii_writer.span; if (widths) { - for (size_t i = 0; i < widths->size(); i++) { + for (const int64_t i : IndexRange(std::min(point_radii.size(), int64_t(widths->size())))) { point_radii[i] = (*widths)[i] / 2.0f; } } @@ -177,7 +179,7 @@ void AbcPointsReader::read_geometry(bke::GeometrySet &geometry_set, bke::SpanAttributeWriter normals_writer = attribute_accessor.lookup_or_add_for_write_span("N", bke::AttrDomain::Point); MutableSpan point_normals = normals_writer.span; - for (size_t i = 0; i < normals->size(); i++) { + for (const int64_t i : IndexRange(std::min(point_normals.size(), int64_t(normals->size())))) { Imath::V3f nor_in = (*normals)[i]; copy_zup_from_yup(point_normals[i], nor_in.getValue()); } @@ -191,7 +193,9 @@ void AbcPointsReader::read_geometry(bke::GeometrySet &geometry_set, attribute_accessor.lookup_or_add_for_write_span("velocity", bke::AttrDomain::Point); MutableSpan point_velocity = velocity_writer.span; - for (size_t i = 0; i < velocities->size(); i++) { + for (const int64_t i : + IndexRange(std::min(point_velocity.size(), int64_t(velocities->size())))) + { const Imath::V3f &vel_in = (*velocities)[i]; copy_zup_from_yup(point_velocity[i], vel_in.getValue()); point_velocity[i] *= velocity_scale; From 41cbebe6d97d5942dfaad25dfc2858065636588e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= Date: Tue, 4 Mar 2025 21:48:53 +0100 Subject: [PATCH 8/9] Audaspace: port CoreAudio closing fix from main. --- .../audaspace/plugins/coreaudio/CoreAudioDevice.cpp | 13 ++++++++----- extern/audaspace/src/devices/OpenCloseDevice.cpp | 5 ++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/extern/audaspace/plugins/coreaudio/CoreAudioDevice.cpp b/extern/audaspace/plugins/coreaudio/CoreAudioDevice.cpp index 4bfedd8feec..5cbecdf46eb 100644 --- a/extern/audaspace/plugins/coreaudio/CoreAudioDevice.cpp +++ b/extern/audaspace/plugins/coreaudio/CoreAudioDevice.cpp @@ -147,9 +147,13 @@ void CoreAudioDevice::open() void CoreAudioDevice::close() { - AudioOutputUnitStop(m_audio_unit); - AudioUnitUninitialize(m_audio_unit); - AudioComponentInstanceDispose(m_audio_unit); + // NOTE: Keep the device open for buggy MacOS versions (see blender issue #121911). + if(__builtin_available(macOS 15.2, *)) + { + AudioOutputUnitStop(m_audio_unit); + AudioUnitUninitialize(m_audio_unit); + AudioComponentInstanceDispose(m_audio_unit); + } } CoreAudioDevice::CoreAudioDevice(DeviceSpecs specs, int buffersize) : @@ -165,8 +169,7 @@ m_audio_unit(nullptr) m_specs = specs; open(); - // NOTE: Keep the device open until #121911 is investigated/resolved from Apple side. - // close(); + close(); create(); } diff --git a/extern/audaspace/src/devices/OpenCloseDevice.cpp b/extern/audaspace/src/devices/OpenCloseDevice.cpp index 34279f925b3..43645005779 100644 --- a/extern/audaspace/src/devices/OpenCloseDevice.cpp +++ b/extern/audaspace/src/devices/OpenCloseDevice.cpp @@ -71,9 +71,8 @@ void OpenCloseDevice::playing(bool playing) if(m_delayed_close_thread.joinable()) m_delayed_close_thread.join(); - // NOTE: Disabled until #121911 is investigated/resolved from Apple side. - // m_delayed_close_running = true; - // m_delayed_close_thread = std::thread(&OpenCloseDevice::closeAfterDelay, this); + m_delayed_close_running = true; + m_delayed_close_thread = std::thread(&OpenCloseDevice::closeAfterDelay, this); } } } From 4c1c2f0280f968f8b3e5f5ad8cf5e3c143e809db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= Date: Tue, 4 Mar 2025 21:52:39 +0100 Subject: [PATCH 9/9] Audaspace: update to version 1.6 for blender 4.4. Pull Request: https://projects.blender.org/blender/blender/pulls/135475 --- extern/audaspace/AUTHORS | 9 +++-- extern/audaspace/CHANGES | 33 +++++++++++++++++++ extern/audaspace/CMakeLists.txt | 2 +- extern/audaspace/README.blender | 6 ++-- extern/audaspace/README.md | 2 +- extern/audaspace/bindings/C/AUD_Types.h | 2 +- extern/audaspace/bindings/python/setup.py.in | 2 +- .../plugins/pipewire/PipeWireLibrary.cpp | 2 +- 8 files changed, 48 insertions(+), 10 deletions(-) diff --git a/extern/audaspace/AUTHORS b/extern/audaspace/AUTHORS index edf107f835d..627911654e4 100644 --- a/extern/audaspace/AUTHORS +++ b/extern/audaspace/AUTHORS @@ -19,15 +19,20 @@ The Equalizer sound effect has been added by - Marcos Perez -Some performance improvements, especially to the JOSResampler have been made by: +Some performance improvements, especially to the JOSResampler have been made by - Aras Pranckevičius +The pipewire backend and many fixes have been provided by + +- Sebastian Parborg + Several people provided fixes: - Aaron Carlisle -- Sebastian Parborg - Leon Zandman - Richard Antalik - Robert-André Mauchin - Lalit Shankar Chowdhury +- Nathan Burnham +- Weizhen Huang diff --git a/extern/audaspace/CHANGES b/extern/audaspace/CHANGES index 4218d4f52ce..ff75d0b3574 100644 --- a/extern/audaspace/CHANGES +++ b/extern/audaspace/CHANGES @@ -1,3 +1,36 @@ +Audaspace 1.6 + +- Pipewire support (thanks Sebastian Parborg!) +- AAC container (ADTS stream). +- Update to C++17. +- Improvements for PulseAudio backend. +- Many (bug) fixes. + +Detailed list of changes: + +70b18a5 Port fix by Weizhen Huang from Blender. +ecaa71c CoreAudio: closing issue fixed from Apple for newer MacOS versions. +0035101 Port Blender changes to upstream. +dd419af Blender bug fix #129162: High idle CPU usage with PulseAudio in Linux +9220ab5 Set C++ version python plugin bulid to 17. +9db9578 Add AAC container You could already use Matroska container with AAC codec, but if someone wants raw .aac file ("ADTS stream"), there was no container option to pick. +d3b7471 Fix whitespace +d1f1704 Fix rendering audio to Matroska container +5aabc89 Pipewire support (#43) +f5e8ccc Audaspace: Update PulseAudio sync functions to be more accurate (#42) +f4611c0 Porting ffmpeg compatibility back from Blender. +6afeab2 Update to C++17. +81b0d76 PulseAudio: try to play as much as possible of buffered data on playback stop. +426dab5 Fix Sound.filter a argument default not a sequence +d701d0b loadRight documented as duplicate of loadLeft +4326b24 Fix for building python module without fftw. +901f14e Bugfix for MacOS from Blender. +ee59832 Fix a typo +27bc641 Update AUTHORS. +689d645 Windows: Use COM smart pointers in WASAPI plugin +5efc5c4 Update FFmpeg code to avoid direct assignation of ch_layout +56edbe4 Making the OpenCloseDevice thread safe. + Audaspace 1.5 - Performance improvements and two more quality presets for the JOS resampler. diff --git a/extern/audaspace/CMakeLists.txt b/extern/audaspace/CMakeLists.txt index 98ec816f52c..c8370f03d76 100644 --- a/extern/audaspace/CMakeLists.txt +++ b/extern/audaspace/CMakeLists.txt @@ -23,7 +23,7 @@ endif() project(audaspace) -set(AUDASPACE_VERSION 1.5) +set(AUDASPACE_VERSION 1.6) set(AUDASPACE_LONG_VERSION ${AUDASPACE_VERSION}.0) if(DEFINED AUDASPACE_CMAKE_CFG) diff --git a/extern/audaspace/README.blender b/extern/audaspace/README.blender index 1bfa3004d8c..109d050aaef 100644 --- a/extern/audaspace/README.blender +++ b/extern/audaspace/README.blender @@ -1,6 +1,6 @@ Project: Audaspace URL: https://audaspace.github.io/ License: SPDX:Apache-2.0 -Upstream version: 1.4+ (ae29ce2, 2024 Feb 26) -Copyright: "Copyright © 2009-2015 Jörg Müller. All rights reserved." -Local modifications: none \ No newline at end of file +Upstream version: 1.6.0 (cb493a1, 2025 Mar 3) +Copyright: "Copyright © 2009-2025 Jörg Müller. All rights reserved." +Local modifications: none diff --git a/extern/audaspace/README.md b/extern/audaspace/README.md index d78e82253fd..5a360ea757b 100644 --- a/extern/audaspace/README.md +++ b/extern/audaspace/README.md @@ -32,7 +32,7 @@ The following (probably incomplete) features are supported by audaspace: License ------- -> Copyright © 2009-2024 Jörg Müller. All rights reserved. +> Copyright © 2009-2025 Jörg Müller. All rights reserved. > > Licensed under the Apache License, Version 2.0 (the "License"); > you may not use this file except in compliance with the License. diff --git a/extern/audaspace/bindings/C/AUD_Types.h b/extern/audaspace/bindings/C/AUD_Types.h index 2a6e5d516eb..8384273e9ae 100644 --- a/extern/audaspace/bindings/C/AUD_Types.h +++ b/extern/audaspace/bindings/C/AUD_Types.h @@ -74,7 +74,7 @@ typedef enum AUD_CONTAINER_MP3, AUD_CONTAINER_OGG, AUD_CONTAINER_WAV, - AUD_CONTAINER_AAC, + AUD_CONTAINER_AAC } AUD_Container; /// Audio codecs for writers. diff --git a/extern/audaspace/bindings/python/setup.py.in b/extern/audaspace/bindings/python/setup.py.in index 7618f896ecc..0feb54503f3 100644 --- a/extern/audaspace/bindings/python/setup.py.in +++ b/extern/audaspace/bindings/python/setup.py.in @@ -34,7 +34,7 @@ if sys.platform == 'win32': extra_args.append('/EHsc') extra_args.append('/DAUD_BUILD_SHARED_LIBRARY') else: - extra_args.append('-std=c++11') + extra_args.append('-std=c++17') audaspace = Extension( 'aud', diff --git a/extern/audaspace/plugins/pipewire/PipeWireLibrary.cpp b/extern/audaspace/plugins/pipewire/PipeWireLibrary.cpp index 9c32fc7e842..de9d8ebb4ae 100644 --- a/extern/audaspace/plugins/pipewire/PipeWireLibrary.cpp +++ b/extern/audaspace/plugins/pipewire/PipeWireLibrary.cpp @@ -53,7 +53,7 @@ bool loadPipeWire() #undef PIPEWIRE_SYMBOL - return AUD_pw_check_library_version != nullptr && AUD_pw_check_library_version(1,1,0); + return AUD_pw_check_library_version != nullptr && AUD_pw_check_library_version(1, 1, 0); } AUD_NAMESPACE_END