FxBase.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #include "FxBase.h"
  2. FxBase::FxBase()
  3. {
  4. referenceCount = 1;
  5. isLocked = 0;
  6. registrationProperties = null;
  7. }
  8. FxBase::~FxBase()
  9. {
  10. }
  11. void STDMETHODCALLTYPE FxBase::SystemSetFromConstructor(const XAPO_REGISTRATION_PROPERTIES * pRegistrationProperties)
  12. {
  13. Assert(pRegistrationProperties != null);
  14. Assert(registrationProperties == null);
  15. registrationProperties = pRegistrationProperties;
  16. }
  17. HRESULT STDMETHODCALLTYPE FxBase::QueryInterface(REFIID riid, __deref_out void** ppInterface)
  18. {
  19. HRESULT hr = S_OK;
  20. if(riid == __uuidof(IXAPO))
  21. {
  22. *ppInterface = static_cast<IXAPO*>(this);
  23. AddRef();
  24. }else
  25. if(riid == __uuidof(IUnknown))
  26. {
  27. *ppInterface = static_cast<IUnknown*>(this);
  28. AddRef();
  29. }else{
  30. *ppInterface = NULL;
  31. hr = E_NOINTERFACE;
  32. }
  33. return hr;
  34. }
  35. ULONG STDMETHODCALLTYPE FxBase::AddRef()
  36. {
  37. return (ULONG)InterlockedIncrement(&referenceCount);
  38. }
  39. ULONG STDMETHODCALLTYPE FxBase::Release()
  40. {
  41. ULONG uTmpReferenceCount = (ULONG)InterlockedDecrement(&referenceCount);
  42. if(uTmpReferenceCount == 0)
  43. {
  44. Assert(false);
  45. // delete this;
  46. }
  47. return uTmpReferenceCount;
  48. }
  49. HRESULT STDMETHODCALLTYPE FxBase::GetRegistrationProperties(__deref_out XAPO_REGISTRATION_PROPERTIES ** ppRegistrationProperties)
  50. {
  51. if(!ppRegistrationProperties) return E_POINTER;
  52. *ppRegistrationProperties = (XAPO_REGISTRATION_PROPERTIES *)XAPOAlloc(sizeof(XAPO_REGISTRATION_PROPERTIES));
  53. memcpy(*ppRegistrationProperties, registrationProperties, sizeof(XAPO_REGISTRATION_PROPERTIES));
  54. return S_OK;
  55. }
  56. HRESULT STDMETHODCALLTYPE FxBase::IsInputFormatSupported(const WAVEFORMATEX* pOutputFormat, const WAVEFORMATEX* pRequestedInputFormat, __deref_opt_out WAVEFORMATEX** ppSupportedInputFormat)
  57. {
  58. return S_OK;
  59. }
  60. HRESULT STDMETHODCALLTYPE FxBase::IsOutputFormatSupported(const WAVEFORMATEX* pInputFormat, const WAVEFORMATEX* pRequestedOutputFormat, __deref_opt_out WAVEFORMATEX** ppSupportedOutputFormat)
  61. {
  62. return S_OK;
  63. }
  64. HRESULT STDMETHODCALLTYPE FxBase::Initialize(__in_bcount_opt(DataByteSize) const void*, UINT32 DataByteSize)
  65. {
  66. UNREFERENCED_PARAMETER(DataByteSize);
  67. return S_OK;
  68. }
  69. void STDMETHODCALLTYPE FxBase::Reset()
  70. {
  71. }
  72. HRESULT STDMETHODCALLTYPE FxBase::LockForProcess(UINT32 InputLockedParameterCount, __in_ecount_opt(InputLockedParameterCount) const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS* pInputLockedParameters, UINT32 OutputLockedParameterCount, __in_ecount_opt(OutputLockedParameterCount) const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS* pOutputLockedParameters)
  73. {
  74. Assert(isLocked == 0);
  75. Assert(InputLockedParameterCount == 1);
  76. Assert(OutputLockedParameterCount == 1);
  77. Assert(pInputLockedParameters != null);
  78. Assert(pOutputLockedParameters != null);
  79. Assert(pInputLockedParameters[0].pFormat != null);
  80. Assert(pOutputLockedParameters[0].pFormat != null);
  81. Assert(pInputLockedParameters[0].pFormat->nChannels == pOutputLockedParameters[0].pFormat->nChannels);
  82. Assert(pOutputLockedParameters[0].pFormat->nChannels == 2);
  83. Assert(pInputLockedParameters[0].pFormat->wBitsPerSample == 32);
  84. Assert(pOutputLockedParameters[0].pFormat->wBitsPerSample == 32);
  85. Reset();
  86. isLocked = 1;
  87. return S_OK;
  88. }
  89. void STDMETHODCALLTYPE FxBase::Process(UINT32 iCount, const XAPO_PROCESS_BUFFER_PARAMETERS * iParams, UINT32 oCount, XAPO_PROCESS_BUFFER_PARAMETERS *oParams, BOOL isEnabled)
  90. {
  91. Assert(isLocked != 0);
  92. Assert(iCount == 1);
  93. Assert(oCount == 1);
  94. Assert(iParams);
  95. Assert(oParams);
  96. XAPO_BUFFER_FLAGS inFlags = iParams[0].BufferFlags;
  97. XAPO_BUFFER_FLAGS outFlags = oParams[0].BufferFlags;
  98. Assert(inFlags == XAPO_BUFFER_VALID || inFlags == XAPO_BUFFER_SILENT);
  99. Assert(outFlags == XAPO_BUFFER_VALID || outFlags == XAPO_BUFFER_SILENT);
  100. switch (inFlags)
  101. {
  102. case XAPO_BUFFER_VALID:
  103. Assert(iParams[0].pBuffer != null);
  104. Assert(iParams[0].pBuffer == oParams[0].pBuffer);
  105. Process((float * __restrict)iParams[0].pBuffer, iParams[0].ValidFrameCount);
  106. break;
  107. case XAPO_BUFFER_SILENT:
  108. break;
  109. }
  110. oParams[0].ValidFrameCount = iParams[0].ValidFrameCount;
  111. oParams[0].BufferFlags = iParams[0].BufferFlags;
  112. }
  113. void STDMETHODCALLTYPE FxBase::UnlockForProcess()
  114. {
  115. Reset();
  116. isLocked = 0;
  117. }
  118. UINT32 STDMETHODCALLTYPE FxBase::CalcInputFrames(UINT32 OutputFrameCount)
  119. {
  120. return OutputFrameCount;
  121. }
  122. UINT32 STDMETHODCALLTYPE FxBase::CalcOutputFrames(UINT32 InputFrameCount)
  123. {
  124. return InputFrameCount;
  125. }