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

📄 rmavicore.h

📁 这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的参考价值.
💻 H
字号:
/******************************************************************** Copyright (c) 2001 Sigma Designs Inc. All rights reserved. ********************************************************************//**  @file   rmavicore.h  @brief    <long description>  @author Laurent Crinon  @date   2002-03-25*/#ifndef __RMAVICORE_H__#define __RMAVICORE_H__#include "rmavitypes.h"#include "../../rmcpputils/include/rmcpputils.h"typedef struct tagTypeIndexEntry{	RMint8 ckid[4];	RMint8 dwFlags[4];	RMint8 dwChunkOffset[4];	RMint8 dwChunkLength[4];} typeIndexEntry;class RMAviStream;// chunk: pointer to data// chunkLength: length of data// flags: indicates start and end of chunk (cf below)// context: user contexttypedef void (*moviCallback)(RMuint8 chunkid[4], RMuint8 *chunk, RMuint32 chunkLength, RMuint32 flags, void *context);// for flags above#define RMAVI_FLAG_CHUNK_START 0x1#define RMAVI_FLAG_CHUNK_END   0x2// progress: progress valuetypedef void (*progressCallback)(RMuint32 progress);// DRM info size#define RMAVI_DRM_INFO_SIZE 2252class RMaviCore: public RMobject{ public:	// constructor	RMaviCore();	// destructor	~RMaviCore();	RMuint32 getNbAudioStreams();	void selectAudioStream(RMint32 streamNo);	RMint32 selectedAudioStream();	RMAviStream *getVideoStream();	RMAviStream *getAudioStream();	RMstatus open(const RMnonAscii *filename);	RMstatus close();	RMint32 getVideoStreamID();	RMint32 getAudioStreamID();	RMreal getVideoFramePerSec();	RMuint32 getTimeScale(typeStream type);	RMuint32 getChannelCount(typeStream type);	RMuint32 getBitsPerSample(typeStream type);	RMbool IsEof(typeStream type);	RMbool isIndexPresent();	RMAviHeader *getAviHeader();	RMstatus getStreamInfo(typeStream type, RMAviStreamHeader *streamHeader, void *format);	RMuint32 getAudioAvgBytesPerSec();	RMstatus getVideoSize(RMuint32 *width, RMuint32 *height);	RMreal getDelay(typeStream type);	void getDurationInf(RMuint32 *totalAudioFrame, RMuint32 *totalAudioSize, RMuint32 *totalVideoFrame);	RMuint32 getMicroSecPerFrame();	RMstatus GetMoviOffset(RMuint32 *pOffset);	void setNormalMode();	void setFastForwardMode();	void setFastRewindMode();		void reset();#ifndef RMAVI_ALTERNATEDEMUX	RMuint32 getFrameSize(typeStream type, RMuint32 index);	RMstatus getFrame(RMuint8 *buffer, RMuint32 *size, RMuint32 maxBufferSize, typeStream type, 	RMuint32 *index_wanted, RMbool *isComplete,  RMuint32 *nb_complete_frame_read);	RMstatus getFrameIndexFromTime(RMuint32 time_ms, typeStream type, RMint32 *index, RMuint32 *newTime_ms);	RMuint32 getMissingSize(typeStream type);#else	// Optional not Random Access demux	RMbool indexBuilt(void);	RMstatus seekMovi(RMuint64 time, RMuint32 *offset, RMuint64 *audioTimeBytes, RMuint64 *audioTimeFrames, RMuint64 *videoTime);	RMstatus initdemuxMovi (moviCallback callback, progressCallback progress);	RMstatus demuxMovi (RMuint8 *buffer, RMuint32 buflen, void *context);#endif	RMuint32 getNbIFrameInStream(); private:	RMstatus getChunkInfo(RMfileStream *f, RMuint32 position, RMuint16 *id, RMuint32 *sizeChunk, RMuint32 *dataPosition);	RMstatus getData(RMfileStream *f, RMuint32 dataPosition, RMuint32 dataSize, RMuint8 *buf);	RMstatus parseMainAviHeader(RMfileStream *f);	RMstatus getKeyAndSize(RMint32 *key, RMuint32 *size, RMbool needSize, RMfileStream *f);	RMstatus init();	RMstatus parseSubChunk(RMfileStream *f);	RMstatus parseInfoChunk(RMuint32 size, RMfileStream *f);	RMstatus getIndexEntry(RMfileStream *f, RMuint32 position, RMuint32 *offset, RMuint32 *flags, RMuint32 *length, 	RMuint32 dataOffset, RMuint16 *id_stream, RMuint32 *typeChunk);#ifndef RMAVI_ALTERNATEDEMUX	RMstatus getFrameIndexFromTimeWithNoIndexInFile(RMuint64 wantedTimeStamp, typeStream type, RMint32 *index, RMuint32 *newTime_ms);	RMuint32 getNextFrameSize(RMuint32 position, RMuint32 streamID, RMfileStream *f);	RMstatus lookForFrameInIndex(RMuint32 startingPosition, RMuint32 nbFrameToSeek, RMuint32 streamId, 	RMuint32 *newIndexPosition, RMuint32 *position, RMfileStream *f);	RMstatus constructIndex(RMuint32 sizeIndex, RMuint32 positionOfIndex, RMuint32 dataOffset, RMfileStream *f);	RMstatus getFramePositionWithoutIndex(RMuint32 wantedFrame, typeStream type, RMuint32 *dataPosition, RMfileStream *f, RMuint32 *sizeData);	RMstatus getFramePositionFromIndex(RMuint32 wantedFrame, typeStream type, RMuint32 *dataPosition, RMfileStream *f, RMuint32 *sizeData, RMuint32 *frame_flags);	RMstatus getNearestFramePositionAndNumber(RMuint32 wantedFrameNumber, typeStream type, 	RMuint32 *nearestFrameNumber, RMuint32 *nearestFramePosition);	RMstatus checkFrameTypeI(RMfileStream *f, RMuint32 position);#else 	RMstatus constructSeekIndex(RMuint32 sizeIndex, RMuint32 positionOfIndex, RMuint32 dataOffset, RMfileStream *f);	RMstatus CheckChunkId ();#endif /* RMAVI_ALTERNATEDEMUX */	RMfileStream *m_file_audio;	RMfileStream *m_file_video;	RMfileStream *m_file_index_video;	RMfileStream *m_file_index_audio;	RMAviHeader m_aviHeader;	RMAviStream *m_streamAudio[RMAVI_MAX_AUDIO_STREAMS];	RMAviStream *m_streamVideo;	RMuint32 m_sizeOfFile;	RMint32 m_streamID;	RMuint32 m_nbAudioStreams;	RMint32 m_selectedAudioStream;	RMint32 m_audioStreamID[RMAVI_MAX_AUDIO_STREAMS];	RMint32 m_videoStreamID;		RMint32 m_currentAudioPosition;	RMint32 m_currentVideoPosition;#ifndef RMAVI_ALTERNATEDEMUX		RMuint32 m_backupVideoPosition;	RMuint32 m_backupVideoSize;	RMuint32 m_backupVideoOffset;	RMint32 m_backupVideoID;	RMuint32 m_backupAudioPosition;	RMuint32 m_backupAudioSize;	RMuint32 m_backupAudioOffset;	RMint32 m_backupAudioID;	RMuint32 m_firstAudioPosition;	RMuint32 m_firstVideoPosition;	RMAviIndexEntry *m_tabVideoIndex;	RMAviIndexEntry *m_tabAudioIndex;	RMuint32 m_totalFrameInAudioArray;	RMuint32 m_totalFrameInVideoArray;	RMuint32 m_currentAudioFrameNumber;	RMuint32 m_currentVideoFrameNumber;	RMuint32 m_currentVideoPositionInIndex;	RMuint32 m_currentAudioPositionInIndex;	RMuint32 m_currentVideoFrameInIndex;	RMuint32 m_currentAudioFrameInIndex;	RMbool m_wasLastVideoFrameComplete;	RMbool m_wasLastAudioFrameComplete;#endif	RMuint32 m_totalAudioFrame;	RMuint32 m_totalVideoFrame;	RMbool m_useDataOffset;	RMuint32 m_dataOffset;	RMbool m_hasIndex;	RMbool m_indexSet;	RMuint32 m_AudioAvgBytesPerSec[RMAVI_MAX_AUDIO_STREAMS];	RMuint32 m_totalFramesInFiles;	RMuint32 m_positionOfIndex;	RMbool m_initialized;	RMuint32 m_positionDataInFile;	RMbool m_isInterleaved;	RMuint32 m_totalAudioSize;	RMuint32 m_playMode;	RMuint32 m_speed;	RMuint32 m_nbIframeInStream;#ifdef RMAVI_ALTERNATEDEMUX	// for "optional" demux		RMuint8 m_demuxstate;	RMuint8 m_chunkid[4];	RMuint32 m_chunklength;	RMuint32 m_bytecounter;	RMuint32 m_chunkstart;	RMuint32 m_indexSize;	RMuint32 m_seekMaxIndex;	RMuint32 *m_seekPosition;	RMuint32 *m_seekVideoFrames;	RMuint32 *m_seekAudioBytes[RMAVI_MAX_AUDIO_STREAMS];	RMuint32 *m_seekAudioFrames[RMAVI_MAX_AUDIO_STREAMS];	moviCallback m_moviCallback;	progressCallback m_progressCallback;	void *m_moviCallbackContext;#endif#ifdef RMAVI_DXN_DRM public:		RMuint8 m_dxn_drminfo[RMAVI_DRM_INFO_SIZE];#endif	};#endif // __RMAVICORE_H__

⌨️ 快捷键说明

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