Commit 39e9eba7 authored by Manol Manolov's avatar Manol Manolov Committed by Jean-Baptiste Kempf

Add Clear QAM to BDA

North America cable network.
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 539dfc84
...@@ -297,7 +297,8 @@ vlc_module_begin () ...@@ -297,7 +297,8 @@ vlc_module_begin ()
"dvb-s", "dvbs", /* Satellite */ "dvb-s", "dvbs", /* Satellite */
"dvb-c", "dvbc", /* Cable */ "dvb-c", "dvbc", /* Cable */
"dvb-t", "dvbt", /* Terrestrial */ "dvb-t", "dvbt", /* Terrestrial */
"atsc" ) /* Atsc */ "atsc", /* Atsc */
"cqam",) /* Clear QAM */
set_callbacks( Open, Close ) set_callbacks( Open, Close )
vlc_module_end () vlc_module_end ()
...@@ -387,6 +388,10 @@ static int Open( vlc_object_t *p_this ) ...@@ -387,6 +388,10 @@ static int Open( vlc_object_t *p_this )
{ {
i_ret = dvb_SubmitATSCTuneRequest( p_access ); 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" ) ) if( !strcmp( p_access->psz_access, "dvb" ) )
{ {
/* Try to auto detect */ /* Try to auto detect */
...@@ -398,6 +403,8 @@ static int Open( vlc_object_t *p_this ) ...@@ -398,6 +403,8 @@ static int Open( vlc_object_t *p_this )
i_ret = dvb_SubmitDVBTTuneRequest( p_access ); i_ret = dvb_SubmitDVBTTuneRequest( p_access );
if( i_ret ) if( i_ret )
i_ret = dvb_SubmitATSCTuneRequest( p_access ); i_ret = dvb_SubmitATSCTuneRequest( p_access );
if( i_ret )
i_ret = dvb_SubmitCQAMTuneRequest( p_access );
} }
if( !i_ret ) if( !i_ret )
......
...@@ -63,6 +63,7 @@ typedef struct BDAGraph BDAGraph; ...@@ -63,6 +63,7 @@ typedef struct BDAGraph BDAGraph;
void dvb_newBDAGraph( access_t* p_access ); void dvb_newBDAGraph( access_t* p_access );
void dvb_deleteBDAGraph( 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_SubmitATSCTuneRequest( access_t* p_access );
int dvb_SubmitDVBTTuneRequest( access_t* p_access ); int dvb_SubmitDVBTTuneRequest( access_t* p_access );
int dvb_SubmitDVBCTuneRequest( access_t* p_access ); int dvb_SubmitDVBCTuneRequest( access_t* p_access );
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/ *****************************************************************************/
class IDigitalCableTuneRequest;
class IDigitalCableLocator;
class IATSCChannelTuneRequest; class IATSCChannelTuneRequest;
class IATSCLocator; class IATSCLocator;
class IBDA_DeviceControl; class IBDA_DeviceControl;
...@@ -391,6 +393,15 @@ public: ...@@ -391,6 +393,15 @@ public:
virtual HRESULT __stdcall put_MinorChannel( long l_minor_channel )=0; 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 class IDVBTuneRequest : public ITuneRequest
{ {
public: public:
...@@ -435,6 +446,18 @@ public: ...@@ -435,6 +446,18 @@ public:
virtual HRESULT __stdcall put_TSID( long l_tsid )=0; 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 class IDVBCLocator : public ILocator
{ {
public: public:
...@@ -919,6 +942,18 @@ extern "C" { ...@@ -919,6 +942,18 @@ extern "C" {
const CLSID CLSID_NetworkProvider = const CLSID CLSID_NetworkProvider =
{0xB2F3A67C,0x29DA,0x4C78,{0x88,0x31,0x09,0x1E,0xD5,0x09,0xA4,0x75}}; {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_ATSCLocator;
extern const CLSID CLSID_ATSCNetworkProvider; extern const CLSID CLSID_ATSCNetworkProvider;
extern const CLSID CLSID_ATSCTuningSpace; extern const CLSID CLSID_ATSCTuningSpace;
......
...@@ -41,6 +41,13 @@ extern "C" { ...@@ -41,6 +41,13 @@ extern "C" {
delete p_access->p_sys->p_bda_module; 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 ) int dvb_SubmitATSCTuneRequest( access_t* p_access )
{ {
if( p_access->p_sys->p_bda_module ) if( p_access->p_sys->p_bda_module )
...@@ -157,6 +164,99 @@ BDAGraph::~BDAGraph() ...@@ -157,6 +164,99 @@ BDAGraph::~BDAGraph()
CoUninitialize(); 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 * Submit an ATSC Tune Request
*****************************************************************************/ *****************************************************************************/
......
...@@ -78,6 +78,7 @@ public: ...@@ -78,6 +78,7 @@ public:
virtual ~BDAGraph(); virtual ~BDAGraph();
/* */ /* */
int SubmitCQAMTuneRequest();
int SubmitATSCTuneRequest(); int SubmitATSCTuneRequest();
int SubmitDVBTTuneRequest(); int SubmitDVBTTuneRequest();
int SubmitDVBCTuneRequest(); int SubmitDVBCTuneRequest();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment