v4l2src set to PLAYING failure

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

v4l2src set to PLAYING failure

Frank Du
This post was updated on .
Hello,

 

I have a problem with v4l2src plugin.

 

It works perfectly: “gst-launch-0.10 �v v4l2src ! ffmpegcolorspace !
xvimagesink”

 

But the following codes failed to work:

 

 

 

gst_init(NULL, NULL);

          pipeline = gst_pipeline_new("dpipeline");

          source = gst_element_factory_make("v4l2src", "dsrc");

          csp = gst_element_factory_make("ffmpegcolorspace", "dcsp");

          sink = gst_element_factory_make("appsink", "dsink");

          bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));

 

          g_object_set(G_OBJECT(source), "device", “/dev/video0”, NULL);

          gst_bin_add_many(GST_BIN(pipeline), source, csp, sink,
NULL);

          gst_bus_add_watch(bus, G_CALLBACK(bus_callback), pipeline);

          gst_object_unref(bus);

 

          gst_element_link(source, csp);

 

caps = gst_caps_new_simple("video/x-raw-yuv",

                   "format", GST_TYPE_FOURCC,
GST_MAKE_FOURCC('U','Y','V','Y'),

                    "width", G_TYPE_INT, 720,

                    "height", G_TYPE_INT, 480,

                    NULL);

         if (!gst_element_link_filtered(csp, sink, caps))

         {

             printf("UYVY Format Not Supported.\n");

             return NULL;

         }

         else

         {

             printf("Image Format Setting Finished.\n");

         }

          gst_caps_unref(caps);

 

//       state = gst_element_set_state(GST_ELEMENT(sink),
GST_STATE_PLAYING);

//       state = gst_element_set_state(GST_ELEMENT(csp), GST_STATE_PLAYING);


//       state = gst_element_set_state(GST_ELEMENT(source),
GST_STATE_PLAYING);

          state = gst_element_set_state(GST_ELEMENT(pipeline),
GST_STATE_PLAYING);

          switch(state)

          {

                   case GST_STATE_CHANGE_SUCCESS:

                             printf("Init Capture Succeed.\n");

                             break;

                   case GST_STATE_CHANGE_FAILURE:

                             printf("Init Capture Failure.\n");

                             break;

                   case GST_STATE_CHANGE_ASYNC:

                             if(GST_STATE_CHANGE_ASYNC == state)

                             {

                                      printf("Trying to Sync...\n");

                                      state = gst_element_get_state(csp,
NULL, NULL, GST_CLOCK_TIME_NONE);

                             }

                             if (GST_STATE_CHANGE_SUCCESS == state)

                             {

                                      printf("Sync Succeed.\n");

                             }

                             else

                             {

                                      printf("Init Capture...Failure.\n");

                                      return NULL;

                             }

                             break;

                   case GST_STATE_CHANGE_NO_PREROLL:

                             printf("Init File Capture Succeed(with no
data).\n");

                             break;

                   default:

                             printf("Init File Capture Error(unknown)\n");

          }

 

 

 

In fact, when I enabled these codes respectively

 

          state = gst_element_set_state(GST_ELEMENT(sink),
GST_STATE_PLAYING);

          state = gst_element_set_state(GST_ELEMENT(csp),
GST_STATE_PLAYING);

          state = gst_element_set_state(GST_ELEMENT(source),
GST_STATE_PLAYING);

//       state = gst_element_set_state(GST_ELEMENT(pipeline),
GST_STATE_PLAYING);

 

I found that the source(v4l2src) could not be set to GST_STATE_PLAYING
(GST_STATE_PAUSED neither) state.

 

Maybe I should do some additional initialization?

 

I’ve also used filesrc and it worked well.

 

Please help me.

 

 

 

Thanks & Best Regards

  _____  

Frank Du

 


---------------------------------------------------------------------------------------------------
Confidentiality Notice: The information contained in this e-mail and any accompanying attachment(s)
is intended only for the use of the intended recipient and may be confidential and/or privileged of
Neusoft Corporation, its subsidiaries and/or its affiliates. If any reader of this communication is
not the intended recipient, unauthorized use, forwarding, printing,  storing, disclosure or copying
is strictly prohibited, and may be unlawful.If you have received this communication in error,please
immediately notify the sender by return e-mail, and delete the original message and all copies from
your system. Thank you.
---------------------------------------------------------------------------------------------------