📄 hxaudstr.h
字号:
REF(IUnknown*) /*OUT*/ ppUnknown, IUnknown* /*IN*/ pUnkOuter); /************************************************************************ * Method: * IHXUpdateProperties::UpdatePacketTimeOffset * Purpose: * Call this method to update the timestamp offset of cached packets */ STDMETHOD(UpdatePacketTimeOffset) (THIS_ INT32 lTimeOffset); /************************************************************************ * Method: * IHXUpdateProperties::UpdatePlayTimes * Purpose: * Call this method to update the playtime attributes */ STDMETHOD(UpdatePlayTimes) (THIS_ IHXValues* pProps); /* * CHXAudioStream methods */ HX_RESULT Setup ( HXAudioFormat* pFormat , ULONG32 ulGranularity ); HX_RESULT GetFormat( HXAudioFormat* pAudioFormat ); HX_RESULT MixIntoBuffer( UCHAR* pBuf, ULONG32 ulBufSize, ULONG32& ulBufTime, BOOL& bIsMixBufferDirty, BOOL bGetCrossFadeData = FALSE ); ULONG32 MixData( UCHAR* pDestBuf , ULONG32 ulBufLen , BOOL bMonoToStereoMayBeConverted , BOOL& bIsMixBufferDirty); BOOL IsInitialized(void) {return m_bInited;}; BOOL IsAudioFormatKnown(void) {return m_bAudioFormatKnown;}; inline void SetLive(BOOL bIsLive) { if (m_bIsFirstPacket) { m_bIsLive = bIsLive; } } void SetupToBeDone() {m_bSetupToBeDone = TRUE;}; HX_RESULT StartCrossFade(CHXAudioStream* pFromStream, UINT32 ulCrossFadeStartTime, UINT32 ulCrossFadeDuration, BOOL bToStream); HX_RESULT ConvertCurrentTime(double dBytesPlayed, UINT32 ulCurrentTime, UINT32& ulAdjustedTime); void SyncStream(INT64 llSyncTime); void FreeInfo(HXAudioInfo* pInfo, BOOL bInstantaneous = FALSE); void FreeBuffer(IHXBuffer* pBuffer);#ifdef _MACINTOSH INT64 GetLastAudioWriteTime() {return m_llLastWriteTime - (INT64)(UINT64)m_ulBaseTime;};#else INT64 GetLastAudioWriteTime() {return m_llLastWriteTime - (INT64)m_ulBaseTime;};#endif void UpdateStreamLastWriteTime(BOOL bForceUpdate = FALSE); void SaveLastNMilliSeconds(BOOL bSave, UINT32 ulNMilliSeconds); void RewindStream(UINT32 ulTimeToRewind); void Pause(BOOL bPlayerPause = FALSE); void Resume(BOOL bPlayerResume = FALSE); void Stop(void); void Seek(UINT32 ulSeekTime); EPlayerState GetState(void) { return m_eState; }; void SetSoundLevel(float fSoundLevel); void SetAudioDeviceReflushHint(BOOL bSupported); BOOL IsAudioDeviceReflushHint(void) { return m_bAudioDeviceReflushHint; }; void RollBackTimestamp(); CHXAudioPlayer* m_Owner; BOOL m_bMayNeedToRollbackTimestamp; virtual void ResetStream(void); virtual HX_RESULT ProcessAudioHook(PROCESS_ACTION action, IHXAudioHook* pAudioHook); // CAudioSvcSampleConverter method virtual BOOL ConvertIntoBuffer(tAudioSample* buffer, UINT32 nSamples, INT64 llStartTimeInSamples) ;protected: LONG32 m_lRefCount; HX_RESULT m_wLastError; BOOL m_bInited; // Set to TRUE after buffer is created. BOOL m_bSetupDone; BOOL m_bAudioFormatKnown; BOOL m_bIsResumed; BOOL m_bPlayerPause; HXAudioFormat m_AudioFmt; // This streams format HXAudioFormat m_DeviceFmt; // The audio device format IHXAudioResampler* m_pResampler; // Id used by resampling code void* m_pInterpId; // Id used by linear interpolator code IHXValues* m_pValues; BOOL m_bDisableWrite;#if defined(HELIX_FEATURE_AUDIO_PREMIXHOOK) CHXMapPtrToPtr m_PreMixHookMap;#endif CHXMapPtrToPtr* m_DryNotificationMap; ULONG32 m_ulGranularity; // Play at least this amt of audio ULONG32 m_ulInputBytesPerGran; // Number of bytes for this amt of audio ULONG32 m_ulOutputBytesPerGran; // Number of bytes for this amt of audio ULONG32 m_ulExcessInterpBufferSize; // Number of bytes for this amt of audio ULONG32 m_ulPreviousExcessInterpBufferSize; BOOL m_bFirstWrite; ULONG32 m_ulMaxBlockSize; // Size of resampled data buffer UCHAR* m_pResampleBuf; // Resampler output buffer UCHAR* m_pTmpResBuf; // Tmp resample buffer UCHAR* m_pCrossFadeBuffer; // Tmp resample buffer UCHAR* m_pExcessInterpBuffer; UCHAR* m_pTempInterpBuffer; UINT32 m_ulCrossFadeBufferSize; float m_fVolume; // Stream volume level BOOL m_bChannelConvert; // if TRUE convert mono->stereo UINT16 m_uVolume; // Stream's current volume. BOOL m_bMute; BOOL m_bGotHooks; // if TRUE if this stream has hooks INT64 m_llLastWriteTime; // Time of last buffer written ULONG32 m_ulFudge; // The fudge factor for detecting gaps BOOL m_bHooksInitialized; HXAudioData* m_pInDataPtr; HXAudioData* m_pOutDataPtr; CHXSimpleList* m_pDataList; // Audio data list CHXSimpleList* m_pInstantaneousList; // Instantaneous data list CHXSimpleList* m_pRAByToTsInList; CHXSimpleList* m_pRAByToTsAdjustedList;#if defined(HELIX_FEATURE_CROSSFADE) CrossFader* m_pCrossFader;#else void* m_pCrossFader;#endif /* HELIX_FEATURE_CROSSFADE */ IHXCommonClassFactory* m_pCommonClassFactory; IHXPreferences* m_pPreferences; #ifdef _MACINTOSH HXAudioMacQueue* m_pAvailableBuffers;#else CHXSimpleList* m_pAvailableBuffers;#endif UINT16 m_uCacheSize; BOOL m_bDeterminedInitialCacheSize; BOOL m_bCacheMayBeGrown; BOOL m_bTobeTimed; BOOL m_bIsFirstPacket; BOOL m_bIsLive; BOOL m_bSetupToBeDone; UINT32 m_ulBaseTime; BOOL m_bCrossFadingToBeDone; CHXAudioStream* m_pCrossFadeStream; INT64 m_llCrossFadeStartTime; UINT32 m_ulCrossFadeDuration; BOOL m_bFadeToThisStream; BOOL m_bFadeAlreadyDone; BOOL m_bRealAudioStream; UINT32 m_ulLastInputStartTime; UINT32 m_ulLastInputEndTime; INT64 m_llLastStartTimePlayed; UINT32 m_ulTSRollOver; UINT32 m_ulLiveDelay; HX_BITFIELD m_bLastWriteTimeUpdated : 1; HX_BITFIELD m_bAudioDeviceReflushHint : 1; HX_BITFIELD m_bLastNMilliSecsToBeSaved : 1; UINT32 m_ulLastNMilliSeconds; CHXSimpleList* m_pLastNMilliSecsList; UINT32 m_ulLastNHeadTime; UINT32 m_ulLastNTailTime; EPlayerState m_eState; HX_BITFIELD m_bCanBeRewound : 1;/* * Left around for future debugging FILE* fdbefore; FILE* fdbeforetxt; FILE* fdafter; FILE* fdaftertxt; FILE* fdin;*/ virtual ~CHXAudioStream(); PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME void InitHooks(); HX_RESULT ProcessHooks(HXAudioData* pInData ,HXAudioData* pOutData); HX_RESULT AddData (HXAudioData* pData); HX_RESULT SetupResampler(void); ULONG32 CalcMs( ULONG32 ulNumBytes ); ULONG32 CalcDeviceMs( ULONG32 ulNumBytes ); UINT32 CalcOffset(INT64 llStartTime, INT64 llEndTime); void FlushBuffers(BOOL bInstantaneousAlso = TRUE); HX_RESULT ProcessInfo(void); BOOL EnoughDataAvailable(INT64& llStartTimeInSamples, UINT32& nSamplesRequired); void CleanupRAByToTs(void); void MapFudgedTimestamps(void); void InitializeCrossFader(void); void RemoveExcessCrossFadeData();private: HXAudioSvcMixEngine *m_pMixEngine ; static UINT32 Bytes2Samples(UINT64 ulNumBytes, const HXAudioFormat *fmt) ; static UINT64 Samples2Ms(INT64 nSamples, const HXAudioFormat *fmt) ; // variables to estimate the true sample rate INT64 m_startMeasureTime ; INT32 m_totSamples ; // how many samples apart may the mixes lie until we don't recognize them anymore // as contiguous? Essentially, this should be sample rate * [error in time stamps] enum { MIXTIMEFUDGEINSAMPLES = 400 } ; // we need these to correct for incoming data containing incomplete // sample frames. IHXBuffer* m_piPendingAudioData ; UINT32 m_ulPendingAudioBytes ; // size in bytes of the slush buffer content UINT32 m_ulSampleFrameSize ; // size in bytes of a sample frame, i.e. 2*nChannels // Write() backend function HX_RESULT Write2(HXAudioData* pAudioData) ;#ifdef HELIX_FEATURE_VOLUME IHXVolume* m_pStreamVolume;#endif};#ifdef _MACINTOSHstruct HXAudioMacQueueElement { HXAudioMacQueueElement *mNextElementInQueue; // link must be first member void *mObject;};class HXAudioMacQueue { protected: QHdr mQueueHeader; Boolean mDestructing; unsigned long m_nCount; public: HXAudioMacQueue(void); ~HXAudioMacQueue(void); // decrements the ref on the irma nodes (via release) void* RemoveHead(void); HX_RESULT AddTail(void* pObject); // increments the ref UINT32 GetCount();};#endif // _MACINTOSH#endif /* HXAUSTR_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -