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

📄 mp3aduinterleaving.hh

📁 流媒体传输协议的实现代码,非常有用.可以支持rtsp mms等流媒体传输协议
💻 HH
字号:
/**********This library is free software; you can redistribute it and/or modify it underthe terms of the GNU Lesser General Public License as published by theFree Software Foundation; either version 2.1 of the License, or (at youroption) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)This library is distributed in the hope that it will be useful, but WITHOUTANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESSFOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License formore details.You should have received a copy of the GNU Lesser General Public Licensealong with this library; if not, write to the Free Software Foundation, Inc.,59 Temple Place, Suite 330, Boston, MA  02111-1307  USA**********/// "liveMedia"// Copyright (c) 1996-2004 Live Networks, Inc.  All rights reserved.// Interleaving of MP3 ADUs// C++ header#ifndef _MP3_ADU_INTERLEAVING_HH#define _MP3_ADU_INTERLEAVING_HH#ifndef _FRAMED_FILTER_HH#include "FramedFilter.hh"#endif// A data structure used to represent an interleaving#define MAX_CYCLE_SIZE 256class Interleaving {public:  Interleaving(unsigned cycleSize, unsigned char const* cycleArray);  virtual ~Interleaving();  unsigned cycleSize() const {return fCycleSize;}  unsigned char lookupInverseCycle(unsigned char index) const {    return fInverseCycle[index];  }private:  unsigned fCycleSize;  unsigned char fInverseCycle[MAX_CYCLE_SIZE];};// This class is used only as a base for the following two:class MP3ADUinterleaverBase: public FramedFilter {protected:  MP3ADUinterleaverBase(UsageEnvironment& env,			FramedSource* inputSource);      // abstract base class  virtual ~MP3ADUinterleaverBase();  static FramedSource* getInputSource(UsageEnvironment& env,				      char const* inputSourceName);  static void afterGettingFrame(void* clientData,				unsigned numBytesRead,				unsigned numTruncatedBytes,				struct timeval presentationTime,				unsigned durationInMicroseconds);  virtual void afterGettingFrame(unsigned numBytesRead,				 struct timeval presentationTime,				 unsigned durationInMicroseconds) = 0;};// This class is used to convert an ADU sequence from non-interleaved// to interleaved form:class MP3ADUinterleaver: public MP3ADUinterleaverBase {public:  static MP3ADUinterleaver* createNew(UsageEnvironment& env,				      Interleaving const& interleaving,				      FramedSource* inputSource);protected:  MP3ADUinterleaver(UsageEnvironment& env,		    Interleaving const& interleaving,		    FramedSource* inputSource);      // called only by createNew()  virtual ~MP3ADUinterleaver();private:  // redefined virtual functions:  virtual void doGetNextFrame();  virtual void afterGettingFrame(unsigned numBytesRead,				 struct timeval presentationTime,				 unsigned durationInMicroseconds);private:  void releaseOutgoingFrame();private:  Interleaving const fInterleaving;  class InterleavingFrames* fFrames;  unsigned char fPositionOfNextIncomingFrame;  unsigned fII, fICC;};// This class is used to convert an ADU sequence from interleaved// to non-interleaved form:class MP3ADUdeinterleaver: public MP3ADUinterleaverBase {public:  static MP3ADUdeinterleaver* createNew(UsageEnvironment& env,					FramedSource* inputSource);protected:  MP3ADUdeinterleaver(UsageEnvironment& env,		      FramedSource* inputSource);      // called only by createNew()  virtual ~MP3ADUdeinterleaver();private:  // redefined virtual functions:  virtual void doGetNextFrame();  virtual void afterGettingFrame(unsigned numBytesRead,				 struct timeval presentationTime,				 unsigned durationInMicroseconds);private:  void releaseOutgoingFrame();private:  class DeinterleavingFrames* fFrames;  unsigned fIIlastSeen, fICClastSeen;};#endif

⌨️ 快捷键说明

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