Fix CRT shader: force transcoding when enabling filter

When setCrtShader(true) was called the stream restart passed an empty
params object to changeStream(), which left EnableDirectPlay/EnableDirectStream
undefined. Due to JavaScript loose equality (undefined != null === false)
these were never sent to the server, so the server could return a Direct Play
MediaSource and our streamOptions[crtShader] append on TranscodingUrl was
never reached — resulting in no visual effect.

Fix: pass EnableDirectPlay:false, EnableDirectStream:false when enabling CRT
to force the server to transcode. When disabling, empty params restore the
default negotiation so the server can resume direct play if eligible.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mani
2026-02-24 14:19:31 +01:00
parent 0b4b125519
commit f6fce9eae8

View File

@@ -1434,7 +1434,12 @@ export class PlaybackManager {
if (shadowMask !== undefined && shadowMask !== null) {
pd.crtShadowMask = shadowMask;
}
changeStream(player, getCurrentTicks(player), {});
// When enabling CRT we must force transcoding — the filter only runs
// server-side via program_opencl and is incompatible with direct play/stream.
const streamParams = enabled
? { EnableDirectPlay: false, EnableDirectStream: false }
: {};
changeStream(player, getCurrentTicks(player), streamParams);
};
self.isFullscreen = function (player) {