Wwise SDK 2015.1.9
버전
menu_open
link
include/AK/SoundEngine/Common/IAkStreamMgr.h
Go to the documentation of this file.00001 00002 // 00003 // Copyright (c) 2006 Audiokinetic Inc. / All Rights Reserved 00004 // 00006 00009 00010 #ifndef _IAK_STREAM_MGR_H_ 00011 #define _IAK_STREAM_MGR_H_ 00012 00013 #include <AK/SoundEngine/Common/AkMemoryMgr.h> 00014 00015 //----------------------------------------------------------------------------- 00016 // Defines. 00017 //----------------------------------------------------------------------------- 00018 00020 00021 #define AK_MONITOR_STREAMNAME_MAXLENGTH (64) 00022 #define AK_MONITOR_DEVICENAME_MAXLENGTH (16) 00023 00024 00025 //----------------------------------------------------------------------------- 00026 // Enums. 00027 //----------------------------------------------------------------------------- 00028 00030 enum AkStmStatus 00031 { 00032 AK_StmStatusIdle = 0, 00033 AK_StmStatusCompleted = 1, 00034 AK_StmStatusPending = 2, 00035 AK_StmStatusCancelled = 3, 00036 AK_StmStatusError = 4 00037 }; 00038 00043 enum AkMoveMethod 00044 { 00045 AK_MoveBegin = 0, 00046 AK_MoveCurrent = 1, 00047 AK_MoveEnd = 2 00048 }; 00049 00051 enum AkOpenMode 00052 { 00053 AK_OpenModeRead = 0, 00054 AK_OpenModeWrite = 1, 00055 AK_OpenModeWriteOvrwr = 2, 00056 AK_OpenModeReadWrite = 3 00057 }; 00058 00060 struct AkFileSystemFlags 00061 { 00062 AkFileSystemFlags() 00063 : uCacheID( AK_INVALID_FILE_ID ) {} 00064 00065 AkFileSystemFlags( AkUInt32 in_uCompanyID, AkUInt32 in_uCodecID, AkUInt32 in_uCustomParamSize, void * in_pCustomParam, bool in_bIsLanguageSpecific, bool in_bIsFromRSX, AkFileID in_uCacheID ) 00066 : uCompanyID( in_uCompanyID ) 00067 , uCodecID( in_uCodecID ) 00068 , uCustomParamSize( in_uCustomParamSize ) 00069 , pCustomParam( in_pCustomParam ) 00070 , bIsLanguageSpecific( in_bIsLanguageSpecific ) 00071 , bIsFromRSX( in_bIsFromRSX ) 00072 , uCacheID( in_uCacheID ) 00073 , uNumBytesPrefetch( 0 ) {} 00074 00075 AkUInt32 uCompanyID; 00076 AkUInt32 uCodecID; 00077 AkUInt32 uCustomParamSize; 00078 void * pCustomParam; 00079 bool bIsLanguageSpecific; 00080 bool bIsFromRSX; 00081 bool bIsAutomaticStream; 00082 00083 AkFileID uCacheID; 00084 00085 AkUInt32 uNumBytesPrefetch; 00086 }; 00087 00092 struct AkStreamInfo 00093 { 00094 AkDeviceID deviceID; 00095 const AkOSChar * pszName; 00096 AkUInt64 uSize; 00097 bool bIsOpen; 00098 }; 00099 00101 struct AkAutoStmHeuristics 00102 { 00103 AkReal32 fThroughput; 00104 AkUInt32 uLoopStart; 00105 AkUInt32 uLoopEnd; 00106 AkUInt8 uMinNumBuffers; 00107 00108 00109 00110 AkPriority priority; 00111 }; 00112 00114 struct AkAutoStmBufSettings 00115 { 00116 AkUInt32 uBufferSize; 00117 00118 00119 AkUInt32 uMinBufferSize; 00120 00121 AkUInt32 uBlockSize; 00122 }; 00123 00125 00126 00128 struct AkDeviceDesc 00129 { 00130 AkDeviceID deviceID; 00131 bool bCanWrite; 00132 bool bCanRead; 00133 AkUtf16 szDeviceName[AK_MONITOR_DEVICENAME_MAXLENGTH]; 00134 AkUInt32 uStringSize; 00135 }; 00136 00138 struct AkDeviceData 00139 { 00140 AkDeviceID deviceID; 00141 AkUInt32 uMemSize; 00142 AkUInt32 uMemUsed; 00143 AkUInt32 uAllocs; 00144 AkUInt32 uFrees; 00145 AkUInt32 uPeakRefdMemUsed; 00146 AkUInt32 uUnreferencedCachedBytes; 00147 AkUInt32 uGranularity; 00148 AkUInt32 uNumActiveStreams; 00149 AkUInt32 uTotalBytesTransferred; 00150 AkUInt32 uLowLevelBytesTransferred; 00151 AkReal32 fAvgCacheEfficiency; 00152 AkUInt32 uNumLowLevelRequestsCompleted; 00153 AkUInt32 uNumLowLevelRequestsCancelled; 00154 AkUInt32 uNumLowLevelRequestsPending; 00155 AkUInt32 uCustomParam; 00156 AkUInt32 uCachePinnedBytes; 00157 }; 00158 00160 struct AkStreamRecord 00161 { 00162 AkUInt32 uStreamID; 00163 AkDeviceID deviceID; 00164 AkUtf16 szStreamName[AK_MONITOR_STREAMNAME_MAXLENGTH]; 00165 AkUInt32 uStringSize; 00166 AkUInt64 uFileSize; 00167 AkUInt32 uCustomParamSize; 00168 AkUInt32 uCustomParam; 00169 bool bIsAutoStream; 00170 bool bIsCachingStream; 00171 }; 00172 00174 struct AkStreamData 00175 { 00176 AkUInt32 uStreamID; 00177 // Status (replace) 00178 AkUInt32 uPriority; 00179 AkUInt64 uFilePosition; 00180 AkUInt32 uTargetBufferingSize; 00181 AkUInt32 uVirtualBufferingSize; 00182 AkUInt32 uBufferedSize; 00183 AkUInt32 uNumBytesTransfered; 00184 AkUInt32 uNumBytesTransferedLowLevel; 00185 AkUInt32 uMemoryReferenced; 00186 AkReal32 fEstimatedThroughput; 00187 bool bActive; 00188 }; 00190 00191 namespace AK 00192 { 00194 00195 00198 class IAkStreamProfile 00199 { 00200 protected: 00202 virtual ~IAkStreamProfile(){} 00203 00204 public: 00208 virtual void GetStreamRecord( 00209 AkStreamRecord & out_streamRecord 00210 ) = 0; 00211 00215 virtual void GetStreamData( 00216 AkStreamData & out_streamData 00217 ) = 0; 00218 00223 virtual bool IsNew() = 0; 00224 00228 virtual void ClearNew() = 0; 00229 }; 00230 00231 00234 class IAkDeviceProfile 00235 { 00236 protected: 00238 virtual ~IAkDeviceProfile(){} 00239 00240 public: 00241 00243 virtual void OnProfileStart() = 0; 00244 00246 virtual void OnProfileEnd() = 0; 00247 00251 virtual void GetDesc( 00252 AkDeviceDesc & out_deviceDesc 00253 ) = 0; 00254 00258 virtual void GetData( 00259 AkDeviceData & out_deviceData 00260 ) = 0; 00261 00266 virtual bool IsNew() = 0; 00267 00271 virtual void ClearNew() = 0; 00272 00277 virtual AkUInt32 GetNumStreams() = 0; 00278 00283 virtual IAkStreamProfile * GetStreamProfile( 00284 AkUInt32 in_uStreamIndex 00285 ) = 0; 00286 }; 00287 00290 class IAkStreamMgrProfile 00291 { 00292 protected: 00294 virtual ~IAkStreamMgrProfile(){} 00295 00296 public: 00301 virtual AKRESULT StartMonitoring() = 0; 00302 00306 virtual void StopMonitoring() = 0; 00307 00312 virtual AkUInt32 GetNumDevices() = 0; 00313 00319 virtual IAkDeviceProfile * GetDeviceProfile( 00320 AkUInt32 in_uDeviceIndex 00321 ) = 0; 00322 }; 00324 00326 00327 00331 class IAkStdStream 00332 { 00333 protected: 00335 virtual ~IAkStdStream(){} 00336 00337 public: 00339 00340 00341 00342 00343 virtual void Destroy() = 0; 00344 00348 virtual void GetInfo( 00349 AkStreamInfo & out_info 00350 ) = 0; 00351 00354 virtual void * GetFileDescriptor() = 0; 00355 00359 virtual AKRESULT SetStreamName( 00360 const AkOSChar * in_pszStreamName 00361 ) = 0; 00362 00369 virtual AkUInt32 GetBlockSize() = 0; 00371 00373 00374 00381 virtual AKRESULT Read( 00382 void * in_pBuffer, 00383 AkUInt32 in_uReqSize, 00384 bool in_bWait, 00385 AkPriority in_priority, 00386 AkReal32 in_fDeadline, 00387 AkUInt32 & out_uSize 00388 ) = 0; 00389 00396 virtual AKRESULT Write( 00397 void * in_pBuffer, 00398 AkUInt32 in_uReqSize, 00399 bool in_bWait, 00400 AkPriority in_priority, 00401 AkReal32 in_fDeadline, 00402 AkUInt32 & out_uSize 00403 ) = 0; 00404 00410 virtual AkUInt64 GetPosition( 00411 bool * out_pbEndOfStream 00412 ) = 0; 00413 00420 virtual AKRESULT SetPosition( 00421 AkInt64 in_iMoveOffset, 00422 AkMoveMethod in_eMoveMethod, 00423 AkInt64 * out_piRealOffset 00424 00425 ) = 0; 00426 00432 virtual void Cancel() = 0; 00433 00435 00437 00438 00439 00440 00441 00442 virtual void * GetData( 00443 AkUInt32 & out_uSize 00444 ) = 0; 00445 00450 virtual AkStmStatus GetStatus() = 0; 00451 00453 }; 00454 00455 00462 class IAkAutoStream 00463 { 00464 protected: 00466 virtual ~IAkAutoStream(){} 00467 00468 public: 00470 00471 00472 00473 00474 virtual void Destroy() = 0; 00475 00479 virtual void GetInfo( 00480 AkStreamInfo & out_info 00481 ) = 0; 00482 00485 virtual void * GetFileDescriptor() = 0; 00486 00490 virtual void GetHeuristics( 00491 AkAutoStmHeuristics & out_heuristics 00492 ) = 0; 00493 00497 virtual AKRESULT SetHeuristics( 00498 const AkAutoStmHeuristics & in_heuristics 00499 ) = 0; 00500 00507 virtual AKRESULT SetMinimalBufferSize( 00508 AkUInt32 in_uMinBufferSize 00509 ) = 0; 00510 00514 virtual AKRESULT SetStreamName( 00515 const AkOSChar * in_pszStreamName 00516 ) = 0; 00517 00524 virtual AkUInt32 GetBlockSize() = 0; 00525 00536 virtual AKRESULT QueryBufferingStatus( 00537 AkUInt32 & out_uNumBytesAvailable 00538 ) = 0; 00539 00543 virtual AkUInt32 GetNominalBuffering() = 0; 00544 00546 00548 00549 00554 virtual AKRESULT Start() = 0; 00555 00560 virtual AKRESULT Stop() = 0; 00561 00571 virtual AkUInt64 GetPosition( 00572 bool * out_pbEndOfStream 00573 ) = 0; 00574 00582 virtual AKRESULT SetPosition( 00583 AkInt64 in_iMoveOffset, 00584 AkMoveMethod in_eMoveMethod, 00585 AkInt64 * out_piRealOffset 00586 00587 ) = 0; 00588 00590 00591 00593 00594 00607 virtual AKRESULT GetBuffer( 00608 void *& out_pBuffer, 00609 AkUInt32 & out_uSize, 00610 bool in_bWait 00611 ) = 0; 00612 00619 virtual AKRESULT ReleaseBuffer() = 0; 00621 }; 00622 00624 00625 00628 class IAkStreamMgr 00629 { 00630 protected: 00632 virtual ~IAkStreamMgr(){} 00633 00634 public: 00639 inline static IAkStreamMgr * Get() 00640 { 00641 return m_pStreamMgr; 00642 } 00643 00647 virtual void Destroy() = 0; 00648 00649 00651 00652 00653 00654 virtual IAkStreamMgrProfile * GetStreamMgrProfile() = 0; 00656 00657 00659 00660 00661 // Standard stream creation methods. 00662 00668 virtual AKRESULT CreateStd( 00669 const AkOSChar* in_pszFileName, 00670 AkFileSystemFlags * in_pFSFlags, 00671 AkOpenMode in_eOpenMode, 00672 IAkStdStream *& out_pStream, 00673 bool in_bSyncOpen 00674 ) = 0; 00675 00681 virtual AKRESULT CreateStd( 00682 AkFileID in_fileID, 00683 AkFileSystemFlags * in_pFSFlags, 00684 AkOpenMode in_eOpenMode, 00685 IAkStdStream *& out_pStream, 00686 bool in_bSyncOpen 00687 ) = 0; 00688 00689 00690 // Automatic stream create methods. 00691 00698 virtual AKRESULT CreateAuto( 00699 const AkOSChar* in_pszFileName, 00700 AkFileSystemFlags * in_pFSFlags, 00701 const AkAutoStmHeuristics & in_heuristics, 00702 AkAutoStmBufSettings * in_pBufferSettings, 00703 IAkAutoStream *& out_pStream, 00704 bool in_bSyncOpen 00705 ) = 0; 00706 00713 virtual AKRESULT CreateAuto( 00714 AkFileID in_fileID, 00715 AkFileSystemFlags * in_pFSFlags, 00716 const AkAutoStmHeuristics & in_heuristics, 00717 AkAutoStmBufSettings * in_pBufferSettings, 00718 IAkAutoStream *& out_pStream, 00719 bool in_bSyncOpen 00720 ) = 0; 00721 00727 virtual AKRESULT PinFileInCache( 00728 AkFileID in_fileID, 00729 AkFileSystemFlags * in_pFSFlags, 00730 AkPriority in_uPriority 00731 ) = 0; 00732 00738 virtual AKRESULT UnpinFileInCache( 00739 AkFileID in_fileID, 00740 AkPriority in_uPriority 00741 ) = 0; 00742 00747 virtual AKRESULT UpdateCachingPriority( 00748 AkFileID in_fileID, 00749 AkPriority in_uPriority, 00750 AkPriority in_uOldPriority 00751 ) = 0; 00752 00756 virtual AKRESULT GetBufferStatusForPinnedFile( 00757 AkFileID in_fileID, 00758 AkReal32& out_fPercentBuffered, 00759 bool& out_bCacheFull 00760 ) = 0; 00761 00763 00764 protected: 00768 static AKSOUNDENGINE_API IAkStreamMgr * m_pStreamMgr; 00769 }; 00770 00771 } 00772 #endif //_IAK_STREAM_MGR_H_
이 페이지가 도움이 되었나요?
작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.
프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.
Wwise를 시작해 보세요