skyscraper8/skyscraper8/Scorcher/SdtGeneratorService.cs
feyris-tan ef86554f9a Import
2025-05-12 22:09:16 +02:00

63 lines
1.7 KiB
C#

using System.Collections.Generic;
using System.IO;
using skyscraper5.Dvb.Descriptors;
using skyscraper5.Dvb.Psi.Model;
using skyscraper5.Mpeg2;
using skyscraper5.Skyscraper.IO;
namespace skyscraper5.Scorcher
{
public class SdtGeneratorService
{
public SdtGeneratorService(ushort serviceId, bool eitScheduleFlag = false, bool eitPresentFollowingFlag = false, RunningStatus runningStatus = RunningStatus.Running, bool freeCaMode = false)
{
ServiceId = serviceId;
EitScheduleFlag = eitScheduleFlag;
EitPresentFollowingFlag = eitPresentFollowingFlag;
descriptors = new List<TsDescriptor>();
RunningStatus = runningStatus;
FreeCaMode = false;
}
public ushort ServiceId { get; private set; }
public bool EitScheduleFlag { get; }
public bool EitPresentFollowingFlag { get; private set; }
public RunningStatus RunningStatus { get; set; }
public bool FreeCaMode { get; set; }
private List<TsDescriptor> descriptors;
public byte[] SerializeDescriptors()
{
MemoryStream ms = new MemoryStream();
foreach (TsDescriptor descriptor in descriptors)
{
ms.WriteUInt8(descriptor.GetDescriptorId()); //descriptor_tag
byte[] descriptorBytes = descriptor.Serialize();
ms.WriteUInt8((byte)descriptorBytes.Length); //descriptor_length
ms.Write(descriptorBytes, 0, descriptorBytes.Length);
}
return ms.ToArray();
}
private bool hasName;
public bool AddName(string name, string providerName, ServiceDescriptor.ServiceTypeCoding type)
{
if (hasName)
return false;
ServiceDescriptor sd = new ServiceDescriptor(name, providerName, type);
descriptors.Add(sd);
hasName = true;
return true;
}
public void AddDescriptor(TsDescriptor descriptor)
{
descriptors.Add(descriptor);
}
}
}