<commit_before>#include <gst/gst.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk/gdkx.h>
#include <gst/interfaces/xoverlay.h>


GstElement *pipeline;

static gboolean
expose_cb (GtkWidget * widget, GdkEventExpose * event, gpointer data)
{
  GstXOverlay *overlay =
    GST_X_OVERLAY (gst_bin_get_by_interface (GST_BIN (data),
                                             GST_TYPE_X_OVERLAY));
  gst_x_overlay_set_xwindow_id (overlay, GDK_WINDOW_XWINDOW (widget->window));
  return FALSE;
}

static void
destroy_cb (gpointer data)
{
  g_message ("destroy callback");

  gst_element_set_state (pipeline, GST_STATE_NULL);
  gst_object_unref (pipeline);

  gtk_main_quit ();
}

gboolean
apply_fx (GtkWidget * widget, gpointer data)
{
  gchar *fx;
  GEnumClass *p_class;

/* heeeellppppp!! */
  p_class =
      G_PARAM_SPEC_ENUM (g_object_class_find_property (G_OBJECT_GET_CLASS
          (G_OBJECT (data)), "effect")
      )->enum_class;

  fx = gtk_combo_box_get_active_text (GTK_COMBO_BOX (widget));
  g_print ("setting: %s - %s\n", fx, g_enum_get_value_by_nick (p_class,
          fx)->value_name);
  g_object_set (G_OBJECT (data), "effect", g_enum_get_value_by_nick (p_class,
          fx)->value, NULL);
  return FALSE;
}

gboolean
play_cb (GtkWidget * widget, gpointer data)
{
  g_message ("playing");
  gst_element_set_state (GST_ELEMENT (data), GST_STATE_PLAYING);
  return FALSE;
}

gboolean
null_cb (GtkWidget * widget, gpointer data)
{
  g_message ("nulling");
  gst_element_set_state (GST_ELEMENT (data), GST_STATE_NULL);
  return FALSE;
}

gboolean
ready_cb (GtkWidget * widget, gpointer data)
{
  g_message ("readying");
  gst_element_set_state (GST_ELEMENT (data), GST_STATE_READY);
  return FALSE;
}

gboolean
pause_cb (GtkWidget * widget, gpointer data)
{
  g_message ("pausing");
  gst_element_set_state (GST_ELEMENT (data), GST_STATE_PAUSED);
  return FALSE;
}

gint
main (gint argc, gchar * argv[])
{
  GstStateChangeReturn ret;
  GstElement *uload, *filter, *sink;
  GstElement *sourcebin;
  GError *error = NULL;

  GtkWidget *window;
  GtkWidget *screen;
  GtkWidget *vbox, *combo;
  GtkWidget *hbox;
  GtkWidget *play, *pause, *null, *ready;

  gchar **source_desc_array = NULL;
  gchar *source_desc = NULL;

  GOptionContext *context;
  gboolean retval;
  GOptionEntry options[] = {
    { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &source_desc_array, NULL, NULL },
    { NULL }
  };

  g_set_application_name ("gst-gl-effects test app");
  
  context = g_option_context_new ("src ! ... ! identity");
  g_option_context_add_main_entries (context, options, NULL);
  retval = g_option_context_parse (context, &argc, &argv, &error);
  g_assert (retval);
  g_option_context_free (context);
  
  if (source_desc_array != NULL) {
    source_desc = g_strjoinv (" ", source_desc_array);
    g_strfreev (source_desc_array);
  }
  if (source_desc == NULL) {
    g_print ("\nUsage: %s SOURCE_DESC\n\n", argv[0]);
    g_print ("where SOURCE_DESC is a description of the source bin in gst-launch format\n");
    g_print ("like: videotestsrc ! video/x-raw-rgb, width=352, heigth=288 ! identity\n\n");
    return -1;
  }

  gtk_init (&argc, &argv);
  gst_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_set_border_width (GTK_CONTAINER (window), 3);

  g_signal_connect (G_OBJECT (window), "delete-event",
      G_CALLBACK (destroy_cb), NULL);
  g_signal_connect (G_OBJECT (window), "destroy-event",
      G_CALLBACK (destroy_cb), NULL);

  pipeline = gst_pipeline_new ("pipeline");

  sourcebin = gst_parse_bin_from_description (g_strdup (source_desc), TRUE, &error);
  g_free (source_desc);
  if (error)
    g_error ("%s", error->message);

  uload = gst_element_factory_make ("glupload", "glu");
  filter = gst_element_factory_make ("gleffects", "flt");
  sink = gst_element_factory_make ("glimagesink", "glsink");

  gst_bin_add_many (GST_BIN (pipeline), sourcebin, uload, filter, sink, NULL);

  if (!gst_element_link_many (sourcebin, uload, filter, sink, NULL)) {
    g_print ("Failed to link one or more elements!\n");
    return -1;
  }

  screen = gtk_drawing_area_new ();

  gtk_widget_set_size_request (screen, 640, 480);       // 500 x 376

  vbox = gtk_vbox_new (FALSE, 2);

  gtk_box_pack_start (GTK_BOX (vbox), screen, TRUE, TRUE, 0);

  combo = gtk_combo_box_new_text ();

  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "identity");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "squeeze");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "stretch");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "bulge");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "twirl");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "tunnel");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "fisheye");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "square");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "mirror");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "heat");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "xpro");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "sepia");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "glow");

  g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK (apply_fx), filter);

  gtk_box_pack_start (GTK_BOX (vbox), combo, FALSE, FALSE, 0);

  hbox = gtk_hbox_new (FALSE, 0);

  play = gtk_button_new_with_label ("PLAY");

  g_signal_connect (G_OBJECT (play), "clicked", G_CALLBACK (play_cb), pipeline);

  pause = gtk_button_new_with_label ("PAUSE");

  g_signal_connect (G_OBJECT (pause), "clicked",
      G_CALLBACK (pause_cb), pipeline);

  null = gtk_button_new_with_label ("NULL");

  g_signal_connect (G_OBJECT (null), "clicked", G_CALLBACK (null_cb), pipeline);
<commit_msg>[173/906] add lumaxpro (desaturate + cross process) effect. nothing too impressive but I like it.<commit_after>#include <gst/gst.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk/gdkx.h>
#include <gst/interfaces/xoverlay.h>


GstElement *pipeline;

static gboolean
expose_cb (GtkWidget * widget, GdkEventExpose * event, gpointer data)
{
  GstXOverlay *overlay =
    GST_X_OVERLAY (gst_bin_get_by_interface (GST_BIN (data),
                                             GST_TYPE_X_OVERLAY));
  gst_x_overlay_set_xwindow_id (overlay, GDK_WINDOW_XWINDOW (widget->window));
  return FALSE;
}

static void
destroy_cb (gpointer data)
{
  g_message ("destroy callback");

  gst_element_set_state (pipeline, GST_STATE_NULL);
  gst_object_unref (pipeline);

  gtk_main_quit ();
}

gboolean
apply_fx (GtkWidget * widget, gpointer data)
{
  gchar *fx;
  GEnumClass *p_class;

/* heeeellppppp!! */
  p_class =
      G_PARAM_SPEC_ENUM (g_object_class_find_property (G_OBJECT_GET_CLASS
          (G_OBJECT (data)), "effect")
      )->enum_class;

  fx = gtk_combo_box_get_active_text (GTK_COMBO_BOX (widget));
  g_print ("setting: %s - %s\n", fx, g_enum_get_value_by_nick (p_class,
          fx)->value_name);
  g_object_set (G_OBJECT (data), "effect", g_enum_get_value_by_nick (p_class,
          fx)->value, NULL);
  return FALSE;
}

gboolean
play_cb (GtkWidget * widget, gpointer data)
{
  g_message ("playing");
  gst_element_set_state (GST_ELEMENT (data), GST_STATE_PLAYING);
  return FALSE;
}

gboolean
null_cb (GtkWidget * widget, gpointer data)
{
  g_message ("nulling");
  gst_element_set_state (GST_ELEMENT (data), GST_STATE_NULL);
  return FALSE;
}

gboolean
ready_cb (GtkWidget * widget, gpointer data)
{
  g_message ("readying");
  gst_element_set_state (GST_ELEMENT (data), GST_STATE_READY);
  return FALSE;
}

gboolean
pause_cb (GtkWidget * widget, gpointer data)
{
  g_message ("pausing");
  gst_element_set_state (GST_ELEMENT (data), GST_STATE_PAUSED);
  return FALSE;
}

gint
main (gint argc, gchar * argv[])
{
  GstStateChangeReturn ret;
  GstElement *uload, *filter, *sink;
  GstElement *sourcebin;
  GError *error = NULL;

  GtkWidget *window;
  GtkWidget *screen;
  GtkWidget *vbox, *combo;
  GtkWidget *hbox;
  GtkWidget *play, *pause, *null, *ready;

  gchar **source_desc_array = NULL;
  gchar *source_desc = NULL;

  GOptionContext *context;
  gboolean retval;
  GOptionEntry options[] = {
    { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &source_desc_array, NULL, NULL },
    { NULL }
  };

  g_set_application_name ("gst-gl-effects test app");
  
  context = g_option_context_new ("src ! ... ! identity");
  g_option_context_add_main_entries (context, options, NULL);
  retval = g_option_context_parse (context, &argc, &argv, &error);
  g_assert (retval);
  g_option_context_free (context);
  
  if (source_desc_array != NULL) {
    source_desc = g_strjoinv (" ", source_desc_array);
    g_strfreev (source_desc_array);
  }
  if (source_desc == NULL) {
    g_print ("\nUsage: %s SOURCE_DESC\n\n", argv[0]);
    g_print ("where SOURCE_DESC is a description of the source bin in gst-launch format\n");
    g_print ("like: videotestsrc ! video/x-raw-rgb, width=352, heigth=288 ! identity\n\n");
    return -1;
  }

  gtk_init (&argc, &argv);
  gst_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_set_border_width (GTK_CONTAINER (window), 3);

  g_signal_connect (G_OBJECT (window), "delete-event",
      G_CALLBACK (destroy_cb), NULL);
  g_signal_connect (G_OBJECT (window), "destroy-event",
      G_CALLBACK (destroy_cb), NULL);

  pipeline = gst_pipeline_new ("pipeline");

  sourcebin = gst_parse_bin_from_description (g_strdup (source_desc), TRUE, &error);
  g_free (source_desc);
  if (error)
    g_error ("%s", error->message);

  uload = gst_element_factory_make ("glupload", "glu");
  filter = gst_element_factory_make ("gleffects", "flt");
  sink = gst_element_factory_make ("glimagesink", "glsink");

  gst_bin_add_many (GST_BIN (pipeline), sourcebin, uload, filter, sink, NULL);

  if (!gst_element_link_many (sourcebin, uload, filter, sink, NULL)) {
    g_print ("Failed to link one or more elements!\n");
    return -1;
  }

  screen = gtk_drawing_area_new ();

  gtk_widget_set_size_request (screen, 640, 480);       // 500 x 376

  vbox = gtk_vbox_new (FALSE, 2);

  gtk_box_pack_start (GTK_BOX (vbox), screen, TRUE, TRUE, 0);

  combo = gtk_combo_box_new_text ();

  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "identity");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "mirror");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "squeeze");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "stretch");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "fisheye");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "twirl");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "bulge");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "tunnel");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "square");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "heat");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "xpro");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "lumaxpro");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "sepia");
  gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "glow");

  g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK (apply_fx), filter);

  gtk_box_pack_start (GTK_BOX (vbox), combo, FALSE, FALSE, 0);

  hbox = gtk_hbox_new (FALSE, 0);

  play = gtk_button_new_with_label ("PLAY");

  g_signal_connect (G_OBJECT (play), "clicked", G_CALLBACK (play_cb), pipeline);

  pause = gtk_button_new_with_label ("PAUSE");

  g_signal_connect (G_OBJECT (pause), "clicked",
      G_CALLBACK (pause_cb), pipeline);

  null = gtk_button_new_with_label ("NULL");

  g_signal_connect (G_OBJECT (null), "clicked", G_CALLBACK (null_cb), pipeline);

{'fraction_non_alphanumeric': 0.12720607042373605, 'fraction_numerical': 0.005286043140932731, 'mean_word_length': 4.948275862068965, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '504767', 'n_tokens_mistral': 4725, 'n_tokens_neox': 4556, 'n_words': 937}