📄 encode.h
字号:
#ifndef _ENCODE_H_#define _ENCODE_H_class CHandlingMediaBuffer : public IMediaBuffer#ifdef SUPPORT_INTERLACE , public INSSBuffer3#endif //SUPPORT_INTERLACE { BYTE *m_pData; ULONG m_ulSize; ULONG m_ulData; ULONG m_cRef; BYTE bInterlaceProperty; public: CHandlingMediaBuffer(): bInterlaceProperty( 0 ) { m_cRef = 1; } void set_Buffer(BYTE *pData, DWORD ulData, DWORD ulSize) { m_pData = pData; m_ulSize = ulSize; m_ulData = ulData; } // // IUnknown // STDMETHODIMP QueryInterface(REFIID riid, void **ppv) { if (riid == IID_IUnknown) { AddRef(); *ppv = /*reinterpret_cast<IUnknown*>*(IUnknown*)( this ); return ( NOERROR ); } else if (riid == IID_IMediaBuffer) { AddRef(); *ppv = reinterpret_cast<IMediaBuffer*>*/(IMediaBuffer*)( this ); return ( NOERROR );#ifdef SUPPORT_INTERLACE } else if ( riid == IID_INSSBuffer3 ) { AddRef(); *ppv = /*reinterpret_cast<INSSBuffer3*>*/(INSSBuffer3*)( this ); return ( NOERROR );#endif //SUPPORT_INTERLACE } else { return ( E_NOINTERFACE ); } } STDMETHODIMP_(ULONG) AddRef() { return InterlockedIncrement((long*)&m_cRef); } STDMETHODIMP_(ULONG) Release() { long l = InterlockedDecrement((long*)&m_cRef); if (l == 0) delete this; return l; } // // IMediaBuffer // STDMETHODIMP GetLength(DWORD *pulLength ) { if( NULL == pulLength ) { return ( E_POINTER ); } *pulLength = m_ulData; return ( NOERROR ); } STDMETHODIMP SetLength(DWORD ulLength ) { m_ulData = ulLength; return ( NOERROR ); } STDMETHODIMP GetMaxLength(DWORD *pcbMaxLength) { *pcbMaxLength = m_ulSize; return ( NOERROR ); } STDMETHODIMP GetBufferAndLength(BYTE **ppBuffer, DWORD *pcbLength) { if( NULL != ppBuffer ) { *ppBuffer = m_pData; } if( NULL != pcbLength ) { *pcbLength = m_ulData; } return ( NOERROR ); }#ifdef SUPPORT_INTERLACE // // INSSBufferx members // HRESULT STDMETHODCALLTYPE GetBuffer( BYTE** ppdwBuffer ) { if( NULL == ppdwBuffer ) { return ( E_POINTER ); } *ppdwBuffer = m_pData; return ( S_OK ); } HRESULT STDMETHODCALLTYPE GetSampleProperties( DWORD cbProperties, BYTE *pbProperties ) { return ( E_NOTIMPL ); } HRESULT STDMETHODCALLTYPE SetSampleProperties( DWORD cbProperties, BYTE *pbProperties ) { return ( E_NOTIMPL ); } HRESULT STDMETHODCALLTYPE GetProperty( GUID guidBufferProperty, void* pvBufferProperty, DWORD* pdwBufferPropertySize) { if( NULL == pdwBufferPropertySize ) { return ( E_POINTER ); } if( WM_SampleExtension_ContentType == guidBufferProperty ) { if( NULL == pvBufferProperty ) { *pdwBufferPropertySize = WM_SampleExtension_ContentType_Size; return ( S_OK ); } else { if( *pdwBufferPropertySize < WM_SampleExtension_ContentType_Size ) { return ( E_INVALIDARG ); } else { *(BYTE*)pvBufferProperty = bInterlaceProperty; return ( S_OK ); } } } return ( NS_E_UNSUPPORTED_PROPERTY ); } HRESULT STDMETHODCALLTYPE SetProperty( GUID guidBufferProperty, void* pvBufferProperty, DWORD dwBufferPropertySize) { if( NULL == pvBufferProperty ) { return ( E_POINTER ); } if( WM_SampleExtension_ContentType == guidBufferProperty ) { if( dwBufferPropertySize != WM_SampleExtension_ContentType_Size ) { return ( E_INVALIDARG ); } else { bInterlaceProperty = *(BYTE*)pvBufferProperty; return ( S_OK ); } } return ( NS_E_UNSUPPORTED_PROPERTY ); }#endif //SUPPORT_INTERLACE };#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -