Windows版においてDLLのビルドを追加

B25Decoder.dll互換
This commit is contained in:
epgdatacapbon 2017-06-11 10:47:30 +09:00
parent 2c1f031642
commit eceb9c1c37
10 changed files with 772 additions and 55 deletions

View File

@ -1,12 +1,12 @@
【名称】
 ARIB STD-B25 仕様確認テストプログラムソースコード
 ARIB STD-B25 仕様確認テストプログラム
【バージョン】
 0.2.5
【作者】
オリジナル作者】
 茂木 和洋 (MOGI, Kazuhiro)
 kazhiro@marumo.ne.jp
@ -69,6 +69,15 @@
 上記 2 条件に同意して作成された二次的著作物に対して、茂木 和洋は
 原著作者に与えられる諸権利を行使しない
【バイナリの構成】
 ・b25.exe
  ARIB STD-B25 記載の処理を行うためのプログラム
 ・libaribb25.dll
  MULTI2 復号処理を行う DLL
  B25Decoder.dll と互換性がある
【プログラムの構成】
 ・arib_std_b25.h/c
@ -192,6 +201,8 @@
【更新履歴】
  最新の更新内容については github を参照
 ・2012, 2/13 - ver. 0.2.5
  WOWOW でノンスクランブル <-> スクランブル切り替え後に復号が

View File

@ -1,9 +1,11 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.30723.0
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "arib_std_b25", "arib_std_b25.vcxproj", "{6E77C1AC-A31A-49B9-9A52-9FE1E03B8FEC}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "b25", "aribb25\b25.vcxproj", "{6E77C1AC-A31A-49B9-9A52-9FE1E03B8FEC}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaribb25", "aribb25\libaribb25.vcxproj", "{32FCD075-2C1D-4796-926B-A0009ECCD1E8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -21,6 +23,14 @@ Global
{6E77C1AC-A31A-49B9-9A52-9FE1E03B8FEC}.Release|Win32.Build.0 = Release|Win32
{6E77C1AC-A31A-49B9-9A52-9FE1E03B8FEC}.Release|x64.ActiveCfg = Release|x64
{6E77C1AC-A31A-49B9-9A52-9FE1E03B8FEC}.Release|x64.Build.0 = Release|x64
{32FCD075-2C1D-4796-926B-A0009ECCD1E8}.Debug|Win32.ActiveCfg = Debug|Win32
{32FCD075-2C1D-4796-926B-A0009ECCD1E8}.Debug|Win32.Build.0 = Debug|Win32
{32FCD075-2C1D-4796-926B-A0009ECCD1E8}.Debug|x64.ActiveCfg = Debug|x64
{32FCD075-2C1D-4796-926B-A0009ECCD1E8}.Debug|x64.Build.0 = Debug|x64
{32FCD075-2C1D-4796-926B-A0009ECCD1E8}.Release|Win32.ActiveCfg = Release|Win32
{32FCD075-2C1D-4796-926B-A0009ECCD1E8}.Release|Win32.Build.0 = Release|Win32
{32FCD075-2C1D-4796-926B-A0009ECCD1E8}.Release|x64.ActiveCfg = Release|x64
{32FCD075-2C1D-4796-926B-A0009ECCD1E8}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

65
aribb25/IB25Decoder.h Normal file
View File

@ -0,0 +1,65 @@
// IB25Decoder.h: IB25Decoder クラスのインターフェイス
//
//////////////////////////////////////////////////////////////////////
#pragma once
/////////////////////////////////////////////////////////////////////////////
// 定数定義
/////////////////////////////////////////////////////////////////////////////
#define TS_INVALID_PID 0xFFFFU // 無効PID
/////////////////////////////////////////////////////////////////////////////
// B25デコーダインタフェース
/////////////////////////////////////////////////////////////////////////////
class IB25Decoder
{
public:
virtual const BOOL Initialize(DWORD dwRound = 4) = 0;
virtual void Release(void) = 0;
virtual const BOOL Decode(BYTE *pSrcBuf, const DWORD dwSrcSize, BYTE **ppDstBuf, DWORD *pdwDstSize) = 0;
virtual const BOOL Flush(BYTE **ppDstBuf, DWORD *pdwDstSize) = 0;
virtual const BOOL Reset(void) = 0;
};
/////////////////////////////////////////////////////////////////////////////
// B25デコーダインタフェース2
/////////////////////////////////////////////////////////////////////////////
class IB25Decoder2 : public IB25Decoder
{
public:
enum // GetDescramblerState() リターンコード
{
DS_NO_ERROR = 0x00000000UL, // エラーなし正常
DS_BCAS_ERROR = 0x00000001UL, // B-CASカードエラー
DS_NOT_CONTRACTED = 0x00000002UL // 視聴未契約
};
virtual void DiscardNullPacket(const bool bEnable = true) = 0;
virtual void DiscardScramblePacket(const bool bEnable = true) = 0;
virtual void EnableEmmProcess(const bool bEnable = true) = 0;
virtual void SetMulti2Round(const int32_t round = 4) = 0; // オリジナルに追加
virtual const DWORD GetDescramblingState(const WORD wProgramID) = 0;
virtual void ResetStatistics(void) = 0;
virtual const DWORD GetPacketStride(void) = 0;
virtual const DWORD GetInputPacketNum(const WORD wPID = TS_INVALID_PID) = 0;
virtual const DWORD GetOutputPacketNum(const WORD wPID = TS_INVALID_PID) = 0;
virtual const DWORD GetSyncErrNum(void) = 0;
virtual const DWORD GetFormatErrNum(void) = 0;
virtual const DWORD GetTransportErrNum(void) = 0;
virtual const DWORD GetContinuityErrNum(const WORD wPID = TS_INVALID_PID) = 0;
virtual const DWORD GetScramblePacketNum(const WORD wPID = TS_INVALID_PID) = 0;
virtual const DWORD GetEcmProcessNum(void) = 0;
virtual const DWORD GetEmmProcessNum(void) = 0;
};

View File

@ -990,7 +990,7 @@ static int get_arib_std_b25(void *std_b25, ARIB_STD_B25_BUFFER *buf)
}
buf->data = prv->dbuf.head;
buf->size = prv->dbuf.tail - prv->dbuf.head;
buf->size = (uint32_t)(prv->dbuf.tail - prv->dbuf.head); // cast
reset_work_buffer(&(prv->dbuf));
@ -1069,7 +1069,7 @@ static int withdraw_arib_std_b25(void *std_b25, ARIB_STD_B25_BUFFER *buf)
}
buf->data = prv->sbuf.head;
buf->size = prv->sbuf.tail - prv->sbuf.head;
buf->size = (uint32_t)(prv->sbuf.tail - prv->sbuf.head); // cast
reset_work_buffer(&(prv->sbuf));
@ -1927,7 +1927,7 @@ LAST:
static int proc_ecm(DECRYPTOR_ELEM *dec, B_CAS_CARD *bcas, int32_t multi2_round)
{
int r,n;
int32_t len;
uint32_t len;
uint8_t *p;
@ -1962,7 +1962,7 @@ static int proc_ecm(DECRYPTOR_ELEM *dec, B_CAS_CARD *bcas, int32_t multi2_round)
goto LAST;
}
len = (sect.tail - sect.data) - 4;
len = (uint32_t)(sect.tail - sect.data) - 4; // cast
p = sect.data;
r = bcas->proc_ecm(bcas, &res, p, len);

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
@ -67,24 +67,26 @@
<_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
<TargetName>b25</TargetName>
<TargetName>$(ProjectName)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>b25</TargetName>
<TargetName>$(ProjectName)</TargetName>
<IntDir>$(SolutionDir)Intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)Intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
<TargetName>b25</TargetName>
<TargetName>$(ProjectName)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>b25</TargetName>
<TargetName>$(ProjectName)</TargetName>
<IntDir>$(SolutionDir)Intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@ -99,7 +101,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>winscard.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)b25.exe</OutputFile>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<GenerateDebugInformation>Debug</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
@ -119,7 +121,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>winscard.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)b25.exe</OutputFile>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<GenerateDebugInformation>Debug</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
</Link>
@ -142,7 +144,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>winscard.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)b25.exe</OutputFile>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
@ -170,7 +172,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>winscard.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)b25.exe</OutputFile>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
@ -179,23 +181,23 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="aribb25\arib_std_b25.c" />
<ClCompile Include="aribb25\b_cas_card.c" />
<ClCompile Include="aribb25\multi2.c" />
<ClCompile Include="aribb25\td.c" />
<ClCompile Include="aribb25\ts_section_parser.c" />
<ClCompile Include="arib_std_b25.c" />
<ClCompile Include="b_cas_card.c" />
<ClCompile Include="multi2.c" />
<ClCompile Include="td.c" />
<ClCompile Include="ts_section_parser.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="aribb25\arib_std_b25.h" />
<ClInclude Include="aribb25\arib_std_b25_error_code.h" />
<ClInclude Include="aribb25\b_cas_card.h" />
<ClInclude Include="aribb25\b_cas_card_error_code.h" />
<ClInclude Include="aribb25\multi2.h" />
<ClInclude Include="aribb25\multi2_error_code.h" />
<ClInclude Include="aribb25\portable.h" />
<ClInclude Include="aribb25\ts_common_types.h" />
<ClInclude Include="aribb25\ts_section_parser.h" />
<ClInclude Include="aribb25\ts_section_parser_error_code.h" />
<ClInclude Include="arib_std_b25.h" />
<ClInclude Include="arib_std_b25_error_code.h" />
<ClInclude Include="b_cas_card.h" />
<ClInclude Include="b_cas_card_error_code.h" />
<ClInclude Include="multi2.h" />
<ClInclude Include="multi2_error_code.h" />
<ClInclude Include="portable.h" />
<ClInclude Include="ts_common_types.h" />
<ClInclude Include="ts_section_parser.h" />
<ClInclude Include="ts_section_parser_error_code.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="ソース ファイル">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="ヘッダー ファイル">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="リソース ファイル">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="multi2.c">
<Filter>ソース ファイル</Filter>
</ClCompile>
<ClCompile Include="td.c">
<Filter>ソース ファイル</Filter>
</ClCompile>
<ClCompile Include="ts_section_parser.c">
<Filter>ソース ファイル</Filter>
</ClCompile>
<ClCompile Include="arib_std_b25.c">
<Filter>ソース ファイル</Filter>
</ClCompile>
<ClCompile Include="b_cas_card.c">
<Filter>ソース ファイル</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="ts_section_parser.h">
<Filter>リソース ファイル</Filter>
</ClInclude>
<ClInclude Include="ts_section_parser_error_code.h">
<Filter>リソース ファイル</Filter>
</ClInclude>
<ClInclude Include="arib_std_b25.h">
<Filter>リソース ファイル</Filter>
</ClInclude>
<ClInclude Include="arib_std_b25_error_code.h">
<Filter>リソース ファイル</Filter>
</ClInclude>
<ClInclude Include="b_cas_card.h">
<Filter>リソース ファイル</Filter>
</ClInclude>
<ClInclude Include="b_cas_card_error_code.h">
<Filter>リソース ファイル</Filter>
</ClInclude>
<ClInclude Include="multi2.h">
<Filter>リソース ファイル</Filter>
</ClInclude>
<ClInclude Include="multi2_error_code.h">
<Filter>リソース ファイル</Filter>
</ClInclude>
<ClInclude Include="portable.h">
<Filter>リソース ファイル</Filter>
</ClInclude>
<ClInclude Include="ts_common_types.h">
<Filter>リソース ファイル</Filter>
</ClInclude>
</ItemGroup>
</Project>

322
aribb25/libaribb25.cpp Normal file
View File

@ -0,0 +1,322 @@
// libaribb25.cpp: CB25Decoder クラスのインプリメンテーション
//
//////////////////////////////////////////////////////////////////////
#include "libaribb25.h"
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hinstDLL);
} else if (fdwReason == DLL_PROCESS_DETACH) {
// 未開放の場合はインスタンス開放
if (CB25Decoder::m_pThis) {
CB25Decoder::m_pThis->Release();
}
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////
// インスタンス生成メソッド
//////////////////////////////////////////////////////////////////////
extern "C"
{
__declspec(dllexport) IB25Decoder * CreateB25Decoder()
{
// インスタンス生成
return (CB25Decoder::m_pThis) ?
CB25Decoder::m_pThis : dynamic_cast<IB25Decoder *>(new CB25Decoder());
}
__declspec(dllexport) IB25Decoder2 * CreateB25Decoder2()
{
// インスタンス生成
return (CB25Decoder::m_pThis) ?
CB25Decoder::m_pThis : dynamic_cast<IB25Decoder2 *>(new CB25Decoder());
}
}
//////////////////////////////////////////////////////////////////////
// 構築/消滅
//////////////////////////////////////////////////////////////////////
// 静的メンバ初期化
CB25Decoder * CB25Decoder::m_pThis = NULL;
CB25Decoder::CB25Decoder(void) : _bcas(NULL), _b25(NULL), _data(NULL)
{
m_pThis = this;
}
CB25Decoder::~CB25Decoder(void)
{
if (_data)
::free(_data);
_mtx.lock();
if (_b25)
_b25->release(_b25);
if (_bcas)
_bcas->release(_bcas);
_mtx.unlock();
m_pThis = NULL;
}
void CB25Decoder::Release()
{
// インスタンス開放
delete this;
}
const BOOL CB25Decoder::Initialize(DWORD dwRound)
{
int ret = FALSE;
_mtx.lock();;
if (_b25)
goto unlock;
_bcas = create_b_cas_card();
if (!_bcas)
goto unlock;
if (_bcas->init(_bcas) < 0)
goto err;
_b25 = create_arib_std_b25();
if (!_b25)
goto err;
if (_b25->set_b_cas_card(_b25, _bcas) < 0)
goto err;
// success
_b25->set_strip(_b25, 1);
_b25->set_emm_proc(_b25, 0);
_b25->set_multi2_round(_b25, dwRound);
ret = TRUE;
goto unlock;
err:
// error
if (_b25)
{
_b25->release(_b25);
_b25 = NULL;
}
if (_bcas)
{
_bcas->release(_bcas);
_bcas = NULL;
}
_errtime = ::GetTickCount();
unlock:
_mtx.unlock();
return ret;
}
const BOOL CB25Decoder::Decode(BYTE *pSrcBuf, const DWORD dwSrcSize, BYTE **ppDstBuf, DWORD *pdwDstSize)
{
if (!_b25)
{
DWORD now = ::GetTickCount();
DWORD interval = (now - _errtime) / 1000;
if (interval > RETRY_INTERVAL) {
if (Initialize() < 0)
_errtime = now;
}
if (!_b25) {
if (*ppDstBuf != pSrcBuf) {
*ppDstBuf = pSrcBuf;
*pdwDstSize = dwSrcSize;
}
return FALSE;
}
}
if (_data) {
::free(_data);
_data = NULL;
}
ARIB_STD_B25_BUFFER buf;
buf.data = pSrcBuf;
buf.size = dwSrcSize;
const int rc = _b25->put(_b25, &buf);
if (rc < 0) {
if (rc >= ARIB_STD_B25_ERROR_NO_ECM_IN_HEAD_32M) {
// pass through
_b25->release(_b25);
_b25 = NULL;
_bcas->release(_bcas);
_bcas = NULL;
if (*ppDstBuf != pSrcBuf) {
*ppDstBuf = pSrcBuf;
*pdwDstSize = dwSrcSize;
}
} else {
BYTE *p = NULL;
_b25->withdraw(_b25, &buf); // withdraw src buffer
if (buf.size > 0)
p = (BYTE *)::malloc(buf.size + dwSrcSize);
if (p) {
::memcpy(p, buf.data, buf.size);
::memcpy(p + buf.size, pSrcBuf, dwSrcSize);
*ppDstBuf = p;
*pdwDstSize = buf.size + dwSrcSize;
_data = p;
} else {
if (*ppDstBuf != pSrcBuf) {
*ppDstBuf = pSrcBuf;
*pdwDstSize = dwSrcSize;
}
}
if (rc == ARIB_STD_B25_ERROR_ECM_PROC_FAILURE) {
// pass through
_b25->release(_b25);
_b25 = NULL;
_bcas->release(_bcas);
_bcas = NULL;
}
}
_errtime = ::GetTickCount();
return FALSE; // error
}
_b25->get(_b25, &buf);
*ppDstBuf = buf.data;
*pdwDstSize = buf.size;
return TRUE; // success
}
const BOOL CB25Decoder::Flush(BYTE **ppDstBuf, DWORD *pdwDstSize)
{
BOOL ret = TRUE;
if (_b25) {
int rc = _b25->flush(_b25);
ret = (rc < 0) ? FALSE : TRUE;
}
return ret;
}
const BOOL CB25Decoder::Reset(void)
{
BOOL ret = TRUE;
if (_b25) {
int rc = _b25->reset(_b25);
ret = (rc < 0) ? FALSE : TRUE;
}
return ret;
}
void CB25Decoder::DiscardNullPacket(const bool bEnable)
{
// NULLパケット破棄の有無を設定
_b25->set_strip(_b25, bEnable);
}
void CB25Decoder::DiscardScramblePacket(const bool bEnable)
{
}
void CB25Decoder::EnableEmmProcess(const bool bEnable)
{
// EMM処理の有効/無効を設定
_b25->set_emm_proc(_b25, bEnable);
}
void CB25Decoder::SetMulti2Round(const int32_t round)
{
// ラウンド段数を設定
_b25->set_multi2_round(_b25, round);
}
const DWORD CB25Decoder::GetDescramblingState(const WORD wProgramID)
{
// 指定したプログラムIDの復号状態を返す
return 0;
}
void CB25Decoder::ResetStatistics(void)
{
}
const DWORD CB25Decoder::GetPacketStride(void)
{
// パケット周期を返す
return 0;
}
const DWORD CB25Decoder::GetInputPacketNum(const WORD wPID)
{
// 入力パケット数を返す ※TS_INVALID_PID指定時は全PIDの合計を返す
return 0;
}
const DWORD CB25Decoder::GetOutputPacketNum(const WORD wPID)
{
// 出力パケット数を返す ※TS_INVALID_PID指定時は全PIDの合計を返す
return 0;
}
const DWORD CB25Decoder::GetSyncErrNum(void)
{
// 同期エラー数を返す
return 0;
}
const DWORD CB25Decoder::GetFormatErrNum(void)
{
// フォーマットエラー数を返す
return 0;
}
const DWORD CB25Decoder::GetTransportErrNum(void)
{
// ビットエラー数を返す
return 0;
}
const DWORD CB25Decoder::GetContinuityErrNum(const WORD wPID)
{
// ドロップパケット数を返す
return 0;
}
const DWORD CB25Decoder::GetScramblePacketNum(const WORD wPID)
{
// 復号漏れパケット数を返す
return 0;
}
const DWORD CB25Decoder::GetEcmProcessNum(void)
{
// ECM処理数を返す(B-CASカードアクセス回数)
return 0;
}
const DWORD CB25Decoder::GetEmmProcessNum(void)
{
// EMM処理数を返す(B-CASカードアクセス回数)
return 0;
}

56
aribb25/libaribb25.h Normal file
View File

@ -0,0 +1,56 @@
// libaribb25.h: CB25Decoder クラスのインターフェイス
//
//////////////////////////////////////////////////////////////////////
#pragma once
#include <windows.h>
#include <mutex>
#include "IB25Decoder.h"
#include "arib_std_b25.h"
#include "arib_std_b25_error_code.h"
#define RETRY_INTERVAL 10 // 10sec interval
class CB25Decoder : public IB25Decoder2
{
public:
// CB25Decoder
CB25Decoder(void);
virtual ~CB25Decoder(void);
void Release(void);
static CB25Decoder *m_pThis;
// IB25Decoder
virtual const BOOL Initialize(DWORD dwRound = 4);
virtual const BOOL Decode(BYTE *pSrcBuf, const DWORD dwSrcSize, BYTE **ppDstBuf, DWORD *pdwDstSize);
virtual const BOOL Flush(BYTE **ppDstBuf, DWORD *pdwDstSize);
virtual const BOOL Reset(void);
// IB25Decoder2
virtual void DiscardNullPacket(const bool bEnable = true);
virtual void DiscardScramblePacket(const bool bEnable = true);
virtual void EnableEmmProcess(const bool bEnable = true);
virtual void SetMulti2Round(const int32_t round = 4);
virtual const DWORD GetDescramblingState(const WORD wProgramID);
virtual void ResetStatistics(void);
virtual const DWORD GetPacketStride(void);
virtual const DWORD GetInputPacketNum(const WORD wPID = TS_INVALID_PID);
virtual const DWORD GetOutputPacketNum(const WORD wPID = TS_INVALID_PID);
virtual const DWORD GetSyncErrNum(void);
virtual const DWORD GetFormatErrNum(void);
virtual const DWORD GetTransportErrNum(void);
virtual const DWORD GetContinuityErrNum(const WORD wPID = TS_INVALID_PID);
virtual const DWORD GetScramblePacketNum(const WORD wPID = TS_INVALID_PID);
virtual const DWORD GetEcmProcessNum(void);
virtual const DWORD GetEmmProcessNum(void);
private:
std::mutex _mtx;
B_CAS_CARD *_bcas;
ARIB_STD_B25 *_b25;
BYTE *_data;
DWORD _errtime;
};

179
aribb25/libaribb25.vcxproj Normal file
View File

@ -0,0 +1,179 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{32FCD075-2C1D-4796-926B-A0009ECCD1E8}</ProjectGuid>
<RootNamespace>libaribb25</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IntDir>$(SolutionDir)Intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<IntDir>$(SolutionDir)Intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<IntDir>$(SolutionDir)Intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<IntDir>$(SolutionDir)Intermediate\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>
</SDLCheck>
</ClCompile>
<Link>
<AdditionalDependencies>winscard.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>
</SDLCheck>
</ClCompile>
<Link>
<AdditionalDependencies>winscard.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>
</SDLCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<StringPooling>true</StringPooling>
<BufferSecurityCheck>false</BufferSecurityCheck>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>winscard.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>
</SDLCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<StringPooling>true</StringPooling>
<BufferSecurityCheck>false</BufferSecurityCheck>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>winscard.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="arib_std_b25.c" />
<ClCompile Include="b_cas_card.c" />
<ClCompile Include="libaribb25.cpp" />
<ClCompile Include="multi2.c" />
<ClCompile Include="ts_section_parser.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="arib_std_b25.h" />
<ClInclude Include="arib_std_b25_error_code.h" />
<ClInclude Include="b_cas_card.h" />
<ClInclude Include="b_cas_card_error_code.h" />
<ClInclude Include="IB25Decoder.h" />
<ClInclude Include="libaribb25.h" />
<ClInclude Include="multi2.h" />
<ClInclude Include="multi2_error_code.h" />
<ClInclude Include="portable.h" />
<ClInclude Include="ts_common_types.h" />
<ClInclude Include="ts_section_parser.h" />
<ClInclude Include="ts_section_parser_error_code.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="ソース ファイル">
@ -7,59 +7,65 @@
</Filter>
<Filter Include="ヘッダー ファイル">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="リソース ファイル">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="aribb25\arib_std_b25.c">
<ClCompile Include="b_cas_card.c">
<Filter>ソース ファイル</Filter>
</ClCompile>
<ClCompile Include="aribb25\b_cas_card.c">
<ClCompile Include="multi2.c">
<Filter>ソース ファイル</Filter>
</ClCompile>
<ClCompile Include="aribb25\multi2.c">
<ClCompile Include="ts_section_parser.c">
<Filter>ソース ファイル</Filter>
</ClCompile>
<ClCompile Include="aribb25\td.c">
<ClCompile Include="arib_std_b25.c">
<Filter>ソース ファイル</Filter>
</ClCompile>
<ClCompile Include="aribb25\ts_section_parser.c">
<ClCompile Include="libaribb25.cpp">
<Filter>ソース ファイル</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="aribb25\arib_std_b25.h">
<ClInclude Include="multi2.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="aribb25\arib_std_b25_error_code.h">
<ClInclude Include="multi2_error_code.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="aribb25\b_cas_card.h">
<ClInclude Include="portable.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="aribb25\b_cas_card_error_code.h">
<ClInclude Include="ts_common_types.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="aribb25\multi2.h">
<ClInclude Include="ts_section_parser.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="aribb25\multi2_error_code.h">
<ClInclude Include="ts_section_parser_error_code.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="aribb25\portable.h">
<ClInclude Include="arib_std_b25.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="aribb25\ts_common_types.h">
<ClInclude Include="arib_std_b25_error_code.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="aribb25\ts_section_parser.h">
<ClInclude Include="b_cas_card.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="aribb25\ts_section_parser_error_code.h">
<ClInclude Include="b_cas_card_error_code.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="IB25Decoder.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
<ClInclude Include="libaribb25.h">
<Filter>ヘッダー ファイル</Filter>
</ClInclude>
</ItemGroup>