bdagraph.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:4k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * bdagraph.h : DirectShow BDA graph builder header for vlc
  3.  *****************************************************************************
  4.  * Copyright ( C ) 2007 the VideoLAN team
  5.  *
  6.  * Author: Ken Self <kenself(at)optusnet(dot)com(dot)au>
  7.  *
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2 of the License, or
  11.  * ( at your option ) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; if not, write to the Free Software
  20.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  21.  *****************************************************************************/
  22. /*****************************************************************************
  23.  * Preamble
  24.  *****************************************************************************/
  25. #include <queue>
  26. using namespace std;
  27. #ifndef _MSC_VER
  28. #   include <wtypes.h>
  29. #   include <unknwn.h>
  30. #   include <ole2.h>
  31. #   include <limits.h>
  32. #   ifdef _WINGDI_
  33. #      undef _WINGDI_
  34. #   endif
  35. #   define _WINGDI_ 1
  36. #   define AM_NOVTABLE
  37. #   define _OBJBASE_H_
  38. #   undef _X86_
  39. #   define _I64_MAX LONG_LONG_MAX
  40. #   define LONGLONG long long
  41. /* Work-around a bug in w32api-2.5 */
  42. /* #   define QACONTAINERFLAGS QACONTAINERFLAGS_SOMETHINGELSE */
  43. #endif
  44. /* Needed to call CoInitializeEx */
  45. #define _WIN32_DCOM
  46. #include <dshow.h>
  47. #include <comcat.h>
  48. #include <ks.h>
  49. #include "bdadefs.h"
  50. #include "bda.h"
  51. class BDAOutput
  52. {
  53. public:
  54.     BDAOutput( access_t * );
  55.     ~BDAOutput();
  56.     void    Push( block_t * );
  57.     block_t *Pop();
  58.     void    Empty();
  59. private:
  60.     access_t    *p_access;
  61.     vlc_mutex_t lock;
  62.     vlc_cond_t  wait;
  63.     block_t     *p_first;
  64.     block_t     **pp_next;
  65. };
  66. /* The main class for building the filter graph */
  67. class BDAGraph : public ISampleGrabberCB
  68. {
  69. public:
  70.     BDAGraph( access_t* p_access );
  71.     virtual ~BDAGraph();
  72.     /* */
  73.     int SubmitATSCTuneRequest();
  74.     int SubmitDVBTTuneRequest();
  75.     int SubmitDVBCTuneRequest();
  76.     int SubmitDVBSTuneRequest();
  77.     /* */
  78.     block_t *Pop();
  79. private:
  80.     /* ISampleGrabberCB methods */
  81.     ULONG ul_cbrc;
  82.     STDMETHODIMP_( ULONG ) AddRef( ) { return ++ul_cbrc; }
  83.     STDMETHODIMP_( ULONG ) Release( ) { return --ul_cbrc; }
  84.     STDMETHODIMP QueryInterface( REFIID riid, void** p_p_object )
  85.         { return E_NOTIMPL; }
  86.     STDMETHODIMP SampleCB( double d_time, IMediaSample* p_sample );
  87.     STDMETHODIMP BufferCB( double d_time, BYTE* p_buffer, long l_buffer_len );
  88.     access_t* p_access;
  89.     CLSID     guid_network_type;
  90.     long      l_tuner_used;        /* Index of the Tuning Device */
  91.     /* registration number for the RunningObjectTable */
  92.     DWORD     d_graph_register;
  93.     BDAOutput       output;
  94.     IMediaControl*  p_media_control;
  95.     IGraphBuilder*  p_filter_graph;
  96.     ITuningSpace*   p_tuning_space;
  97.     ITuneRequest*   p_tune_request;
  98.     ICreateDevEnum* p_system_dev_enum;
  99.     IBaseFilter*    p_network_provider;
  100.     IScanningTuner* p_scanning_tuner;
  101.     IBaseFilter*    p_tuner_device;
  102.     IBaseFilter*    p_capture_device;
  103.     IBaseFilter*    p_sample_grabber;
  104.     IBaseFilter*    p_mpeg_demux;
  105.     IBaseFilter*    p_transport_info;
  106.     ISampleGrabber* p_grabber;
  107.     HRESULT CreateTuneRequest( );
  108.     HRESULT Build( );
  109.     HRESULT FindFilter( REFCLSID clsid, long* i_moniker_used,
  110.         IBaseFilter* p_upstream, IBaseFilter** p_p_downstream );
  111.     HRESULT Connect( IBaseFilter* p_filter_upstream,
  112.         IBaseFilter* p_filter_downstream );
  113.     HRESULT Start( );
  114.     HRESULT Destroy( );
  115.     HRESULT Register( );
  116.     void Deregister( );
  117. };