[vlc-devel] [PATCH] Significant changes to ATSC and DVB-S processing which now work.

Jean-Baptiste Kempf jb at videolan.org
Mon Dec 15 17:54:18 CET 2008


Applied, with very small modifications.

On Sun, Dec 14, 2008 at 10:04:24PM +1100, Ken Self wrote :
> From: kenself <kenself at optusnet.com.au>
> 
> ---
>  modules/access/bda/bdagraph.cpp |  307 ++++++++++++++++++++++++++++++++++-----
>  1 files changed, 273 insertions(+), 34 deletions(-)
> 
> diff --git a/modules/access/bda/bdagraph.cpp b/modules/access/bda/bdagraph.cpp
> index c60be0a..302a8fa 100644
> --- a/modules/access/bda/bdagraph.cpp
> +++ b/modules/access/bda/bdagraph.cpp
> @@ -141,13 +141,14 @@ int BDAGraph::SubmitATSCTuneRequest()
>          }
>      } l;
>      long l_major_channel, l_minor_channel, l_physical_channel;
> +    long l_frequency;
>  
>      l_major_channel = l_minor_channel = l_physical_channel = -1;
> -/*
> +    l_frequency = -1;
>      l_major_channel = var_GetInteger( p_access, "dvb-major-channel" );
>      l_minor_channel = var_GetInteger( p_access, "dvb-minor-channel" );
>      l_physical_channel = var_GetInteger( p_access, "dvb-physical-channel" );
> -*/
> +    l_frequency = var_GetInteger( p_access, "dvb-frequency" );
>  
>      guid_network_type = CLSID_ATSCNetworkProvider;
>      hr = CreateTuneRequest();
> @@ -176,6 +177,8 @@ int BDAGraph::SubmitATSCTuneRequest()
>      }
>  
>      hr = S_OK;
> +    if( l_frequency > 0 )
> +        hr = l.p_atsc_locator->put_CarrierFrequency( l_frequency );
>      if( l_major_channel > 0 )
>          hr = l.p_atsc_tune_request->put_Channel( l_major_channel );
>      if( SUCCEEDED( hr ) && l_minor_channel > 0 )
> @@ -506,8 +509,12 @@ int BDAGraph::SubmitDVBSTuneRequest()
>          IDVBTuneRequest* p_dvbs_tune_request;
>          IDVBSLocator* p_dvbs_locator;
>          IDVBSTuningSpace* p_dvbs_tuning_space;
> +        BSTR bstr_input_range;
> +        WCHAR* pwsz_input_range;
> +        int i_range_len;
>          localComPtr(): p_dvbs_tune_request(NULL), p_dvbs_locator(NULL),
> -            p_dvbs_tuning_space(NULL) {};
> +            p_dvbs_tuning_space(NULL), bstr_input_range(NULL),
> +            pwsz_input_range(NULL), i_range_len(NULL)  {};
>          ~localComPtr()
>          {
>              if( p_dvbs_tuning_space )
> @@ -516,17 +523,26 @@ int BDAGraph::SubmitDVBSTuneRequest()
>                  p_dvbs_tune_request->Release();
>              if( p_dvbs_locator )
>                  p_dvbs_locator->Release();
> +            SysFreeString( bstr_input_range );
> +            if( pwsz_input_range )
> +                delete pwsz_input_range;
>          }
>      } l;
>      long l_frequency, l_symbolrate, l_azimuth, l_elevation, l_longitude;
>      long l_lnb_lof1, l_lnb_lof2, l_lnb_slof, l_inversion, l_network_id;
> -    char* psz_polarisation;
> +    long l_input_range, l_hp_fec;
> +    int  i_mod;
> +    char* psz_polarisation = NULL;
> +    char* psz_input_range = NULL;
>      Polarisation i_polar;
>      SpectralInversion i_inversion;
>      VARIANT_BOOL b_west;
> +    BinaryConvolutionCodeRate i_hp_fec;
> +    ModulationType i_mod_typ;
>  
>      l_frequency = l_symbolrate = l_azimuth = l_elevation = l_longitude = -1;
>      l_lnb_lof1 = l_lnb_lof2 = l_lnb_slof = l_inversion = l_network_id = -1;
> +    l_input_range = l_hp_fec = i_mod = -1;
>      l_frequency = var_GetInteger( p_access, "dvb-frequency" );
>      l_symbolrate = var_GetInteger( p_access, "dvb-srate" );
>      l_azimuth = var_GetInteger( p_access, "dvb-azimuth" );
> @@ -536,8 +552,11 @@ int BDAGraph::SubmitDVBSTuneRequest()
>      l_lnb_lof2 = var_GetInteger( p_access, "dvb-lnb-lof2" );
>      l_lnb_slof = var_GetInteger( p_access, "dvb-lnb-slof" );
>      psz_polarisation = var_GetNonEmptyString( p_access, "dvb-polarisation" );
> +    i_mod = var_GetInteger( p_access, "dvb-modulation" );
> +    l_hp_fec = var_GetInteger( p_access, "dvb-code-rate-hp" );
>      l_inversion = var_GetInteger( p_access, "dvb-inversion" );
> -    l_network_id = var_GetInteger( p_access, "dvb-network_id" );
> +    l_network_id = var_GetInteger( p_access, "dvb-network-id" );
> +    psz_input_range = var_GetNonEmptyString( p_access, "dvb-range" );
>  
>      b_west = ( l_longitude < 0 ) ? TRUE : FALSE;
>  
> @@ -567,6 +586,38 @@ int BDAGraph::SubmitDVBSTuneRequest()
>      if( l_inversion == 2 )
>          i_inversion = BDA_SPECTRAL_INVERSION_AUTOMATIC;
>  
> +    i_mod_typ = BDA_MOD_NOT_SET;
> +    if( i_mod == 16 )
> +        i_mod_typ = BDA_MOD_16QAM;
> +    if( i_mod == 128 )
> +        i_mod_typ = BDA_MOD_128QAM;
> +    if( i_mod == 256 )
> +        i_mod_typ = BDA_MOD_256QAM;
> +    if( i_mod == 10004 )
> +        i_mod_typ = BDA_MOD_QPSK;
> +
> +    i_hp_fec = BDA_BCC_RATE_NOT_SET;
> +    if( l_hp_fec == 1 )
> +        i_hp_fec = BDA_BCC_RATE_1_2;
> +    if( l_hp_fec == 2 )
> +        i_hp_fec = BDA_BCC_RATE_2_3;
> +    if( l_hp_fec == 3 )
> +        i_hp_fec = BDA_BCC_RATE_3_4;
> +    if( l_hp_fec == 4 )
> +        i_hp_fec = BDA_BCC_RATE_5_6;
> +    if( l_hp_fec == 5 )
> +        i_hp_fec = BDA_BCC_RATE_7_8;
> +
> +    l.i_range_len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
> +        psz_input_range, -1, l.pwsz_input_range, 0 );
> +    if( l.i_range_len > 0 )
> +    {    
> +        l.pwsz_input_range = new WCHAR[l.i_range_len];
> +        MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
> +            psz_input_range, -1, l.pwsz_input_range, l.i_range_len );
> +        l.bstr_input_range=SysAllocString( l.pwsz_input_range );
> +    }
> + 
>      guid_network_type = CLSID_DVBSNetworkProvider;
>      hr = CreateTuneRequest();
>      if( FAILED( hr ) )
> @@ -606,31 +657,57 @@ int BDAGraph::SubmitDVBSTuneRequest()
>          return VLC_EGENERIC;
>      }
>  
> +/*****************************************************************************/
> +/* More traces */
> +  long l_tmp_lof1, l_tmp_lof2, l_tmp_slof;
> +  BSTR bstr_tmp_range;
> +  HRESULT hr2;
> +  l_tmp_lof1 = l_tmp_lof2 = l_tmp_slof = -1;
> +  hr2 = l.p_dvbs_tuning_space->get_LNBSwitch( &l_tmp_slof );
> +  msg_Dbg( p_access, "get_LNBSwitch: %d", l_tmp_slof );
> +  hr2 = l.p_dvbs_tuning_space->get_LowOscillator( &l_tmp_lof1 );
> +  msg_Dbg( p_access, "get_LowOscillator: %d", l_tmp_lof1 );
> +  hr2 = l.p_dvbs_tuning_space->get_HighOscillator( &l_tmp_lof2 );
> +  msg_Dbg( p_access, "get_HighOscillator: %d", l_tmp_lof2 );
> +  hr2 = l.p_dvbs_tuning_space->get_InputRange( &bstr_tmp_range );
> +  msg_Dbg( p_access, "get_InputRange: %S", bstr_tmp_range );
> +  SysFreeString( bstr_tmp_range );
> +
> +/*****************************************************************************/
> +
>      hr = S_OK;
> -    if( l_frequency > 0 )
> +    if( l_lnb_lof1 > 0 )
> +        hr = l.p_dvbs_tuning_space->put_LowOscillator( l_lnb_lof1 );
> +    if( SUCCEEDED( hr ) && l_lnb_slof > 0 )
> +        hr = l.p_dvbs_tuning_space->put_LNBSwitch( l_lnb_slof );
> +    if( SUCCEEDED( hr ) && l_lnb_lof2 > 0 )
> +        hr = l.p_dvbs_tuning_space->put_HighOscillator( l_lnb_lof2 );
> +    if( SUCCEEDED( hr ) && i_inversion != BDA_SPECTRAL_INVERSION_NOT_SET )
> +        hr = l.p_dvbs_tuning_space->put_SpectralInversion( i_inversion );
> +    if( SUCCEEDED( hr ) && l_network_id > 0 )
> +        hr = l.p_dvbs_tuning_space->put_NetworkID( l_network_id );
> +    if( SUCCEEDED( hr ) && l.i_range_len > 0 )
> +        hr = l.p_dvbs_tuning_space->put_InputRange( l.bstr_input_range );
> +
> +    if( SUCCEEDED( hr ) && l_frequency > 0 )
>          hr = l.p_dvbs_locator->put_CarrierFrequency( l_frequency );
>      if( SUCCEEDED( hr ) && l_symbolrate > 0 )
>          hr = l.p_dvbs_locator->put_SymbolRate( l_symbolrate );
> +    if( SUCCEEDED( hr ) && i_polar != BDA_POLARISATION_NOT_SET )
> +        hr = l.p_dvbs_locator->put_SignalPolarisation( i_polar );
> +    if( SUCCEEDED( hr ) && i_mod_typ != BDA_MOD_NOT_SET )
> +        hr = l.p_dvbs_locator->put_Modulation( i_mod_typ );
> +    if( SUCCEEDED( hr ) && i_hp_fec != BDA_BCC_RATE_NOT_SET )
> +        hr = l.p_dvbs_locator->put_InnerFECRate( i_hp_fec );
> +
>      if( SUCCEEDED( hr ) && l_azimuth > 0 )
>          hr = l.p_dvbs_locator->put_Azimuth( l_azimuth );
>      if( SUCCEEDED( hr ) && l_elevation > 0 )
>          hr = l.p_dvbs_locator->put_Elevation( l_elevation );
>      if( SUCCEEDED( hr ) )
> -        hr = l.p_dvbs_locator->put_OrbitalPosition( labs( l_longitude ) );
> -    if( SUCCEEDED( hr ) )
>          hr = l.p_dvbs_locator->put_WestPosition( b_west );
> -    if( SUCCEEDED( hr ) && i_polar != BDA_POLARISATION_NOT_SET )
> -        hr = l.p_dvbs_locator->put_SignalPolarisation( i_polar );
> -    if( SUCCEEDED( hr ) && l_lnb_lof1 > 0 )
> -        hr = l.p_dvbs_tuning_space->put_LowOscillator( l_lnb_lof1 );
> -    if( SUCCEEDED( hr ) && l_lnb_lof2 > 0 )
> -        hr = l.p_dvbs_tuning_space->put_HighOscillator( l_lnb_lof2 );
> -    if( SUCCEEDED( hr ) && l_lnb_slof > 0 )
> -        hr = l.p_dvbs_tuning_space->put_LNBSwitch( l_lnb_slof );
> -    if( SUCCEEDED( hr ) && i_inversion != BDA_SPECTRAL_INVERSION_NOT_SET )
> -        hr = l.p_dvbs_tuning_space->put_SpectralInversion( i_inversion );
> -    if( SUCCEEDED( hr ) && l_network_id > 0 )
> -        hr = l.p_dvbs_tuning_space->put_NetworkID( l_network_id );
> +    if( SUCCEEDED( hr ) )
> +        hr = l.p_dvbs_locator->put_OrbitalPosition( labs( l_longitude ) );
>      if( FAILED( hr ) )
>      {
>          msg_Warn( p_access, "SubmitDVBSTuneRequest: "\
> @@ -679,8 +756,14 @@ HRESULT BDAGraph::CreateTuneRequest()
>          ITuningSpaceContainer*  p_tuning_space_container;
>          IEnumTuningSpaces*      p_tuning_space_enum;
>          ITuningSpace*           p_this_tuning_space;
> +        BSTR                    bstr_name;
> +        char * psz_network_name;
> +        WCHAR * wpsz_network_name;
> +        int i_name_len;
>          localComPtr(): p_tuning_space_container(NULL),
> -            p_tuning_space_enum(NULL), p_this_tuning_space(NULL) {};
> +            p_tuning_space_enum(NULL), p_this_tuning_space(NULL),
> +            i_name_len(0), psz_network_name(NULL), wpsz_network_name(NULL),
> +            bstr_name(NULL) {};
>          ~localComPtr()
>          {
>              if( p_tuning_space_container )
> @@ -689,9 +772,31 @@ HRESULT BDAGraph::CreateTuneRequest()
>                  p_tuning_space_enum->Release();
>              if( p_this_tuning_space )
>                  p_this_tuning_space->Release();
> +            SysFreeString( bstr_name );
> +            if( wpsz_network_name ) delete wpsz_network_name;
>          }
>      } l;
>  
> +    /* We shall test for a specific Tuning space name supplied on the command
> +     * line as dvb-networkname=xxx.
> +     * For some users with multiple cards and/or multiple networks this could
> +     * be useful. This allows us to reasonably safely apply updates to the
> +     * System Tuning Space in the registry without disrupting other streams. */
> +    l.psz_network_name = var_GetNonEmptyString( p_access, "dvb-network-name" );
> +    if( l.psz_network_name )
> +    {
> +        l.i_name_len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
> +            l.psz_network_name, -1, l.wpsz_network_name, 0 );
> +        if( l.i_name_len > 0 )
> +        {
> +            l.wpsz_network_name = new WCHAR[l.i_name_len];
> +            MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, l.psz_network_name, -1, 
> +                l.wpsz_network_name, l.i_name_len );
> +            msg_Dbg( p_access, "CreateTuneRequest: Find Tuning Space: %S",
> +                l.wpsz_network_name );
> +        }
> +    }
> +
>      /* A Tuning Space may already have been set up. If it is for the same
>       * network type then all is well. Otherwise, reset the Tuning Space and get
>       * a new one */
> @@ -701,13 +806,26 @@ HRESULT BDAGraph::CreateTuneRequest()
>          if( FAILED( hr ) ) guid_this_network_type = GUID_NULL;
>          if( guid_this_network_type == guid_network_type )
>          {
> -            return S_OK;
> -        }
> -        else
> -        {
> -            p_tuning_space->Release();
> -            p_tuning_space = NULL;
> +            hr = p_tuning_space->get_UniqueName( &l.bstr_name );
> +            if( FAILED( hr ) )
> +            {
> +                msg_Warn( p_access, "CreateTuneRequest: "\
> +                    "Cannot get UniqueName for Tuning Space: hr=0x%8lx", hr );
> +                return hr;
> +            }
> +            /* Test for a specific Tuning space name supplied on the command
> +             * line as dvb-networkname=xxx */
> +            if( l.i_name_len == 0 ||
> +                lstrcmpW( l.wpsz_network_name, l.bstr_name ) == 0 )
> +            {
> +                msg_Dbg( p_access, "CreateTuneRequest: Using Tuning Space: %S",
> +                    l.bstr_name );
> +                return S_OK;
> +            }
>          }
> +        /* else */
> +        p_tuning_space->Release();
> +        p_tuning_space = NULL;
>      }
>  
>      /* Force use of the first available Tuner Device during Build */
> @@ -736,7 +854,7 @@ HRESULT BDAGraph::CreateTuneRequest()
>      while( l.p_tuning_space_enum->Next( 1, &l.p_this_tuning_space, NULL ) ==
>          S_OK )
>      {
> -       hr = l.p_this_tuning_space->get__NetworkType( &guid_this_network_type );
> +        hr = l.p_this_tuning_space->get__NetworkType( &guid_this_network_type );
>  
>          /* GUID_NULL means a non-BDA network was found e.g analog
>           * Ignore failures and non-BDA networks and keep looking */
> @@ -752,23 +870,102 @@ HRESULT BDAGraph::CreateTuneRequest()
>                      "Cannot QI Tuning Space: hr=0x%8lx", hr );
>                  return hr;
>              }
> -            hr = p_tuning_space->CreateTuneRequest( &p_tune_request );
> +            hr = p_tuning_space->get_UniqueName( &l.bstr_name );
>              if( FAILED( hr ) )
>              {
>                  msg_Warn( p_access, "CreateTuneRequest: "\
> -                    "Cannot Create Tune Request: hr=0x%8lx", hr );
> +                    "Cannot get UniqueName for Tuning Space: hr=0x%8lx", hr );
> +                return hr;
> +            }
> +
> +            /* Test for a specific Tuning space name supplied on the command
> +             * line as dvb-networkname=xxx */
> +            if( l.i_name_len == 0 ||
> +                lstrcmpW( l.wpsz_network_name, l.bstr_name ) == 0 )
> +            {
> +                msg_Dbg( p_access, "CreateTuneRequest: Using Tuning Space: %S",
> +                    l.bstr_name );
> +                hr = p_tuning_space->CreateTuneRequest( &p_tune_request );
> +                if( FAILED( hr ) )
> +                    msg_Warn( p_access, "CreateTuneRequest: "\
> +                        "Cannot Create Tune Request: hr=0x%8lx", hr );
>                  return hr;
>              }
> -            return hr;
>          }
>      }
> -    hr = E_FAIL;
> -    if( FAILED( hr ) )
> +    /* No tune request was found. If the create-name parameter was set then
> +     * create a tuning space. By rights should use the same name used in
> +     * network-name
> +     * Also would be nice to copy a tuning space but we only come here if we do
> +     * not find any. */
> +    l.psz_network_name = var_GetNonEmptyString( p_access, "dvb-create-name" );
> +    if( !l.psz_network_name )
>      {
> +        hr = E_FAIL;
>          msg_Warn( p_access, "CreateTuneRequest: "\
>              "Cannot find a suitable System Tuning Space: hr=0x%8lx", hr );
>          return hr;
>      }
> +
> +    /* Need to use DVBSTuningSpace for DVB-S and ATSCTuningSpace for ATSC */
> +    VARIANT var_id;
> +    CLSID cls_tuning_space;
> +
> +    if( IsEqualCLSID( guid_network_type, CLSID_ATSCNetworkProvider ) )
> +        cls_tuning_space = CLSID_ATSCTuningSpace;
> +    if( IsEqualCLSID( guid_network_type, CLSID_DVBTNetworkProvider ) )
> +        cls_tuning_space = CLSID_DVBTuningSpace;
> +    if( IsEqualCLSID( guid_network_type, CLSID_DVBCNetworkProvider ) )
> +        cls_tuning_space = CLSID_DVBTuningSpace;
> +    if( IsEqualCLSID( guid_network_type, CLSID_DVBSNetworkProvider ) )
> +        cls_tuning_space = CLSID_DVBSTuningSpace;
> +
> +    if( l.wpsz_network_name ) delete l.wpsz_network_name;
> +    l.i_name_len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
> +        l.psz_network_name, -1, l.wpsz_network_name, 0 );
> +    if( l.i_name_len > 0 )
> +    {
> +        l.wpsz_network_name = new WCHAR[l.i_name_len];
> +        MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, l.psz_network_name, -1, 
> +            l.wpsz_network_name, l.i_name_len );
> +        if( l.bstr_name )
> +            SysFreeString( l.bstr_name );
> +        l.bstr_name = SysAllocString( l.wpsz_network_name );
> +        msg_Dbg( p_access, "CreateTuneRequest: Create Tuning Space: %S",
> +             l.bstr_name );
> +    }
> +    hr = ::CoCreateInstance( cls_tuning_space, 0, CLSCTX_INPROC,
> +         IID_ITuningSpace, (void**)&p_tuning_space );
> +    if( FAILED( hr ) )
> +        msg_Warn( p_access, "CreateTuneRequest: "\
> +            "Cannot CoCreate new TuningSpace: hr=0x%8lx", hr );
> +    if( SUCCEEDED( hr ) )
> +        hr = p_tuning_space->put__NetworkType( guid_network_type );
> +    if( FAILED( hr ) )
> +        msg_Warn( p_access, "CreateTuneRequest: "\
> +            "Cannot Put Network Type: hr=0x%8lx", hr );
> +    if( SUCCEEDED( hr ) )
> +        hr = p_tuning_space->put_UniqueName( l.bstr_name );
> +    if( FAILED( hr ) )
> +        msg_Warn( p_access, "CreateTuneRequest: "\
> +            "Cannot Put Unique Name: hr=0x%8lx", hr );
> +    if( SUCCEEDED( hr ) )
> +        hr = p_tuning_space->put_FriendlyName( l.bstr_name );
> +    if( FAILED( hr ) )
> +        msg_Warn( p_access, "CreateTuneRequest: "\
> +            "Cannot Put Friendly Name: hr=0x%8lx", hr );
> +    if( SUCCEEDED( hr ) )
> +        hr = l.p_tuning_space_container->Add( p_tuning_space, &var_id );
> +    if( FAILED( hr ) )
> +    {
> +        msg_Warn( p_access, "CreateTuneRequest: "\
> +            "Cannot Create new TuningSpace: hr=0x%8lx", hr );
> +        return hr;
> +    }
> +    hr = p_tuning_space->CreateTuneRequest( &p_tune_request );
> +    if( FAILED( hr ) )
> +        msg_Warn( p_access, "CreateTuneRequest: "\
> +            "Cannot Create Tune Request: hr=0x%8lx", hr );
>      return hr;
>  }
>  
> @@ -781,7 +978,49 @@ HRESULT BDAGraph::Build()
>  {
>      HRESULT hr = S_OK;
>      long l_capture_used, l_tif_used;
> +    VARIANT l_tuning_space_id;
>      AM_MEDIA_TYPE grabber_media_type;
> +    class localComPtr
> +    {
> +        public:
> +        ITuningSpaceContainer*  p_tuning_space_container;
> +        localComPtr(): p_tuning_space_container(NULL) {};
> +        ~localComPtr()
> +        {
> +            if( p_tuning_space_container )
> +                p_tuning_space_container->Release();
> +        }
> +    } l;
> +
> +    /* Get the SystemTuningSpaces container to save the Tuning space */
> +    l_tuning_space_id.vt = VT_I4;
> +    l_tuning_space_id.lVal = 0L;
> +    hr = ::CoCreateInstance( CLSID_SystemTuningSpaces, 0, CLSCTX_INPROC,
> +        IID_ITuningSpaceContainer, (void**)&l.p_tuning_space_container );
> +    if( FAILED( hr ) )
> +    {
> +        msg_Warn( p_access, "Build: "\
> +            "Cannot CoCreate SystemTuningSpaces: hr=0x%8lx", hr );
> +        return hr;
> +    }
> +    hr = l.p_tuning_space_container->FindID( p_tuning_space,
> +        &l_tuning_space_id.lVal );
> +    if( FAILED( hr ) )
> +    {
> +        msg_Warn( p_access, "Build: "\
> +            "Cannot Find Tuning Space ID: hr=0x%8lx", hr );
> +        return hr;
> +    }
> +    msg_Dbg( p_access, "Build: Using Tuning Space ID %d",
> +        l_tuning_space_id.lVal );
> +    hr = l.p_tuning_space_container->put_Item( l_tuning_space_id,
> +        p_tuning_space );
> +    if( FAILED( hr ) )
> +    {
> +        msg_Warn( p_access, "Build: "\
> +            "Cannot save Tuning Space: hr=0x%8lx", hr );
> +        return hr;
> +    }
>  
>      /* If we have already have a filter graph, rebuild it*/
>      Destroy();
> @@ -994,7 +1233,7 @@ HRESULT BDAGraph::Build()
>  * On subsequent calls, this can be used to start from that point to find
>  * another match.
>  * This is used when the graph does not run because a tuner device is in use so
> -* another one needs to be slected.
> +* another one needs to be selected.
>  ******************************************************************************/
>  HRESULT BDAGraph::FindFilter( REFCLSID clsid, long* i_moniker_used,
>      IBaseFilter* p_upstream, IBaseFilter** p_p_downstream )
> -- 
> 1.5.4.3
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> http://mailman.videolan.org/listinfo/vlc-devel

-- 
Best Regards,

-- 
Jean-Baptiste Kempf
http://www.jbkempf.com/



More information about the vlc-devel mailing list