Skip to content

Instantly share code, notes, and snippets.

@yashi
Created October 7, 2015 03:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yashi/2e45aaa0a2dd28ce8b46 to your computer and use it in GitHub Desktop.
Save yashi/2e45aaa0a2dd28ce8b46 to your computer and use it in GitHub Desktop.
#define VERSION "1.0.0"
#define PACKAGE "dropper package"
#include <gst/gst.h>
#include <glib.h>
#include <gst/base/gstbasetransform.h>
#include "drop.h"
static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS_ANY);
static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS_ANY);
GST_DEBUG_CATEGORY_STATIC (gst_dropper_debug_category);
#define GST_CAT_DEFAULT gst_dropper_debug_category
/* prototypes */
static GstFlowReturn gst_dropper_transform_ip (GstBaseTransform *trans,
GstBuffer *buf);
/* class initialization */
G_DEFINE_TYPE_WITH_CODE (GstDropper, gst_dropper, GST_TYPE_BASE_TRANSFORM,
GST_DEBUG_CATEGORY_INIT (gst_dropper_debug_category, "dropper", 0,
"debug category for dropper element"));
static GstStateChangeReturn
gst_dropper_change_state (GstElement * element, GstStateChange transition);
static void
gst_dropper_class_init (GstDropperClass * klass)
{
GstElementClass *gstelement_class;
GstBaseTransformClass *gstbasetrans_class;
gstelement_class = GST_ELEMENT_CLASS (klass);
gstbasetrans_class = GST_BASE_TRANSFORM_CLASS (klass);
gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass),
"Dropper",
"Generic",
"Test dropper",
"Yasushi SHOJI <yashi@atmark-techno.com>");
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&srctemplate));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sinktemplate));
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_dropper_change_state);
gstbasetrans_class->transform_ip =
GST_DEBUG_FUNCPTR (gst_dropper_transform_ip);
}
static void
gst_dropper_init (GstDropper * dropper)
{
(void)dropper;
}
static GstFlowReturn
gst_dropper_transform_ip (GstBaseTransform * trans, GstBuffer * unused)
{
(void)unused;
GstDropper *dropper = GST_DROPPER (trans);
GST_DEBUG_OBJECT (dropper, "transform_ip");
GST_OBJECT_LOCK (dropper);
GST_OBJECT_UNLOCK (dropper);
return GST_FLOW_OK;
}
static GstStateChangeReturn
gst_dropper_change_state (GstElement * element, GstStateChange transition)
{
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
GstDropper *dropper = GST_DROPPER (element);
GST_DEBUG_OBJECT (dropper, "gst_dropper_change_state");
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
break;
default:
break;
}
ret = GST_ELEMENT_CLASS (gst_dropper_parent_class)->change_state (element,
transition);
switch (transition) {
case GST_STATE_CHANGE_READY_TO_PAUSED:
break;
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
break;
default:
break;
}
return ret;
}
int main(int argc, char *argv[])
{
GString *launch_str;
GstElement *pipeline;
GstBus *bus;
GstMessage *msg;
GstStateChangeReturn ret;
GstElementFactory *f;
gboolean ok;
gst_init(&argc, &argv);
ok = gst_element_register (NULL, "dropper",
GST_RANK_NONE,
GST_TYPE_DROPPER);
if (!ok) {
g_error("something went wrong\n");
return 1;
}
f = gst_element_factory_find("dropper");
if (!f) {
g_error("oops, unable to find it\n");
}
launch_str = g_string_new(NULL);
g_string_printf(launch_str,
"fakesrc ! dropper ! fakesink");
pipeline = gst_parse_launch (launch_str->str, NULL);
if (pipeline == NULL) {
g_print("parse_launch fail.\n");
return 1;
}
ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
g_print("%d\n", ret);
bus = gst_element_get_bus (pipeline);
if (!bus) {
g_print("unable to get bus\n");
return 1;
}
msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, GST_CLOCK_TIME_NONE);
if (msg) {
GError *error = NULL;
gchar *debug = NULL;
g_print("type: %d\n", GST_MESSAGE_TYPE (msg));
switch (GST_MESSAGE_TYPE (msg)) {
case GST_MESSAGE_ERROR:
gst_message_parse_error(msg, &error, &debug);
g_print("%s\n", debug);
break;
default:
break;
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment