AudRecordLib
|
00001 00005 #ifndef AUDRECORDCLI_INTERFACEWRAP_H 00006 #define AUDRECORDCLI_INTERFACEWRAP_H 00007 00008 #pragma once 00009 00010 #include "DataBufferWrap.h" 00011 00012 namespace AudRecordCLI 00013 { 00019 public delegate void OnDataUnitHandler(Object^ sender, IDataBuffer^ dataBuffer); 00020 00027 public delegate void OnEndWritingHandler(Object^ sender); 00028 00035 public delegate void OnHeaderHandler(Object^ sender, IDataBuffer^ headerBuffer); 00036 00041 public ref struct ITargetSink abstract 00042 { 00047 event OnHeaderHandler^ OnHeader; 00053 virtual bool IsRealTime() = 0; 00060 virtual IDataBuffer^ AllocateDataUnit(DWORD dataSize) = 0; 00064 event OnDataUnitHandler^ OnDataUnit; 00070 event OnEndWritingHandler^ OnEndWriting; 00071 internal: 00072 void RaiseOnHeader(IDataBuffer^ pBuffer); 00073 void RaiseOnDataUnit(IDataBuffer^ pBuffer); 00074 void RaiseOnEndWriting(); 00075 }; 00076 } 00077 00084 class TargetSinkWrap : public IWMWriterSink 00085 { 00089 gcroot<AudRecordCLI::ITargetSink^> pOrigSink; 00093 LONG refCount; 00094 public: 00095 TargetSinkWrap(AudRecordCLI::ITargetSink^ pOrigSink); 00096 // IUnknown 00097 STDMETHODIMP QueryInterface(REFIID riid, PVOID* ppv); 00098 STDMETHODIMP_(ULONG) AddRef(); 00099 STDMETHODIMP_(ULONG) Release(); 00100 // IWMWriterSink 00101 STDMETHODIMP OnHeader(INSSBuffer* pHeader); 00102 STDMETHODIMP IsRealTime(BOOL* pRealTime); 00103 STDMETHODIMP AllocateDataUnit(DWORD dataSize, INSSBuffer** ppBuffer); 00104 STDMETHODIMP OnDataUnit(INSSBuffer* pBuffer); 00105 STDMETHODIMP OnEndWriting(); 00106 }; 00107 00110 #endif