gpt4 book ai didi

visual-c++ - 调谐(和扫描)ATSC channel 的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-04 04:32:30 26 4
gpt4 key购买 nike

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

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

目前流行的方法似乎有以下三种:

1) 建立一个包含所有 major.minor channel 的列表并将它们映射到一个物理 channel ,然后在请求 major.minor 时调到该物理 channel 。该 map 是通过如下代码构建的:

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 仅向用户显示主要 channel 和次要 channel 的列表。

我在这里看到的问题是我似乎得到了重复的映射;有时我将物理 channel 调到 30 并看到 43.1,而其他时候调到物理 channel 却看到 43.2!为什么会这样?

2) 直接调到 major.minor。 允许直接输入主要和次要 channel ,并且根本不使用物理 channel 。我已经使用几个本地 channel 尝试过此操作: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);

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

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

我还没有真正尝试过,但我的计划是提供一个列表,并构建一个 major.minor -> frequency 的映射,类似于#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 channel 的扫描/调谐?

最佳答案

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

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

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

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

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

附带说明一下,出于我们的应用目的,要求用户使用 antennaweb.org 查找物理 (RF) 信道是合理的。我不确定如果用户手头没有这些信息,您还会如何使用我们的方法。

关于visual-c++ - 调谐(和扫描)ATSC channel 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21606254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com