You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
FFmpegAndroid/Live/src/main/res/raw/nostalgia.glsl

108 lines
4.1 KiB

#extension GL_OES_EGL_image_external : require
precision highp float;
varying highp vec2 textureCoordinate;
uniform samplerExternalOES inputImageTexture;
uniform sampler2D curve;
uniform sampler2D curve2;
uniform highp float texelWidthOffset;
uniform highp float texelHeightOffset;
uniform highp float blurSize;
vec4 OverlayBlendingVec4(vec4 down, vec4 up, float fAlpha)
{
if ( down.r < 0.5 )
{
up.r = up.r * down.r * 2.0;
}
else
{
up.r = 1.0 - ( ( 1.0 - down.r) * ( 1.0 - up.r ) * 2.0 );
}
if ( down.g < 0.5 )
{
up.g = up.g * down.g * 2.0;
}
else
{
up.g = 1.0 - ( ( 1.0 - down.g) * ( 1.0 - up.g ) * 2.0 );
}
if ( down.b < 0.5 )
{
up.b = up.b * down.b * 2.0;
}
else
{
up.b = 1.0 - ( ( 1.0 - down.b) * ( 1.0 - up.b ) * 2.0 );
}
down = ( up - down ) * fAlpha + down;
return down;
}
void main()
{
float xCoordinate = textureCoordinate.x;
float yCoordinate = textureCoordinate.y;
vec4 textureColor = texture2D( inputImageTexture, vec2(xCoordinate, yCoordinate));
highp vec2 firstOffset = vec2(1.3846153846 * texelWidthOffset, 1.3846153846 * texelHeightOffset) * blurSize;
highp vec2 secondOffset = vec2(3.2307692308 * texelWidthOffset, 3.2307692308 * texelHeightOffset) * blurSize;
highp vec2 centerTextureCoordinate = vec2(xCoordinate, yCoordinate);
highp vec2 oneStepLeftTextureCoordinate = vec2(xCoordinate, yCoordinate) - firstOffset;
highp vec2 twoStepsLeftTextureCoordinate = vec2(xCoordinate, yCoordinate) - secondOffset;
highp vec2 oneStepRightTextureCoordinate = vec2(xCoordinate, yCoordinate) + firstOffset;
highp vec2 twoStepsRightTextureCoordinate = vec2(xCoordinate, yCoordinate) + secondOffset;
lowp vec4 fragmentColor = texture2D(inputImageTexture, vec2(centerTextureCoordinate.x, centerTextureCoordinate.y)) * 0.2270270270;
fragmentColor += texture2D(inputImageTexture, vec2(oneStepLeftTextureCoordinate.x, oneStepLeftTextureCoordinate.y)) * 0.3162162162;
fragmentColor += texture2D(inputImageTexture, vec2(oneStepRightTextureCoordinate.x, oneStepRightTextureCoordinate.y)) * 0.3162162162;
fragmentColor += texture2D(inputImageTexture, vec2(twoStepsLeftTextureCoordinate.x, twoStepsLeftTextureCoordinate.y)) * 0.0702702703;
fragmentColor += texture2D(inputImageTexture, vec2(twoStepsRightTextureCoordinate.x, twoStepsRightTextureCoordinate.y)) * 0.0702702703;
lowp vec4 blurColor = fragmentColor;
// step1 ScreenBlending
blurColor = 1.0 - ((1.0 - textureColor) * (1.0 - blurColor));
blurColor = clamp(blurColor, 0.0, 1.0);
textureColor = (blurColor - textureColor) * 0.7 + textureColor;
textureColor = clamp(textureColor, 0.0, 1.0);
// step2 OverlayBlending
textureColor = OverlayBlendingVec4(textureColor, vec4(0.0, 0.0, 0.0, 1.0), 0.3);
textureColor = clamp(textureColor, vec4(0.0, 0.0, 0.0, 1.0), vec4(1.0, 1.0, 1.0, 1.0));
// step3 curve
highp float redCurveValue = texture2D(curve, vec2(textureColor.r, 0.0)).r;
highp float greenCurveValue = texture2D(curve, vec2(textureColor.g, 0.0)).g;
highp float blueCurveValue = texture2D(curve, vec2(textureColor.b, 0.0)).b;
// step4 curve
redCurveValue = texture2D(curve, vec2(redCurveValue, 1.0)).r;
greenCurveValue = texture2D(curve, vec2(greenCurveValue, 1.0)).r;
blueCurveValue = texture2D(curve, vec2(blueCurveValue, 1.0)).r;
// step5 level
redCurveValue = texture2D(curve, vec2(redCurveValue, 1.0)).g;
greenCurveValue = texture2D(curve, vec2(greenCurveValue, 1.0)).g;
blueCurveValue = texture2D(curve, vec2(blueCurveValue, 1.0)).g;
// step6 curve
redCurveValue = texture2D(curve2, vec2(redCurveValue, 1.0)).r;
greenCurveValue = texture2D(curve2, vec2(greenCurveValue, 1.0)).g;
blueCurveValue = texture2D(curve2, vec2(blueCurveValue, 1.0)).b;
// step7 curve
redCurveValue = texture2D(curve, vec2(redCurveValue, 1.0)).b;
greenCurveValue = texture2D(curve, vec2(greenCurveValue, 1.0)).b;
blueCurveValue = texture2D(curve, vec2(blueCurveValue, 1.0)).b;
lowp vec4 BCSColor = vec4(redCurveValue, greenCurveValue, blueCurveValue, 1.0);
gl_FragColor = vec4(BCSColor.r,BCSColor.g,BCSColor.b,1.0);
}