123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
-
- #ifndef _AKFXTAILHANDLER_H_
- #define _AKFXTAILHANDLER_H_
- #include <AK/SoundEngine/Common/AkTypes.h>
- #include <AK/SoundEngine/Common/AkCommonDefs.h>
- #include <AK/Tools/Common/AkPlatformFuncs.h>
- #define AKFXTAILHANDLER_NOTINTAIL 0xFFFFFFFF
- class AkFXTailHandler
- {
- public:
-
- inline AkFXTailHandler()
- : uTailFramesRemaining( AKFXTAILHANDLER_NOTINTAIL )
- , uTotalTailFrames(0) {}
-
- inline void HandleTail(
- AkAudioBuffer * io_pBuffer,
- AkUInt32 in_uTotalTailFrames )
- {
- bool bPreStop = io_pBuffer->eState == AK_NoMoreData;
- if ( bPreStop )
- {
-
- if ( uTailFramesRemaining > 0
- || io_pBuffer->uValidFrames > 0
- )
- {
-
- if (uTailFramesRemaining == AKFXTAILHANDLER_NOTINTAIL
- || io_pBuffer->uValidFrames > 0
- )
- {
- uTailFramesRemaining = in_uTotalTailFrames;
- uTotalTailFrames = in_uTotalTailFrames;
- }
-
-
- else if ( in_uTotalTailFrames > uTotalTailFrames )
- {
- AkUInt32 uFramesElapsed = uTotalTailFrames - uTailFramesRemaining;
- uTailFramesRemaining = in_uTotalTailFrames - uFramesElapsed;
- uTotalTailFrames = in_uTotalTailFrames;
- }
-
- AkUInt32 uNumTailFrames = (AkUInt32)(io_pBuffer->MaxFrames()-io_pBuffer->uValidFrames);
- uTailFramesRemaining -= AkMin( uTailFramesRemaining, uNumTailFrames );
- io_pBuffer->ZeroPadToMaxFrames();
- if ( uTailFramesRemaining > 0 )
- io_pBuffer->eState = AK_DataReady;
- }
- }
- else
- {
-
- uTailFramesRemaining = AKFXTAILHANDLER_NOTINTAIL;
- }
- }
- inline bool HasTailRemaining() { return uTailFramesRemaining > 0; }
- protected:
- AkUInt32 uTailFramesRemaining;
- AkUInt32 uTotalTailFrames;
-
- };
- #endif
|