调谐(和扫描)ATSC频道的正确方法是什么?

时间:2014-02-06 14:56:34

标签: visual-c++ directshow

我试图了解大多数应用程序如何执行ATSC调整。假设我已经通过

获得了ATSC调谐请求
ITuneRequest *pITuneRequest = NULL;
pATSCTuningSpace->CreateTuneRequest(&pTuneRequest)`

似乎有三种流行的方法:

1)构建所有major.minor频道的列表并将它们映射到物理频道,然后在请求major.minor时调谐到该物理频道。这张地图是通过以下代码构建的:

for i = 2 to 69
    tune_to_physical_channel(i)
    if (tuner_has_lock())
         add_to_known_list(i, major_of(i), minor_of(i));
next

UI仅向用户显示major.minor频道列表。

我在这里看到的问题是我似乎得到了重复的映射;有时候我调整物理频道30并看到43.1,有时我调整它,但是看到43.2!为什么会发生这种情况?

2)直接调到major.minor。允许直接输入主要和次要频道,并且根本不使用物理频道。我用几个本地频道试过这个:8.1,8.2,43.1,43.2,43.3,49.1,49.2。

8.1和8.2完美调整,如果构建一个调优请求并设置如下参数:

IATSCChannelTuneRequest* pIATSCChannelTuneRequest = NULL;
IATSCLocator *pIATSCLocator = NULL;
hr = pITuneRequest->QueryInterface( IID_IATSCChannelTuneRequest, 
            (void**)&pIATSCChannelTuneRequest); 
pIATSCChannelTuneRequest->put_Channel(lMajorChannel);
pIATSCChannelTuneRequest->put_MinorChannel(lMinorChannel);
::CoCreateInstance( CLSID_ATSCLocator, 0, CLSCTX_INPROC, IID_IATSCLocator,       
            (void**)&pIATSCLocator);
pIATSCLocator->put_CarrierFrequency(-1);
pIATSCLocator->put_SymbolRate(-1);
pIATSCLocator->put_PhysicalChannel(-1);
pIATSCChannelTuneRequest->put_Locator(pIATSCLocator);

其他频道从不调整。为什么?其他应用程序(如WinTV)可以正确调整所有内容。

3)通过扫描给定地理区域的已知频率列表来构建major.minor频道列表。一些应用程序使用基于位置的已知频率such as this onethis onethis one来自行播种。请注意,所有这些都是美国特定的。

我还没有真正尝试过,但我的计划是提供一个列表,并构建一个major.minor - >的映射。频率,类似于#1:

foreach (frequency f in frequency_array)
    tune_to_frequency (f)
    if (tuner_has_lock())
         add_to_known_list(f, major_of(f), minor_of(f));
next

所以问题再次出现:应用程序如何实现ATSC频道的扫描/调整?

1 个答案:

答案 0 :(得分:2)

简而言之,我们的解决方案是不支持扫描,并采用第二种方法:直接调到Major.Minor。在我的原帖中,我注意到这只适用于我所在地区的8.1和8.2。

事实证明,设置ChannelMinorChannel是不够的。我需要cross-reference each major channel并在调整时设置PhysicalChannel(RFChannel)。因此,为了调整,我们为所有请求设置了ChannelMinorChannelPhysicalChannel

我在CarrierFrequency中将所有其他属性(包括TuneRequest)设置为-1。

此外,我还发现了另外两个用于查找的资源:

http://transition.fcc.gov/mb/engineering/dtvmaps/
http://www.tvfool.com

作为旁注,为了我们的应用目的,要求用户使用antennaweb.org查找物理(RF)频道是合理的。如果用户手头没有这些信息,我不确定你是如何使用我们的方法的。

相关问题