00001 00002 // 00003 // Copyright (c) 2006 Audiokinetic Inc. / All Rights Reserved 00004 // 00006 00014 00015 #ifndef _AK_STREAM_MGR_MODULE_H_ 00016 #define _AK_STREAM_MGR_MODULE_H_ 00017 00018 #include <AK/SoundEngine/Common/IAkStreamMgr.h> 00019 #include <AK/Tools/Common/AkPlatformFuncs.h> 00020 00022 00023 00024 00025 00026 00027 00028 00029 struct AkStreamMgrSettings 00030 { 00031 AkUInt32 uMemorySize; 00032 00033 00034 00035 00036 00037 00038 00039 }; 00040 00046 struct AkDeviceSettings 00047 { 00048 void * pIOMemory; 00049 00050 00051 AkUInt32 uIOMemorySize; 00052 AkUInt32 uIOMemoryAlignment; 00053 AkMemPoolAttributes ePoolAttributes; 00054 AkUInt32 uGranularity; 00055 AkUInt32 uSchedulerTypeFlags; 00056 AkThreadProperties threadProperties; 00057 AkReal32 fTargetAutoStmBufferLength; 00058 AkUInt32 uMaxConcurrentIO; 00059 bool bUseStreamCache; 00060 AkUInt32 uMaxCachePinnedBytes; 00061 }; 00062 00064 00067 #define AK_SCHEDULER_BLOCKING (0x01) 00068 00069 00070 00071 #define AK_SCHEDULER_DEFERRED_LINED_UP (0x02) 00072 00076 struct AkFileDesc 00077 { 00078 AkInt64 iFileSize; 00079 AkUInt32 uSector; 00080 00081 00082 00083 AkUInt32 uCustomParamSize; 00084 void * pCustomParam; 00085 AkFileHandle hFile; 00086 AkDeviceID deviceID; 00087 }; 00088 00091 struct AkIOTransferInfo 00092 { 00093 AkUInt64 uFilePosition; 00094 AkUInt32 uBufferSize; 00095 AkUInt32 uRequestedSize; 00096 }; 00097 00098 struct AkAsyncIOTransferInfo; 00108 AK_CALLBACK( void, AkIOCallback )( 00109 AkAsyncIOTransferInfo * in_pTransferInfo, 00110 AKRESULT in_eResult 00111 ); 00112 00118 struct AkAsyncIOTransferInfo : public AkIOTransferInfo 00119 { 00120 void * pBuffer; 00121 AkIOCallback pCallback; 00122 void * pCookie; 00123 void * pUserData; 00124 }; 00125 00133 struct AkIoHeuristics 00134 { 00135 AkReal32 fDeadline; 00136 AkPriority priority; 00137 }; 00138 00139 00140 00142 00143 namespace AK 00144 { 00145 // Audiokinetic Stream Manager's implementation-specific interfaces of the Low-Level IO submodule. 00146 namespace StreamMgr 00147 { 00149 class IAkLowLevelIOHook 00150 { 00151 protected: 00153 virtual ~IAkLowLevelIOHook(){} 00154 00155 public: 00158 virtual AKRESULT Close( 00159 AkFileDesc & in_fileDesc 00160 ) = 0; 00161 00184 virtual AkUInt32 GetBlockSize( 00185 AkFileDesc & in_fileDesc 00186 ) = 0; 00187 00191 virtual void GetDeviceDesc( 00192 AkDeviceDesc & out_deviceDesc 00193 ) = 0; 00194 00202 virtual AkUInt32 GetDeviceData() = 0; 00203 }; 00204 00209 class IAkIOHookBlocking : public IAkLowLevelIOHook 00210 { 00211 protected: 00213 virtual ~IAkIOHookBlocking(){} 00214 00215 public: 00216 00228 virtual AKRESULT Read( 00229 AkFileDesc & in_fileDesc, 00230 const AkIoHeuristics & in_heuristics, 00231 void * out_pBuffer, 00232 AkIOTransferInfo & in_transferInfo 00233 ) = 0; 00234 00245 virtual AKRESULT Write( 00246 AkFileDesc & in_fileDesc, 00247 const AkIoHeuristics & in_heuristics, 00248 void * in_pData, 00249 AkIOTransferInfo & io_transferInfo 00250 ) = 0; 00251 }; 00252 00269 class IAkIOHookDeferred : public IAkLowLevelIOHook 00270 { 00271 protected: 00273 virtual ~IAkIOHookDeferred(){} 00274 00275 public: 00276 00295 virtual AKRESULT Read( 00296 AkFileDesc & in_fileDesc, 00297 const AkIoHeuristics & in_heuristics, 00298 AkAsyncIOTransferInfo & io_transferInfo 00299 ) = 0; 00300 00319 virtual AKRESULT Write( 00320 AkFileDesc & in_fileDesc, 00321 const AkIoHeuristics & in_heuristics, 00322 AkAsyncIOTransferInfo & io_transferInfo 00323 ) = 0; 00324 00356 virtual void Cancel( 00357 AkFileDesc & in_fileDesc, 00358 AkAsyncIOTransferInfo & io_transferInfo, 00359 bool & io_bCancelAllTransfersForThisFile 00360 ) = 0; 00361 }; 00362 00378 class IAkFileLocationResolver 00379 { 00380 protected: 00382 virtual ~IAkFileLocationResolver(){} 00383 00384 public: 00385 00427 virtual AKRESULT Open( 00428 const AkOSChar* in_pszFileName, 00429 AkOpenMode in_eOpenMode, 00430 AkFileSystemFlags * in_pFlags, 00431 bool & io_bSyncOpen, 00432 AkFileDesc & io_fileDesc 00433 ) = 0; 00434 00478 virtual AKRESULT Open( 00479 AkFileID in_fileID, 00480 AkOpenMode in_eOpenMode, 00481 AkFileSystemFlags * in_pFlags, 00482 bool & io_bSyncOpen, 00483 AkFileDesc & io_fileDesc 00484 ) = 0; 00485 }; 00486 00488 00489 00490 00491 00492 00493 00494 00495 00496 00497 00498 00499 00500 AK_EXTERNAPIFUNC( IAkStreamMgr *, Create )( 00501 const AkStreamMgrSettings & in_settings 00502 ); 00503 00509 AK_EXTERNAPIFUNC( void, GetDefaultSettings )( 00510 AkStreamMgrSettings & out_settings 00511 ); 00512 00517 AK_EXTERNAPIFUNC( IAkFileLocationResolver *, GetFileLocationResolver )(); 00518 00522 AK_EXTERNAPIFUNC( void, SetFileLocationResolver )( 00523 IAkFileLocationResolver * in_pFileLocationResolver 00524 ); 00525 00532 AK_EXTERNAPIFUNC( AkMemPoolId, GetPoolID )(); 00533 00535 00537 00538 00539 00540 00541 00542 00543 00544 00545 00546 00547 00548 00549 00550 00551 00552 00553 00554 00555 00556 00557 00558 AK_EXTERNAPIFUNC( AkDeviceID, CreateDevice )( 00559 const AkDeviceSettings & in_settings, 00560 IAkLowLevelIOHook * in_pLowLevelHook 00561 ); 00565 AK_EXTERNAPIFUNC( AKRESULT, DestroyDevice )( 00566 AkDeviceID in_deviceID 00567 ); 00568 00575 AK_EXTERNAPIFUNC( void, GetDefaultDeviceSettings )( 00576 AkDeviceSettings & out_settings 00577 ); 00579 00581 00582 00583 00584 00585 00586 00587 00588 00589 00590 00591 00592 00593 00594 00595 AK_EXTERNAPIFUNC( AKRESULT, SetCurrentLanguage )( 00596 const AkOSChar * in_pszLanguageName 00597 ); 00598 00606 AK_EXTERNAPIFUNC( const AkOSChar *, GetCurrentLanguage )(); 00607 00615 AK_CALLBACK( void, AkLanguageChangeHandler )( 00616 const AkOSChar * const in_pLanguageName, 00617 void * in_pCookie 00618 ); 00619 00626 AK_EXTERNAPIFUNC( AKRESULT, AddLanguageChangeObserver )( 00627 AkLanguageChangeHandler in_handler, 00628 void * in_pCookie 00629 ); 00630 00637 AK_EXTERNAPIFUNC( void, RemoveLanguageChangeObserver )( 00638 void * in_pCookie 00639 ); 00640 00642 00643 00644 00645 00646 00647 AK_EXTERNAPIFUNC( void, FlushAllCaches )(); 00648 00650 } 00651 } 00652 00653 #endif //_AK_STREAM_MGR_MODULE_H_
프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.
Wwise를 시작해 보세요