Created
October 7, 2015 03:04
-
-
Save yashi/2e45aaa0a2dd28ce8b46 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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