IPinHook.h
上传用户:tangyu_668
上传日期:2014-02-27
资源大小:678k
文件大小:7k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2006 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. #pragma once
  22. interface IPinC;
  23. typedef struct IPinCVtbl
  24. {
  25. BEGIN_INTERFACE
  26. HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IPinC * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject );
  27. ULONG ( STDMETHODCALLTYPE *AddRef )( IPinC * This );
  28. ULONG ( STDMETHODCALLTYPE *Release )( IPinC * This );
  29. HRESULT ( STDMETHODCALLTYPE *Connect )( IPinC * This, /* [in] */ IPinC *pReceivePin, /* [in] */ const AM_MEDIA_TYPE *pmt );
  30. HRESULT ( STDMETHODCALLTYPE *ReceiveConnection )( IPinC * This, /* [in] */ IPinC *pConnector, /* [in] */ const AM_MEDIA_TYPE *pmt );
  31. HRESULT ( STDMETHODCALLTYPE *Disconnect )( IPinC * This );
  32. HRESULT ( STDMETHODCALLTYPE *ConnectedTo )( IPinC * This, /* [out] */ IPinC **pPin );
  33. HRESULT ( STDMETHODCALLTYPE *ConnectionMediaType )( IPinC * This, /* [out] */ AM_MEDIA_TYPE *pmt );
  34. HRESULT ( STDMETHODCALLTYPE *QueryPinInfo )( IPinC * This, /* [out] */ PIN_INFO *pInfo );
  35. HRESULT ( STDMETHODCALLTYPE *QueryDirection )( IPinC * This, /* [out] */ PIN_DIRECTION *pPinDir );
  36. HRESULT ( STDMETHODCALLTYPE *QueryId )( IPinC * This, /* [out] */ LPWSTR *Id );
  37. HRESULT ( STDMETHODCALLTYPE *QueryAccept )( IPinC * This, /* [in] */ const AM_MEDIA_TYPE *pmt );
  38. HRESULT ( STDMETHODCALLTYPE *EnumMediaTypes )( IPinC * This, /* [out] */ IEnumMediaTypes **ppEnum );
  39. HRESULT ( STDMETHODCALLTYPE *QueryInternalConnections )( IPinC * This, /* [out] */ IPinC **apPin, /* [out][in] */ ULONG *nPin );
  40. HRESULT ( STDMETHODCALLTYPE *EndOfStream )( IPinC * This );
  41. HRESULT ( STDMETHODCALLTYPE *BeginFlush )( IPinC * This );
  42. HRESULT ( STDMETHODCALLTYPE *EndFlush )( IPinC * This );
  43. HRESULT ( STDMETHODCALLTYPE *NewSegment )( IPinC * This, /* [in] */ REFERENCE_TIME tStart, /* [in] */ REFERENCE_TIME tStop, /* [in] */ double dRate );
  44. END_INTERFACE
  45. } IPinCVtbl;
  46. interface IPinC
  47. {
  48.     CONST_VTBL struct IPinCVtbl *lpVtbl;
  49. };
  50. interface IMemInputPinC;
  51. typedef struct IMemInputPinCVtbl
  52. {
  53.     BEGIN_INTERFACE
  54. HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IPinC * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject );
  55. ULONG ( STDMETHODCALLTYPE *AddRef )( IPinC * This );
  56. ULONG ( STDMETHODCALLTYPE *Release )( IPinC * This );
  57. HRESULT ( STDMETHODCALLTYPE *GetAllocator )( IMemInputPinC * This, IMemAllocator **ppAllocator);
  58. HRESULT ( STDMETHODCALLTYPE *NotifyAllocator )( IMemInputPinC * This, IMemAllocator *pAllocator, BOOL bReadOnly);
  59. HRESULT ( STDMETHODCALLTYPE *GetAllocatorRequirements )( IMemInputPinC * This, ALLOCATOR_PROPERTIES *pProps);
  60. HRESULT ( STDMETHODCALLTYPE *Receive )( IMemInputPinC * This, IMediaSample *pSample);
  61. HRESULT ( STDMETHODCALLTYPE *ReceiveMultiple )( IMemInputPinC * This, IMediaSample **pSamples, long nSamples, long *nSamplesProcessed);
  62. HRESULT ( STDMETHODCALLTYPE *ReceiveCanBlock )( IMemInputPinC * This);
  63.     END_INTERFACE
  64. } IMemInputPinCVtbl;
  65. interface IMemInputPinC
  66. {
  67.     CONST_VTBL struct IMemInputPinCVtbl *lpVtbl;
  68. };
  69. extern bool HookNewSegmentAndReceive(IPinC* pPinC, IMemInputPinC* pMemInputPin);
  70. extern REFERENCE_TIME g_tSegmentStart, g_tSampleStart;
  71. //
  72. #include <videoacc.h>
  73. interface IAMVideoAcceleratorC;
  74. typedef struct IAMVideoAcceleratorCVtbl
  75. {
  76.     BEGIN_INTERFACE
  77.     
  78.     HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
  79.         IAMVideoAcceleratorC * This,
  80.         /* [in] */ REFIID riid,
  81.         /* [iid_is][out] */ void **ppvObject);
  82.     
  83.     ULONG ( STDMETHODCALLTYPE *AddRef )( 
  84.         IAMVideoAcceleratorC * This);
  85.     
  86.     ULONG ( STDMETHODCALLTYPE *Release )( 
  87.         IAMVideoAcceleratorC * This);
  88.     
  89.     HRESULT ( STDMETHODCALLTYPE *GetVideoAcceleratorGUIDs )( 
  90.         IAMVideoAcceleratorC * This,
  91.         /* [out][in] */ LPDWORD pdwNumGuidsSupported,
  92.         /* [out][in] */ LPGUID pGuidsSupported);
  93.     
  94.     HRESULT ( STDMETHODCALLTYPE *GetUncompFormatsSupported )( 
  95.         IAMVideoAcceleratorC * This,
  96.         /* [in] */ const GUID *pGuid,
  97.         /* [out][in] */ LPDWORD pdwNumFormatsSupported,
  98.         /* [out][in] */ LPDDPIXELFORMAT pFormatsSupported);
  99.     
  100.     HRESULT ( STDMETHODCALLTYPE *GetInternalMemInfo )( 
  101.         IAMVideoAcceleratorC * This,
  102.         /* [in] */ const GUID *pGuid,
  103.         /* [in] */ const AMVAUncompDataInfo *pamvaUncompDataInfo,
  104.         /* [out][in] */ LPAMVAInternalMemInfo pamvaInternalMemInfo);
  105.     
  106.     HRESULT ( STDMETHODCALLTYPE *GetCompBufferInfo )( 
  107.         IAMVideoAcceleratorC * This,
  108.         /* [in] */ const GUID *pGuid,
  109.         /* [in] */ const AMVAUncompDataInfo *pamvaUncompDataInfo,
  110.         /* [out][in] */ LPDWORD pdwNumTypesCompBuffers,
  111.         /* [out] */ LPAMVACompBufferInfo pamvaCompBufferInfo);
  112.     
  113.     HRESULT ( STDMETHODCALLTYPE *GetInternalCompBufferInfo )( 
  114.         IAMVideoAcceleratorC * This,
  115.         /* [out][in] */ LPDWORD pdwNumTypesCompBuffers,
  116.         /* [out] */ LPAMVACompBufferInfo pamvaCompBufferInfo);
  117.     
  118.     HRESULT ( STDMETHODCALLTYPE *BeginFrame )( 
  119.         IAMVideoAcceleratorC * This,
  120.         /* [in] */ const AMVABeginFrameInfo *amvaBeginFrameInfo);
  121.     
  122.     HRESULT ( STDMETHODCALLTYPE *EndFrame )( 
  123.         IAMVideoAcceleratorC * This,
  124.         /* [in] */ const AMVAEndFrameInfo *pEndFrameInfo);
  125.     
  126.     HRESULT ( STDMETHODCALLTYPE *GetBuffer )( 
  127.         IAMVideoAcceleratorC * This,
  128.         /* [in] */ DWORD dwTypeIndex,
  129.         /* [in] */ DWORD dwBufferIndex,
  130.         /* [in] */ BOOL bReadOnly,
  131.         /* [out] */ LPVOID *ppBuffer,
  132.         /* [out] */ LONG *lpStride);
  133.     
  134.     HRESULT ( STDMETHODCALLTYPE *ReleaseBuffer )( 
  135.         IAMVideoAcceleratorC * This,
  136.         /* [in] */ DWORD dwTypeIndex,
  137.         /* [in] */ DWORD dwBufferIndex);
  138.     
  139.     HRESULT ( STDMETHODCALLTYPE *Execute )( 
  140.         IAMVideoAcceleratorC * This,
  141.         /* [in] */ DWORD dwFunction,
  142.         /* [in] */ LPVOID lpPrivateInputData,
  143.         /* [in] */ DWORD cbPrivateInputData,
  144.         /* [in] */ LPVOID lpPrivateOutputDat,
  145.         /* [in] */ DWORD cbPrivateOutputData,
  146.         /* [in] */ DWORD dwNumBuffers,
  147.         /* [in] */ const AMVABUFFERINFO *pamvaBufferInfo);
  148.     
  149.     HRESULT ( STDMETHODCALLTYPE *QueryRenderStatus )( 
  150.         IAMVideoAcceleratorC * This,
  151.         /* [in] */ DWORD dwTypeIndex,
  152.         /* [in] */ DWORD dwBufferIndex,
  153.         /* [in] */ DWORD dwFlags);
  154.     
  155.     HRESULT ( STDMETHODCALLTYPE *DisplayFrame )( 
  156.         IAMVideoAcceleratorC * This,
  157.         /* [in] */ DWORD dwFlipToIndex,
  158.         /* [in] */ IMediaSample *pMediaSample);
  159.     
  160.     END_INTERFACE
  161. } IAMVideoAcceleratorCVtbl;
  162. interface IAMVideoAcceleratorC
  163. {
  164.     CONST_VTBL struct IAMVideoAcceleratorCVtbl *lpVtbl;
  165. };
  166. extern void HookAMVideoAccelerator(IAMVideoAcceleratorC* pAMVideoAcceleratorC);