{"object_kind":"push","event_name":"push","before":"f073a1a59b2849592482bb508a8a16e67f1d1fbb","after":"2c2808fab1ae27284b51cfabe644836f5b4a93f9","ref":"refs/heads/master","ref_protected":true,"checkout_sha":"2c2808fab1ae27284b51cfabe644836f5b4a93f9","message":null,"user_id":3060,"user_name":"Wim Taymans","user_username":"wtaymans","user_email":"","user_avatar":"https://secure.gravatar.com/avatar/ee99737f7492c79c3a9be75f2e2437f2c944c95fca1480fafcd7ce3bf8c85784?s=80&d=identicon","project_id":4753,"project":{"id":4753,"name":"pipewire","description":"Multimedia processing graphs","web_url":"https://gitlab.freedesktop.org/pipewire/pipewire","avatar_url":"https://gitlab.freedesktop.org/uploads/-/system/project/avatar/4753/pipewire.png","git_ssh_url":"git@ssh.gitlab.freedesktop.org:pipewire/pipewire.git","git_http_url":"https://gitlab.freedesktop.org/pipewire/pipewire.git","namespace":"PipeWire","visibility_level":20,"path_with_namespace":"pipewire/pipewire","default_branch":"master","ci_config_path":"","homepage":"https://gitlab.freedesktop.org/pipewire/pipewire","url":"git@ssh.gitlab.freedesktop.org:pipewire/pipewire.git","ssh_url":"git@ssh.gitlab.freedesktop.org:pipewire/pipewire.git","http_url":"https://gitlab.freedesktop.org/pipewire/pipewire.git"},"commits":[{"id":"5f4f4b5dd31130501ea3ce3198065c0744cf5fa3","message":"spa: libcamera: use lock when acquiring `CameraManager`\n\nMake `libcamera_manager_acquire()` thread safe by locking a mutex\nwhen the `CameraManager` instance is created and started.\n","title":"spa: libcamera: use lock when acquiring `CameraManager`","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/5f4f4b5dd31130501ea3ce3198065c0744cf5fa3","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-manager.cpp"],"removed":[]},{"id":"5a9cdd724f693ce5c99b5e071a7192d844991abc","message":"spa: libcamera: clean up includes\n\nRemove some unnecessarily includes.\n","title":"spa: libcamera: clean up includes","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/5a9cdd724f693ce5c99b5e071a7192d844991abc","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-device.cpp","spa/plugins/libcamera/libcamera-manager.cpp","spa/plugins/libcamera/libcamera-source.cpp","spa/plugins/libcamera/libcamera-utils.cpp"],"removed":[]},{"id":"1a1cf55efbfa1fdee03529188aa31cc215594b3b","message":"spa: libcamera: inline `libcamera-utils.cpp`\n\nThe file is not useful without `libcamera-source.cpp` because it\nuses symbols only defined there. And being a non-self-contained\nsource file, it also breaks clangd. So move its contents directly\nto `libcamera-source.cpp`. This makes the file about 2200 lines long,\nbut I feel that is still manageable (and it is by far not the longest).\n","title":"spa: libcamera: inline `libcamera-utils.cpp`","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/1a1cf55efbfa1fdee03529188aa31cc215594b3b","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-source.cpp"],"removed":["spa/plugins/libcamera/libcamera-utils.cpp"]},{"id":"f53ac8d57c9496993e468bd838e74eb64ca498c3","message":"spa: libcamera: source: handle camera acquire failure\n\nCheck the return value of `Camera::acquire()` and return the error\nif that fails.\n","title":"spa: libcamera: source: handle camera acquire failure","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/f53ac8d57c9496993e468bd838e74eb64ca498c3","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"0ea7dc9f191a229a9417f0526f9cfa135d6400e7","message":"spa: libcamera: source: use enum types\n\nUse the appropriate enum types instead of bare `uint32_t`,\nthis provides better type safety in C++.\n","title":"spa: libcamera: source: use enum types","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/0ea7dc9f191a229a9417f0526f9cfa135d6400e7","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"489cc499374292af0f769f35c1c0ced47665a606","message":"spa: libcamera: source: simplify format lookup\n\nUse range based for loops instead of indices.\n","title":"spa: libcamera: source: simplify format lookup","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/489cc499374292af0f769f35c1c0ced47665a606","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"311b3cc37fc03febe54a14428698e5afcc7c5e6a","message":"spa: libcamera: source: do not make expensive queries multiple times\n\n`StreamFormats::pixelformats()` and `StreamFormats::sizes()` both\nreturn newly created `std::vector`s, so do not call them multiple\ntimes.\n","title":"spa: libcamera: source: do not make expensive queries multiple times","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/311b3cc37fc03febe54a14428698e5afcc7c5e6a","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"f94f4de6ff7e02a23ec51ed278c058e5d10da468","message":"spa: libcamera: source: simplify control mapping\n\nRemove the `impl` parameter as it is not used, and use C++ range\nbased for loops.\n","title":"spa: libcamera: source: simplify control mapping","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/f94f4de6ff7e02a23ec51ed278c058e5d10da468","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"0022fc90b715489d575a440783cdd02aada5474c","message":"spa: libcamera: source: use `union` for transferring control value\n\nUse a union since only one member is active at a time, and use the\nproper `libcamera::ControlType` enum to store the type instead of a\nbare number. Also remove an unnecessary cast.\n","title":"spa: libcamera: source: use `union` for transferring control value","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/0022fc90b715489d575a440783cdd02aada5474c","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"561a9d6ebb593eaee6586f3ee927933fe5a5a12a","message":"spa: libcamera: source: set \"corrupted\" flag if applicable\n\nIf the libcamera `FrameMetadata` reports anything other than `FrameSuccess`,\nthen set `SPA_META_HEADER_FLAG_CORRUPTED`, notifying the application that\nthe frame may be unusable.\n","title":"spa: libcamera: source: set \"corrupted\" flag if applicable","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/561a9d6ebb593eaee6586f3ee927933fe5a5a12a","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"e19a8bb5cd0c53ae0f1ceba496c235028efb383d","message":"spa: libcamera: source: inline `mmap_init()`\n\nThe function has a single caller is essentially just a wrapper only\ncalling `mmap_init()`. So inline it into `spa_libcamera_alloc_buffers()`.\n","title":"spa: libcamera: source: inline `mmap_init()`","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/e19a8bb5cd0c53ae0f1ceba496c235028efb383d","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"cb71071d93929f663cd17d790f42e70f5d86218a","message":"spa: libcamera: device: remove empty line\n","title":"spa: libcamera: device: remove empty line","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/cb71071d93929f663cd17d790f42e70f5d86218a","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-device.cpp"],"removed":[]},{"id":"bb8223bff192fb831ff9b4c22aa16aa69349b1f6","message":"spa: libcamera: use anon ns instead of `static`\n\nMove most things into anonymous namespaces for internal linkage\ninstead of using `static`. This shortes declarations and makes it\nhard to forget.\n","title":"spa: libcamera: use anon ns instead of `static`","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/bb8223bff192fb831ff9b4c22aa16aa69349b1f6","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-device.cpp","spa/plugins/libcamera/libcamera-manager.cpp","spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"4fa11619a2d03babf499492e8f8c66980047e7d6","message":"spa: libcamera: use C++ style casts\n","title":"spa: libcamera: use C++ style casts","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/4fa11619a2d03babf499492e8f8c66980047e7d6","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-device.cpp","spa/plugins/libcamera/libcamera-manager.cpp","spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"db3d91ebeb2b3c6e223b9e8aa318113e06824a55","message":"spa: libcamera: use `nullptr` instead of `NULL`\n","title":"spa: libcamera: use `nullptr` instead of `NULL`","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/db3d91ebeb2b3c6e223b9e8aa318113e06824a55","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-device.cpp","spa/plugins/libcamera/libcamera-manager.cpp","spa/plugins/libcamera/libcamera-source.cpp"],"removed":[]},{"id":"2c2808fab1ae27284b51cfabe644836f5b4a93f9","message":"spa: libcamera: manager: fix id allocation\n\nThere is an issue in the id allocation mechanism which can result\nin the different devices having the same id. Specifically, consider\nthe scenario where there are only two cameras, which have just been\nadded. In this case `impl::devices` looks like this:\n\n (0, camA) | (1, camB) | (?, nullptr) | ...\n\nNow assume that `camA` is removed, after which the array appears\nas follows:\n\n (1, camB) | (1, nullptr) | (?, nullptr) | ...\n\nThen assume that a new camera appears. When `get_free_id()` runs,\nwhen `i == 1`, it will observe that `devices[i].camera == nullptr`,\nso it selects `1` as the id. Leading to the following:\n\n (1, camB) | (1, camC) | (?, nullptr) | ...\n\nThis is of course incorrect. The set of ids must be unique. When\nwireplumber is faced with this situation it destroys the device\nobject for `camB` when `camC` is emitted.\n\nFix this by simply not moving elements in the `devices` array,\nleaving everything where it is. In which case the array looks\nlike this:\n\n (nullptr) | (camB) | (nullptr) | ... // after `camA` removal\n (camC) | (camB) | (nullptr) | ... // after `camC` appearance\n\nNote that `device::id` is removed, and the id is now derived from\nthe position in `impl::devices`.\n","title":"spa: libcamera: manager: fix id allocation","timestamp":"2025-07-15T08:12:54+00:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/2c2808fab1ae27284b51cfabe644836f5b4a93f9","author":{"name":"Barnabás Pőcze","email":"pobrn@protonmail.com"},"added":[],"modified":["spa/plugins/libcamera/libcamera-manager.cpp"],"removed":[]}],"total_commits_count":16,"push_options":{},"repository":{"name":"pipewire","url":"git@ssh.gitlab.freedesktop.org:pipewire/pipewire.git","description":"Multimedia processing graphs","homepage":"https://gitlab.freedesktop.org/pipewire/pipewire","git_http_url":"https://gitlab.freedesktop.org/pipewire/pipewire.git","git_ssh_url":"git@ssh.gitlab.freedesktop.org:pipewire/pipewire.git","visibility_level":20}}