BUG with queue element ?
Prabhakar Lad
prabhakar.csengg at gmail.com
Mon Sep 15 11:56:26 PDT 2014
Hi Tim,
Thanks for your response!
On Mon, Sep 15, 2014 at 6:01 PM, Tim Müller <tim at centricular.com> wrote:
> On Mon, 2014-09-15 at 17:03 +0100, Prabhakar Lad wrote:
>
> Hi,
>
> What GStreamer version are you using?
>
I am using GStreamer-1.0
> Perhaps you could distill this into a minimal test case that
> demonstrates the issue?
>
I attaching the c file test-case and also pasting the code, so
that its easier to review.
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <gst/gst.h>
#include <gst/app/gstappsrc.h>
/* to compile gcc gst.c -o test_case -Wall `pkg-config --cflags --libs
gstreamer-1.0` */
GstElement *pipeline = NULL;
static GMainLoop *loop;
int mygetch ( void )
{
int ch;
struct termios oldt, newt;
tcgetattr ( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr ( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr ( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
static gboolean bus_handler (GstBus *bus, GstMessage *msg, gpointer data)
{
GMainLoop *loop;
loop = (GMainLoop*)data;
switch (GST_MESSAGE_TYPE (msg)) {
case GST_MESSAGE_EOS:
g_main_loop_quit (loop);
break;
case GST_MESSAGE_ERROR:
{
gchar *debug;
GError *error;
gst_message_parse_error (msg, &error, &debug);
g_free (debug);
g_printerr ("Error: %s\n", error->message);
g_error_free (error);
g_main_loop_quit (loop);
break;
}
case GST_MESSAGE_STATE_CHANGED:
{
GstState state;
gst_message_parse_state_changed (msg, NULL, &state, NULL);
break;
}
default:
break;
}
return TRUE;
}
int main(int argc, char *argv[])
{
GstElement *avimux, *filesink, *v4l2src ,*rlvvalve, *rlvideoqueue;
GstBus *bus;
guint bus_id;
gst_init (NULL, NULL);
loop = g_main_loop_new (NULL, FALSE);
pipeline = gst_pipeline_new ("test_pipeline");
v4l2src = gst_element_factory_make ("v4l2src", "v4l2src");
avimux = gst_element_factory_make ("avimux", "avimux");
filesink = gst_element_factory_make ("filesink", "filesink");
rlvvalve = gst_element_factory_make ("valve", "rlvvalve");
rlvideoqueue = gst_element_factory_make ("queue", "rlvideoqueue");
if (!pipeline || !avimux || !filesink || !v4l2src ||
!rlvideoqueue || !rlvvalve) {
printf ("Could not create all gstreamer elements.\n");
return 0;
}
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
bus_id = gst_bus_add_watch (bus, bus_handler, loop);
gst_object_unref (bus);
g_object_set (G_OBJECT (filesink), "location", "test.avi",
"async", FALSE, NULL);
gst_bin_add_many (GST_BIN (pipeline), avimux, filesink, v4l2src,
rlvideoqueue,
rlvvalve, NULL);
/* v4l2src ! queue ! valve ! avimux ! filesink location=test.avi */
gst_element_link_many (v4l2src, rlvideoqueue, rlvvalve, avimux,
filesink, NULL);
/* initially set the drop to TRUE */
g_object_set (G_OBJECT (rlvvalve), "drop", (gboolean)TRUE, NULL);
/* configure to hold 15 seconds of data */
g_object_set (G_OBJECT (rlvideoqueue), "min-threshold-time",
(guint64)15000000000, NULL);
g_object_set (G_OBJECT (rlvideoqueue), "min-threshold-buffers",
(guint64)0, NULL);
g_object_set (G_OBJECT (rlvideoqueue), "min-threshold-bytes",
(guint64)0, NULL);
g_object_set (G_OBJECT (rlvideoqueue), "max-size-bytes", (guint64)0, NULL);
g_object_set (G_OBJECT (rlvideoqueue), "max-size-buffers",
(guint64)0, NULL);
g_object_set (G_OBJECT (rlvideoqueue), "max-size-time",
(guint64)150000000000, NULL);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
/* wait for a key press */
mygetch();
/* attach the valve back to pipeline */
g_object_set (G_OBJECT (rlvvalve), "drop", (gboolean)FALSE, NULL);
printf("Writing to file now!!!\n");
g_main_loop_run (loop);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (GST_OBJECT (pipeline));
g_source_remove (bus_id);
g_main_loop_unref (loop);
gst_deinit ();
return 0;
}
Thanks,
--Prabhakar
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gst.c
Type: text/x-csrc
Size: 3440 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20140915/536cde4a/attachment-0001.c>
More information about the gstreamer-devel
mailing list