{"object_kind":"push","event_name":"push","before":"cd7280f4ec92f6740147a965dafef55ccfe56375","after":"4a0f92b3ff34ea98e747b5efb61bc5bd6bf9b560","ref":"refs/heads/master","ref_protected":true,"checkout_sha":"4a0f92b3ff34ea98e747b5efb61bc5bd6bf9b560","message":null,"user_id":3060,"user_name":"Wim Taymans","user_username":"wtaymans","user_email":"","user_avatar":"https://secure.gravatar.com/avatar/1ca1bed246cb9b95b7ead6d6be96bb09f0c112953140c8bb38b41aedf4465270?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":"6837d468e159258ce1e2e888863b0de98dad16a0","message":"module-rtp: add packet buffer\n\nInstead of receiving the RTP packets into a static buffer, make a queue\nof MTU sized buffers.\n","title":"module-rtp: add packet buffer","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/6837d468e159258ce1e2e888863b0de98dad16a0","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp-session.c","src/modules/module-rtp-source.c","src/modules/module-rtp/audio.c","src/modules/module-rtp/midi.c","src/modules/module-rtp/opus.c","src/modules/module-rtp/rtp.h","src/modules/module-rtp/stream.c","src/modules/module-rtp/stream.h"],"removed":[]},{"id":"f44dfc4bb4065980dfd254fb5826d3a4236cde89","message":"module-rtp: order packets using seq number\n\nRemove the out-of-order seq numbers checks and insert the packets based\non the seq number in the packet buffer.\n\nMove some of the duplicate sync code to the stream.\n","title":"module-rtp: order packets using seq number","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/f44dfc4bb4065980dfd254fb5826d3a4236cde89","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/midi.c","src/modules/module-rtp/opus.c","src/modules/module-rtp/rtp.h","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"9beabb48374fe7860213c2095d2b116bde16f576","message":"module-rtp: read audio from the packet buffer\n\nInstead of writing the audio from the packet buffer into a ringbuffer\nand then into the pipewire buffer, copy directly from the packet buffer.\n\nWrite 0 for gaps and for missing head or tail data. We can also later\nimplement some sort of conceilment.\n","title":"module-rtp: read audio from the packet buffer","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/9beabb48374fe7860213c2095d2b116bde16f576","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"30893ac026f9501d15ef887aaaddc511709780cd","message":"module-rtp: implement opus receive\n\nAdd extra tmp data and decoded pointer in the packet buffer.\n\nDecode the samples into decoded data and use that. For opus we need to\ndecode, for audio we simple point to the payload.\n","title":"module-rtp: implement opus receive","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/30893ac026f9501d15ef887aaaddc511709780cd","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/opus.c","src/modules/module-rtp/rtp.h","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"775df07937391a1e6785844a48a0eeb2d4e8a4f5","message":"module-rtp: handle midi receive\n\nUse the packet receive code to calculate the RTP timestamp vs graph\nposition relation.\n\nCollect rtp events from the packet buffer when required in the playback\ncallback.\n","title":"module-rtp: handle midi receive","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/775df07937391a1e6785844a48a0eeb2d4e8a4f5","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/midi.c","src/modules/module-rtp/opus.c","src/modules/module-rtp/rtp.h","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"0421696c077315e0468a37a1d01cf1683a395a88","message":"module-rtp: implement sending with the queue\n\nInstead of copying the samples to a ringbuffer and then copy the\nringbuffer into RTP packets. Directly create RTP packets and store\nthem in queue.\n\nWe can then use different ways to flush the packet queue.\n\nEncoding the packets only once also has the advantage that we can resend\nthem easily later.\n","title":"module-rtp: implement sending with the queue","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/0421696c077315e0468a37a1d01cf1683a395a88","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/midi.c","src/modules/module-rtp/stream.c","src/modules/module-rtp/stream.h"],"removed":[]},{"id":"5fcf8ef0056e950617a3656b94fc560f183aadf7","message":"module-rtp: remove ringbuffer for send\n\nMake the stream capture parts write directly into rtp packets and place\nthose into a queue for sending.\n\nRemove the ringbuffer because it is no longer needed.\n\nWe also don't need to do any under/overflow checks on the ringbuffer\nanymore, we can just simply fill up packets and recycle old ones.\n","title":"module-rtp: remove ringbuffer for send","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/5fcf8ef0056e950617a3656b94fc560f183aadf7","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/midi.c","src/modules/module-rtp/opus.c","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"d3a4e592dcd6e184c37fdbdd485e58cd0c16c864","message":"module-rtp: handle midi sysex segmentation markers correctly\n","title":"module-rtp: handle midi sysex segmentation markers correctly","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/d3a4e592dcd6e184c37fdbdd485e58cd0c16c864","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/midi.c"],"removed":[]},{"id":"ebbb23bf396b2d7fb132c0933c9228a11f28cfaa","message":"module-rtp: fix the timestamp boundary check\n\nThe complete packet must be outside of the current timestamp + duration\nfor it to be too old.\n","title":"module-rtp: fix the timestamp boundary check","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/ebbb23bf396b2d7fb132c0933c9228a11f28cfaa","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/midi.c"],"removed":[]},{"id":"e327923aaf97fbafd9ed89fd5fe9bd3343539c09","message":"module-rtp: avoid midi rtp timestamp rounding errors\n\nIf we convert the timestamp to seconds we need a double, a 32 bit\ntimestamp does not fit a float and will be rounded down.\n","title":"module-rtp: avoid midi rtp timestamp rounding errors","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/e327923aaf97fbafd9ed89fd5fe9bd3343539c09","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/midi.c","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"e6d19727ef8800f252b4375ffc9ecbe802ca1142","message":"module-rtp: refactor some packet queue function\n\nMove common functions to the stream.\n","title":"module-rtp: refactor some packet queue function","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/e6d19727ef8800f252b4375ffc9ecbe802ca1142","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/midi.c","src/modules/module-rtp/opus.c","src/modules/module-rtp/stream.c","src/modules/module-rtp/stream.h"],"removed":[]},{"id":"9065f07370342d69b4b819129188867ff39dbb4c","message":"module-rtp: add playout delay to timestamps\n\nDirectly add the playout delay to the received rtp timestamps. That way\nwe can directly compare the graph time with the playout time.\n\nUse wraparound safe timestamp compare functions.\n\nMove sync code to the playback code. We need to be able to select a good\npoint in the packet buffer to read from and we can only do that when we\nare in the process function.\n","title":"module-rtp: add playout delay to timestamps","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/9065f07370342d69b4b819129188867ff39dbb4c","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/midi.c","src/modules/module-rtp/opus.c","src/modules/module-rtp/rtp.h","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"f3f65bdf5dc787f4952927ccc31bdaf9041337a3","message":"module-rtp: struct impl -> struct rtp_stream\n","title":"module-rtp: struct impl -> struct rtp_stream","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/f3f65bdf5dc787f4952927ccc31bdaf9041337a3","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/midi.c","src/modules/module-rtp/opus.c","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"17ef5808a29d8b8e32914101f080107b0a1a28eb","message":"module-rtp: simplify the midi timestamping\n\nUse simple rtp vs timestamp offset to set the packet right when we\ndecode it.\n\nWe can then remove the receive_rtp callback and simplify things some\nmore.\n","title":"module-rtp: simplify the midi timestamping","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/17ef5808a29d8b8e32914101f080107b0a1a28eb","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/midi.c","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"078012527c2dd14fef87f8419a71bbfa26aeb627","message":"module-rtp: add PLC for opus\n\nWhen we detect a gap in sequence numbers, run the opus decoder with NULL\nas the data for the duration of the gap. Copy the PLC data into the\npackets and insert the reconstructed packets into the queue.\n","title":"module-rtp: add PLC for opus","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/078012527c2dd14fef87f8419a71bbfa26aeb627","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp-source.c","src/modules/module-rtp/audio.c","src/modules/module-rtp/opus.c","src/modules/module-rtp/rtp.h","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"483dde1c12397692a4c4d3a76b297c5985c01471","message":"module-rtp: first repair and then check timestamps\n\nFirst check the seq numbers and if there is a gap, start the repair.\nAfter that we can check if the packet is for the current time or not.\n\nWe need to do this so that we decode and repair packets in the right\norder because the repair algorithm often depends on the last decoded\npacket, like in opus.\n","title":"module-rtp: first repair and then check timestamps","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/483dde1c12397692a4c4d3a76b297c5985c01471","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/opus.c"],"removed":[]},{"id":"7ec22245032a814aff405ba73475f94903cfb287","message":"module-rtp: avoid repairing too large gaps\n\nDon't repair negative gaps or gaps where the packet duration would\nexceed the max packet size.\n","title":"module-rtp: avoid repairing too large gaps","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/7ec22245032a814aff405ba73475f94903cfb287","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/opus.c"],"removed":[]},{"id":"9ec321a55ca74b2f315c09daa3830a6f3edb8733","message":"module-rtp: add burg predictor to conceil raw audio packets\n\nRepair missing audio packets with a burg predictor.\n","title":"module-rtp: add burg predictor to conceil raw audio packets","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/9ec321a55ca74b2f315c09daa3830a6f3edb8733","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/opus.c","src/modules/module-rtp/rtp.h","src/modules/module-rtp/stream.c"],"removed":[]},{"id":"4a0f92b3ff34ea98e747b5efb61bc5bd6bf9b560","message":"rtp: make to and from float functions\n\nAdd a per format function to convert to and from float for the burg\npredictor. Also take into account the number of channels.\n","title":"rtp: make to and from float functions","timestamp":"2026-09-11T11:44:22+02:00","url":"https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/4a0f92b3ff34ea98e747b5efb61bc5bd6bf9b560","author":{"name":"Wim Taymans","email":"wtaymans@redhat.com"},"added":[],"modified":["src/modules/module-rtp/audio.c","src/modules/module-rtp/stream.c"],"removed":[]}],"total_commits_count":19,"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}}