North America cable network.
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
"dvb-s", "dvbs", /* Satellite */
"dvb-c", "dvbc", /* Cable */
"dvb-t", "dvbt", /* Terrestrial */
- "atsc" ) /* Atsc */
+ "atsc", /* Atsc */
+ "cqam",) /* Clear QAM */
set_callbacks( Open, Close )
vlc_module_end ()
{
i_ret = dvb_SubmitATSCTuneRequest( p_access );
}
+ if( strncmp( p_access->psz_access, "cqam", 4 ) == 0 )
+ {
+ i_ret = dvb_SubmitCQAMTuneRequest( p_access );
+ }
if( !strcmp( p_access->psz_access, "dvb" ) )
{
/* Try to auto detect */
i_ret = dvb_SubmitDVBTTuneRequest( p_access );
if( i_ret )
i_ret = dvb_SubmitATSCTuneRequest( p_access );
+ if( i_ret )
+ i_ret = dvb_SubmitCQAMTuneRequest( p_access );
}
if( !i_ret )
void dvb_newBDAGraph( access_t* p_access );
void dvb_deleteBDAGraph( access_t* p_access );
+int dvb_SubmitCQAMTuneRequest( access_t* p_access );
int dvb_SubmitATSCTuneRequest( access_t* p_access );
int dvb_SubmitDVBTTuneRequest( access_t* p_access );
int dvb_SubmitDVBCTuneRequest( access_t* p_access );
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+class IDigitalCableTuneRequest;
+class IDigitalCableLocator;
class IATSCChannelTuneRequest;
class IATSCLocator;
class IBDA_DeviceControl;
virtual HRESULT __stdcall put_MinorChannel( long l_minor_channel )=0;
};
+class IDigitalCableTuneRequest : public IATSCChannelTuneRequest
+{
+public:
+ virtual HRESULT __stdcall get_MajorChannel( long* pl_major_channel )=0;
+ virtual HRESULT __stdcall put_MajorChannel( long l_major_channel )=0;
+ virtual HRESULT __stdcall get_SourceID( long* pl_source_id )=0;
+ virtual HRESULT __stdcall put_SourceID( long l_source_id )=0;
+};
+
class IDVBTuneRequest : public ITuneRequest
{
public:
virtual HRESULT __stdcall put_TSID( long l_tsid )=0;
};
+class IATSCLocator2 : public IATSCLocator
+{
+public:
+ virtual HRESULT __stdcall get_ProgramNumber( long* pl_prog_number )=0;
+ virtual HRESULT __stdcall put_ProgramNumber( long l_prog_number )=0;
+};
+
+class IDigitalCableLocator : public IATSCLocator2
+{
+public:
+};
+
class IDVBCLocator : public ILocator
{
public:
const CLSID CLSID_NetworkProvider =
{0xB2F3A67C,0x29DA,0x4C78,{0x88,0x31,0x09,0x1E,0xD5,0x09,0xA4,0x75}};
+/* Win 7 - Digital Cable - North America Clear QAM */
+const CLSID CLSID_DigitalCableTuningSpace =
+ {0xD9BB4CEE,0xB87A,0x47F1,{0xAC,0xF1,0xB0,0x8D,0x9C,0x78,0x13,0xFC}};
+const CLSID CLSID_DigitalCableLocator =
+ {0x03C06416,0xD127,0x407A,{0xAB,0x4C,0xFD,0xD2,0x79,0xAB,0xBE,0x5D}};
+const CLSID CLSID_DigitalCableNetworkType =
+ {0x143827AB,0xF77B,0x498d,{0x81,0xCA,0x5A,0x00,0x7A,0xEC,0x28,0xBF}};
+const IID IID_IDigitalCableTuneRequest =
+ {0xBAD7753B,0x6B37,0x4810,{0xAE,0x57,0x3C,0xE0,0xC4,0xA9,0xE6,0xCB}};
+const IID IID_IDigitalCableLocator =
+ {0x48F66A11,0x171A,0x419A,{0x95,0x25,0xBE,0xEE,0xCD,0x51,0x58,0x4C}};
+
extern const CLSID CLSID_ATSCLocator;
extern const CLSID CLSID_ATSCNetworkProvider;
extern const CLSID CLSID_ATSCTuningSpace;
delete p_access->p_sys->p_bda_module;
};
+ int dvb_SubmitCQAMTuneRequest( access_t* p_access )
+ {
+ if( p_access->p_sys->p_bda_module )
+ return p_access->p_sys->p_bda_module->SubmitCQAMTuneRequest();
+ return VLC_EGENERIC;
+ };
+
int dvb_SubmitATSCTuneRequest( access_t* p_access )
{
if( p_access->p_sys->p_bda_module )
CoUninitialize();
}
+/*****************************************************************************
+* Submit an Clear QAM Tune Request (US Cable Shit)
+*****************************************************************************/
+int BDAGraph::SubmitCQAMTuneRequest()
+{
+ HRESULT hr = S_OK;
+ class localComPtr
+ {
+ public:
+ IDigitalCableTuneRequest* p_cqam_tune_request;
+ IDigitalCableLocator* p_cqam_locator;
+ localComPtr(): p_cqam_tune_request(NULL), p_cqam_locator(NULL) {};
+ ~localComPtr()
+ {
+ if( p_cqam_tune_request )
+ p_cqam_tune_request->Release();
+ if( p_cqam_locator )
+ p_cqam_locator->Release();
+ }
+ } l;
+ long l_minor_channel, l_physical_channel, l_frequency;
+
+ l_physical_channel = var_GetInteger( p_access, "dvb-physical-channel" );
+ l_minor_channel = var_GetInteger( p_access, "dvb-minor-channel" );
+ l_frequency = var_GetInteger( p_access, "dvb-frequency" );
+
+ guid_network_type = CLSID_DigitalCableNetworkType;
+ hr = CreateTuneRequest();
+ if( FAILED( hr ) )
+ {
+ msg_Warn( p_access, "SubmitCQAMTuneRequest: "\
+ "Cannot create Tuning Space: hr=0x%8lx", hr );
+ return VLC_EGENERIC;
+ }
+
+ hr = p_tune_request->QueryInterface( IID_IDigitalCableTuneRequest,
+ (void**)&l.p_cqam_tune_request );
+ if( FAILED( hr ) )
+ {
+ msg_Warn( p_access, "SubmitCQAMTuneRequest: "\
+ "Cannot QI for IDigitalCableTuneRequest: hr=0x%8lx", hr );
+ return VLC_EGENERIC;
+ }
+ hr = ::CoCreateInstance( CLSID_DigitalCableLocator, 0, CLSCTX_INPROC,
+ IID_IDigitalCableLocator, (void**)&l.p_cqam_locator );
+ if( FAILED( hr ) )
+ {
+ msg_Warn( p_access, "SubmitCQAMTuneRequest: "\
+ "Cannot create the CQAM locator: hr=0x%8lx", hr );
+ return VLC_EGENERIC;
+ }
+
+ hr = S_OK;
+ if( SUCCEEDED( hr ) && l_physical_channel > 0 )
+ hr = l.p_cqam_locator->put_PhysicalChannel( l_physical_channel );
+ if( SUCCEEDED( hr ) && l_frequency > 0 )
+ hr = l.p_cqam_locator->put_CarrierFrequency( l_frequency );
+ if( SUCCEEDED( hr ) && l_minor_channel > 0 )
+ hr = l.p_cqam_tune_request->put_MinorChannel( l_minor_channel );
+ if( FAILED( hr ) )
+ {
+ msg_Warn( p_access, "SubmitCQAMTuneRequest: "\
+ "Cannot set tuning parameters: hr=0x%8lx", hr );
+ return VLC_EGENERIC;
+ }
+
+ hr = p_tune_request->put_Locator( l.p_cqam_locator );
+ if( FAILED( hr ) )
+ {
+ msg_Warn( p_access, "SubmitCQAMTuneRequest: "\
+ "Cannot put the locator: hr=0x%8lx", hr );
+ return VLC_EGENERIC;
+ }
+
+ /* Build and Run the Graph. If a Tuner device is in use the graph will
+ * fail to run. Repeated calls to build will check successive tuner
+ * devices */
+ do
+ {
+ hr = Build();
+ if( FAILED( hr ) )
+ {
+ msg_Warn( p_access, "SubmitCQAMTuneRequest: "\
+ "Cannot Build the Graph: hr=0x%8lx", hr );
+ return VLC_EGENERIC;
+ }
+ hr = Start();
+ }
+ while( hr != S_OK );
+
+ return VLC_SUCCESS;
+}
+
/*****************************************************************************
* Submit an ATSC Tune Request
*****************************************************************************/
virtual ~BDAGraph();
/* */
+ int SubmitCQAMTuneRequest();
int SubmitATSCTuneRequest();
int SubmitDVBTTuneRequest();
int SubmitDVBCTuneRequest();