예제 #1
0
static void
dvb_base_bin_handle_message (GstBin * bin, GstMessage * message)
{
  DvbBaseBin *dvbbasebin;

  dvbbasebin = GST_DVB_BASE_BIN (bin);

  if (message->type == GST_MESSAGE_ELEMENT &&
      GST_ELEMENT (message->src) == GST_ELEMENT (dvbbasebin->mpegtsparse)) {
    const gchar *structure_name = gst_structure_get_name (message->structure);

    if (strcmp (structure_name, "pat") == 0)
      dvb_base_bin_pat_info_cb (dvbbasebin, message->structure);
    else if (strcmp (structure_name, "pmt") == 0)
      dvb_base_bin_pmt_info_cb (dvbbasebin, message->structure);

    /*else if (strcmp (structure_name, "nit") == 0)
       dvb_base_bin_nit_info_cb (dvbbasebin, message->structure);
       else if (strcmp (structure_name, "sdt") == 0)
       dvb_base_bin_sdt_info_cb (dvbbasebin, message->structure);
       else if (strcmp (structure_name, "eit") == 0)
       dvb_base_bin_eit_info_cb (dvbbasebin, message->structure); */
    /* forward the message on */
    gst_element_post_message (GST_ELEMENT_CAST (bin), message);
  } else {
    /* chain up */
    GST_BIN_CLASS (parent_class)->handle_message (bin, message);
  }

}
예제 #2
0
static void
dvb_base_bin_handle_message (GstBin * bin, GstMessage * message)
{
  DvbBaseBin *dvbbasebin;

  dvbbasebin = GST_DVB_BASE_BIN (bin);

  /* note: message->src might be a GstPad, so use element cast w/o typecheck */
  if (GST_ELEMENT_CAST (message->src) == dvbbasebin->tsparse) {
    GstMpegtsSection *section = gst_message_parse_mpegts_section (message);

    if (section) {
      switch (GST_MPEGTS_SECTION_TYPE (section)) {
        case GST_MPEGTS_SECTION_PAT:
          dvb_base_bin_pat_info_cb (dvbbasebin, section);
          break;
        case GST_MPEGTS_SECTION_PMT:
          dvb_base_bin_pmt_info_cb (dvbbasebin, section);
          break;
        default:
          break;
      }
      gst_mpegts_section_unref (section);
    }
  }

  /* chain up */
  GST_BIN_CLASS (parent_class)->handle_message (bin, message);
}
예제 #3
0
static void
dvb_base_bin_handle_message (GstBin * bin, GstMessage * message)
{
  DvbBaseBin *dvbbasebin;

  dvbbasebin = GST_DVB_BASE_BIN (bin);

  if (message->type == GST_MESSAGE_ELEMENT &&
      GST_ELEMENT (message->src) == GST_ELEMENT (dvbbasebin->tsparse)) {
    const GstStructure *s = gst_message_get_structure (message);
    const gchar *structure_name = gst_structure_get_name (s);

    if (strcmp (structure_name, "pat") == 0)
      dvb_base_bin_pat_info_cb (dvbbasebin, s);
    else if (strcmp (structure_name, "pmt") == 0)
      dvb_base_bin_pmt_info_cb (dvbbasebin, s);
  }

  /* chain up */
  GST_BIN_CLASS (parent_class)->handle_message (bin, message);
}