⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encode.h

📁 mpeg4 video codec mpeg4 video codec
💻 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 + -