Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ADD: [gles] BOB deinterlacing #6169

Merged
merged 5 commits into from Jan 21, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 8 additions & 2 deletions system/shaders/guishader_frag_rgba.glsl
Expand Up @@ -26,8 +26,14 @@ varying vec4 m_cord1;
varying lowp vec4 m_colour;
uniform int m_method;

// SM_TEXTURE_NOBLEND
uniform float m_brightness;
uniform float m_contrast;

void main ()
{
gl_FragColor.rgba = texture2D(m_samp0, m_cord0.xy).rgba;
vec4 color = texture2D(m_samp0, m_cord0.xy).rgba;
color = color * m_contrast;
color = color + m_brightness;

gl_FragColor.rgba = color;
}
54 changes: 54 additions & 0 deletions system/shaders/guishader_frag_rgba_bob.glsl
@@ -0,0 +1,54 @@
/*
* Copyright (C) 2010-2013 Team XBMC
* http://xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*
*/

precision highp float;
uniform sampler2D m_samp0;
uniform sampler2D m_samp1;
varying vec4 m_cord0;
varying vec4 m_cord1;
varying lowp vec4 m_colour;
uniform int m_method;
uniform int m_field;
uniform float m_step;

uniform float m_brightness;
uniform float m_contrast;

void main ()
{
vec2 source;
source = m_cord0.xy;

float temp1 = mod(source.y, 2.0*m_step);
float temp2 = source.y - temp1;
source.y = temp2 + m_step/2.0 - float(m_field)*m_step;

// Blend missing line
vec2 below;
float bstep = step(m_step, temp1);
below.x = source.x;
below.y = source.y + (2.0*m_step*bstep);

vec4 color = mix(texture2D(m_samp0, source), texture2D(m_samp0, below), 0.5);
color = color * m_contrast;
color = color + m_brightness;

gl_FragColor.rgba = color;
}
56 changes: 56 additions & 0 deletions system/shaders/guishader_frag_rgba_bob_oes.glsl
@@ -0,0 +1,56 @@
/*
* Copyright (C) 2010-2013 Team XBMC
* http://xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*
*/

#extension GL_OES_EGL_image_external : require

precision highp float;
uniform samplerExternalOES m_samp0;
uniform samplerExternalOES m_samp1;
varying vec4 m_cord0;
varying vec4 m_cord1;
varying lowp vec4 m_colour;
uniform int m_method;
uniform int m_field;
uniform float m_step;

uniform float m_brightness;
uniform float m_contrast;

void main ()
{
vec2 source;
source = m_cord0.xy;

float temp1 = mod(source.y, 2.0*m_step);
float temp2 = source.y - temp1;
source.y = temp2 + m_step/2.0 - float(m_field)*m_step;

// Blend missing line
vec2 below;
float bstep = step(m_step, temp1);
below.x = source.x;
below.y = source.y + (2.0*m_step*bstep);

vec4 color = mix(texture2D(m_samp0, source), texture2D(m_samp0, below), 0.5);
color = color * m_contrast;
color = color + m_brightness;

gl_FragColor.rgba = color;
}
10 changes: 8 additions & 2 deletions system/shaders/guishader_frag_rgba_oes.glsl
Expand Up @@ -24,8 +24,14 @@ precision mediump float;
uniform samplerExternalOES m_samp0;
varying vec4 m_cord0;

// SM_TEXTURE_OES
uniform float m_brightness;
uniform float m_contrast;

void main ()
{
gl_FragColor.rgba = texture2D(m_samp0, m_cord0.xy).rgba;
vec4 color = texture2D(m_samp0, m_cord0.xy).rgba;
color = color * m_contrast;
color = color + m_brightness;

gl_FragColor.rgba = color;
}
33 changes: 26 additions & 7 deletions system/shaders/yuv2rgb_bob_gles.glsl
Expand Up @@ -18,7 +18,7 @@
*
*/

precision mediump float;
precision highp float;
uniform sampler2D m_sampY;
uniform sampler2D m_sampU;
uniform sampler2D m_sampV;
Expand All @@ -38,18 +38,37 @@ void main()
vec2 offsetY;
vec2 offsetU;
vec2 offsetV;
float temp1 = mod(m_cordY.y, 2*m_stepY);
float temp1 = mod(m_cordY.y, 2.0*m_stepY);

offsetY = m_cordY;
offsetU = m_cordU;
offsetV = m_cordV;

offsetY.y -= (temp1 - m_stepY/2 + float(m_field)*m_stepY);
offsetU.y -= (temp1 - m_stepY/2 + float(m_field)*m_stepY)/2;
offsetV.y -= (temp1 - m_stepY/2 + float(m_field)*m_stepY)/2;
offsetY.y -= (temp1 - m_stepY/2.0 + float(m_field)*m_stepY);
offsetU.y -= (temp1 - m_stepY/2.0 + float(m_field)*m_stepY)/2.0;
offsetV.y -= (temp1 - m_stepY/2.0 + float(m_field)*m_stepY)/2.0;

yuv.rgba = vec4(texture2D(m_sampY, offsetY).r, texture2D(m_sampU, offsetU).r, texture2D(m_sampV, offsetV).r, 1.0);
float bstep = step(m_stepY, temp1);

// Blend missing line
vec2 belowY, belowU, belowV;

belowY.x = offsetY.x;
belowY.y = offsetY.y + (2.0*m_stepY*bstep);
belowU.x = offsetU.x;
belowU.y = offsetU.y + (m_stepY*bstep);
belowV.x = offsetV.x;
belowV.y = offsetV.y + (m_stepY*bstep);

vec4 yuvBelow, rgbBelow;

yuv.rgba = vec4(texture2D(m_sampY, offsetY).r, texture2D(m_sampU, offsetU).g, texture2D(m_sampV, offsetV).a, 1.0);
rgb = m_yuvmat * yuv;
rgb.a = m_alpha;
gl_FragColor = rgb;

yuvBelow.rgba = vec4(texture2D(m_sampY, belowY).r, texture2D(m_sampU, belowU).g, texture2D(m_sampV, belowV).a, 1.0);
rgbBelow = m_yuvmat * yuvBelow;
rgbBelow.a = m_alpha;

gl_FragColor.rgba = mix(rgb, rgbBelow, 0.5);
}