skyscraper8/skyscraper8/GSE/Stid135BbFrameReader.cs
feyris-tan 7630775d55
All checks were successful
🚀 Pack skyscraper8 / make-zip (push) Successful in 1m53s
As a small exercise, made the output of Stid135BbFrameReader bit-identical to the one of pts2bbf.cpp
2025-10-14 11:51:50 +02:00

77 lines
1.7 KiB
C#

using skyscraper5.Mpeg2;
using skyscraper5.Skyscraper;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace skyscraper8.GSE
{
internal class Stid135BbFrameReader : ITsPacketProcessor
{
private IGsEventHandler mpeEventHandler;
private IBbframeDeencapsulator deencapsulator;
public Stid135BbFrameReader(IGsEventHandler mpeEventHandler, IBbframeDeencapsulator deencapsulator = null)
{
if (deencapsulator == null)
deencapsulator = new BbframeDeencapsulator();
this.mpeEventHandler = mpeEventHandler;
this.deencapsulator = deencapsulator;
}
private long packetsRecovered;
private long packetsLost;
private MemoryStream outbuf;
private bool annoncementDone;
public void PushPacket(TsPacket packet)
{
byte[] packets = packet.RawPacket;
int pid = packets[1];
pid &= 0x01f;
pid <<= 8;
pid |= packets[2];
if (pid != 0x010e)
return;
if (outbuf == null)
outbuf = new MemoryStream();
if ((packets[8] & 0xff) == 0xb8)
{
if (outbuf.Length > 0)
{
byte[] completeBbframe = outbuf.ToArray();
deencapsulator.PushPacket(completeBbframe);
outbuf = new MemoryStream();
}
//Start indicaator
outbuf.Write(packets, 8, packets[7]);
}
else
{
outbuf.Write(packets, 9, packets[7] - 1);
}
/*if ((packets[8] & 0xff) == 0xb8)
{
if (outbuf != null)
{
byte[] chi = outbuf.ToArray();
deencapsulator.PushPacket(chi);
}
outbuf = new MemoryStream();
outbuf.Write(packets,9, packets[7] - 1);
}
else
{
if (outbuf != null)
outbuf.Write(packets, 9, packets[7] - 1);
}*/
}
}
}