After doing seek the pipeline doesn't display the following avi files

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

After doing seek the pipeline doesn't display the following avi files

rossana
Hello every one, it seems I solve the seeking event, however it works
fine for the first video of the playlist. But the following videos
aren't displayed, although the pipeline "read" them the playing state
is dismissed. The playlist has 3 elements, the actual pipeline plays
the first video since the seek-time to its end, but not the following
of the playlist.

Thanks so much for any help.

Here is the code:

// Manejador de errores
static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
{
    GMainLoop *loop = (GMainLoop *) data;

    switch (GST_MESSAGE_TYPE (msg))
    {
    case GST_MESSAGE_EOS:
     {

        cont++;
        if (cont == 3)
          g_main_loop_quit (loop);
        else
        {
            g_print ("cont%d \n ",cont);
            g_print ("nombre del video %s \n ",playlist[cont]);  //
set the 2nd and following videos of the playlist

            gst_element_set_state (play, GST_STATE_PAUSED);

            g_object_set (G_OBJECT (play), "uri",playlist[cont], NULL);
            g_object_set (G_OBJECT (play), "suburi",playsubt[cont], NULL);
            gst_element_set_state (play, GST_STATE_PLAYING);
        }

        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;
    }
    default:
        break;
    }
    return TRUE;
}


gint main (gint argc, char *argv[])
{
    GMainLoop *loop = 0;
    GstBus *bus = 0;

    /* make sure we have a URI */
    if (argc != 1)
    {
        g_print ("Uso: %s <URI>\n", argv[1]);
        return -1;
    }

    /* set up */
    gst_init (&argc, &argv);

    loop = g_main_loop_new (NULL, FALSE);
    play = gst_element_factory_make ("playbin2", "play");

    bus = gst_pipeline_get_bus (GST_PIPELINE (play));
    gst_bus_add_watch (bus, bus_call, loop);
    gst_object_unref (bus);

    g_object_set (G_OBJECT (play), "subtitle-font-desc","arial 20", NULL);
    g_object_set (G_OBJECT (play), "uri",playlist[0], NULL);
    g_object_set (G_OBJECT (play), "suburi",playsubt[0], NULL);

    gst_element_set_state (play, GST_STATE_PLAYING);

    GstMessage *msg2 = 0;

    msg2 = gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (play),
GST_CLOCK_TIME_NONE, GST_MESSAGE_ASYNC_DONE);

    if (GST_MESSAGE_TYPE (msg2) == GST_MESSAGE_ERROR) {
     return 0;
    }

   gst_message_unref (msg2);

    if (!gst_element_seek (GST_ELEMENT(play), 1.0, GST_FORMAT_TIME,
GST_SEEK_FLAG_FLUSH,
                        GST_SEEK_TYPE_SET, 175*GST_SECOND,
                         GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) {
        g_print ("Seek failed!\n");}


    /* now run */
    g_main_loop_run (loop);

    /* also clean up */
    gst_element_set_state (play, GST_STATE_NULL);
    gst_object_unref (GST_OBJECT (play));

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