Files
whipper-gui/doc/hacking/bugs/bgo-650785/flacparse-testcase.c
Thomas Vander Stichele 29ac4d49b6 add notes on flacparse bug
2013-01-19 10:22:23 +01:00

65 lines
2.0 KiB
C

/* gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) -g3 -ggdb3 -o flacparse-testcase ./flacparse-testcase.c */
#include <gst/gst.h>
static const char PIPELINE[] = "filesrc location=%s " \
"! decodebin ! audio/x-raw-int " \
"! appsink name=sink sync=False " \
"emit-signals=True";
int main(int argc, char **argv)
{
GstElement *pipeline;
GstElement *sink;
gchar *pipeline_str;
GstStateChangeReturn state_change_status;
gint64 duration;
GstFormat query_format;
gboolean query_success;
gst_init(&argc, &argv);
if (argc != 2) {
g_print("Usage: %s filename\n", argv[0]);
return 1;
}
pipeline_str = g_strdup_printf(PIPELINE, argv[1]);
pipeline = gst_parse_launch(pipeline_str, NULL);
if (pipeline == NULL) {
g_print("Failed to create pipeline\n");
g_print("%s\n", pipeline_str);
return 2;
}
g_free(pipeline_str);
gst_element_set_state(pipeline, GST_STATE_PAUSED);
state_change_status = gst_element_get_state(pipeline, NULL, NULL,
GST_CLOCK_TIME_NONE);
if (state_change_status != GST_STATE_CHANGE_SUCCESS) {
g_print("Failed to set pipeline to PAUSED\n");
return 3;
}
sink = gst_bin_get_by_name(GST_BIN(pipeline), "sink");
if (sink == NULL) {
g_print("Couldn't find sink in pipeline\n");
return 4;
}
query_format = GST_FORMAT_DEFAULT;
query_success = gst_element_query_duration(sink, &query_format,
&duration);
if (query_success) {
g_print("%s duration is %"G_GINT64_FORMAT"\n", argv[1], duration);
return 0;
} else {
g_print("Couldn't get duration for %s\n", argv[1]);
return 5;
}
gst_object_unref(GST_OBJECT(sink));
gst_object_unref(GST_OBJECT(pipeline));
return 6;
}