Re: Use of gstAppSrc and VDPAU treatment.​..

Jérémy Lauraire jeremy.lauraire at gmail.com
Tue Jul 5 01:54:44 PDT 2011


Hi,

To precise my problem, here is the result of the GST_DEBUG :

2023.68 Kbps 13 frames received 6.31579 fps Decoding...
Media type video/mpeg, systemstream=(boolean)false, mpegversion=(int)2,
framerate=(fraction)25/1, width=(int)720, height=(int)576 found, probability
100%

0:00:01.858608759 18267 0x23f4550 WARN basevideodecoder
gstbasevideodecoder.c:664:gst_base_video_decoder_chain: Received buffer
without a new-segment. Assuming timestamps start from 0.

2081.5 Kbps 14 frames received 6.5 fps Decoding...
Media type video/mpeg, systemstream=(boolean)false, mpegversion=(int)2,
framerate=(fraction)25/1, width=(int)720, height=(int)576 found, probability
100%

0:00:02.038699964 18267 0x23f4550 WARN basevideodecoder
gstbasevideodecoder.c:664:gst_base_video_decoder_chain: Received buffer
without a new-segment. Assuming timestamps start from 0.

0:00:02.038733007 18267 0x23f4550 ERROR basevideodecoder
gstbasevideodecoder.c:677:gst_base_video_decoder_chain: new segment event
ret=0

0:00:02.038752871 18267 0x23f4550 WARN basesrc
gstbasesrc.c:2582:gst_base_src_loop:<app-src> error: Erreur interne de flux
de données.

0:00:02.038761733 18267 0x23f4550 WARN basesrc
gstbasesrc.c:2582:gst_base_src_loop:<app-src> error: streaming task paused,
reason error (-5)

The code I used :

printf("Accelerated vdpau decoding from appsrc...\n");
// Gstreamer initialisation
gst_init (NULL, NULL);
GMainLoop *loop;
GstBus *bus;
GstElement *pipeline, *appsrc, *demuxer, *decoder, *postprocess, *videosink,
*typefind;
loop = g_main_loop_new (NULL, FALSE);

//Create gstreamer elements
pipeline = gst_pipeline_new ("pipeline");
appsrc = gst_element_factory_make ("appsrc", "app-src");

// VDPAU traitement :
decoder = gst_element_factory_make ("vdpaumpegdec", "vdpau-decoder");
postprocess = gst_element_factory_make ("vdpauvideopostprocess",
"vdpau-video-post-process");
videosink = gst_element_factory_make ("vdpausink", "vdpau-sink");

// detection elements
typefind = gst_element_factory_make ("typefind", "typefinder");
g_signal_connect (typefind, "have-type", G_CALLBACK (cb_typefound), loop);
if (!pipeline || !appsrc || !decoder || !videosink || !typefind ||
!postprocess)
{
g_printerr ("One element could not be created. Exiting.\n");
return -1;
}

/* we add a message handler */
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
gst_bus_add_watch (bus, bus_call, loop);
gst_object_unref (bus);

/* set the capabilities of the appsrc element */
GstCaps *caps = gst_caps_new_simple ("video/mpeg",
"systemstream", G_TYPE_BOOLEAN, false,
"mpegversion", G_TYPE_INT, 2,
"framerate",GST_TYPE_FRACTION,25,1,
"width",G_TYPE_INT,720,
"height",G_TYPE_INT,576,
NULL);
gst_app_src_set_caps(GST_APP_SRC(appsrc), caps);

/* we add all elements into the pipeline */
gst_bin_add_many (GST_BIN (pipeline),
appsrc, typefind, decoder, postprocess, videosink, NULL);
gst_element_link_many(appsrc, typefind, decoder, postprocess, videosink,
NULL);

/* play */
printf("Now playing...\n");
gst_element_set_state (pipeline, GST_STATE_PLAYING);

/* create the buffer */
int BUFFER_SIZE = _avPacket.size;
GstBuffer *buffer = gst_buffer_new();
GST_BUFFER_DATA (buffer) = _avPacket.data;
GST_BUFFER_SIZE (buffer) = BUFFER_SIZE;

/* push the buffer to pipeline via appsrc */
GstFlowReturn gstFlowReturn = gst_app_src_push_buffer(GST_APP_SRC(appsrc),
buffer);
printf("Return flow value = %d \n", gstFlowReturn);

/* and loop... */
g_main_loop_run (loop);

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

return 0;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20110705/e979afa8/attachment.htm>


More information about the gstreamer-devel mailing list