Пример #1
0
static GstFlowReturn
gst_kate_parse_parse_packet (GstKateParse * parse, GstBuffer * buf)
{
  GstFlowReturn ret = GST_FLOW_OK;
  guint8 header[1];
  gsize size;

  g_assert (parse);

  parse->packetno++;

  size = gst_buffer_extract (buf, 0, header, 1);

  GST_LOG_OBJECT (parse, "Got packet %02x, %" G_GSIZE_FORMAT " bytes",
      size ? header[0] : -1, gst_buffer_get_size (buf));

  if (size > 0 && header[0] & 0x80) {
    GST_DEBUG_OBJECT (parse, "Found header %02x", header[0]);
    /* if 0x80 is set, it's streamheader,
     * so put it on the streamheader list and return */
    parse->streamheader = g_list_append (parse->streamheader, buf);
    ret = GST_FLOW_OK;
  } else {
    if (!parse->streamheader_sent) {
      GST_DEBUG_OBJECT (parse, "Found non header, pushing headers seen so far");
      ret = gst_kate_parse_push_headers (parse);
    }

    if (ret == GST_FLOW_OK) {
      ret = gst_kate_parse_queue_buffer (parse, buf);
    }
  }

  return ret;
}
Пример #2
0
static GstFlowReturn
gst_kate_parse_parse_packet (GstKateParse * parse, GstBuffer * buf)
{
    GstFlowReturn ret = GST_FLOW_OK;

    g_assert (parse);

    parse->packetno++;

    GST_LOG_OBJECT (parse, "Got packet %02x, %u bytes",
                    GST_BUFFER_SIZE (buf) ? GST_BUFFER_DATA (buf)[0] : -1,
                    GST_BUFFER_SIZE (buf));

    if (GST_BUFFER_SIZE (buf) > 0 && GST_BUFFER_DATA (buf)[0] & 0x80) {
        GST_DEBUG_OBJECT (parse, "Found header %02x", GST_BUFFER_DATA (buf)[0]);
        /* if 0x80 is set, it's streamheader,
         * so put it on the streamheader list and return */
        parse->streamheader = g_list_append (parse->streamheader, buf);
        ret = GST_FLOW_OK;
    } else {
        if (!parse->streamheader_sent) {
            GST_DEBUG_OBJECT (parse, "Found non header, pushing headers seen so far");
            ret = gst_kate_parse_push_headers (parse);
        }

        if (ret == GST_FLOW_OK) {
            ret = gst_kate_parse_queue_buffer (parse, buf);
        }
    }

    return ret;
}