54            START_OFFSET_TYPE_SAMPLE,
 
   55            START_OFFSET_TYPE_MILLISEC,
 
   63            SETUP_ERR_CANNOT_ALLOCATE_BUFFER,
 
   81        class StrmHeaderLoadTask : 
public Task
 
   90            virtual void Execute();
 
   91            virtual void Cancel();
 
   92            virtual void OnCancel();
 
   99            StartOffsetType startOffsetType;    
 
 
  104        class StrmDataLoadTask : 
public Task
 
  117            virtual void Execute();
 
  118            virtual void Cancel();
 
  119            virtual void OnCancel();
 
  124            StrmPlayer          *mStrmPlayer;           
 
  129            s32                 mBufferBlockIndex;      
 
  130            bool                mNeedUpdateAdpcmLoop;   
 
 
  138        virtual ~StrmPlayer();
 
  142        virtual bool Start();
 
  144        virtual void Pause(
bool flag);
 
  145        virtual bool IsActive()
 const { 
return mActiveFlag; }
 
  146        virtual bool IsStarted()
 const { 
return mStartedFlag; }
 
  147        virtual bool IsPause()
 const { 
return mPauseFlag; }
 
  150        virtual void OnUpdateFrameSoundThread() { Update(); }
 
  151        virtual void OnUpdateVoiceSoundThread() { UpdateBuffer(); }
 
  152        virtual void OnShutdownSoundThread() { Stop(); }
 
  155        SetupResult Setup(StrmBufferPool *bufferPool, 
int allocChannelCount,
 
  156                          u16 allocTrackFlag, 
int voiceOutCount);
 
  160        bool IsPrepared()
 const { 
return mPreparedFlag; }
 
  161        StrmChannel *GetTrackChannel(
StrmTrack const &track, 
int channelIndex);
 
  164        void SetTaskErrorFlag() { mTaskErrorFlag = 
true; }
 
  165        void SetTaskCancelFlag() { mTaskCancelFlag = 
true; }
 
  169            return mStrmInfo.sampleFormat == SAMPLE_FORMAT_DSP_ADPCM;
 
  171        bool CheckDiskDriveError() 
const;
 
  173        void SetAdpcmLoopContext(
int channelNum, u16 *predScale);
 
  174        void SetTrackVolume(ulong trackBitFlag, f32 volume);
 
  175        ulong GetPlaySamplePosition() 
const;
 
  177        bool ReadStrmDataInfo(StrmDataInfo*) 
const;
 
  180        bool Prepare(ut::FileStream *fileStream,
 
  181                     StartOffsetType startOffsetType, 
int startOffset);
 
  183        bool LoadHeader(ut::FileStream *fileStream,
 
  184                        StartOffsetType startOffsetType, 
int startOffset);
 
  185        bool LoadStreamData(ut::FileStream *fileStream, 
int offset, ulong size,
 
  186                            ulong blockSize, 
int bufferBlockIndex,
 
  187                            bool needUpdateAdpcmLoop);
 
  189        bool AllocStrmBuffers();
 
  190        void FreeStrmBuffers();
 
  192        bool AllocVoices(
int voiceOutCount);
 
  195        int CalcLoadingBufferBlockCount() 
const;
 
  196        bool CalcStartOffset(s32 *startBlockIndex, ulong *startBlockOffset,
 
  199        void SetLoopEndToZeroBuffer(
int endBufferBlockIndex);
 
  202        void UpdatePauseStatus();
 
  203        void UpdateLoadingBlockIndex();
 
  204        void UpdatePlayingBlockIndex();
 
  205        void UpdateLoopAddress(ulong loopStartSamples, ulong loopEndSamples);
 
  206        void UpdateDataLoopAddress(s32 endBlockBufferIndex);
 
  207        void UpdateVoiceParams(
StrmTrack *track);
 
  209        static ulong GetSampleByByte(ulong 
byte, SampleFormat format);
 
  212        static void VoiceCallbackFunc(Voice *voice,
 
  213                                      Voice::VoiceCallbackStatus status,
 
  218        static int const LOAD_BUFFER_SIZE = 0x4000;
 
  219        static int const LOAD_BUFFER_CHANNEL_NUM;
 
  220        static int const BUFFER_BLOCK_COUNT_MAX = 32;
 
  221        static int const STRM_CHANNEL_NUM_PER_TRACK;
 
  222        static int const STRM_CHANNEL_NUM = 16;
 
  223        static int const DATA_BLOCK_SIZE_MAX = 0x2000;
 
  224        static int const STRM_TRACK_NUM = 8;
 
  227        static bool sStaticInitFlag;
 
  228        static OSMutex sLoadBufferMutex;
 
  229        static byte_t sLoadBuffer[LOAD_BUFFER_SIZE];
 
  235        StrmFileReader::StrmInfo        mStrmInfo;                                      
 
  236        bool                            volatile mSetupFlag;                            
 
  241        bool                            mTaskCancelFlag;                                
 
  242        bool                            mLoadingDelayFlag;                              
 
  246        bool                            mNoRealtimeLoadFlag;                            
 
  247        bool                            mSkipUpdateAdpcmLoop;                           
 
  248        bool                            mValidAdpcmLoop;                                
 
  249        bool                            mPlayFinishFlag;                                
 
  250        bool                            mLoadFinishFlag;                                
 
  251        bool                            mAllocStrmBufferFlag;                           
 
  254        int                             mChangeNumBlocks;                               
 
  256        int                             mBufferBlockCount;                              
 
  257        int                             mBufferBlockCountBase;                          
 
  258        int                             mLoadingBufferBlockCount;                       
 
  259        int                             mLoadingBufferBlockIndex;                       
 
  260        int                             mLoadingDataBlockIndex;                         
 
  261        int                             mPlayingBufferBlockCount;                       
 
  262        int                             mPlayingBufferBlockIndex;                       
 
  263        int                             mPlayingDataBlockIndex;                         
 
  264        int                             mLoopStartBlockIndex;                           
 
  267        StartOffsetType                 mStartOffsetType;                               
 
  270        StrmDataLoadTask::LinkList      mStrmDataLoadTaskList;                          
 
  271        InstancePool<StrmDataLoadTask>  mStrmDataLoadTaskPool;                          
 
  273        StrmBufferPool                  *mBufferPool;                                   
 
  274        ut::FileStream                  *mFileStream;                                   
 
  278        StrmChannel                     mChannels[STRM_CHANNEL_NUM];