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 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/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; diff --git a/source/blender/editors/screen/screen_edit.cc b/source/blender/editors/screen/screen_edit.cc index 76714e066f6..cf9b8039e5e 100644 --- a/source/blender/editors/screen/screen_edit.cc +++ b/source/blender/editors/screen/screen_edit.cc @@ -848,7 +848,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)); diff --git a/source/blender/editors/transform/transform_convert_grease_pencil.cc b/source/blender/editors/transform/transform_convert_grease_pencil.cc index 5cfeeec2668..3d294cf7fb1 100644 --- a/source/blender/editors/transform/transform_convert_grease_pencil.cc +++ b/source/blender/editors/transform/transform_convert_grease_pencil.cc @@ -248,10 +248,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 = diff --git a/source/blender/gpu/opengl/gl_backend.cc b/source/blender/gpu/opengl/gl_backend.cc index ce9925a68ee..afe37f032cb 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 diff --git a/source/blender/io/alembic/intern/abc_reader_points.cc b/source/blender/io/alembic/intern/abc_reader_points.cc index 114b62f8bd7..f3c5fb9016a 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 { @@ -158,7 +160,7 @@ void AbcPointsReader::read_geometry(bke::GeometrySet &geometry_set, MutableSpan point_radii = pointcloud->radius_for_write(); 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; } } @@ -170,7 +172,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()); } @@ -184,7 +186,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; diff --git a/source/blender/makesrna/intern/rna_grease_pencil.cc b/source/blender/makesrna/intern/rna_grease_pencil.cc index 848ae400bd3..390c2070534 100644 --- a/source/blender/makesrna/intern/rna_grease_pencil.cc +++ b/source/blender/makesrna/intern/rna_grease_pencil.cc @@ -389,10 +389,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, ptr, (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) @@ -628,11 +649,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, ptr, (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) @@ -1420,9 +1461,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 */ @@ -1435,9 +1476,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 */ 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; }