void
gst_gl_effects_sobel (GstGLEffects * effects)
{
  GstGLFilter *filter = GST_GL_FILTER (effects);
  GstGLShader *shader;

  shader = gst_gl_effects_get_fragment_shader (effects, "desat0",
      desaturate_fragment_source_gles2);
  gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
      effects->midtexture[0], shader);

  shader = gst_gl_effects_get_fragment_shader (effects, "hconv0",
      sep_sobel_hconv3_fragment_source_gles2);
  gst_gl_shader_use (shader);
  gst_gl_shader_set_uniform_1f (shader, "height",
      GST_VIDEO_INFO_HEIGHT (&filter->out_info));
  gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0],
      effects->midtexture[1], shader);

  shader = gst_gl_effects_get_fragment_shader (effects, "vconv0",
      sep_sobel_vconv3_fragment_source_gles2);
  gst_gl_shader_use (shader);
  gst_gl_shader_set_uniform_1f (shader, "width",
      GST_VIDEO_INFO_WIDTH (&filter->out_info));
  gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[1],
      effects->midtexture[0], shader);

  shader = gst_gl_effects_get_fragment_shader (effects, "len0",
      sep_sobel_length_fragment_source_gles2);
  gst_gl_shader_use (shader);
  gst_gl_shader_set_uniform_1i (shader, "invert", effects->invert);
  gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0],
      effects->outtexture, shader);
}
Example #2
0
static gboolean
gst_gl_filtersobel_filter (GstGLFilter * filter, GstGLBuffer * inbuf,
    GstGLBuffer * outbuf)
{
  GstGLFilterSobel *filtersobel = GST_GL_FILTERSOBEL (filter);

  gst_gl_filter_render_to_target_with_shader (filter, inbuf->texture,
      filtersobel->midtexture[0], filtersobel->desat);
  gst_gl_filter_render_to_target_with_shader (filter,
      filtersobel->midtexture[0], filtersobel->midtexture[1],
      filtersobel->hconv);
  gst_gl_filter_render_to_target_with_shader (filter,
      filtersobel->midtexture[1], filtersobel->midtexture[0],
      filtersobel->vconv);
  gst_gl_filter_render_to_target (filter, filtersobel->midtexture[0],
      outbuf->texture, gst_gl_filtersobel_length, filtersobel);
  return TRUE;
}
void
gst_gl_effects_sin (GstGLEffects * effects)
{
  GstGLFilter *filter = GST_GL_FILTER (effects);
  GstGLShader *shader;

  shader = gst_gl_effects_get_fragment_shader (effects, "sin",
      sin_fragment_source_gles2);
  gst_gl_filter_render_to_target_with_shader (filter, effects->intexture,
      effects->outtexture, shader);
}
static gboolean
gst_gl_colorscale_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
    GstGLMemory * out_tex)
{
  GstGLColorscale *colorscale = GST_GL_COLORSCALE (filter);

  if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context))
    gst_gl_filter_render_to_target_with_shader (filter, in_tex, out_tex,
        colorscale->shader);

  return TRUE;
}
static gboolean
gst_gl_colorscale_filter_texture (GstGLFilter * filter, guint in_tex,
    guint out_tex)
{
  GstGLColorscale *colorscale;

  colorscale = GST_GL_COLORSCALE (filter);

  if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
      (GST_GL_API_GLES2 | GST_GL_API_OPENGL3))
    gst_gl_filter_render_to_target_with_shader (filter, TRUE, in_tex, out_tex,
        colorscale->shader);

  if (gst_gl_context_get_gl_api (GST_GL_BASE_FILTER (filter)->context) &
      GST_GL_API_OPENGL)
    gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
        gst_gl_colorscale_callback, colorscale);

  return TRUE;
}
Example #6
0
static gboolean
gst_gl_alpha_filter_texture (GstGLFilter * filter, GstGLMemory * in_tex,
    GstGLMemory * out_tex)
{
  GstGLAlpha *alpha = GST_GL_ALPHA (filter);
  GstGLShader *shader;

  if (!alpha->alpha_shader)
    _create_shader (alpha);

  GST_OBJECT_LOCK (alpha);
  if (alpha->method == ALPHA_METHOD_SET) {
    shader = alpha->alpha_shader;
    gst_gl_shader_use (shader);
    gst_gl_shader_set_uniform_1f (shader, "alpha", alpha->alpha);
  } else {
    shader = alpha->chroma_key_shader;
    gst_gl_shader_use (shader);

    gst_gl_shader_set_uniform_1f (shader, "cb", alpha->cb);
    gst_gl_shader_set_uniform_1f (shader, "cr", alpha->cr);
    gst_gl_shader_set_uniform_1f (shader, "kg", alpha->kg);
    gst_gl_shader_set_uniform_1f (shader, "accept_angle_tg",
        alpha->accept_angle_tg);
    gst_gl_shader_set_uniform_1f (shader, "accept_angle_ctg",
        alpha->accept_angle_ctg);
    gst_gl_shader_set_uniform_1f (shader, "one_over_kc", alpha->one_over_kc);
    gst_gl_shader_set_uniform_1f (shader, "kfgy_scale", alpha->kfgy_scale);
    gst_gl_shader_set_uniform_1f (shader, "noise_level2", alpha->noise_level2);
    gst_gl_shader_set_uniform_1f (shader, "smin",
        0.5 - alpha->black_sensitivity / 255.0);
    gst_gl_shader_set_uniform_1f (shader, "smax",
        0.5 + alpha->white_sensitivity / 255.0);
  }
  GST_OBJECT_UNLOCK (alpha);

  gst_gl_filter_render_to_target_with_shader (filter, in_tex, out_tex, shader);

  return TRUE;
}
static gboolean
gst_gl_colorscale_filter_texture (GstGLFilter * filter, guint in_tex,
    guint out_tex)
{
  GstGLColorscale *colorscale;

  colorscale = GST_GL_COLORSCALE (filter);

#if GST_GL_HAVE_GLES2
  if (gst_gl_context_get_gl_api (filter->context) & GST_GL_API_GLES2)
    gst_gl_filter_render_to_target_with_shader (filter, TRUE, in_tex, out_tex,
        colorscale->shader);
#endif

#if GST_GL_HAVE_OPENGL
  if (gst_gl_context_get_gl_api (filter->context) & GST_GL_API_OPENGL)
    gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
        gst_gl_colorscale_callback, colorscale);
#endif

  return TRUE;
}