<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 02/16/2014 11:34 AM, Ian Davidson
      wrote:<br>
    </div>
    <blockquote cite="mid:5300CC5E.2040401@blueyonder.co.uk" type="cite">
      <meta content="text/html; charset=ISO-8859-1"
        http-equiv="Content-Type">
      I have upgraded my computer to use Fedora 20 and have the 1.2.3
      version of gstreamer installed.  My program (below) still crashes
      with a 'not negotiated' if I try to specify the image size.<br>
      <br>
      Would the fixes that were pushed to git on 30th January have made
      it into release 1.2.3?<br>
    </blockquote>
    <br>
    Hi, those changes will only be available on the 1.3.x release
    series.<br>
    The 1.2.x series only contains bugfixes on top of the original 1.2.0<br>
    release. The changes required to fix camerabin were not considered<br>
    safe enough to make it into 1.2.x releases and will only go into<br>
    the next version: 1.3.1<br>
    <br>
    If you want to use those bugfixes you can try using git master
    version<br>
    or backporting the relevant patches to a previous version suitable
    for you.<br>
    <br>
    --<br>
    Regards,<br>
    Thiago<br>
    <br>
    <blockquote cite="mid:5300CC5E.2040401@blueyonder.co.uk" type="cite">
      <br>
      Ian<br>
      <br>
      <div class="moz-text-plain" wrap="true" graphical-quote="true"
        style="font-family: -moz-fixed; font-size: 13px;"
        lang="x-western">
        <pre wrap="">/* JustTheCamera.c */

#include <gtk/gtk.h>
#include <gst/gst.h>
#include <glib.h>




    GtkWidget *startsnapbutton;
    GtkWidget *snapbutton;
    GtkWidget *stopsnapbutton;

    
static  GstElement *camPipeline;
  GstElement *cambin;
  GstBus *cambus;
  GMainLoop *camloop;
  guint cam_bus_watch_id;



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 ("End of 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;
    }

      case GST_MESSAGE_APPLICATION:{
        const GstStructure *s;

        s = gst_message_get_structure (msg);

        if (gst_structure_has_name (s, "GstLaunchInterrupt")) {
          /* this application message is posted when we caught an interrupt and
           * we need to stop the pipeline. */
          g_print ("Interrupt: Stopping pipeline ...\n");
/*          gst_element_send_event (camPipeline, gst_event_new_eos ()); */
          gst_element_set_state (camPipeline, GST_STATE_NULL);
          g_main_loop_quit (loop);
        }
        break;
      }
/*      case GST_MESSAGE_STATE_CHANGED: {
        GstState old_state, new_state;
    
        gst_message_parse_state_changed (msg, &old_state, &new_state, NULL);
        g_print ("Element %s changed state from %s to %s.\n",
            GST_OBJECT_NAME (msg->src),
            gst_element_state_get_name (old_state),
            gst_element_state_get_name (new_state));
    break;      
      } */

    default:
      break;
  }

  return TRUE;
}

gint delete_event( GtkWidget *widget,
                   GdkEvent  *event,
                   gpointer   data )
{
  g_print ("Delete_Event called\n");
      return(FALSE);
}

/* Start the Camera - Set up camerabin.  */
void snapButtonPressed( GtkWidget *widget,
               gpointer   data )
{

 GstCaps *caps;

  gtk_widget_set_sensitive(startsnapbutton, FALSE);
  gtk_widget_set_sensitive(snapbutton, TRUE);
  gtk_widget_set_sensitive(stopsnapbutton, TRUE);
  
  camPipeline     = gst_pipeline_new ("camera");
  cambin          = gst_element_factory_make ("camerabin",       "cambin1");
 
  camloop = g_main_loop_new (NULL, FALSE);
  if (!camPipeline || !cambin ) {
    g_printerr ("One element could not be created. Exiting.\n");
    return;
  }
  /* Set up the pipeline */
 
  g_print ("Watch for the bus\n");
  cambus = gst_pipeline_get_bus (GST_PIPELINE (camPipeline));
  cam_bus_watch_id =  gst_bus_add_watch (cambus, bus_call, camloop);

  g_print ("Set the picture size\n");
  caps = gst_caps_from_string("video/x-raw, width=(int)800, height=(int)600");
  g_object_set (G_OBJECT (cambin), "image-capture-caps", caps, NULL);
  gst_caps_unref (caps);    /*  This unref seems to cause problems and may need to be commented out */

  g_print ("Add the element to the pipeline\n");
  gst_bin_add_many (GST_BIN (camPipeline), cambin, NULL);


  gst_element_set_state (camPipeline, GST_STATE_PLAYING);

  /* Iterate */
  g_main_loop_run (camloop);


  /* Out of the main loop, clean up nicely */
  g_print ("Returned, Camera Off\n");
  gst_element_set_state (camPipeline, GST_STATE_NULL);

  gst_object_unref (GST_OBJECT (camPipeline));
  g_source_remove (cam_bus_watch_id);
  g_main_loop_unref (camloop);
  
  gtk_main_quit();

  return;

}

void snapNow( GtkWidget *widget,
               gpointer   data )
{
  guint lbIdle;
  
  g_print ("Take a picture\n");
  
  g_object_get(cambin, "idle", &lbIdle, NULL);
  if (lbIdle) {
    g_print("Camera is Idle\n");
  } else {
    g_print("Camera is Busy\n");
  }
  
  g_signal_emit_by_name (cambin, "start-capture", NULL);
}


void snapOff( GtkWidget *widget,
               gpointer   data )
{
  g_print ("We want to stop\n");

  gst_element_post_message (GST_ELEMENT (camPipeline),
      gst_message_new_application (GST_OBJECT (camPipeline),
          gst_structure_new ("GstLaunchInterrupt",
              "message", G_TYPE_STRING, "Pipeline interrupted", NULL)));     
}


int main( int   argc,
          char *argv[] )
{
    /* GtkWidget is the storage type for widgets */
    GtkWidget *window;
    GtkWidget *grid;
    

    /* This is called in all GTK applications. Arguments are parsed
     * from the command line and are returned to the application. */
    gtk_init (&argc, &argv);
    gst_init (&argc, &argv);

    /* Create a new window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    gtk_window_set_title (GTK_WINDOW (window), "Camera");

    /* Here we just set a handler for delete_event that immediately
     * exits GTK. */
    g_signal_connect (window, "destroy",
                        G_CALLBACK (delete_event), NULL);

    /* Sets the border width of the window. */
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);

    /* Use a grid for the buttons */
    grid = gtk_grid_new();

    /* Put the grid into the main window. */
    gtk_container_add (GTK_CONTAINER (window), grid);
    
     /* Snapshot Buttons. */
    startsnapbutton = gtk_button_new_with_label ("Start Camera");
    g_signal_connect (startsnapbutton, "clicked",
                        G_CALLBACK (snapButtonPressed), "Snapshot");
    gtk_grid_attach(GTK_GRID(grid), startsnapbutton, 0, 1, 1, 1);
    gtk_widget_show(startsnapbutton);

    snapbutton = gtk_button_new_with_label ("Take Snap");
    g_signal_connect (snapbutton, "clicked",
                        G_CALLBACK (snapNow), "Snapshot");
    gtk_grid_attach(GTK_GRID(grid), snapbutton, 0, 2, 1, 1);
    gtk_widget_show(snapbutton);
    gtk_widget_set_sensitive(snapbutton, FALSE);


    stopsnapbutton = gtk_button_new_with_label ("Stop Camera");
    g_signal_connect (stopsnapbutton, "clicked",
                        G_CALLBACK (snapOff), "Snapshot");
    gtk_grid_attach(GTK_GRID(grid), stopsnapbutton, 0, 3, 1, 1);
    gtk_widget_show(stopsnapbutton);
    gtk_widget_set_sensitive(stopsnapbutton, FALSE);


    gtk_widget_show(grid);



    gtk_widget_show (window);

    /* Rest in gtk_main and wait for the fun to begin! */
    gtk_main ();

    return(0);
}
/* JustTheCamera-end */
</pre>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"><legend
          class="mimeAttachmentHeaderName">trace.txt</legend></fieldset>
      <br>
      <div class="moz-text-plain" wrap="true" graphical-quote="true"
        style="font-family: -moz-fixed; font-size: 13px;"
        lang="x-western">
        <pre wrap="">Watch for the bus
Set the picture size
Add the element to the pipeline
Returned, Camera Off
33m 2444  0x92ec060 FIXME                default gstutils.c:3648:gst_pad_create_stream_id_printf_valist:<preview-appsrc:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:04.719934133  2444  0x92ebf80 WARN                GST_PADS gstpad.c:3669:gst_pad_peer_query:<src-capsfilter:src> could not send sticky events
0:00:04.999635762  2444  0x92ebf80 WARN           basetransform gstbasetransform.c:1373:gst_base_transform_setcaps:<src-videoconvert> transform could not transform video/x-raw, format=(string)I420, width=(int)352, height=(int)292, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)100/1 in anything we support
0:00:05.000725976  2444  0x92ebf80 WARN           basetransform gstbasetransform.c:2115:gst_base_transform_handle_buffer:<src-videoconvert> warning: not negotiated
0:00:05.000787104  2444  0x92ebf80 WARN           basetransform gstbasetransform.c:2115:gst_base_transform_handle_buffer:<src-videoconvert> warning: not negotiated
0:00:05.001194337  2444  0x92ebf80 WARN              bufferpool gstbufferpool.c:632:gst_buffer_pool_set_config:<v4l2bufferpool0> can't change config, we are active
0:00:05.001261875  2444  0x92ebf80 WARN              bufferpool gstbufferpool.c:632:gst_buffer_pool_set_config:<v4l2bufferpool0> can't change config, we are active
0:00:05.117358001  2444  0x92ebf80 WARN           basetransform gstbasetransform.c:1373:gst_base_transform_setcaps:<src-capsfilter> transform could not transform video/x-raw, format=(string)I420, width=(int)352, height=(int)292, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)100/1 in anything we support
0:00:05.117696734  2444  0x92ebf80 WARN           basetransform gstbasetransform.c:2115:gst_base_transform_handle_buffer:<src-capsfilter> warning: not negotiated
0:00:05.117730388  2444  0x92ebf80 WARN           basetransform gstbasetransform.c:2115:gst_base_transform_handle_buffer:<src-capsfilter> warning: not negotiated
0:00:05.118095014  2444  0x92ebf80 WARN                 basesrc gstbasesrc.c:2865:gst_base_src_loop:<camerasrc-real-src-actual-src-v4l> error: Internal data flow error.
0:00:05.118136171  2444  0x92ebf80 WARN                 basesrc gstbasesrc.c:2865:gst_base_src_loop:<camerasrc-real-src-actual-src-v4l> error: streaming task paused, reason not-negotiated (-4)
Error: Internal data flow error.
</pre>
      </div>
      <br>
      <div class="moz-cite-prefix">On 31/01/2014 14:51, Thiago Santos
        wrote:<br>
      </div>
      <blockquote cite="mid:52EBB881.5060405@collabora.com" type="cite">
        <meta content="text/html; charset=ISO-8859-1"
          http-equiv="Content-Type">
        <div class="moz-cite-prefix">On 01/31/2014 05:15 AM, Ian
          Davidson wrote:<br>
        </div>
        <blockquote cite="mid:52EB5BAE.60503@blueyonder.co.uk"
          type="cite">To clarify - I have not used the git master before
          and I don't know the process. <br>
        </blockquote>
        <br>
        You will need to clone and build the gstreamer modules. Check
        the developer instructions at <a moz-do-not-send="true"
          href="http://gstreamer.freedesktop.org/dev/">http://gstreamer.freedesktop.org/dev/</a><br>
        <br>
        and use git to clone the modules you need, I'd recommend using a
        gst-uninstalled setup so that you don't have to install the
        binaries to your system. You can find instructions about it at
        the 'scripts' dir on the core gstreamer module or at
        <meta http-equiv="content-type" content="text/html;
          charset=ISO-8859-1">
        <a moz-do-not-send="true"
          href="http://cgit.freedesktop.org/gstreamer/gstreamer/tree/scripts">http://cgit.freedesktop.org/gstreamer/gstreamer/tree/scripts</a>,
        look for gst-uninstalled and create-uninstalled-setup.sh<br>
        <br>
        Then you just need to build the modules from the uninstalled
        setup. Build by running './autogen.sh' from the module, remember
        to check the final output listing the plugins that are enabled
        and the ones that aren't. If a plugin you need/want is disabled,
        check if its build dependencies are installed on your system and
        run autogen.sh again. Then just run make and it should build.<br>
        <br>
        If you have a sample application/script that shows the problem,
        you can send it to the list for other devels to look if it is
        correctly using camerabin.<br>
        <br>
        --<br>
        Thiago<br>
        <br>
        <blockquote cite="mid:52EB5BAE.60503@blueyonder.co.uk"
          type="cite"> <br>
          On 30/01/2014 21:59, Ian Davidson wrote: <br>
          <blockquote type="cite">OK. What do I have to download from
            which website? <br>
            <br>
            Ian <br>
            <br>
            <blockquote type="cite">Some fixes have been pushed to
              gstreamer core and -base that are related to camerabin
              issues (yesterday and today). Can you give it a try with
              latest git gstreamer? <br>
              <br>
              If it still doesn't work for you, can you provide a small
              sample application to reproduce the issue in a bug filled
              at <a moz-do-not-send="true"
                class="moz-txt-link-freetext"
                href="https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer">https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer</a>
              <br>
            </blockquote>
          </blockquote>
        </blockquote>
      </blockquote>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
gstreamer-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>