[gst-devel] video file and pad...
fabien
fabien.castan at free.fr
Mon May 14 14:14:47 CEST 2007
Hello,
I tested your code, but it still doesn't work. If I comment the video
part, the audio is playing (from avi file but not from mpeg..). So it
must be an error on the video pipeline. I made a sketch of the pipeline...
If anyone could find the error, it would be of great help for me.
Thank you
Erwan Masson a écrit :
> Hello,
> My code are always messy, and maybe you need to do some g_object_unref
> to clean(see the last line in comment), but this code works.
>
> A new pad callback function:
> static void
> cb_new_pad (GstElement *element,
> GstPad *pad,
> gpointer data)
> {
> GstPad *sinkpad;
> GstCaps *caps;
> GstStructure *str;
> gint i, max;
>
> caps = gst_pad_get_caps (pad);
>
> str = gst_caps_get_structure (caps, 0);
> /* We can now link this pad with the audio or video decoder */
> g_print ("\n Dynamic pad created, linking parser/decoder \n");
> if (g_strrstr (gst_structure_get_name (str), "video"))
> {
> g_print("Video link\n");
>
> max = gst_structure_n_fields (str); // Récupère le nombre de
> field dans la structure
>
> for(i=0;i<max; i++){
> g_print("\n Nom de la structure %s \n",
> gst_structure_nth_field_name (str, i)); // Recupère le nom de la
> structure.
> }
> g_print(gst_caps_to_string(caps));
> //Add now the video thread in the main pipeline
> gst_bin_add(GST_BIN(pipeline), pipeVideo);
> //Put the pipeline video on state ready (It can bug if it is
> not init to ready)
> gst_element_set_state (pipeVideo, GST_STATE_READY);
> //Retrieves the sink pad of the pipevideo(the ghost pad)
> sinkpad = gst_element_get_pad (pipeVideo, "sink");
>
> //If the pileline is already link, stop here
> if (GST_PAD_IS_LINKED (sinkpad)) return;
>
> //You can add here a notify caps:
> //g_signal_connect(sinkpad,
> "notify::caps",G_CALLBACK(cb_notify_caps), NULL);
>
> //Link the main pipeline pad with the pipeline video pad
> if (gst_pad_link(pad, sinkpad)!= GST_PAD_LINK_OK)
> {
> g_error("Cannot link video\n");
> return;
> }
> //Put the state at pause, it can be crash if not init
> gst_element_set_state (pipeVideo, GST_STATE_PAUSED);
>
> }
>
> if ( g_strrstr (gst_structure_get_name (str), "audio"))
> {
> g_print("Audio link\n");
>
> gst_bin_add(GST_BIN(pipeline), pipeAudio);
> gst_element_set_state (pipeAudio, GST_STATE_READY);
> sinkpad = gst_element_get_pad (pipeAudio, "sink");
> if (GST_PAD_IS_LINKED (sinkpad)){
> g_print("Already link");
> }
>
> if (gst_pad_link(pad, sinkpad) != GST_PAD_LINK_OK)
> {
> g_error("Cannot link audio\n");
> return;
> }
> //g_print("Audio paused\n");
> // gst_element_set_state (pipeAudio, GST_STATE_PAUSED);
> // g_print("Audio playing\n");
> //gst_element_set_state (pipeAudio, GST_STATE_PLAYING);
> // g_print("Video playing\n");
> // gst_element_set_state (pipeVideo, GST_STATE_PLAYING);
> //g_print("pipe playing2\n")
> if(!haveTypeAudio){
> g_print("Type de l'audio pas encore trouvé %d \n",
> video_frames);
> return;
> };
>
> gst_element_set_state (pipeline, GST_STATE_PLAYING);
> //gst_object_unref (sinkpad);
> }
> }
>
> 2007/5/6, fabien < fabien.castan at free.fr <mailto:fabien.castan at free.fr>>:
>
> Hello,
>
> It's me again. I tried and I tried by I still can't read a video
> file.
> So I tried to write the smallest and simplest code possible, based on
> the example that was sent to the mailing list.
> The only thing missing is the connection of the "pad" in the
> "cb_new_pad()" function and without this connection nothing can
> really
> happen..
> I added the video pipeline to the global pipeline, but there must be
> something missing and I don't know what?
> I've attached the file to this e-mail.
>
> Thanks for your patience
>
> -------------------------------------------------------------------------
>
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> <mailto:gstreamer-devel at lists.sourceforge.net>
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
>
>
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> ------------------------------------------------------------------------
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: exampleNew.cpp
Type: text/x-c++src
Size: 11090 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20070514/f5cbc541/attachment.cpp>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pipelineGStreamer.jpg
Type: image/jpeg
Size: 40365 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20070514/f5cbc541/attachment.jpg>
More information about the gstreamer-devel
mailing list