Warranty Case H4203978 · Technical Demonstration

2× upscaling: the filter matters.

A 1320×743 frame from The Super Mario Bros. Movie, doubled to 2640×1486 live in your browser — once with the nearest-neighbor doubling the C2 Pro uses in 3D mode, and once with the filters its 2D mode already uses. The same 2× operation your projector runs on every 1080p 3D frame.

Hisense C2 Pro · firmware V0000.09.02X.P0925 · case H4203978

Nothing is pre-rendered — your GPU reconstructs the doubled frame from the half-size source, per pixel, with whichever two filters you pick. Zoom into Mario's face and drag the gold divider.

fit
Nearest = what the C2 Pro does to every 3D frame Lanczos-3 = what its own 2D path already does Drag to pan · scroll or pinch to zoom · drag the gold divider

The implementation

This is the exact code computing the two sides of the demo above. The only difference between the defect and the fix is the kernel the scaler samples with.

Nearest neighbor — what the 3D path does today

1 sample · no interpolation at all · runs every frame on every 3D pixel
// each 4K output pixel just copies its nearest 1080p
// source pixel: every source pixel becomes a 2x2 block
vec3 nearest(sampler2D t, vec2 src){
    ivec2 p = ivec2(floor(src));
    return texelFetch(t, p, 0).rgb;
}

Lanczos-3 — the fix

36 samples · 6×6 windowed sinc · reference-quality reconstruction
// windowed sinc kernel
float lanczos(float x, float a){
    x = abs(x);
    if(x < 1e-4) return 1.0;
    if(x >= a)   return 0.0;
    float px = 3.14159265 * x;
    return (sin(px)/px) * (sin(px/a)/(px/a));
}

vec3 lanczos3(sampler2D t, vec2 src){
    ivec2 p = ivec2(floor(src - 0.5));
    vec2  f = (src - 0.5) - vec2(p);
    vec3  c = vec3(0.0);
    float ws = 0.0;
    for(int j = -2; j <= 3; j++)
    for(int i = -2; i <= 3; i++){
        float w = lanczos(float(i)-f.x, 3.0)
                * lanczos(float(j)-f.y, 3.0);
        c  += w * texelFetch(t, p + ivec2(i,j), 0).rgb;
        ws += w;
    }
    return c / ws;
}

The fix is a one-line change.

// video HAL, 3D path initialization
- scaler.setFilter(FILTER_NEAREST);
+ scaler.setFilter(FILTER_LANCZOS);  // already implemented in the 2D path

Both filters already ship in the same firmware on the 2D path, and both are trivially cheap on the MT9618's Mali-G52 GPU and VPU. No new silicon, no new pipeline, no performance risk.

What I'm asking for under warranty case H4203978 is a firmware build with that change — or a written explanation of why the 3D signal path is given a worse scaler than the 2D path of the same projector.