Repository navigation
TargetBridge 3.6.0: resilient receivers, adaptive streaming, and permission guidance - #206
Conversation
The receiver advertises a fixed 5120x2880 panel with a 2560x1440 HiDPI mode and `"hiDPI":true`, regardless of the display it is actually attached to. The sender took those values as the virtual display geometry, so a 1080p stream was captured from a 1440p HiDPI desktop and rescaled twice on the way to a 1080p panel: the desktop arrived at the wrong size and paid for two non-integer resamples. Render matching could not fix this either. It sizes the backing store to the stream but keeps the strictly 2x HiDPI contract, so 1080p became a 960x540 desktop — capture is 1:1, but every control is drawn at 2x on a panel with no extra pixels to resolve it. Give `TBVirtualDisplayModeSize` an explicit `isHiDPI`, defaulting to the existing 2x behaviour, and let the capture profile choose. The 1080p profiles declare native scale and get a 1920x1080 1x mode; every other profile is untouched and still derives its mode and HiDPI flag from the receiver profile. The trigger is the profile rather than the receiver's reported panel size, because that value is a compile-time constant on the receiver and cannot distinguish a 1080p panel from a 5K one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Thanks for the work on 3.6! One thing worth checking before merging: at the current head (5f38362), the three fixes from merged PR #205 appear to be missing:
Could these fixes be carried forward into 3.6 before release? The display fix may need adapting to the new resolvedMode.isHiDPI / native-scale logic rather than applying the old patch unchanged. This is based on source inspection; I haven’t tested a 3.6 build. I’m flagging it to help preserve the fixes already merged in #205. |
|
A few questions come to mind from the source at 10f8ccd that might be worth checking before release:
I may be missing some surrounding handling, and I haven’t reproduced the application behaviour in a 3.6 build. These are just possible edge cases suggested by the current source and workflow configuration. |
|
Thanks for merging #206 and carrying forward the three fixes from #205! I took another look at the merged 1. Per-receiver codec preference keys do not appear to round-trip. In However, Those keys do not match. Selecting a receiver again calls One possible reproduction would be: select a discovered receiver → choose HEVC → switch to Manual receiver entry → select the same receiver again. Using the stable receiver UUID consistently for both saving and restoring, with a legacy service-name fallback, might resolve this. 2. Saved display settings may need migration to the UUID identity.
In 3.5.2 these keys were derived from the previous service/picker identity. With 3.6 they can change to A one-time legacy lookup and copy, only when no setting exists under the new key, might preserve existing layouts and resolution preferences. These observations are based on source inspection only; I have not tested a 3.6 build on hardware. I may have overlooked some migration handling elsewhere. Would these two cases be worth covering with regression tests before tagging 3.6.0? |
Summary
Validation
xcodebuild test: 163 Sender tests passedmake test: 654 Receiver checks passedScope
This targets
dev-3.6.0only. It does not merge intomainand does not include the experimental lossless 5K60 or Metal-renderer work.