📄 rmavicore.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 + -