I am having some problems getting the dfbvideosink to play a video file. I
was able to use the example provided and play from the test video source.
After some searching I decided to try the playbin but I don't get any video
from that. How should I set up the pipeline? Here is what I have so far

 

 

#include <directfb.h>

#include <gst/gst.h>

 

static IDirectFB *dfb = NULL;

static IDirectFBSurface *primary = NULL;

static GMainLoop *loop;

 

#define DFBCHECK(x...)                                         \

  {                                                            \

    DFBResult err = x;                                         \

                                                               \

    if (err != DFB_OK)                                         \

      {                                                        \

        fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ ); \

        DirectFBErrorFatal( #x, err );                         \

      }                                                        \

  }

 

static gboolean

get_me_out (gpointer data)

{

  g_main_loop_quit (loop);

  return FALSE;

}

 

int

main (int argc, char *argv[])

{

  DFBSurfaceDescription dsc;

  GstElement *pipeline, *sink;

 

  /* Init both GStreamer and DirectFB */

  DFBCHECK (DirectFBInit (&argc, &argv));

  gst_init (&argc, &argv);

 

  /* Creates DirectFB main context and set it to fullscreen layout */

  DFBCHECK (DirectFBCreate (&dfb));

  DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN));

 

  /* We want a double buffered primary surface */

  dsc.flags = DSDESC_CAPS;

  dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING;

 

  DFBCHECK (dfb->CreateSurface (dfb, &dsc, &primary));

 

  /* Creating our pipeline : videotestsrc ! dfbvideosink */

  pipeline = gst_element_factory_make("playbin", NULL); //gst_pipeline_new
(NULL);

  g_assert (pipeline);

 

  sink = gst_element_factory_make ("dfbvideosink", NULL);

  g_assert (sink);

  /* That's the interesting part, giving the primary surface to dfbvideosink
*/

  g_object_set (sink, "surface", primary, NULL);

 

  g_object_set(pipeline, "uri", "file:///root/test.mp4", NULL);

  g_object_set(pipeline, "video-sink", sink, NULL);

 

  /* Let's play ! */

  gst_element_set_state (pipeline, GST_STATE_PLAYING);

 

  /* we need to run a GLib main loop to get out of here */

  loop = g_main_loop_new (NULL, FALSE);

  /* Get us out after 20 seconds */

  g_timeout_add (20000, get_me_out, NULL);

  g_main_loop_run (loop);

 

  /* Release elements and stop playback */

  gst_element_set_state (pipeline, GST_STATE_NULL);

 

  /* Free the main loop */

  g_main_loop_unref (loop);

 

  /* Release DirectFB context and surface */

  primary->Release (primary);

  dfb->Release (dfb);

 

  return 0;

}

 

The result is a brown screen (the default directfb color I think).

 

Thanks for your help

-Jesse

 

------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand 
malware threats, the impact they can have on your business, and how you 
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Gstreamer-embedded mailing list
Gstreamer-embedded@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gstreamer-embedded

Reply via email to