⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ogg.h

📁 P2P应用 : Peercast的源代码
💻 H
字号:
// ------------------------------------------------// File : ogg.h// Date: 28-may-2003// Author: giles//// (c) 2002-3 peercast.org// ------------------------------------------------// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// ------------------------------------------------#ifndef _OGG_H#define _OGG_H#include "channel.h"// ----------------------------------------------class OggPage;

// ----------------------------------
class OggPacket
{
public:
	enum 
	{
		MAX_BODYLEN = 65536,		// probably too small
		MAX_PACKETS = 256			// prolly too small too, but realloc?!?!?!
	};

	void	addLacing(OggPage &);

	int	bodyLen;
	unsigned char body[MAX_BODYLEN];


	int	numPackets;
	unsigned int packetSizes[MAX_PACKETS];
};

// ----------------------------------------------
class OggSubStream
{
public:
	OggSubStream()
	:maxHeaders(0),serialNo(0),bitrate(0)
	{}

	bool needHeader()
	{
		return maxHeaders && (pack.numPackets < maxHeaders);
	}

	void eos()
	{
		maxHeaders=0;
		serialNo=0;
	}

	void bos(unsigned int ser)
	{
		maxHeaders = 3;
		pack.numPackets=0;
		pack.packetSizes[0]=0;
		pack.bodyLen = 0;
		serialNo = ser;
		bitrate = 0;
	}

	bool	isActive() {return serialNo!=0;}

	void readHeader(Channel *,OggPage &);

	virtual void procHeaders(Channel *) = 0;

	int	bitrate;

	OggPacket	pack;
	int	maxHeaders;
	unsigned int serialNo;
};
// ----------------------------------------------
class OggVorbisSubStream : public OggSubStream
{
public:
	OggVorbisSubStream()
	:samplerate(0)
	{}

	virtual void procHeaders(Channel *);

	void	readIdent(Stream &, ChanInfo &);
	void	readSetup(Stream &);
	void	readComment(Stream &, ChanInfo &);

	double	getTime(OggPage &);

	int samplerate;

};
// ----------------------------------------------
class OggTheoraSubStream : public OggSubStream
{
public:
	OggTheoraSubStream() : granposShift(0), frameTime(0) {}

	virtual void procHeaders(Channel *);

	void readInfo(Stream &, ChanInfo &);

	double	getTime(OggPage &);

	int granposShift;
	double frameTime;
};
// ----------------------------------------------class OGGStream : public ChannelStream{public:
	OGGStream()
	{}

	virtual void readHeader(Stream &,Channel *);
	virtual int readPacket(Stream &,Channel *);
	virtual void readEnd(Stream &,Channel *);
	void	readHeaders(Stream &,Channel *, OggPage &);

	OggVorbisSubStream	vorbis;
	OggTheoraSubStream	theora;	
};
// ----------------------------------class OggPage{public:	enum 
	{		MAX_BODYLEN = 65536,		MAX_HEADERLEN = 27+256	};	void	read(Stream &);	bool	isBOS();	bool	isEOS();
	bool	isNewPacket();
	bool	isHeader();
	unsigned int getSerialNo();

	bool	detectVorbis();	bool	detectTheora();


	int64_t granPos;	int headLen,bodyLen;	unsigned char data[MAX_HEADERLEN+MAX_BODYLEN];
};#endif 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -