[gst-devel] how to get the final caps of gstplaybin (or gstdecodebin)?

Zhao, Halley halley.zhao at intel.com
Fri Dec 5 02:54:40 CET 2008


  Thank you.
  Finally I use group->type[GST_STREAM_TYPE_VIDEO-1].preroll in setup_sinks().
  
  
  It is really a long time before my response :-)
  Your response and mail list was filtered out at that time. 
  
  
  >-----Original Message-----
  >From: Stefan Kost [mailto:ensonic at hora-obscura.de]
  >Sent: 2008年11月17日 16:16
  >To: Discussion of the development of GStreamer
  >Subject: Re: [gst-devel] how to get the final caps of gstplaybin (or
  >gstdecodebin)?
  >
  >hi,
  >Zhao, Halley schrieb:
  >>
  >> In gstplaybin.c, after the dynamic pipeline has created, I try to get
  >> the final src pad (caps) of gstplaybin (gstdecodebin), but failed in
  >> function: gen_video_element();
  >>
  >> I recursively parse the element in gstplaybin, but
  >> gst_caps_get_structure() will report error that
  >> “gst_caps_get_structure: assertion `GST_IS_CAPS (caps)' failed”.
  >>
  >You can also connect signal handlers to "notify:caps" on the pad you get
  >from decodebin. In your handler you can check if the caps are fixed and
  >use them.
  >
  >Stefan
  >
  >
  >> The error msg and my source code is as following, thanks for your help
  >>
  >>
  >>
  >> ################error message:
  >>
  >> ====element name -2:mpeg2dec0
  >>
  >>     file: gstplaybin.c, func: gen_video_element,      line: 920
  >>
  >>     file: gstplaybin.c, func: gen_video_element,      line: 926
  >>
  >> it is not a bin
  >>
  >>     file: gstplaybin.c, func: gen_video_element,      line: 935
  >>
  >>
  >>
  >> (gst-launch-0.10:14448): GStreamer-CRITICAL **:
  >> gst_caps_get_structure: assertion `GST_IS_CAPS (caps)' failed
  >>
  >> ===Error, we can't find the src structure of play_bin, wuwu~~~
  >>
  >> ====element name -2:fakesink
  >>
  >> ===Error, we can't find the src pad of play_bin, wuwu~~~
  >>
  >> ====element name -2:typefind
  >>
  >>     file: gstplaybin.c, func: gen_video_element,      line: 920
  >>
  >>     file: gstplaybin.c, func: gen_video_element,      line: 926
  >>
  >> it is not a bin
  >>
  >>     file: gstplaybin.c, func: gen_video_element,      line: 935
  >>
  >>
  >>
  >> ################my src codec
  >>
  >> iter = gst_bin_iterate_elements (GST_BIN_CAST(play_bin));
  >>
  >>
  >>
  >>     while (!done) {
  >>
  >>         switch (gst_iterator_next (iter, &data)) {
  >>
  >>           case GST_ITERATOR_OK:
  >>
  >>           {
  >>
  >>               child = GST_ELEMENT_CAST (data);
  >>
  >>               temp_name = gst_element_get_name (child);
  >>
  >>               if(!strncmp(temp_name, "decodebin",9))
  >>
  >>               {
  >>
  >>                   GstIterator *iter_2 = NULL;
  >>
  >>                   gboolean done_2 = FALSE;
  >>
  >>                   gpointer data_2 = NULL;
  >>
  >>                   GstElement *child_2=NULL;
  >>
  >>                   gboolean res_2 = TRUE;
  >>
  >>                   gchar *temp_name_2 = NULL;
  >>
  >>
  >>
  >>                   iter_2 = gst_bin_iterate_elements
  >(GST_BIN_CAST(child));
  >>
  >>
  >>
  >>                   while (!done_2) {
  >>
  >>                       switch (gst_iterator_next (iter_2, &data_2)) {
  >>
  >>                         case GST_ITERATOR_OK:
  >>
  >>                         {
  >>
  >>                             child_2 = GST_ELEMENT_CAST (data_2);
  >>
  >>                             temp_name_2 = gst_element_get_name
  >(child_2);
  >>
  >>                             PRINTF("====element name
  >> -2:%s\n",temp_name_2);
  >>
  >>                             g_free (temp_name_2);
  >>
  >>
  >>
  >>                             if ((play_bin_src_pad =
  >> gst_element_get_pad (child_2, "src")) == NULL) {
  >>
  >>                                 PRINTF("===Error, we can't find the
  >> src pad of play_bin, wuwu~~~\n");
  >>
  >>                                 break;
  >>
  >>                             }
  >>
  >>
  >>
  >>                             PRINT_MARK;
  >>
  >>                             if (play_bin_src_caps = gst_pad_get_caps
  >> (play_bin_src_pad) == NULL) {
  >>
  >>                                 PRINTF("===Error, we can't find the
  >> src caps of play_bin, wuwu~~~\n");
  >>
  >>                                 break;
  >>
  >>                             }
  >>
  >>
  >>
  >>                             PRINT_MARK;
  >>
  >>                             if (GST_IS_BIN(child_2)) {
  >>
  >>                                 PRINTF("it is a bin\n");
  >>
  >>                             }
  >>
  >>                             else
  >>
  >>                             {
  >>
  >>                                 PRINTF("it is not a bin\n");
  >>
  >>                             }
  >>
  >>
  >>
  >>                             PRINT_MARK;
  >>
  >>                             if ((structure = gst_caps_get_structure
  >> (play_bin_src_caps, 0)) == NULL) {
  >>
  >>                             PRINTF("===Error, we can't find the src
  >> structure of play_bin, wuwu~~~\n");
  >>
  >>                             break;
  >>
  >>                             }
  >>
  >>
  >>
  >>                             PRINT_MARK;
  >>
  >>                           structure_name =
  >> gst_structure_get_name(structure);
  >>
  >>                           PRINTF("==== structure_name:
  >> %s====\n",structure_name);
  >>
  >>
  >>
  >>                             gst_object_unref (structure);
  >>
  >>                             gst_object_unref (structure_name);
  >>
  >>                             gst_object_unref (child_2);
  >>
  >>
  >>
  >>                         }
  >>
  >>                        break;
  >>
  >>                         case GST_ITERATOR_RESYNC:
  >>
  >>                           gst_iterator_resync (iter_2);
  >>
  >>                           res_2 = TRUE;
  >>
  >>                           break;
  >>
  >>                         case GST_ITERATOR_DONE:
  >>
  >>                           done_2 = TRUE;
  >>
  >>                           break;
  >>
  >>                         case GST_ITERATOR_ERROR:
  >>
  >>                           g_assert_not_reached ();
  >>
  >>                           break;
  >>
  >>                       }
  >>
  >>                   }
  >>
  >>                 gst_iterator_free (iter_2);
  >>
  >>
  >>
  >>               }
  >>
  >>
  >>
  >>               g_free (temp_name);
  >>
  >>
  >>
  >>                 // gst_object_unref (child);
  >>
  >>             }
  >>
  >>            break;
  >>
  >>             case GST_ITERATOR_RESYNC:
  >>
  >>               gst_iterator_resync (iter);
  >>
  >>               res = TRUE;
  >>
  >>               break;
  >>
  >>             case GST_ITERATOR_DONE:
  >>
  >>               done = TRUE;
  >>
  >>               break;
  >>
  >>             case GST_ITERATOR_ERROR:
  >>
  >>               g_assert_not_reached ();
  >>
  >>               break;
  >>
  >>           }
  >>
  >>     }
  >>
  >>     gst_iterator_free (iter);
  >>
  >> *ZHAO, Halley (Aihua)*
  >>
  >> Email: halley.zhao at intel.com <mailto:aihua.zhao at intel.com>
  >>
  >> Tel: +86(21)61166476
  >>
  >> iNet: 8821-6476
  >>
  >> SSG/OTC/UMD 3W033
  >>
  >>
  >>
  >>
  >-----------------------------------------------------------------------
  >-
  >>
  >>
  >-----------------------------------------------------------------------
  >--
  >> This SF.Net email is sponsored by the Moblin Your Move Developer's
  >challenge
  >> Build the coolest Linux based applications with Moblin SDK & win great
  >prizes
  >> Grand prize is a trip for two to an Open Source event anywhere in the world
  >> http://moblin-contest.org/redirect.php?banner_id=100&url=/
  >>
  >-----------------------------------------------------------------------
  >-
  >>
  >> _______________________________________________
  >> gstreamer-devel mailing list
  >> gstreamer-devel at lists.sourceforge.net
  >> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
  >
  >
  >-----------------------------------------------------------------------
  >--
  >This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
  >Build the coolest Linux based applications with Moblin SDK & win great prizes
  >Grand prize is a trip for two to an Open Source event anywhere in the world
  >http://moblin-contest.org/redirect.php?banner_id=100&url=/
  >_______________________________________________
  >gstreamer-devel mailing list
  >gstreamer-devel at lists.sourceforge.net
  >https://lists.sourceforge.net/lists/listinfo/gstreamer-devel


More information about the gstreamer-devel mailing list