Skip to content

Commit

Permalink
[BonDriver] TSMF処理の追加
Browse files Browse the repository at this point in the history
  • Loading branch information
radi-sh committed Jan 15, 2019
1 parent 7753e0b commit 56f7892
Show file tree
Hide file tree
Showing 9 changed files with 481 additions and 1 deletion.
4 changes: 4 additions & 0 deletions BonDriver_BDA/BonDriver.vcxproj
Expand Up @@ -455,14 +455,17 @@
<ItemGroup>
<ClCompile Include="..\common\CIniFileAccess.cpp" />
<ClCompile Include="..\common\common.cpp" />
<ClCompile Include="..\common\crc32.cpp" />
<ClCompile Include="..\common\DSFilterEnum.cpp" />
<ClCompile Include="BonDriver.cpp" />
<ClCompile Include="BonTuner.cpp" />
<ClCompile Include="TSMF.cpp" />
<ClCompile Include="tswriter.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\common\CIniFileAccess.h" />
<ClInclude Include="..\common\common.h" />
<ClInclude Include="..\common\crc32.h" />
<ClInclude Include="..\common\DSFilterEnum.h" />
<ClInclude Include="..\common\IBdaSpecials.h" />
<ClInclude Include="..\common\IBdaSpecials2.h" />
Expand All @@ -471,6 +474,7 @@
<ClInclude Include="BonTuner.h" />
<ClInclude Include="IBonDriver.h" />
<ClInclude Include="IBonDriver2.h" />
<ClInclude Include="TSMF.h" />
<ClInclude Include="tswriter.h" />
</ItemGroup>
<ItemGroup>
Expand Down
12 changes: 12 additions & 0 deletions BonDriver_BDA/BonDriver.vcxproj.filters
Expand Up @@ -36,6 +36,12 @@
<ClCompile Include="..\common\common.cpp">
<Filter>ソース ファイル</Filter>
</ClCompile>
<ClCompile Include="..\common\crc32.cpp">
<Filter>ソース ファイル</Filter>
</ClCompile>
<ClCompile Include="TSMF.cpp">
<Filter>ソース ファイル</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="BonTuner.h">
Expand Down Expand Up @@ -71,6 +77,12 @@
<ClInclude Include="..\common\CIniFileAccess.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="..\common\crc32.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="TSMF.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\doc\BonDriver_BDA.sample.ini">
Expand Down
43 changes: 42 additions & 1 deletion BonDriver_BDA/BonTuner.cpp
Expand Up @@ -146,6 +146,7 @@ CBonTuner::CBonTuner()
m_dwTargetChannel(CBonTuner::CHANNEL_INVALID),
m_dwCurChannel(CBonTuner::CHANNEL_INVALID),
m_nCurTone(CBonTuner::TONE_UNKNOWN),
m_bIsEnabledTSMF(FALSE),
m_hModuleTunerSpecials(NULL),
m_pIBdaSpecials(NULL),
m_pIBdaSpecials2(NULL)
Expand Down Expand Up @@ -661,6 +662,23 @@ const BOOL CBonTuner::_SetChannel(const DWORD dwSpace, const DWORD dwChannel)

SleepWithMessageLoop(100);
PurgeTsStream();

// TSMF処理設定
switch (itSpace->second.TSMFMode) {
case 0: // OFF
m_TSMFParser.Disable();
m_bIsEnabledTSMF = FALSE;
break;
case 1: // TSID
m_TSMFParser.SetTSID((WORD)Ch->ONID, (WORD)Ch->TSID, FALSE);
m_bIsEnabledTSMF = TRUE;
break;
case 2: // Relative
m_TSMFParser.SetTSID(0xffff, (WORD)Ch->TSID, TRUE);
m_bIsEnabledTSMF = TRUE;
break;
}

m_bRecvStarted = TRUE;

// SetChannel()を試みたチューニングスペース番号とチャンネル番号
Expand Down Expand Up @@ -1018,7 +1036,21 @@ DWORD WINAPI CBonTuner::DecodeProcThread(LPVOID lpParameter)
}

// 取得したバッファをデコード済みバッファに追加
pSys->m_DecodedTsBuff.Add(pBuff);
if (pSys->m_bIsEnabledTSMF) {
// TSMFの処理を行う
BYTE * newBuf = NULL;
size_t newBufSize = 0;
pSys->m_TSMFParser.ParseTsBuffer(pBuff->pbyBuff, pBuff->dwSize, &newBuf, &newBufSize);
if (newBuf) {
TS_DATA * pNewTS = new TS_DATA(newBuf, (DWORD)newBufSize, FALSE);
pSys->m_DecodedTsBuff.Add(pNewTS);
}
SAFE_DELETE(pBuff);
}
else {
// TSMFの処理を行わない場合はそのまま追加
pSys->m_DecodedTsBuff.Add(pBuff);
}

// 受信イベントセット
if (pSys->m_DecodedTsBuff.Size() >= pSys->m_nWaitTsCount)
Expand Down Expand Up @@ -1272,6 +1304,12 @@ void CBonTuner::ReadIniFile(void)
{ L"PORT-D", LNB_Source::BDA_LNB_SOURCE_D },
};

static const std::map<const std::wstring, const int, std::less<>> mapTSMFMode = {
{ L"OFF", 0 },
{ L"TSID", 1 },
{ L"RELATIVE", 2 },
};

// INIファイルのファイル名取得
std::wstring tempPath = common::GetModuleName(st_hModule);
m_sIniFilePath = tempPath + L"ini";
Expand Down Expand Up @@ -2529,6 +2567,9 @@ void CBonTuner::ReadIniFile(void)
// TuningSpaceの種類番号
itSpace->second.DVBSystemTypeNumber = IniFileAccess.ReadKeyISectionData(L"DVBSystemTypeNumber", 0);

// TSMFの処理モード
itSpace->second.TSMFMode = IniFileAccess.ReadKeyIValueMapSectionData(L"TSMFMode", 0, mapTSMFMode);

// CH設定
// チャンネル番号 = 衛星番号,周波数,偏波,変調方式[,チャンネル名[,SID/MinorChannel[,TSID/Channel[,ONID/PhysicalChannel[,MajorChannel[,SourceID]]]]]]
// 例: CH001 = 1,12658,V,0
Expand Down
8 changes: 8 additions & 0 deletions BonDriver_BDA/BonTuner.h
Expand Up @@ -17,6 +17,7 @@
#include "IBonDriver2.h"
#include "LockChannel.h"
#include "DSFilterEnum.h"
#include "TSMF.h"

struct ITsWriter;

Expand Down Expand Up @@ -605,6 +606,7 @@ class CBonTuner : public IBonDriver2
std::basic_string<TCHAR> sTuningSpaceName; // EnumTuningSpaceで返すTuning Space名
long FrequencyOffset; // 周波数オフセット値
unsigned int DVBSystemTypeNumber; // TuningSpaceの種類番号
unsigned int TSMFMode; // TSMFの処理モード
std::map<unsigned int, ChData> Channels; // チャンネル番号とチャンネルデータ
DWORD dwNumChannel; // チャンネル数
TuningSpaceData(void)
Expand Down Expand Up @@ -845,6 +847,9 @@ class CBonTuner : public IBonDriver2
};
BitRate m_BitRate;

// TSNF処理用
CTSMFParser m_TSMFParser;

////////////////////////////////////////
// チューナ関連
////////////////////////////////////////
Expand Down Expand Up @@ -1074,6 +1079,9 @@ class CBonTuner : public IBonDriver2
// トーン切替状態不明
static constexpr long TONE_UNKNOWN = -1L;

// TSMF処理が必要
BOOL m_bIsEnabledTSMF;

// 最後にLockChannelを行った時のチューニングパラメータ
TuningParam m_LastTuningParam;

Expand Down

0 comments on commit 56f7892

Please sign in to comment.