skyscraper8/skyscraper8/GS/BBHeader.cs
feyris-tan 46798f4df1
All checks were successful
🚀 Pack skyscraper8 / make-zip (push) Successful in 1m36s
Improved the DVB-NIP via GSE reader by a ton!
2025-10-16 16:04:01 +02:00

82 lines
2.1 KiB
C#

using skyscraper5.Skyscraper;
namespace skyscraper8.GSE;
public class BBHeader : Validatable
{
public BBHeader(byte[] bbframe, int offset)
{
ReadOnlySpan<byte> BbHeaderSpan = new ReadOnlySpan<byte>(bbframe, offset, 10);
//byte 1, MATYPE-1
TsGs = (BbHeaderSpan[0] & 0xc0) >> 6;
SisMis = (BbHeaderSpan[0] & 0x20) != 0; //1 single, 0 multi
CcmAcm = (BbHeaderSpan[0] & 0x10) != 0; //1 ccm, 0 acm
Issyi = (BbHeaderSpan[0] & 0x08) != 0; //
Npd = (BbHeaderSpan[0] & 0x04) != 0;
Ro = (BbHeaderSpan[0] & 0x03);
Matype2 = (BbHeaderSpan[1]);
UserPacketLength = BbHeaderSpan[2] << 8 | BbHeaderSpan[3];
UserPacketLength /= 8;
DataFieldLength = BbHeaderSpan[4] << 8 | BbHeaderSpan[5];
DataFieldLength /= 8;
SyncByte = BbHeaderSpan[6];
SyncD = BbHeaderSpan[7] << 8 | BbHeaderSpan[8];
SyncD /= 8;
//ChecksumValid = DvbCrc8.Compute(BbHeaderSpan) == 0;
//Valid = ChecksumValid;
Valid = true;
}
public int SyncD { get; private set; }
public byte SyncByte { get; private set; }
public int DataFieldLength { get; private set; }
public int UserPacketLength { get; private set; }
/// <summary>
/// If MIS, this is the Input Stream Identifier
/// </summary>
public byte Matype2 { get; private set; }
/// <summary>
/// Transmission Roll-off factor
/// </summary>
public int Ro { get; private set; }
/// <summary>
/// Null Packet Deletion
/// </summary>
public bool Npd { get; private set; }
/// <summary>
/// If true, the ISSY field is inserted after UP
/// </summary>
public bool Issyi { get; set; }
/// <summary>
/// True if CCM, False if ACM
/// </summary>
public bool CcmAcm { get; private set; }
/// <summary>
/// True if SIS, False if MIS
/// </summary>
public bool SisMis { get; private set; }
/// <summary>
/// 0 = GS, packetized
/// 1 = GS, continuous
/// 2 = GSE-HEM
/// 3 = Transport
/// </summary>
public int TsGs { get; private set; }
}