rookie question for writing a simple video player

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

rookie question for writing a simple video player

jaeyong yoo
Hello,

I just read gstreamer application development manual (0.10.35.1) and want to write a very simple video player.

I can play a video (mpeg2-encoded) using playbin in test/examples/manual folder thus I tried to strip out the parts that handle the required elements to play the particular video and wrote the code as follows.


#include <gst/gst.h>


static void handoff (GstElement * identity, GstBuffer * frame, gpointer data)
{
    printf("handoff called\n");
}

static gboolean my_bus_callback (GstBus * bus, GstMessage * msg, gpointer data)
{
    GMainLoop *loop = (GMainLoop *) data;

    switch (GST_MESSAGE_TYPE (msg)) {
        case GST_MESSAGE_EOS:
        {
            g_print ("End-of-stream\n");
            g_main_loop_quit (loop);
            printf("JYD: bus_call: GST_MESSAGE_EOS\n");
            break;
        }
        case GST_MESSAGE_ERROR:
        {
            gchar *debug;
            GError *err;
            printf("JYD: bus_call: GST_MESSAGE_ERROR\n");
            gst_message_parse_error (msg, &err, &debug);
            g_free (debug);
            g_print ("Error:: %s\n", err->message);
            g_error_free (err);
            g_main_loop_quit (loop);
            break;
        }
        case GST_MESSAGE_WARNING:
        {
            char buf[1024];
            sprintf( buf, "%s",  GST_MESSAGE_SRC_NAME(msg) );
            printf("JYD: bus_call: %s %s\n", GST_MESSAGE_TYPE_NAME(msg), buf);

            break;
        }

        case GST_MESSAGE_STATE_CHANGED:
        {
            printf("JYD: bus_call: (%s: %d)\n", GST_MESSAGE_TYPE_NAME(msg), GST_MESSAGE_TYPE(msg));
            /* TODO: how to see the changed element state? */
            break;
        }
        default:
            printf("JYD: bus_call: default (%s: %d)\n", GST_MESSAGE_TYPE_NAME(msg), GST_MESSAGE_TYPE(msg));
            break;
    }
    return TRUE;
}

gint main (gint argc, gchar * argv[])
{
    GstElement *scale;
    GstElement *identity;
    GstElement *pipeline, *queue;
    GstElement *src, *dec, *conv, *sink;
    GMainLoop *loop;
    GstBus *bus;

    gst_init (&argc, &argv);

    if (argc < 2) {
        g_print ("usage: %s <media file or uri>\n", argv[0]);
        return 1;
    }

    /* create and event loop and feed gstreamer bus mesages to it */
    loop = g_main_loop_new (NULL, FALSE);

    /* create pipeline */
    pipeline = gst_pipeline_new ("pipeline");
    bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
    gst_bus_add_watch(bus, my_bus_callback, loop);
    gst_object_unref (bus);

    /* create an element for file-reading */
    src = gst_element_factory_make ("filesrc", "source");
    g_object_set (G_OBJECT (src), "location", argv[1], NULL);
    dec = gst_element_factory_make ("decodebin", "decode");
    queue = gst_element_factory_make ("queue", "preroll_video_src0" );
    sink = gst_element_factory_make ("autovideosink", "videosink");
    conv = gst_element_factory_make ("ffmpegcolorspace", "vconv");
    scale = gst_element_factory_make ("videoscale", "vscale");
    identity = gst_element_factory_make ("identity", "identity-for-what");
    g_object_set (identity, "silent", TRUE, NULL);
    g_signal_connect (identity, "handoff", G_CALLBACK (handoff), NULL);

    /* add elements to a bin */
    gst_bin_add_many( GST_BIN (pipeline), src, dec, queue, conv, scale, identity, sink, NULL );

    /* link the elements in the bin */
    gst_element_link( src, dec );
    gst_element_link( dec, queue );
    gst_element_link( queue, identity );
    gst_element_link( identity, conv );
    gst_element_link( conv, scale );
    gst_element_link( scale, sink );


    /* start the bin */
    gst_element_set_state (pipeline, GST_STATE_PLAYING);

    /* start play back and listed to events */
    printf("go to main loop\n"); /* XXX you may start debugging here */
    g_main_loop_run (loop);
    printf("return from main loop\n");

    /* cleanup */
    g_object_unref (pipeline);
    g_object_unref (loop);

    return 0;
}


and the results give me the following

Error:: Internal data flow error.
return from main loop

(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element videosink, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element identity-for-what, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element vscale, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element vconv, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element preroll_video_src0, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


GThread-ERROR **: file /build/buildd/glib2.0-2.30.0/./gthread/gthread-posix.c: line 171 (g_mutex_free_posix_impl): error 'Device or resource busy' during 'pthread_mutex_destroy ((pthread_mutex_t *) mutex)'
Trace/breakpoint trap


I'm stcuked in this phase.
Please help me.
Any comments, reading recommendations, would be very appreciated.

jaeyong


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: rookie question for writing a simple video player

신승배
Hi,
It seems that you are trying to link decodebin with queue element directly.
Try to link them by handling "new-decoded-pad" signal from decodebin.
Please refer below link which is official gstreamer document.
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-components-decodebin.html
Thank you.



On Tue, Dec 13, 2011 at 10:40 PM, jaeyong yoo <[hidden email]> wrote:
Hello,

I just read gstreamer application development manual (0.10.35.1) and want to write a very simple video player.

I can play a video (mpeg2-encoded) using playbin in test/examples/manual folder thus I tried to strip out the parts that handle the required elements to play the particular video and wrote the code as follows.


#include <gst/gst.h>


static void handoff (GstElement * identity, GstBuffer * frame, gpointer data)
{
    printf("handoff called\n");
}

static gboolean my_bus_callback (GstBus * bus, GstMessage * msg, gpointer data)
{
    GMainLoop *loop = (GMainLoop *) data;

    switch (GST_MESSAGE_TYPE (msg)) {
        case GST_MESSAGE_EOS:
        {
            g_print ("End-of-stream\n");
            g_main_loop_quit (loop);
            printf("JYD: bus_call: GST_MESSAGE_EOS\n");
            break;
        }
        case GST_MESSAGE_ERROR:
        {
            gchar *debug;
            GError *err;
            printf("JYD: bus_call: GST_MESSAGE_ERROR\n");
            gst_message_parse_error (msg, &err, &debug);
            g_free (debug);
            g_print ("Error:: %s\n", err->message);
            g_error_free (err);
            g_main_loop_quit (loop);
            break;
        }
        case GST_MESSAGE_WARNING:
        {
            char buf[1024];
            sprintf( buf, "%s",  GST_MESSAGE_SRC_NAME(msg) );
            printf("JYD: bus_call: %s %s\n", GST_MESSAGE_TYPE_NAME(msg), buf);

            break;
        }

        case GST_MESSAGE_STATE_CHANGED:
        {
            printf("JYD: bus_call: (%s: %d)\n", GST_MESSAGE_TYPE_NAME(msg), GST_MESSAGE_TYPE(msg));
            /* TODO: how to see the changed element state? */
            break;
        }
        default:
            printf("JYD: bus_call: default (%s: %d)\n", GST_MESSAGE_TYPE_NAME(msg), GST_MESSAGE_TYPE(msg));
            break;
    }
    return TRUE;
}

gint main (gint argc, gchar * argv[])
{
    GstElement *scale;
    GstElement *identity;
    GstElement *pipeline, *queue;
    GstElement *src, *dec, *conv, *sink;
    GMainLoop *loop;
    GstBus *bus;

    gst_init (&argc, &argv);

    if (argc < 2) {
        g_print ("usage: %s <media file or uri>\n", argv[0]);
        return 1;
    }

    /* create and event loop and feed gstreamer bus mesages to it */
    loop = g_main_loop_new (NULL, FALSE);

    /* create pipeline */
    pipeline = gst_pipeline_new ("pipeline");
    bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
    gst_bus_add_watch(bus, my_bus_callback, loop);
    gst_object_unref (bus);

    /* create an element for file-reading */
    src = gst_element_factory_make ("filesrc", "source");
    g_object_set (G_OBJECT (src), "location", argv[1], NULL);
    dec = gst_element_factory_make ("decodebin", "decode");
    queue = gst_element_factory_make ("queue", "preroll_video_src0" );
    sink = gst_element_factory_make ("autovideosink", "videosink");
    conv = gst_element_factory_make ("ffmpegcolorspace", "vconv");
    scale = gst_element_factory_make ("videoscale", "vscale");
    identity = gst_element_factory_make ("identity", "identity-for-what");
    g_object_set (identity, "silent", TRUE, NULL);
    g_signal_connect (identity, "handoff", G_CALLBACK (handoff), NULL);

    /* add elements to a bin */
    gst_bin_add_many( GST_BIN (pipeline), src, dec, queue, conv, scale, identity, sink, NULL );

    /* link the elements in the bin */
    gst_element_link( src, dec );
    gst_element_link( dec, queue );
    gst_element_link( queue, identity );
    gst_element_link( identity, conv );
    gst_element_link( conv, scale );
    gst_element_link( scale, sink );


    /* start the bin */
    gst_element_set_state (pipeline, GST_STATE_PLAYING);

    /* start play back and listed to events */
    printf("go to main loop\n"); /* XXX you may start debugging here */
    g_main_loop_run (loop);
    printf("return from main loop\n");

    /* cleanup */
    g_object_unref (pipeline);
    g_object_unref (loop);

    return 0;
}


and the results give me the following

Error:: Internal data flow error.
return from main loop

(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element videosink, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element identity-for-what, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element vscale, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element vconv, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element preroll_video_src0, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


GThread-ERROR **: file /build/buildd/glib2.0-2.30.0/./gthread/gthread-posix.c: line 171 (g_mutex_free_posix_impl): error 'Device or resource busy' during 'pthread_mutex_destroy ((pthread_mutex_t *) mutex)'
Trace/breakpoint trap


I'm stcuked in this phase.
Please help me.
Any comments, reading recommendations, would be very appreciated.

jaeyong


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel



_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: rookie question for writing a simple video player

Stefan Sauer
In reply to this post by jaeyong yoo
On 12/13/2011 02:40 PM, jaeyong yoo wrote:
Hello,

I just read gstreamer application development manual (0.10.35.1) and want to write a very simple video player.

I can play a video (mpeg2-encoded) using playbin in test/examples/manual folder thus I tried to strip out the parts that handle the required elements to play the particular video and wrote the code as follows.

if you want to write a mediaplayer use playbin2 as the only element you need (its a toplevel pipeline and will plug whatever is needed).

Stefan



#include <gst/gst.h>


static void handoff (GstElement * identity, GstBuffer * frame, gpointer data)
{
    printf("handoff called\n");
}

static gboolean my_bus_callback (GstBus * bus, GstMessage * msg, gpointer data)
{
    GMainLoop *loop = (GMainLoop *) data;

    switch (GST_MESSAGE_TYPE (msg)) {
        case GST_MESSAGE_EOS:
        {
            g_print ("End-of-stream\n");
            g_main_loop_quit (loop);
            printf("JYD: bus_call: GST_MESSAGE_EOS\n");
            break;
        }
        case GST_MESSAGE_ERROR:
        {
            gchar *debug;
            GError *err;
            printf("JYD: bus_call: GST_MESSAGE_ERROR\n");
            gst_message_parse_error (msg, &err, &debug);
            g_free (debug);
            g_print ("Error:: %s\n", err->message);
            g_error_free (err);
            g_main_loop_quit (loop);
            break;
        }
        case GST_MESSAGE_WARNING:
        {
            char buf[1024];
            sprintf( buf, "%s",  GST_MESSAGE_SRC_NAME(msg) );
            printf("JYD: bus_call: %s %s\n", GST_MESSAGE_TYPE_NAME(msg), buf);

            break;
        }

        case GST_MESSAGE_STATE_CHANGED:
        {
            printf("JYD: bus_call: (%s: %d)\n", GST_MESSAGE_TYPE_NAME(msg), GST_MESSAGE_TYPE(msg));
            /* TODO: how to see the changed element state? */
            break;
        }
        default:
            printf("JYD: bus_call: default (%s: %d)\n", GST_MESSAGE_TYPE_NAME(msg), GST_MESSAGE_TYPE(msg));
            break;
    }
    return TRUE;
}

gint main (gint argc, gchar * argv[])
{
    GstElement *scale;
    GstElement *identity;
    GstElement *pipeline, *queue;
    GstElement *src, *dec, *conv, *sink;
    GMainLoop *loop;
    GstBus *bus;

    gst_init (&argc, &argv);

    if (argc < 2) {
        g_print ("usage: %s <media file or uri>\n", argv[0]);
        return 1;
    }

    /* create and event loop and feed gstreamer bus mesages to it */
    loop = g_main_loop_new (NULL, FALSE);

    /* create pipeline */
    pipeline = gst_pipeline_new ("pipeline");
    bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
    gst_bus_add_watch(bus, my_bus_callback, loop);
    gst_object_unref (bus);

    /* create an element for file-reading */
    src = gst_element_factory_make ("filesrc", "source");
    g_object_set (G_OBJECT (src), "location", argv[1], NULL);
    dec = gst_element_factory_make ("decodebin", "decode");
    queue = gst_element_factory_make ("queue", "preroll_video_src0" );
    sink = gst_element_factory_make ("autovideosink", "videosink");
    conv = gst_element_factory_make ("ffmpegcolorspace", "vconv");
    scale = gst_element_factory_make ("videoscale", "vscale");
    identity = gst_element_factory_make ("identity", "identity-for-what");
    g_object_set (identity, "silent", TRUE, NULL);
    g_signal_connect (identity, "handoff", G_CALLBACK (handoff), NULL);

    /* add elements to a bin */
    gst_bin_add_many( GST_BIN (pipeline), src, dec, queue, conv, scale, identity, sink, NULL );

    /* link the elements in the bin */
    gst_element_link( src, dec );
    gst_element_link( dec, queue );
    gst_element_link( queue, identity );
    gst_element_link( identity, conv );
    gst_element_link( conv, scale );
    gst_element_link( scale, sink );


    /* start the bin */
    gst_element_set_state (pipeline, GST_STATE_PLAYING);

    /* start play back and listed to events */
    printf("go to main loop\n"); /* XXX you may start debugging here */
    g_main_loop_run (loop);
    printf("return from main loop\n");

    /* cleanup */
    g_object_unref (pipeline);
    g_object_unref (loop);

    return 0;
}


and the results give me the following

Error:: Internal data flow error.
return from main loop

(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element videosink, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element identity-for-what, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element vscale, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element vconv, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element preroll_video_src0, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


GThread-ERROR **: file /build/buildd/glib2.0-2.30.0/./gthread/gthread-posix.c: line 171 (g_mutex_free_posix_impl): error 'Device or resource busy' during 'pthread_mutex_destroy ((pthread_mutex_t *) mutex)'
Trace/breakpoint trap


I'm stcuked in this phase.
Please help me.
Any comments, reading recommendations, would be very appreciated.

jaeyong

_______________________________________________ gstreamer-devel mailing list [hidden email] http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: rookie question for writing a simple video player

jaeyong yoo
In reply to this post by 신승배
It works!
Thanks a lot.

jaeyong

2011. 12. 14., 오후 5:46, 신승배 작성:

Hi,
It seems that you are trying to link decodebin with queue element directly.
Try to link them by handling "new-decoded-pad" signal from decodebin.
Please refer below link which is official gstreamer document.
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-components-decodebin.html
Thank you.



On Tue, Dec 13, 2011 at 10:40 PM, jaeyong yoo <[hidden email]> wrote:
Hello,

I just read gstreamer application development manual (0.10.35.1) and want to write a very simple video player.

I can play a video (mpeg2-encoded) using playbin in test/examples/manual folder thus I tried to strip out the parts that handle the required elements to play the particular video and wrote the code as follows.


#include <gst/gst.h>


static void handoff (GstElement * identity, GstBuffer * frame, gpointer data)
{
    printf("handoff called\n");
}

static gboolean my_bus_callback (GstBus * bus, GstMessage * msg, gpointer data)
{
    GMainLoop *loop = (GMainLoop *) data;

    switch (GST_MESSAGE_TYPE (msg)) {
        case GST_MESSAGE_EOS:
        {
            g_print ("End-of-stream\n");
            g_main_loop_quit (loop);
            printf("JYD: bus_call: GST_MESSAGE_EOS\n");
            break;
        }
        case GST_MESSAGE_ERROR:
        {
            gchar *debug;
            GError *err;
            printf("JYD: bus_call: GST_MESSAGE_ERROR\n");
            gst_message_parse_error (msg, &err, &debug);
            g_free (debug);
            g_print ("Error:: %s\n", err->message);
            g_error_free (err);
            g_main_loop_quit (loop);
            break;
        }
        case GST_MESSAGE_WARNING:
        {
            char buf[1024];
            sprintf( buf, "%s",  GST_MESSAGE_SRC_NAME(msg) );
            printf("JYD: bus_call: %s %s\n", GST_MESSAGE_TYPE_NAME(msg), buf);

            break;
        }

        case GST_MESSAGE_STATE_CHANGED:
        {
            printf("JYD: bus_call: (%s: %d)\n", GST_MESSAGE_TYPE_NAME(msg), GST_MESSAGE_TYPE(msg));
            /* TODO: how to see the changed element state? */
            break;
        }
        default:
            printf("JYD: bus_call: default (%s: %d)\n", GST_MESSAGE_TYPE_NAME(msg), GST_MESSAGE_TYPE(msg));
            break;
    }
    return TRUE;
}

gint main (gint argc, gchar * argv[])
{
    GstElement *scale;
    GstElement *identity;
    GstElement *pipeline, *queue;
    GstElement *src, *dec, *conv, *sink;
    GMainLoop *loop;
    GstBus *bus;

    gst_init (&argc, &argv);

    if (argc < 2) {
        g_print ("usage: %s <media file or uri>\n", argv[0]);
        return 1;
    }

    /* create and event loop and feed gstreamer bus mesages to it */
    loop = g_main_loop_new (NULL, FALSE);

    /* create pipeline */
    pipeline = gst_pipeline_new ("pipeline");
    bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
    gst_bus_add_watch(bus, my_bus_callback, loop);
    gst_object_unref (bus);

    /* create an element for file-reading */
    src = gst_element_factory_make ("filesrc", "source");
    g_object_set (G_OBJECT (src), "location", argv[1], NULL);
    dec = gst_element_factory_make ("decodebin", "decode");
    queue = gst_element_factory_make ("queue", "preroll_video_src0" );
    sink = gst_element_factory_make ("autovideosink", "videosink");
    conv = gst_element_factory_make ("ffmpegcolorspace", "vconv");
    scale = gst_element_factory_make ("videoscale", "vscale");
    identity = gst_element_factory_make ("identity", "identity-for-what");
    g_object_set (identity, "silent", TRUE, NULL);
    g_signal_connect (identity, "handoff", G_CALLBACK (handoff), NULL);

    /* add elements to a bin */
    gst_bin_add_many( GST_BIN (pipeline), src, dec, queue, conv, scale, identity, sink, NULL );

    /* link the elements in the bin */
    gst_element_link( src, dec );
    gst_element_link( dec, queue );
    gst_element_link( queue, identity );
    gst_element_link( identity, conv );
    gst_element_link( conv, scale );
    gst_element_link( scale, sink );


    /* start the bin */
    gst_element_set_state (pipeline, GST_STATE_PLAYING);

    /* start play back and listed to events */
    printf("go to main loop\n"); /* XXX you may start debugging here */
    g_main_loop_run (loop);
    printf("return from main loop\n");

    /* cleanup */
    g_object_unref (pipeline);
    g_object_unref (loop);

    return 0;
}


and the results give me the following

Error:: Internal data flow error.
return from main loop

(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element videosink, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element identity-for-what, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element vscale, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element vconv, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


(lt-myvideoplayer:26621): GStreamer-CRITICAL **:
Trying to dispose element preroll_video_src0, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.


GThread-ERROR **: file /build/buildd/glib2.0-2.30.0/./gthread/gthread-posix.c: line 171 (g_mutex_free_posix_impl): error 'Device or resource busy' during 'pthread_mutex_destroy ((pthread_mutex_t *) mutex)'
Trace/breakpoint trap


I'm stcuked in this phase.
Please help me.
Any comments, reading recommendations, would be very appreciated.

jaeyong


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel