Crossfade - Resource not found message at runtime

Nicolai Hess nicolaihess at web.de
Wed Sep 7 14:04:11 PDT 2011


you need the full path of your video files, for example

file:///home/nicolai/video1.avi

2011/9/7 Rossana Guerra <guerra.rossana at gmail.com>

> Hi Nicolai, does the crossfade work?.
> Actually this is the syntax of the command (from console)
>
> ./crossfade file:///video1.avi file:///video2.avi
>
> crossfade : name of the programm
>
> I intended the uri format in several ways (according to URI specification),
> though noneone works, the same error. "Resource not found",
>
> file:///video1.avi
> file://video1.avi
> file:/video1.avi
>
> In the last 2 format the message says, resource for reading not found.
>
> Thanks for your help
>
> Rossana
>
>
>
> 2011/9/7 Nicolai Hess <nicolaihess at web.de>
>
>> Hi Rossane,
>> your code is working for me.
>> Remember to use an URI for your input file arguments, example:
>>
>> nameofyourprogram file://<path_to_file1> file://<path_to_file2>
>>
>> 2011/9/7 Rossana Guerra <guerra.rossana at gmail.com>
>>
>>> Hi Angel, the path is correct. In fact I use the same path to another
>>> example.
>>> Can you please tell me what kind of bug is? I can't realize.
>>> Thanks for your response
>>>
>>>
>>> 2011/9/7 Angel Martin <amartin at vicomtech.org>
>>>
>>>> Dear Rossana,
>>>>
>>>> I think that this kind of error message is obtained when the video
>>>> resource is not found so check the file path to the files and be sure that
>>>> the paths are right in the location assignment of each gnlfilesource.
>>>>
>>>> Moreover, You have a bug in the getAndSetController concerning the
>>>> duration of the transition:
>>>>
>>>> g_value_set_double (&val_double, 1.0);
>>>> gst_interpolation_control_source_set(csource,(duracion *
>>>> GST_MSECOND),&val_double);
>>>>
>>>> Best,
>>>>
>>>> Angel
>>>>
>>>> 2011/9/7 Rossana Guerra <guerra.rossana at gmail.com>
>>>>
>>>>> Hi all, I am totally new with GSteamer, so sorry for the lots of
>>>>> mistakes I have. I am trying to do the example of this link in C/C++
>>>>> http://notes.brooks.nu/gstreamer-video-crossfade-example/
>>>>> It's about crossfade. I doing it with .AVI files.
>>>>>
>>>>> At runtime I got the Resource not found error. Another  examples, like
>>>>> a playbin, work properly with .AVI's, so I don't think is a codec issue.
>>>>> The video files are passing as arguments (uri format).
>>>>>
>>>>> Thanks in advance.
>>>>>
>>>>> /////////////////////////
>>>>> Heres the code
>>>>>
>>>>>
>>>>> #include <gst.h>
>>>>> #include <controller/gstcontroller.h>
>>>>>
>>>>> #include <iostream>
>>>>>
>>>>> using namespace std;
>>>>>
>>>>> // Error handler
>>>>> static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
>>>>> {
>>>>>     GMainLoop *loop = (GMainLoop *) data;
>>>>>
>>>>>     switch (GST_MESSAGE_TYPE (msg))
>>>>>     {
>>>>>     case GST_MESSAGE_EOS:
>>>>>         g_print ("Final de stream\n");
>>>>>         g_main_loop_quit (loop);
>>>>>         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;
>>>>> }
>>>>>
>>>>> static void on_pad_added (GstElement *element, GstPad *pad, gpointer
>>>>> data)
>>>>> {
>>>>>   GstPad *sinkpad;
>>>>>   GstElement * queue = (GstElement *) data;
>>>>>
>>>>>   /* We can now link this pad with the vorbis-decoder sink pad */
>>>>>   g_print ("Dynamic pad created, linking demuxer/decoder\n");
>>>>>   sinkpad = gst_element_get_static_pad (queue, "sink");
>>>>>
>>>>>   gst_pad_link (pad, sinkpad);
>>>>>
>>>>>   gst_object_unref (sinkpad);
>>>>> }
>>>>>
>>>>> GstElement * getBin(const gchar * nomBin, GstElement * &alfa1,
>>>>> GstElement *&alfa2, GstElement * &color)
>>>>> {
>>>>>
>>>>>   GstElement * bin = gst_bin_new(nomBin);
>>>>>
>>>>>   if (!bin)
>>>>>   {
>>>>>       g_printerr ("No se pudo crear el bin. Saliendo\n");
>>>>>      return NULL;
>>>>>   }
>>>>>
>>>>>   alfa1   = gst_element_factory_make ("alpha","alfa1");
>>>>>   alfa2  = gst_element_factory_make ("alpha","alfa2");
>>>>>   color  = gst_element_factory_make ("ffmpegcolorspace", "color");
>>>>>   GstElement * mixer  = gst_element_factory_make("videomixer",
>>>>> "mixer");
>>>>>
>>>>>   if ((!alfa1) || (!alfa2) || (!color) || (!mixer))
>>>>>   {
>>>>>       g_printerr ("Alguno de los elementos del Bin no pudo ser creado.
>>>>> Saliendo\n");
>>>>>      return NULL;
>>>>>   }
>>>>>
>>>>>   // Anexamos al bin
>>>>>   gst_bin_add_many(GST_BIN (bin),alfa1,alfa2,mixer,color,NULL);
>>>>>
>>>>>   // Enlazamos elementos
>>>>>   gst_element_link (alfa1, mixer);
>>>>>   gst_element_link (alfa2, mixer);
>>>>>   gst_element_link (mixer,color);
>>>>>
>>>>>   return bin;
>>>>> }
>>>>>
>>>>> void getAndSetController(GstElement * alfa2, gdouble duracion)
>>>>> {
>>>>>     GstController * ctrl = NULL;
>>>>>     if (!(ctrl = gst_controller_new (G_OBJECT (alfa2), "alpha",NULL)))
>>>>> {
>>>>>         GST_WARNING ("No puede controlar el elemento fuente\n");
>>>>>         return;
>>>>>   }
>>>>>
>>>>>   // Todo valor GValue debe inicializarse en 0
>>>>>   GValue val_double = { 0, };
>>>>>   g_value_init (&val_double, G_TYPE_DOUBLE);
>>>>>
>>>>>
>>>>>   // Seteo los valores de control del alfa2
>>>>>
>>>>>   GstInterpolationControlSource * csource =
>>>>> gst_interpolation_control_source_new();
>>>>>
>>>>>   gst_controller_set_control_source (ctrl, "alpha", GST_CONTROL_SOURCE
>>>>> (csource));
>>>>>
>>>>>
>>>>> gst_interpolation_control_source_set_interpolation_mode(csource,GST_INTERPOLATE_LINEAR);
>>>>>
>>>>>
>>>>>   g_value_set_double(&val_double, 0.0);
>>>>>   gst_interpolation_control_source_set(csource,(0*
>>>>> GST_MSECOND),&val_double);
>>>>>
>>>>>   g_value_set_double (&val_double, duracion);
>>>>>   gst_interpolation_control_source_set(csource,(1 *
>>>>> GST_MSECOND),&val_double);
>>>>>
>>>>>
>>>>>   g_object_unref (csource);
>>>>>
>>>>> }
>>>>>
>>>>> void addGhostPadsToBin(GstElement *alfa1, GstElement * alfa2,
>>>>> GstElement * color, GstElement* bin)
>>>>> {
>>>>>     /* add ghostpad */
>>>>>   GstPad * pad1 = gst_element_get_static_pad (alfa1, "sink");
>>>>>   gst_element_add_pad(bin, gst_ghost_pad_new("alfasink1", pad1));
>>>>>   gst_object_unref (GST_OBJECT (pad1));
>>>>>
>>>>>   GstPad * pad2 = gst_element_get_static_pad (alfa2, "sink");
>>>>>   gst_element_add_pad(bin, gst_ghost_pad_new("alfasink2", pad2));
>>>>>   gst_object_unref(GST_OBJECT(pad2));
>>>>>
>>>>>   GstPad * pad3 = gst_element_get_static_pad (color, "src");
>>>>>   gst_element_add_pad(bin, gst_ghost_pad_new("colorsrc", pad3));
>>>>>   gst_object_unref(GST_OBJECT(pad3));
>>>>>
>>>>>
>>>>> }
>>>>>
>>>>> void crossFade(gdouble duracion, GstElement * & bin)
>>>>> {
>>>>>     // devuelve el bin
>>>>>     GstElement * alfa1, *alfa2, *color;
>>>>>     alfa1 = 0;
>>>>>     alfa2 = 0;
>>>>>     color = 0;
>>>>>
>>>>>     bin = getBin("bin",alfa1, alfa2,color);  // Crea el bin y los
>>>>> elementos
>>>>>
>>>>>     getAndSetController(alfa2,duracion);
>>>>>
>>>>>     addGhostPadsToBin(alfa1, alfa2, color, bin);
>>>>>
>>>>>
>>>>> }
>>>>>
>>>>> GstElement * getSetPipeline(gchar *argv[])
>>>>> {
>>>>>     gint dur1 = 9000; // duration (in ms) to play of first clip
>>>>>     gint dur2 = 8000; // duration (in ms) to play of second clip
>>>>>     gint dur_crossfade = 500; //number of milliseconds to crossfade for
>>>>>     GstElement *comp = 0;
>>>>>     GstElement *pipeline, *video1, *video2, *op, *bin, *queue, *sink;
>>>>>
>>>>>      //we play two clips serially with a crossfade between them
>>>>>      // using the gnonlin gnlcomposition element.
>>>>>     if ((comp = gst_element_factory_make("gnlcomposition",
>>>>> "mycomposition")) == NULL)
>>>>>     {
>>>>>       printf ("\n Fallo al crear gnlcomposition \n");
>>>>>       return NULL;
>>>>>     }
>>>>>
>>>>>     // setup first clip
>>>>>
>>>>>     if ((video1 = gst_element_factory_make("gnlfilesource", "video1"))
>>>>> == NULL)
>>>>>     {
>>>>>       printf ("\n Falló la creacion del gnlfilesource \n");
>>>>>       return NULL;
>>>>>     }
>>>>>     if (gst_bin_add (GST_BIN (comp), video1) == FALSE)
>>>>>     {
>>>>>       printf ("\n No pudo agregar video1 a comp \n");
>>>>>       return NULL;
>>>>>     }
>>>>>
>>>>>     g_object_set (video1, "location", argv[1], NULL);
>>>>>     g_object_set (video1, "start", 0 * GST_MSECOND, NULL);
>>>>>     g_object_set (video1, "duration", dur1 * GST_MSECOND, NULL);
>>>>>     g_object_set (video1, "media-start", 0* GST_MSECOND, NULL);
>>>>>     g_object_set (video1, "media-duration", dur1 * GST_MSECOND, NULL);
>>>>>     g_object_set (video1, "priority", 1,NULL);
>>>>>
>>>>>     if ((video2 = gst_element_factory_make("gnlfilesource", "video2"))
>>>>> == NULL)
>>>>>     {
>>>>>       printf ("\n Falló la creacion del gnlfilesource \n");
>>>>>       return NULL;
>>>>>     }
>>>>>     if (gst_bin_add (GST_BIN (comp), video2) == FALSE)
>>>>>     {
>>>>>       printf ("\n No pudo agregar video2 a comp \n");
>>>>>       return NULL;
>>>>>     }
>>>>>
>>>>>     // setup second clip
>>>>>     g_object_set (video2, "location", argv[2], NULL);
>>>>>     g_object_set (video2, "start", (dur1-dur_crossfade) * GST_MSECOND,
>>>>> NULL);
>>>>>     g_object_set (video2, "duration", dur2 * GST_MSECOND, NULL);
>>>>>     g_object_set (video2, "media-start", 0 * GST_MSECOND, NULL);
>>>>>     g_object_set (video2, "media-duration", dur2 * GST_MSECOND, NULL);
>>>>>     g_object_set (video2, "priority", 2,NULL);
>>>>>
>>>>>     // setup the crossfade
>>>>>     op = gst_element_factory_make("gnloperation", "op");
>>>>>
>>>>>     crossFade(dur_crossfade, bin);
>>>>>
>>>>>     if (gst_bin_add (GST_BIN (op), bin) == FALSE)
>>>>>     {
>>>>>       printf ("\n No pudo agregar el bin a la gnloperacion op \n");
>>>>>       return NULL;
>>>>>     }
>>>>>
>>>>>     g_object_set (op,"start", (dur1-dur_crossfade) * GST_MSECOND,NULL);
>>>>>     g_object_set (op,"duration", dur_crossfade *  GST_MSECOND,NULL);
>>>>>     g_object_set (op,"media-start", 0 *  GST_MSECOND,NULL);
>>>>>     g_object_set(op,"media-duration", dur_crossfade *
>>>>> GST_MSECOND,NULL);
>>>>>     g_object_set(op,"priority",0,NULL);
>>>>>
>>>>>     if (gst_bin_add (GST_BIN (comp), op) == FALSE)
>>>>>     {
>>>>>       printf ("\n No pudo agregar la gnloperacion a la gnlcomposition
>>>>> \n");
>>>>>       return NULL;
>>>>>     }
>>>>>
>>>>>     // setup the backend viewer
>>>>>     queue = gst_element_factory_make("queue", "queue");
>>>>>     sink  = gst_element_factory_make("autovideosink", "sink");
>>>>>
>>>>>     pipeline = gst_pipeline_new ("video-player");
>>>>>
>>>>>
>>>>>     /* Agrego elementos al pipeline */
>>>>>
>>>>>     gst_bin_add_many (GST_BIN (pipeline),comp, queue, sink, NULL);
>>>>>
>>>>>     g_signal_connect (comp, "pad-added", G_CALLBACK (on_pad_added),
>>>>> queue);
>>>>>
>>>>>     gst_element_link (queue, sink);
>>>>>
>>>>>     cout << "creó pipeline!!!" << endl;
>>>>>
>>>>>     return pipeline;
>>>>>
>>>>> }
>>>>>
>>>>> void startPlay(GstElement * pip)
>>>>> {
>>>>>     /* Set the pipeline to "playing" state*/
>>>>>   cout << "antes del PLAY" << endl;
>>>>>   gst_element_set_state (pip, GST_STATE_PLAYING);
>>>>>   cout << "dp del PLAY" << endl;
>>>>>
>>>>> }
>>>>>
>>>>>
>>>>> int main(gint argc, gchar *argv[])
>>>>> {
>>>>>     GMainLoop *loop = NULL;
>>>>>
>>>>>     /* init GStreamer */
>>>>>     gst_init (&argc, &argv);
>>>>>     gst_controller_init (&argc, &argv);
>>>>>
>>>>>
>>>>>     loop = g_main_loop_new (NULL, FALSE);
>>>>>
>>>>>     /* make sure we have a URI */
>>>>>     if (argc != 3)
>>>>>     {
>>>>>         g_print ("Uso: %s <URI1>  <URI2>\n", argv[0]);
>>>>>         return -1;
>>>>>     }
>>>>>
>>>>>     GstElement * play = getSetPipeline(argv);
>>>>>
>>>>>     cout << "creo pipeline" << endl;
>>>>>
>>>>>     GstBus *bus2 = gst_pipeline_get_bus (GST_PIPELINE (play));
>>>>>     gst_bus_add_watch (bus2, bus_call, loop);
>>>>>     gst_object_unref (bus2);
>>>>>
>>>>>     cout << "start play" << endl;
>>>>>
>>>>>     startPlay(play);
>>>>>
>>>>>     /* 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
>>>>> gstreamer-devel at lists.freedesktop.org
>>>>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Ángel Martín Navas
>>>> Investigador / Researcher
>>>> Televisión Digital y Servicios Multimedia / Digital TV & Multimedia Services
>>>>
>>>> Vicomtech - Visual Interaction Communication Technologies
>>>>
>>>>
>>>>
>>>>
>>>> Mikeletegi Pasealekua, 57 - Parque Tecnológico
>>>> 20009 Donostia - San Sebastián - Spain
>>>> Tel: +[34] 943 30 92 30
>>>> Fax: +[34] 943 30 93 93
>>>>
>>>>
>>>>
>>>> e-mail: amartin at vicomtech.org
>>>> www.vicomtech.org
>>>>
>>>> *** member of IK4 Research Alliance ****
>>>> www.ik4.es
>>>> *** member of GraphicsMedia.net ****
>>>>
>>>>
>>>>
>>>> www.graphicsmedia.net
>>>>
>>>>
>>>>
>>>> -----------------------------------------------------
>>>> Vicomtech is an ISO 9001:2000 certified institute
>>>> -----------------------------------------------------
>>>>
>>>>
>>>>
>>>>
>>>> Este mensaje se dirige exclusivamente a su destinatario.
>>>> La información incluida en el presente correo es confidencial sometida a
>>>> secreto profesional, especialmente en lo que respecta a los datos de
>>>> carácter personal, cuya divulgación está prohibida, en virtud de la
>>>>
>>>>
>>>>
>>>>
>>>> legislación vigente. Si usted no es el destinatario legítimo y lo ha
>>>> recibido por error o tiene conocimiento del mismo por cualquier motivo,
>>>> le rogamos que nos lo comunique por este medio y proceda a destruirlo o
>>>>
>>>>
>>>>
>>>>
>>>> borrarlo. En todo caso abstengase de utilizar, reproducir, alterar,
>>>> archivar o comunicar a terceros el presente mensaje así como los ficheros
>>>> anexos, todo ello bajo pena de incurrir en responsabilidades legales.
>>>>
>>>>
>>>>
>>>>
>>>> Cualquier opinión contenida en este correo es exclusiva de su autor y no
>>>> representa necesariamente la opinión de ASOCIACIÓN CENTRO DE TECNOLOGÍAS
>>>> DE INTERACCIÓN VISUAL Y COMUNICACIONES VICOMTECH (en adelante Vicomtech-IK4)
>>>>
>>>>
>>>>
>>>>
>>>> El emisor no garantiza la integridad, rapidez o seguridad del presente correo,
>>>> ni se responsabiliza de posibles perjuicios derivados de la captura,
>>>> incorporaciones de virus o cualesquiera otras manipulaciones efectuadas por terceros.
>>>>
>>>>
>>>>
>>>>
>>>> Con motivo de la entrada en vigor de la Ley 34/2002, de 11 de julio, de
>>>> Servicios de la Sociedad de la Información y de Comercio Electrónico, le
>>>> informamos que pueden revocar en cualquier momento, de forma sencilla y gratuita,
>>>>
>>>>
>>>>
>>>>
>>>> el consentimiento para la recepción de mensajes de vicomtech.org en info.lopd at vicomtech.org.
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> gstreamer-devel mailing list
>>>> gstreamer-devel at lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>>
>>>>
>>>
>>> _______________________________________________
>>> gstreamer-devel mailing list
>>> gstreamer-devel at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>
>>>
>>
>> _______________________________________________
>> gstreamer-devel mailing list
>> gstreamer-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20110907/2d060849/attachment-0001.htm>


More information about the gstreamer-devel mailing list