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 H4203978Nothing 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.
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.
// 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; }
// 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; }
// 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.