- Jan 20, 2025
-
-
Steve Lhomme authored
It's already computed by the core.
-
Steve Lhomme authored
-
Steve Lhomme authored
-
Steve Lhomme authored
-
Steve Lhomme authored
-
Steve Lhomme authored
-
Steve Lhomme authored
We don't need to place the picture, we will receive a VOUT_DISPLAY_CHANGE_SOURCE_PLACE if needed.
-
Steve Lhomme authored
It should not have to know how to place picture. The external placement is always on the output size anyway.
-
Steve Lhomme authored
The placement only uses the visible parts of the video, so it makes no difference.
-
Steve Lhomme authored
-
Steve Lhomme authored
-
Steve Lhomme authored
Broken in c8b61aaa.
-
- Jan 17, 2025
-
-
-
Via GL_HALF_FLOAT, should work starting GLES 3.0. Semiplanar is not supported as a CPU pass may be necessary to convert to HALF_FLOAT: Indeed, half-float data format consists of 1 sign bit, 5 exponent bits and 10 mantissa bits. If you try to treat P010’s integer layout as half-float, the GPU misinterprets those bits as exponent and mantissa, causing corruption.
-
-
When available.
-
-
-
-
This could lead to false positives or negatives.
-
-
This function does not change the type for now.
-
Not fixing anything since it's always GL_UNSIGNED_SHORT for 16bits (for now).
-
Fixes a regression from 67bddf90 vlc_gl_interop_GetTexFormatSize() would always return an error for the GL_R16UI / GL_RED combination. It's either GL_R16/GL_RED or GL_R16UI/GL_RED_INTEGER. But the sampler is using sampler2D and not usampler2D, so let's keep GL_R16.
-
Fixes the following error on GLES2 when using libplacebo shaders. [00007fe3cc815910] gl generic error: Shader source: 1: #version 300 es 2: precision highp float; 3: uniform sampler2D Textures[3]; 4: uniform mat3 _2; 5: uniform mat3 _3; 6: uniform mat3 _4; 7: uniform float _a; 8: uniform float _b; 9: uniform mat3 _19; 10: uniform sampler2D _6; 11: uniform sampler3D _d; 12: 13: const float _8 = float(0.001953125); 14: const float _9 = float(0.99609375); 15: #define _7(x) (_9 * (x) + _8) 16: #define _5(pos) (textureLod(_6, vec2(\ 17: _7(float(pos))\ 18: ,0.5\ 19: ), 0.0).x) 20: const float _f = float(0.010416666977107525); 21: const float _10 = float(0.9791666269302368); 22: #define _e(x) (_10 * (x) + _f) 23: const float _12 = float(0.015625); 24: const float _13 = float(0.96875); 25: #define _11(x) (_13 * (x) + _12) 26: const float _15 = float(0.001953125); 27: const float _16 = float(0.99609375); 28: #define _14(x) (_16 * (x) + _15) 29: #define _c(pos) (textureLod(_d, vec3(\ 30: _e(vec3(pos).x)\ 31: ,_11(vec3(pos).y)\ 32: ,_14(vec3(pos).z)\ 33: ), 0.0).xyzw) 34: const float _17 = float(-0.16753844916820526); 35: const float _18 = float(2.0106043815612793); 36: const float _1a = float(0.0595848374068737); 37: const float _1b = float(1.149015188217163); 38: vec4 _1(vec4 color) { 39: // pl_shader_color_map 40: { 41: // pl_shader_linearize 42: color.rgb = max(color.rgb, 0.0); 43: color.rgb = pow(color.rgb, vec3(1.0/78.84375)); 44: color.rgb = max(color.rgb - vec3(0.8359375), 0.0) 45: / (vec3(18.8515625) - vec3(18.6875) * color.rgb); 46: color.rgb = pow(color.rgb, vec3(1.0/0.1593017578125)); 47: color.rgb *= vec3(49.26108374384236); 48: vec3 lms = _4 * color.rgb; 49: vec3 lmspq = 0.0203000009059906 * lms; 50: lmspq = pow(max(lmspq, 0.0), vec3(0.1593017578125)); 51: lmspq = (vec3(0.8359375) + 18.8515625 * lmspq) 52: / (vec3(1.0) + 18.6875 * lmspq); 53: lmspq = pow(lmspq, vec3(78.84375)); 54: vec3 ipt = _2 * lmspq; 55: float i_orig = ipt.x; 56: #define tone_map(x) (_5(_b * (x) + _a)) 57: ipt.x = tone_map(ipt.x); 58: vec2 hull = vec2(i_orig, ipt.x); 59: hull = ((hull - 6.0) * hull + 9.0) * hull; 60: ipt.yz *= min(i_orig / ipt.x, hull.y / hull.x); 61: vec3 idx; 62: idx.x = _18 * ipt.x + _17; 63: idx.y = 2.0 * length(ipt.yz); 64: idx.z = 0.15915494309189535 * atan(ipt.z, ipt.y) + 0.5; 65: ipt = _c(idx).xyz; 66: ipt.yz -= vec2(32768.0/65535.0); 67: lmspq = _3 * ipt; 68: lms = pow(max(lmspq, 0.0), vec3(1.0/78.84375)); 69: lms = max(lms - vec3(0.8359375), 0.0) 70: / (vec3(18.8515625) - 18.6875 * lms); 71: lms = pow(lms, vec3(1.0/0.1593017578125)); 72: lms *= 49.261085510253906; 73: color.rgb = _19 * lms; 74: #undef tone_map 75: // pl_shader_delinearize 76: color.rgb = max(color.rgb, 0.0); 77: color.rgb = pow(_1b * color.rgb, vec3(1.0/2.4)) - vec3(_1a); 78: } 79: return color; 80: } 81: 82: uniform mat4 ConvMatrix; 83: vec4 vlc_texture(vec2 tex_coords) { 84: vec4 pixel = vec4( 85: texture(Textures[0], tex_coords).r 86: , texture(Textures[1], tex_coords).r 87: , texture(Textures[2], tex_coords).r 88: , 1.0); 89: vec4 result = ConvMatrix * pixel; 90: result = _1(result); 91: return result; 92: } 93: #if __VERSION__ < 300 94: #define FragColor gl_FragColor 95: varying vec2 PicCoords; 96: #else 97: in vec2 PicCoords; 98: out vec4 FragColor; 99: #endif 100: void main() { 101: FragColor = vlc_texture(PicCoords); 102: } [00007fe3cc815910] gl generic error: shader: 0:11(1): error: No precision specified in this scope for type `sampler3D'
-
It is possible to get opaque chromas from vlc_fourcc_GetYUVFallback(). This fixes a vlc_assert_unreachable() in the desc->plane_count switch/case. It was unlikely as opaque chromas are generally at the end of the list.
-
-
- Jan 15, 2025
-
-
Steve Lhomme authored
-
Steve Lhomme authored
-
- Jan 14, 2025
-
-
-
The viewpoint and viewport informations need to be reset after restarting the renderer because they will get lost with the re-creation of the renderer filter.
-
The viewpoint and viewport informations need to be reset after restarting the renderer because they will get lost with the re-creation of the renderer filter.
-
Like for update_format, the viewpoint needs to be restored given that the renderer module is restarted.
-
The filter provides access to the .sys pointer as well as the private implementation from the core, whereas vlc_gl_renderer only references the .sys pointer. Interacting with the filter in the filter engine (vlc_gl_filters object) requires access to the vlc_gl_filter object itself so store it instead of the vlc_gl_renderer.
-
This adds a way for the renderer to override the source projection from the creation of the renderer module. Restarting the filter allows to change the projection by changing this parameter in the configuration chain beforehand.
-
-
-
The vout_helper code will restore the viewpoint when the renderer is created again, so the display doesn't need to restore it manually anymore.
-
Future changes will re-create the renderer module and the viewpoint will be lost after that. It's already doing that when updating the format, so store it to restore the viewpoint during re-creation of the renderer.
-
The function allows replacing a filter from the existing vlc_gl_filter chain. The main target is replacing the final renderer but it could work with any (current non-blend) filter which needs to have its shaders updated.
-