Skip to content

Commit

Permalink
TVTest.tuner.ini で各チューナーの仕様を定義してBonDriver設定の初期値などに利用するようにした
Browse files Browse the repository at this point in the history
  • Loading branch information
DBCTRADO committed Mar 2, 2015
1 parent 243f176 commit f3e90c7
Show file tree
Hide file tree
Showing 11 changed files with 184 additions and 54 deletions.
31 changes: 31 additions & 0 deletions data/TVTest.tuner.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
; TVTest チューナー仕様定義ファイル
;
; 各チューナーの仕様を定義します。
; 通常とは異なる動作を行う BonDriver の仕様を定義しておくと、
; 設定ダイアログの「BonDriver 設定」の初期値の決定などに利用されます。
; チューナー仕様は以下の形式で定義します。
;
; ファイル名=属性
;
; ファイル名はワイルドカードとして * と ? を使用できます。
; 属性は以下のものがあります。
;
; network ネットワーク
; file ファイル
; virtual 仮想(特定の機器を対象としないもの)
; volatile クライアント側が意図しないストリーム変更があるもの
; no-enum-channel チャンネル列挙の抑止(チューナーを開かないとチャンネル列挙できないもの)
;
; | で区切って複数の属性を指定できます。

[TunerSpec]
BonDriver_UDP.dll=network
BonDriver_TCP.dll=network
BonDriver_File.dll=file
BonDriver_Pipe.dll=file
BonDriver_Spinel*.dll=virtual|volatile|no-enum-channel
BonDriver_Friio*.dll=no-enum-channel
BonDriver_Proxy*.dll=virtual|volatile
BonDriver_RDCT*.dll=virtual|volatile
BonDriver_RemoteTuner*.dll=virtual|volatile
BonDriver_VTPT*.dll=virtual|volatile
1 change: 1 addition & 0 deletions doc/TVTest.txt
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
�ETVTest.exe �{��
�ETVTest.style.ini �X�^�C���ݒ�t�@�C��
�ETVTest.search.ini �����ݒ�t�@�C��
�ETVTest.tuner.ini �`���[�i�[�d�l��`�t�@�C��
�ETVTest.chm �w���v�t�@�C��
�ETVTest_Image.dll �摜�ۑ��p DLL
�ETVTest_Logo.bmp ���S�摜
Expand Down
10 changes: 10 additions & 0 deletions src/AppMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -731,6 +731,16 @@ int CAppMain::Main(HINSTANCE hInstance,LPCTSTR pszCmdLine,int nCmdShow)
CoreEngine.GetDriverDirectory(szDirectory,lengthof(szDirectory));
DriverManager.Find(szDirectory);
}
// チューナー仕様定義の読み込み
{
TCHAR szTunerSpecFileName[MAX_PATH];
::GetModuleFileName(nullptr,szTunerSpecFileName,lengthof(szTunerSpecFileName));
::PathRenameExtension(szTunerSpecFileName,TEXT(".tuner.ini"));
if (::PathFileExists(szTunerSpecFileName)) {
AddLog(TEXT("チューナー仕様定義を \"%s\" から読み込みます..."),szTunerSpecFileName);
DriverManager.LoadTunerSpec(szTunerSpecFileName);
}
}
DriverOptions.Initialize(&DriverManager);

// 初期設定ダイアログを表示するか
Expand Down
14 changes: 0 additions & 14 deletions src/CoreEngine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -367,20 +367,6 @@ bool CCoreEngine::IsTunerOpen() const
}


bool CCoreEngine::IsNetworkDriverFileName(LPCTSTR pszFileName)
{
if (pszFileName==NULL)
return false;

LPCTSTR pszName=::PathFindFileName(pszFileName);

if (IsEqualFileName(pszName,TEXT("BonDriver_UDP.dll"))
|| IsEqualFileName(pszName,TEXT("BonDriver_TCP.dll")))
return true;
return false;
}


bool CCoreEngine::SetPacketBufferLength(DWORD BufferLength)
{
return m_DtvEngine.m_MediaViewer.SetBufferSize(BufferLength);
Expand Down
1 change: 0 additions & 1 deletion src/CoreEngine.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ class CCoreEngine : public CBonErrorHandler
bool IsUDPDriver() const { return m_DriverType==DRIVER_UDP; }
bool IsTCPDriver() const { return m_DriverType==DRIVER_TCP; }
bool IsNetworkDriver() const { return IsUDPDriver() || IsTCPDriver(); }
static bool IsNetworkDriverFileName(LPCTSTR pszFileName);

bool SetPacketBufferLength(DWORD BufferLength);
bool GetPacketBuffering() const { return m_fPacketBuffering; }
Expand Down
78 changes: 74 additions & 4 deletions src/DriverManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,12 @@ bool CDriverInfo::LoadTuningSpaceList(LoadTuningSpaceListMode Mode)
} else if (Mode==LOADTUNINGSPACE_USEDRIVER) {
fUseDriver=true;
} else {
// チューナを開かずにチューニング空間とチャンネルを取得できない
// ドライバはロードしないようにする
fUseDriver=!::PathMatchSpec(pszFileName,TEXT("BonDriver_Spinel*.dll"))
&& !::PathMatchSpec(pszFileName,TEXT("BonDriver_Friio*.dll"));
CDriverManager::TunerSpec Spec;
if (App.DriverManager.GetTunerSpec(pszFileName,&Spec)
&& (Spec.Flags & CDriverManager::TunerSpec::FLAG_NOENUMCHANNEL)!=0)
fUseDriver=false;
else
fUseDriver=true;
}

if (!m_fChannelFileLoaded) {
Expand Down Expand Up @@ -300,3 +302,71 @@ bool CDriverManager::GetAllServiceList(CChannelList *pList) const

return true;
}


bool CDriverManager::LoadTunerSpec(LPCTSTR pszFileName)
{
CSettings Settings;

if (!Settings.Open(pszFileName,CSettings::OPEN_READ)
|| !Settings.SetSection(TEXT("TunerSpec")))
return false;

CSettings::EntryList Entries;
if (!Settings.GetEntries(&Entries))
return false;

for (auto it=Entries.begin();it!=Entries.end();++it) {
TunerSpecInfo Info;

Info.TunerMask=it->Name;
Info.Spec.Flags=0;

std::vector<TVTest::String> Attributes;
if (TVTest::StringUtility::Split(it->Value,TEXT("|"),&Attributes)) {
static const struct {
LPCTSTR pszName;
unsigned int Flag;
} FlagList[] = {
{TEXT("network"), TunerSpec::FLAG_NETWORK},
{TEXT("file"), TunerSpec::FLAG_FILE},
{TEXT("virtual"), TunerSpec::FLAG_VIRTUAL},
{TEXT("volatile"), TunerSpec::FLAG_VOLATILE},
{TEXT("no-enum-channel"), TunerSpec::FLAG_NOENUMCHANNEL},
};
for (int i=0;i<lengthof(FlagList);i++) {
for (auto itAttr=Attributes.begin();itAttr!=Attributes.end();++itAttr) {
TVTest::StringUtility::Trim(*itAttr);
if (TVTest::StringUtility::CompareNoCase(*itAttr,FlagList[i].pszName)==0) {
Info.Spec.Flags|=FlagList[i].Flag;
break;
}
}
}
}

m_TunerSpecList.push_back(Info);
}

return true;
}


bool CDriverManager::GetTunerSpec(LPCTSTR pszTunerName,TunerSpec *pSpec) const
{
if (IsStringEmpty(pszTunerName) || pSpec==nullptr)
return false;

LPCTSTR pszName=::PathFindFileName(pszTunerName);
if (pszName[0]==_T('\0'))
return false;

for (auto it=m_TunerSpecList.begin();it!=m_TunerSpecList.end();++it) {
if (::PathMatchSpec(it->TunerMask.c_str(),pszName)) {
*pSpec=it->Spec;
return true;
}
}

return false;
}
23 changes: 23 additions & 0 deletions src/DriverManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,19 @@ class CDriverInfo
class CDriverManager
{
public:
struct TunerSpec
{
enum {
FLAG_NETWORK = 0x00000001U,
FLAG_FILE = 0x00000002U,
FLAG_VIRTUAL = 0x00000004U,
FLAG_VOLATILE = 0x00000008U,
FLAG_NOENUMCHANNEL = 0x00000010U
};

unsigned int Flags;
};

CDriverManager();
~CDriverManager();
void Clear();
Expand All @@ -55,9 +68,19 @@ class CDriverManager
int FindByFileName(LPCTSTR pszFileName) const;
bool GetAllServiceList(CChannelList *pList) const;

bool LoadTunerSpec(LPCTSTR pszFileName);
bool GetTunerSpec(LPCTSTR pszTunerName,TunerSpec *pSpec) const;

private:
struct TunerSpecInfo
{
TVTest::String TunerMask;
TunerSpec Spec;
};

std::vector<CDriverInfo*> m_DriverList;
TVTest::String m_BaseDirectory;
std::vector<TunerSpecInfo> m_TunerSpecList;
};


Expand Down
38 changes: 16 additions & 22 deletions src/DriverOptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,6 @@ static char THIS_FILE[]=__FILE__;



static bool IsBonDriverSpinel(LPCTSTR pszFileName)
{
return ::StrStrI(::PathFindFileName(pszFileName),TEXT("Spinel"))!=NULL;
}

static bool IsFileBonDriver(LPCTSTR pszFileName)
{
return ::PathMatchSpec(pszFileName,TEXT("*_File.dll"))
|| ::PathMatchSpec(pszFileName,TEXT("*_Pipe.dll"));
}




class CDriverSettings
{
TVTest::String m_FileName;
Expand Down Expand Up @@ -893,13 +879,21 @@ CDriverOptions::BonDriverOptions::BonDriverOptions()


CDriverOptions::BonDriverOptions::BonDriverOptions(LPCTSTR pszBonDriverName)
: fNoSignalLevel(GetAppClass().CoreEngine.IsNetworkDriverFileName(pszBonDriverName)
|| IsFileBonDriver(pszBonDriverName))
, fIgnoreInitialStream(!IsBonDriverSpinel(pszBonDriverName))
, fPurgeStreamOnChannelChange(true)
, fResetChannelChangeErrorCount(true)
, fPumpStreamSyncPlayback(IsFileBonDriver(pszBonDriverName))
, FirstChannelSetDelay(0)
, MinChannelChangeInterval(0)
{
*this=BonDriverOptions();

CDriverManager::TunerSpec Spec;
if (GetAppClass().DriverManager.GetTunerSpec(pszBonDriverName,&Spec)) {
if ((Spec.Flags &
(CDriverManager::TunerSpec::FLAG_NETWORK |
CDriverManager::TunerSpec::FLAG_FILE))!=0)
fNoSignalLevel=true;
if ((Spec.Flags &
(CDriverManager::TunerSpec::FLAG_NETWORK |
CDriverManager::TunerSpec::FLAG_FILE |
CDriverManager::TunerSpec::FLAG_VOLATILE))!=0)
fIgnoreInitialStream=false;
if ((Spec.Flags & CDriverManager::TunerSpec::FLAG_FILE)!=0)
fPumpStreamSyncPlayback=true;
}
}
16 changes: 11 additions & 5 deletions src/Epg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,17 @@ bool CEpg::CChannelProviderManager::Create(LPCTSTR pszDefaultTuner)
m_CurChannelProvider=(int)m_ChannelProviderList.size();
m_ChannelProviderList.push_back(pCurChannelProvider);
pCurChannelProvider=NULL;
} else if (!CCoreEngine::IsNetworkDriverFileName(pDriverInfo->GetFileName())) {
CBonDriverChannelProvider *pDriverChannelProvider=
new CBonDriverChannelProvider(pDriverInfo->GetFileName());

m_ChannelProviderList.push_back(pDriverChannelProvider);
} else {
CDriverManager::TunerSpec Spec;
if (!App.DriverManager.GetTunerSpec(pDriverInfo->GetFileName(),&Spec)
|| (Spec.Flags &
(CDriverManager::TunerSpec::FLAG_NETWORK |
CDriverManager::TunerSpec::FLAG_FILE))==0) {
CBonDriverChannelProvider *pDriverChannelProvider=
new CBonDriverChannelProvider(pDriverInfo->GetFileName());

m_ChannelProviderList.push_back(pDriverChannelProvider);
}
}
}
}
Expand Down
19 changes: 12 additions & 7 deletions src/EpgCapture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,19 @@ bool CEpgCaptureManager::BeginCapture(
}
return false;
}
if (!IsStringEmpty(pszTuner)
&& App.CoreEngine.IsNetworkDriverFileName(pszTuner)) {
if (!fNoUI) {
App.UICore.GetSkin()->ShowMessage(
TEXT("UDP/TCPでは番組表の取得はできません。"),
TEXT("お知らせ"),MB_OK | MB_ICONINFORMATION);
if (!IsStringEmpty(pszTuner)) {
CDriverManager::TunerSpec Spec;
if (App.DriverManager.GetTunerSpec(pszTuner,&Spec)
&& (Spec.Flags &
(CDriverManager::TunerSpec::FLAG_NETWORK |
CDriverManager::TunerSpec::FLAG_FILE))!=0) {
if (!fNoUI) {
App.UICore.GetSkin()->ShowMessage(
TEXT("ネットワーク再生及びファイル再生では番組表の取得はできません。"),
TEXT("お知らせ"),MB_OK | MB_ICONINFORMATION);
}
return false;
}
return false;
}

const bool fTunerAlreadyOpened=App.CoreEngine.IsTunerOpen();
Expand Down
7 changes: 6 additions & 1 deletion src/InitialSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,14 @@ INT_PTR CInitialSettings::DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lPara
DlgComboBox_LimitText(hDlg,IDC_INITIALSETTINGS_DRIVER,MAX_PATH-1);
for (int i=0;i<m_pDriverManager->NumDrivers();i++) {
const CDriverInfo *pDriverInfo=m_pDriverManager->GetDriverInfo(i);
CDriverManager::TunerSpec Spec;
int Index;

if (CCoreEngine::IsNetworkDriverFileName(pDriverInfo->GetFileName())) {
// ネットワークやファイル再生用の特殊なBonDriverは後になるようにする
if (m_pDriverManager->GetTunerSpec(pDriverInfo->GetFileName(),&Spec)
&& (Spec.Flags &
(CDriverManager::TunerSpec::FLAG_NETWORK |
CDriverManager::TunerSpec::FLAG_FILE))!=0) {
Index=i;
} else {
Index=NormalDriverCount++;
Expand Down

0 comments on commit f3e90c7

Please sign in to comment.