Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -U 10 -rw TVCAS_B1-rev5/TVCAS/TsTable.cpp TVCAS_B1-rev6/TVCAS/TsTable.cpp
- --- TVCAS_B1-rev5/TVCAS/TsTable.cpp 2012-09-15 19:00:00.000000000 +0900
- +++ TVCAS_B1-rev6/TVCAS/TsTable.cpp 2018-07-20 01:30:16.006900500 +0900
- @@ -851,33 +851,35 @@
- CPmtTable::CPmtTable(const CPmtTable &Operand)
- {
- *this = Operand;
- }
- CPmtTable & CPmtTable::operator = (const CPmtTable &Operand)
- {
- if (this != &Operand) {
- CPsiSingleTable::operator=(Operand);
- m_wPcrPID = Operand.m_wPcrPID;
- + m_wSdEcmPID = Operand.m_wSdEcmPID; // for SPSD ECM
- m_TableDescBlock = Operand.m_TableDescBlock;
- m_EsInfoArray = Operand.m_EsInfoArray;
- }
- return *this;
- }
- void CPmtTable::Reset(void)
- {
- // 状態をクリアする
- CPsiSingleTable::Reset();
- m_wPcrPID = 0xFFFFU;
- + m_wSdEcmPID = 0xFFFFU; // for SPSD ECM
- m_TableDescBlock.Reset();
- m_EsInfoArray.clear();
- }
- const WORD CPmtTable::GetProgramNumberID(void) const
- {
- return m_CurSection.GetTableIdExtension();
- }
- const WORD CPmtTable::GetPcrPID(void) const
- @@ -890,38 +892,38 @@
- {
- // テーブルの記述子ブロックを返す
- return &m_TableDescBlock;
- }
- const WORD CPmtTable::GetEcmPID(void) const
- {
- // ECMのPIDを返す
- const CCaMethodDesc *pCaMethodDesc = dynamic_cast<const CCaMethodDesc *>(m_TableDescBlock.GetDescByTag(CCaMethodDesc::DESC_TAG));
- - return (pCaMethodDesc)? pCaMethodDesc->GetCaPID() : 0xFFFFU;
- + return (pCaMethodDesc)? pCaMethodDesc->GetCaPID() : m_wSdEcmPID; // 0xFFFFU; // for SPSD ECM
- }
- const WORD CPmtTable::GetEcmPID(const WORD CASystemID) const
- {
- // 指定されたCA_system_idに対応するECMのPIDを返す
- for (WORD i = 0 ; i < m_TableDescBlock.GetDescNum() ; i++) {
- const CBaseDesc *pDesc = m_TableDescBlock.GetDescByIndex(i);
- if (pDesc != NULL && pDesc->GetTag() == CCaMethodDesc::DESC_TAG) {
- const CCaMethodDesc *pCaDesc = dynamic_cast<const CCaMethodDesc*>(pDesc);
- if (pCaDesc != NULL && pCaDesc->GetCaMethodID() == CASystemID)
- return pCaDesc->GetCaPID();
- }
- }
- - return 0xFFFF;
- + return (m_wSdEcmPID); // 0xFFFF; // for SPSD ECM
- }
- const WORD CPmtTable::GetEsInfoNum(void) const
- {
- // ES情報の数を返す
- return (WORD)m_EsInfoArray.size();
- }
- const BYTE CPmtTable::GetStreamTypeID(const WORD wIndex) const
- {
- @@ -946,20 +948,21 @@
- const WORD wDataSize = pCurSection->GetPayloadSize();
- const BYTE *pHexData = pCurSection->GetPayloadData();
- if (wDataSize < 4)
- return false;
- if(pCurSection->GetTableID() != 0x02U)return false; // テーブルIDが不正
- // 状態をクリアする
- m_wPcrPID = 0xFFFFU;
- + m_wSdEcmPID = 0xFFFFU; // for SPSD ECM
- m_EsInfoArray.clear();
- // テーブルを解析する
- m_wPcrPID = ((WORD)(pHexData[0] & 0x1FU) << 8) | (WORD)pHexData[1]; // +0,1
- WORD wDescLen = ((WORD)(pHexData[2] & 0x0FU) << 8) | (WORD)pHexData[3];
- if (4 + wDescLen > wDataSize)
- return false;
- // 記述子ブロック
- m_TableDescBlock.ParseBlock(&pHexData[4], wDescLen);
- @@ -984,20 +987,31 @@
- PmtItem.DescBlock.ParseBlock(&pHexData[wPos + 5], wDescLen);
- #ifdef _DEBUG
- if (m_bDebugTrace)
- TRACE(TEXT("[%u] Stream Type ID = %02X PID = %04X\n"),
- m_EsInfoArray.size(), PmtItem.byStreamTypeID, PmtItem.wEsPID);
- #endif
- // テーブルに追加する
- m_EsInfoArray.push_back(PmtItem);
- +
- + // for SPSD ECM
- + if ( (m_wSdEcmPID > 0x1FFFU) && (pCurSection->GetTableIdExtension() < 32768) ) {
- + const CBaseDesc *pDesc = PmtItem.DescBlock.GetDescByTag(CCaMethodDesc::DESC_TAG);
- + if ( pDesc != NULL ) {
- + const CCaMethodDesc *pCaDesc = dynamic_cast<const CCaMethodDesc*>(pDesc);
- + if ( (pCaDesc != NULL) && (pCaDesc->GetCaMethodID() == 0x01U) ) {
- + m_wSdEcmPID = pCaDesc->GetCaPID();
- + }
- + }
- + }
- }
- return true;
- }
- /////////////////////////////////////////////////////////////////////////////
- // SDTテーブル抽象化クラス
- /////////////////////////////////////////////////////////////////////////////
- diff -U 10 -rw TVCAS_B1-rev5/TVCAS/TsTable.h TVCAS_B1-rev6/TVCAS/TsTable.h
- --- TVCAS_B1-rev5/TVCAS/TsTable.h 2012-09-15 19:00:00.000000000 +0900
- +++ TVCAS_B1-rev6/TVCAS/TsTable.h 2018-07-20 01:36:21.072554100 +0900
- @@ -342,35 +342,40 @@
- const WORD GetPcrPID(void) const;
- const CDescBlock * GetTableDesc(void) const;
- const WORD GetEcmPID(void) const;
- const WORD GetEcmPID(const WORD CASystemID) const;
- const WORD GetEsInfoNum(void) const;
- const BYTE GetStreamTypeID(const WORD wIndex) const;
- const WORD GetEsPID(const WORD wIndex) const;
- const CDescBlock * GetItemDesc(const WORD wIndex) const;
- +// for SPSD ECM
- + WORD GetSdEcmPID() const { return(m_wSdEcmPID); };
- +
- protected:
- virtual const bool OnTableUpdate(const CPsiSection *pCurSection, const CPsiSection *pOldSection);
- struct TAG_PMTITEM
- {
- BYTE byStreamTypeID; // Stream Type ID
- WORD wEsPID; // Elementary Stream PID
- CDescBlock DescBlock; // Stream ID Descriptor 他
- };
- vector<TAG_PMTITEM> m_EsInfoArray;
- WORD m_wPcrPID; // PCR_PID
- CDescBlock m_TableDescBlock; // Conditional Access Method Descriptor 他
- + WORD m_wSdEcmPID; // for SPSD ECM
- +
- #ifdef _DEBUG
- bool m_bDebugTrace;
- #endif
- };
- /////////////////////////////////////////////////////////////////////////////
- // SDTテーブル抽象化クラス
- /////////////////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement