static GstFlowReturn
vorbis_parse_parse_packet (GstVorbisParse * parse, GstBuffer * buf)
{
  GstFlowReturn ret;
  GstMapInfo map;
  gboolean have_header;

  parse->packetno++;

  have_header = FALSE;
  gst_buffer_map (buf, &map, GST_MAP_READ);
  if (map.size >= 1) {
    if (map.data[0] & 1)
      have_header = TRUE;
  }
  gst_buffer_unmap (buf, &map);

  if (have_header) {
    if (!parse->streamheader_sent) {
      /* we need to collect the headers still */
      /* so put it on the streamheader list and return */
      parse->streamheader = g_list_append (parse->streamheader, buf);
    }
    ret = GST_FLOW_OK;
  } else {
    /* data packet, push the headers we collected before */
    if (!parse->streamheader_sent) {
      vorbis_parse_push_headers (parse);
      parse->streamheader_sent = TRUE;
    }
    ret = vorbis_parse_queue_buffer (parse, buf);
  }

  return ret;
}
Пример #2
0
static GstFlowReturn
vorbis_parse_parse_packet (GstVorbisParse * parse, GstBuffer * buf)
{
  GstFlowReturn ret;

  parse->packetno++;

  if (parse->packetno <= 3) {
    /* if 1 <= packetno <= 3, 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)
      vorbis_parse_push_headers (parse);

    ret = vorbis_parse_queue_buffer (parse, buf);
  }

  return ret;
}
Пример #3
0
static GstFlowReturn
vorbis_parse_parse_packet (GstVorbisParse * parse, GstBuffer * buf)
{
    GstFlowReturn ret;
    guint8 *data;
    guint size;
    gboolean have_header;

    data = GST_BUFFER_DATA (buf);
    size = GST_BUFFER_SIZE (buf);

    parse->packetno++;

    have_header = FALSE;
    if (size >= 1) {
        if (data[0] >= 0x01 && data[0] <= 0x05)
            have_header = TRUE;
    }

    if (have_header) {
        if (!parse->streamheader_sent) {
            /* we need to collect the headers still */
            /* so put it on the streamheader list and return */
            parse->streamheader = g_list_append (parse->streamheader, buf);
        }
        ret = GST_FLOW_OK;
    } else {
        /* data packet, push the headers we collected before */
        if (!parse->streamheader_sent) {
            vorbis_parse_push_headers (parse);
            parse->streamheader_sent = TRUE;
        }
        ret = vorbis_parse_queue_buffer (parse, buf);
    }

    return ret;
}