SHARE
TWEET

TVTest 0.10.0 TSMF patch (under 26)

a guest Jan 9th, 2019 721 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. diff --git a/LibISDB/Filters/TSPacketParserFilter.cpp b/LibISDB/Filters/TSPacketParserFilter.cpp
  2. index f76916c..8e4eb7c 100644
  3. --- a/LibISDB/Filters/TSPacketParserFilter.cpp
  4. +++ b/LibISDB/Filters/TSPacketParserFilter.cpp
  5. @@ -42,6 +42,8 @@ TSPacketParserFilter::TSPacketParserFilter()
  6.     , m_OutputErrorPacket(false)
  7.     , m_Generate1SegPAT(true)
  8.  
  9. +   , m_SlotNum(0)
  10. +
  11.     , m_InputBytes(0)
  12.     , m_TotalInputBytes(0)
  13.  {
  14. @@ -70,6 +72,8 @@ void TSPacketParserFilter::Reset()
  15.     m_PacketSequence.SetDataCount(0);
  16.     m_OutOfSyncCount = 0;
  17.  
  18. +   m_SlotNum = 0;
  19. +
  20.     m_PATGenerator.Reset();
  21.  }
  22.  
  23. @@ -256,7 +260,17 @@ void TSPacketParserFilter::SyncPacket(const uint8_t *pData, size_t Size)
  24.  
  25.             if (CurSize == TS_PACKET_SIZE) {
  26.                 // パケットサイズ分データが揃った
  27. -               const TSPacket::ParseResult Result = m_Packet.ParsePacket(m_ContinuityCounter.data());
  28. +               bool processSlot = true;
  29. +               if (m_SlotNum > 0) {
  30. +                   // スロット数が半分未満のものは処理しない
  31. +                   if (m_SlotCounter[m_TsNum[m_SlotNum]] < 26) {
  32. +                       processSlot = false;
  33. +                   }
  34. +                   if (++m_SlotNum == 53) {
  35. +                       m_SlotNum = 0;// フレーム終了
  36. +                   }
  37. +               }
  38. +               const TSPacket::ParseResult Result = m_Packet.ParsePacket(processSlot ? m_ContinuityCounter.data() : nullptr);
  39.  
  40.                 if ((m_OutOfSyncCount > TS_PACKET_SIZE_MAX - TS_PACKET_SIZE)
  41.                         && ((Result == TSPacket::ParseResult::FormatError)
  42. @@ -270,11 +284,16 @@ void TSPacketParserFilter::SyncPacket(const uint8_t *pData, size_t Size)
  43.                             break;
  44.                         }
  45.                     }
  46. -                   if (Resync)
  47. +                   if (Resync) {
  48. +                       m_SlotNum = 0;// フレームをリセット
  49.                         continue;
  50. +                   }
  51.                 }
  52.  
  53. -               ProcessPacket(Result);
  54. +               if (processSlot)
  55. +                   ProcessPacket(Result);
  56. +               else
  57. +                   m_Packet.ClearSize();
  58.  
  59.                 m_OutOfSyncCount = 0;
  60.             }
  61. @@ -297,6 +316,33 @@ void TSPacketParserFilter::ProcessPacket(TSPacket::ParseResult Result)
  62.         [[fallthrough]];
  63.     case TSPacket::ParseResult::OK:
  64.         {
  65. +           if (PID == 0x002F_u16) {
  66. +               // 多重フレームヘッダのチェック
  67. +               uint8_t* FrameHeader = m_Packet.GetData();
  68. +               // 多重フレーム同期情報(+4)
  69. +               uint16_t framesync = ((uint16_t)(FrameHeader[4] & 0x1F) << 8) | (uint16_t)FrameHeader[5];
  70. +               //多重フレーム形式の種別(+6)
  71. +               // 0x1 多重フレーム数 53 / 最大多重ストリーム数 15
  72. +               uint8_t framemode = FrameHeader[6] & 0x0F_u8;
  73. +               if (framemode == 1 && (framesync == 0x1A86_u16 || framesync == 0x0579_u16)) {
  74. +                   m_SlotNum = 1;
  75. +                   //相対ストリーム番号/スロット対応情報(+73)
  76. +                   size_t offset = 73;
  77. +                   m_SlotCounter.fill(0);
  78. +                   size_t slot = 1;
  79. +                   do {
  80. +                       m_TsNum[slot] = (FrameHeader[offset] & 0xF0_u8) >> 4;
  81. +                       ++m_SlotCounter[m_TsNum[slot]];
  82. +                       ++slot;
  83. +                       m_TsNum[slot] = FrameHeader[offset] & 0x0F_u8;
  84. +                       ++m_SlotCounter[m_TsNum[slot]];
  85. +                       ++slot;
  86. +                   } while (++offset < 99);
  87. +
  88. +                   break;
  89. +               }
  90. +           }
  91. +
  92.             ++m_PIDPacketCount[PID].Input;
  93.  
  94.             if (m_Packet.IsScrambled()) {
  95. diff --git a/LibISDB/Filters/TSPacketParserFilter.hpp b/LibISDB/Filters/TSPacketParserFilter.hpp
  96. index c8de156..db5cb56 100644
  97. --- a/LibISDB/Filters/TSPacketParserFilter.hpp
  98. +++ b/LibISDB/Filters/TSPacketParserFilter.hpp
  99. @@ -115,6 +115,10 @@ namespace LibISDB
  100.         DataStreamSequence<TSPacket> m_PacketSequence;
  101.         size_t m_OutOfSyncCount;
  102.  
  103. +       uint8_t m_SlotNum;
  104. +       std::array<uint8_t, 52 + 1> m_TsNum;
  105. +       std::array<uint8_t, 16> m_SlotCounter;
  106. +
  107.         bool m_OutputSequence;
  108.         size_t m_MaxSequencePacketCount;
  109.         bool m_OutputNullPacket;
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top