/// <summary> /// Looks for the next opus data packet in the Ogg stream and queues it up. /// If the end of stream has been reached, this does nothing. /// </summary> private void QueueNextPacket() { if (_endOfStream) { return; } DataPacket packet = _packetProvider.GetNextPacket(); if (packet == null || packet.IsEndOfStream) { _endOfStream = true; _nextDataPacket = null; return; } byte[] buf = new byte[packet.Length]; packet.Read(buf, 0, packet.Length); packet.Done(); if (buf.Length > 8 && "OpusHead".Equals(Encoding.UTF8.GetString(buf, 0, 8))) { _header = OpusHeader.ParsePacket(buf, buf.Length); QueueNextPacket(); } else if (buf.Length > 8 && "OpusTags".Equals(Encoding.UTF8.GetString(buf, 0, 8))) { _tags = OpusTags.ParsePacket(buf, buf.Length); QueueNextPacket(); } else { _nextDataPacket = buf; } }
/// <summary> /// Looks for the next opus data packet in the Ogg stream and queues it up. /// If the end of stream has been reached, this does nothing. /// </summary> private void QueueNextPacket() { if (_endOfStream) { return; } DataPacket packet = _packetProvider.GetNextPacket(); if (packet == null) { _endOfStream = true; _nextDataPacket = null; return; } PageGranulePosition = packet.PageGranulePosition; PagePosition = packet.PageSequenceNumber; byte[] buf = new byte[packet.Length]; packet.Read(buf, 0, packet.Length); packet.Done(); if (buf.Length > 8 && "OpusHead".Equals(Encoding.UTF8.GetString(buf, 0, 8))) { QueueNextPacket(); } else if (buf.Length > 8 && "OpusTags".Equals(Encoding.UTF8.GetString(buf, 0, 8))) { Tags = OpusTags.ParsePacket(buf, buf.Length); QueueNextPacket(); } else { _nextDataPacket = buf; } }