<?xml version="1.0" encoding="UTF-8"?>
<otherdata xmlns="http://linux.duke.edu/metadata/other" packages="24">
<package pkgid="bf440dae6e6ada194789c6e9622aa05aa5bed5da1137ea98f2713ea357a2d8ca" name="gnome-network-displays" arch="src">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="4c217d5d194d25beed438e769207543091f497369305da88d136b14e1627412b" name="gnome-network-displays" arch="src">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="2baf363ac11b86b0cb03e33e27063f1be163a9f0505b111619268fb75f60ccc1" name="gnome-network-displays" arch="src">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="8d90d76a97ec8ba159b52a07d580ebcb889ce053728eca8716a90eee1fb38920" name="gnome-network-displays" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="2101ef3312eb72c71279f4dd1f37c0be030673b946b97ea72d548bd57a355f2b" name="gnome-network-displays" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="844462a5ae614815088b14797ae626ef3b3b5a454314cb2b9e9f255efd3e7031" name="gnome-network-displays" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="9c9d2020d602ab425475847c9382015180c98423f96452b35c4096638f6b05ad" name="gnome-network-displays-app" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="29b6d4fb457c2945f753b3623fb5f966f7d64b516481d31ef3299523ad96ef14" name="gnome-network-displays-app" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="e37e2cf5dc30e923bd4b3657378efcec7af45d0ebfb3968001820ed1be41890f" name="gnome-network-displays-app" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="b730cad92ea8ed0466a7ac205e324b0c883e56a4f83872cc5c8b90363588c5b1" name="gnome-network-displays-app-debuginfo" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="96babe38fc827f82d67daa9f4ee5befa834aba59b1c046245dfc858065a9e0f5" name="gnome-network-displays-app-debuginfo" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="ec24fc554e6127f094a18bddccc5cae8a1ac4d64fe36e858575c41c69ff955e5" name="gnome-network-displays-app-debuginfo" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="809fe09b9e3c417496f3f52a3ee9938137a230130e0138901ee661dbd3581c49" name="gnome-network-displays-common" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="15ab388ebef487cae8fb1ecdbeaa5916eb642b06e10ffe44bcc22684dbafe300" name="gnome-network-displays-common" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="c99a876d0ed2f02d6e9fb5d74070b0eb0155220ba35ae54d9f2cde5b7b45df1d" name="gnome-network-displays-common" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="a69a63e0d6d415a7a3f4f7309fa38779289726bbd5498cf8c8e708b2a37478cf" name="gnome-network-displays-debuginfo" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="8ba6d45e2c184c576caed18cbe4b21209f3c779069e663fc11550a4b8b99fbd7" name="gnome-network-displays-debuginfo" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="9db5627516d1055de2b0a66017b82d454de6a2947d4aca1d9b133d27db0c95eb" name="gnome-network-displays-debuginfo" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="982fa767753e3b9ecb7e1e2335e53638d9e52703bf87b394acd34d248de06493" name="gnome-network-displays-debugsource" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="bd0825cb2029f9648738e5925e11b0c76848a033858591fc3533c80492393714" name="gnome-network-displays-debugsource" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="f7c1ae77206ee6c23fbc684bf0ab46360e2f6152ad3a3fc89cce170166feb91d" name="gnome-network-displays-debugsource" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="41692f28bd992b52dff652305ca3aa68ff86366a70526d9fd0c8a5105624bdb4" name="gnome-network-displays-extension" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="c1dc4ae5f14e3ffb108b70930dae92ed96713ee6b6931a45cf98cacb0a7a8707" name="gnome-network-displays-extension" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
<package pkgid="00c04a053ef1a8b0dc2eba7e77376702ca3f13309e65a05e3cb1cfda763fce37" name="gnome-network-displays-extension" arch="x86_64">
  <version epoch="0" ver="1.0.0~dev" rel="74.fc44"/>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-55" date="1784030400">- Update source to e372f1d: forward GND_* tunables from the daemon to the
  stream units, and temporarily enable full debug logging in the daemon service
  for A/V-sync field calibration (revertable commit)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-56" date="1784030401">- Update source to de068a1: match the audio delay to receivers that render
  mirror video as fast as they can (LG measured): AirPlay budget default 300 ms,
  Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-57" date="1784030402">- Update source to c464673: instrument the receiver-&gt;sender backchannels and
  request Cast RTCP event logs (groundwork for per-session A/V-sync
  auto-negotiation); fix the AirPlay SYNC length word (7 -&gt; 4) that made
  shairport-class receivers add 250 ms of audio latency</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-58" date="1784030403">- Update source to ffd9dc9: reliably stop the mirror audio when the output is
  switched away from the display sink by muting the capture element (the sink-
  input move alone was undone by PipeWire's per-stream restore)</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-59" date="1784030404">- Update source to 333f981: capture desktop audio through a native PipeWire
  virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink
  + pulsesrc. The sink still appears in GNOME's output list; switching the
  output away now stops the receiver by construction (the stream pauses and
  only silence flows), and no sink module survives a crash. Drop the
  libpulse-mainloop-glib BuildRequires; add libpipewire-0.3</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-60" date="1784030405">- Update source to 4ed02ed: sync the volume between GNOME and the receiver.
  Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME),
  and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS,
  which the receiver broadcasts unsolicited). When the receiver applies the
  volume itself, PipeWire's own gain is pinned at unity so it is not applied
  twice; receivers with no volume control (Miracast — WFD has none in the spec)
  keep the software gain, so their slider still works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-61" date="1784030406">- Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP
  SET_PARAMETER, capability probed from the reply), and give Miracast a real
  device volume by borrowing the Cast channel of the same TV while the mirror
  goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only
  Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else,
  so it keeps the software gain. Every failure path falls back to software gain,
  so the slider always works</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-62" date="1784030407">- Update source to 4cacd38: stop streaming when the receiver ends the session.
  A Chromecast that closed the session on its own left GND still "streaming" and
  pushing UDP at a receiver that had stopped listening, needing a manual cancel:
  the receiver's CLOSE was being swallowed by the path that deliberately survives
  a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our
  session was ignored outright. Both now end the stream cleanly</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-63" date="1784030408">- Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys,
  same ChaCha20-Poly1305 framing as the control channel) instead of logging it
  as ciphertext. This is the channel a receiver would use to announce a volume
  changed by its own remote (the notify half AirPlay's request path lacks);
  decrypted events are logged in full and a receiver's `volume:` report is
  turned into a slider move. Testing on real AirPlay hardware still pending</changelog>
  <changelog author="Christian Glombek &lt;c.glombek@cosa.systems&gt; - 1.0.0~dev-64" date="1784030409">- Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the
  device's Cast channel when the same TV also speaks Cast, the way Miracast
  already does. AirPlay can set the receiver's volume but never hears one back —
  its event channel stays idle on the LG, and the modern MediaRemote volume path
  is reachable only from an audio now-playing session, which a screen mirror is
  not (established by firmware reverse-engineering and confirmed live: declaring
  a non-mirror session, sending RECORD and advertising the media control port all
  still yield nothing). A pure Apple TV with no Cast keeps the native send-only
  path; either way the slider still works via PipeWire gain until caps are known.
  Also records the volume-back and lip-sync findings in the AirPlay protocol
  notes and extends the mirror test tool used to prove them</changelog>
</package>
</otherdata>