Neues Trikolor sample.
This commit is contained in:
parent
8e57830409
commit
cee4a4ad44
@ -982,7 +982,14 @@ namespace SDL2Demo.Jobs
|
|||||||
|
|
||||||
public void DsmCcModuleComplete(int elementaryPid, ushort moduleModuleId, byte moduleModuleVersion)
|
public void DsmCcModuleComplete(int elementaryPid, ushort moduleModuleId, byte moduleModuleVersion)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
DsmCcModuleIdentifier id = new DsmCcModuleIdentifier();
|
||||||
|
id.pid = elementaryPid;
|
||||||
|
id.moduleId = moduleModuleId;
|
||||||
|
id.moduleVersion = moduleModuleVersion;
|
||||||
|
lock (dsmCcDisplay)
|
||||||
|
{
|
||||||
|
dsmCcDisplay.Remove(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1436,7 +1443,7 @@ namespace SDL2Demo.Jobs
|
|||||||
|
|
||||||
public void NotifyScte35(ushort programNumber, SpliceInsert spliceInsert)
|
public void NotifyScte35(ushort programNumber, SpliceInsert spliceInsert)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NotifyScte35(ushort programNumber, TimeSignal spliceInsert)
|
public void NotifyScte35(ushort programNumber, TimeSignal spliceInsert)
|
||||||
@ -1446,7 +1453,7 @@ namespace SDL2Demo.Jobs
|
|||||||
|
|
||||||
public void SetMemorySaverMode(bool saveMemory)
|
public void SetMemorySaverMode(bool saveMemory)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NotifyDocsisCarrier(DocsisEnvironment docsisEnvironment)
|
public void NotifyDocsisCarrier(DocsisEnvironment docsisEnvironment)
|
||||||
|
|||||||
@ -8,6 +8,7 @@ using skyscraper5.DsmCc.Message;
|
|||||||
using skyscraper5.Dvb.DataBroadcasting.DataCarouselDescriptors;
|
using skyscraper5.Dvb.DataBroadcasting.DataCarouselDescriptors;
|
||||||
using skyscraper5.Mhp.Descriptors;
|
using skyscraper5.Mhp.Descriptors;
|
||||||
using skyscraper5.Mpeg2;
|
using skyscraper5.Mpeg2;
|
||||||
|
using skyscraper5.Mpeg2.Descriptors;
|
||||||
using skyscraper5.Mpeg2.Psi.Model;
|
using skyscraper5.Mpeg2.Psi.Model;
|
||||||
using skyscraper5.Skyscraper.IO;
|
using skyscraper5.Skyscraper.IO;
|
||||||
|
|
||||||
@ -98,6 +99,9 @@ namespace skyscraper5.Dvb.DataBroadcasting.Biop
|
|||||||
case nameof(LabelDescriptor):
|
case nameof(LabelDescriptor):
|
||||||
this.Label = ((LabelDescriptor)tsDescriptor).Label;
|
this.Label = ((LabelDescriptor)tsDescriptor).Label;
|
||||||
break;
|
break;
|
||||||
|
case nameof(UserDefinedDescriptor):
|
||||||
|
//TODO: Check private data specifiers and friends
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new NotImplementedException(name);
|
throw new NotImplementedException(name);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,6 +46,11 @@ namespace skyscraper8.Experimentals.NdsSsu
|
|||||||
_pid = pid;
|
_pid = pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void HandleTable(byte tableId, int sourcePid, byte[] payload)
|
||||||
|
{
|
||||||
|
_handler.OnNdsSsuError(_pid, NdsSsuError.SectionSyntaxIndicatorMissing);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void HandleTable(byte tableId, int sourcePid, byte sectionNumber, byte lastSectionNumber, ushort tableIdExtension,
|
protected override void HandleTable(byte tableId, int sourcePid, byte sectionNumber, byte lastSectionNumber, ushort tableIdExtension,
|
||||||
byte[] payload)
|
byte[] payload)
|
||||||
{
|
{
|
||||||
@ -55,7 +60,7 @@ namespace skyscraper8.Experimentals.NdsSsu
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (payload[0] != 0x01)
|
if (payload[0] >= 0x02)
|
||||||
{
|
{
|
||||||
_handler.OnNdsSsuError(_pid, NdsSsuError.InvalidMagic);
|
_handler.OnNdsSsuError(_pid, NdsSsuError.InvalidMagic);
|
||||||
return;
|
return;
|
||||||
@ -84,11 +89,11 @@ namespace skyscraper8.Experimentals.NdsSsu
|
|||||||
|
|
||||||
if (tidExtensions[tableIdExtension])
|
if (tidExtensions[tableIdExtension])
|
||||||
{
|
{
|
||||||
_handler.OnNdsSsuProgress(_pid,tableIdExtension, sectionNumber, lastSectionNumber, payload[3]);
|
_handler.OnNdsSsuProgress(_pid,tableIdExtension, sectionNumber, lastSectionNumber, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_handler.OnNdsFileAccouncement(_pid,tableIdExtension);
|
_handler.OnNdsSsuFileAnnouncement(_pid,tableIdExtension);
|
||||||
tidExtensions[tableIdExtension] = true;
|
tidExtensions[tableIdExtension] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -104,14 +109,43 @@ namespace skyscraper8.Experimentals.NdsSsu
|
|||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnNdsSsuProgress(int pid, ushort tableIdExtension, byte sectionNumber, byte lastSectionNumber, byte b)
|
private int maxNumFiles;
|
||||||
|
private int numFiles;
|
||||||
|
public void OnNdsSsuFileAnnouncement(int pid, ushort tableIdExtension)
|
||||||
{
|
{
|
||||||
|
if (pid == 0x157e)
|
||||||
|
ToString();
|
||||||
|
|
||||||
|
if (maxNumFiles == 0)
|
||||||
|
{
|
||||||
|
maxNumFiles = 2;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
numFiles++;
|
||||||
|
if (numFiles == maxNumFiles)
|
||||||
|
{
|
||||||
|
maxNumFiles *= 2;
|
||||||
|
Score--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnNdsSsuFileComplete(int pid, ushort tableIdExtension, NdsSsuDataMap dataMap)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnNdsSsuProgress(int pid, ushort tableIdExtension, int blocksDone, int blocksTotal, bool theresMore)
|
||||||
|
{
|
||||||
|
if (pid == 0x157e)
|
||||||
|
ToString();
|
||||||
|
|
||||||
Score++;
|
Score++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnNdsFileAccouncement(int pid, ushort tableIdExtension)
|
public bool TestNdsSsuFileExists(int pid, ushort tableIdExtension)
|
||||||
{
|
{
|
||||||
Score--;
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,13 +9,16 @@ namespace skyscraper8.Experimentals.NdsSsu
|
|||||||
interface NdsSsuHandler
|
interface NdsSsuHandler
|
||||||
{
|
{
|
||||||
void OnNdsSsuError(int pid, NdsSsuError error);
|
void OnNdsSsuError(int pid, NdsSsuError error);
|
||||||
void OnNdsSsuProgress(int pid, ushort tableIdExtension, byte sectionNumber, byte lastSectionNumber, byte b);
|
void OnNdsSsuFileAnnouncement(int pid, ushort tableIdExtension);
|
||||||
void OnNdsFileAccouncement(int pid, ushort tableIdExtension);
|
void OnNdsSsuFileComplete(int pid, ushort tableIdExtension, NdsSsuDataMap dataMap);
|
||||||
|
void OnNdsSsuProgress(int pid, ushort tableIdExtension, int blocksDone, int blocksTotal, bool theresMore);
|
||||||
|
bool TestNdsSsuFileExists(int pid, ushort tableIdExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum NdsSsuError
|
public enum NdsSsuError
|
||||||
{
|
{
|
||||||
WrongTable,
|
WrongTable,
|
||||||
InvalidMagic
|
InvalidMagic,
|
||||||
|
SectionSyntaxIndicatorMissing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
using skyscraper8.Mpeg2.Psi;
|
using skyscraper8.Mpeg2.Psi;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Pipes;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection.Metadata;
|
using System.Reflection.Metadata;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -19,6 +21,12 @@ namespace skyscraper8.Experimentals.NdsSsu
|
|||||||
_pid = pid;
|
_pid = pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int error;
|
||||||
|
protected override void HandleTable(byte tableId, int sourcePid, byte[] payload)
|
||||||
|
{
|
||||||
|
error++;
|
||||||
|
}
|
||||||
|
|
||||||
protected override void HandleTable(byte tableId, int sourcePid, byte sectionNumber, byte lastSectionNumber, ushort tableIdExtension, byte[] payload)
|
protected override void HandleTable(byte tableId, int sourcePid, byte sectionNumber, byte lastSectionNumber, ushort tableIdExtension, byte[] payload)
|
||||||
{
|
{
|
||||||
if (tableId != 0x9e)
|
if (tableId != 0x9e)
|
||||||
@ -51,90 +59,231 @@ namespace skyscraper8.Experimentals.NdsSsu
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (payload[3] > 0x10)
|
if (payload[3] > 0x20)
|
||||||
{
|
{
|
||||||
_handler.OnNdsSsuError(_pid, NdsSsuError.InvalidMagic);
|
_handler.OnNdsSsuError(_pid, NdsSsuError.InvalidMagic);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dataMaps == null)
|
if (dataMaps == null)
|
||||||
dataMaps = new DataMap[ushort.MaxValue];
|
dataMaps = new NdsSsuDataMap[ushort.MaxValue];
|
||||||
if (dataMaps[tableIdExtension] == null)
|
if (dataMaps[tableIdExtension] == null)
|
||||||
{
|
{
|
||||||
dataMaps[tableIdExtension] = new DataMap();
|
dataMaps[tableIdExtension] = new NdsSsuDataMap();
|
||||||
_handler.OnNdsFileAccouncement(_pid, tableIdExtension);
|
if (!_handler.TestNdsSsuFileExists(_pid, tableIdExtension))
|
||||||
|
{
|
||||||
|
_handler.OnNdsSsuFileAnnouncement(_pid, tableIdExtension);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (dataMaps[tableIdExtension].WasProcessed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (dataMaps[tableIdExtension].WasAlreadyPushed(payload, sectionNumber, lastSectionNumber))
|
if (dataMaps[tableIdExtension].WasAlreadyPushed(payload, sectionNumber, lastSectionNumber))
|
||||||
{
|
{
|
||||||
throw new NotImplementedException("the file is completed!");
|
if (dataMaps[tableIdExtension].IsComplete)
|
||||||
|
{
|
||||||
|
_handler.OnNdsSsuFileComplete(_pid, tableIdExtension, dataMaps[tableIdExtension]);
|
||||||
|
dataMaps[tableIdExtension].SetSucessfullyProcessed();
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
dataMaps[tableIdExtension].PushPacket(payload,sectionNumber,lastSectionNumber);
|
dataMaps[tableIdExtension].PushPacket(payload,sectionNumber,lastSectionNumber);
|
||||||
|
|
||||||
|
Tuple<int, int, bool> completionStatus = dataMaps[tableIdExtension].GetCompletionStatus();
|
||||||
|
_handler.OnNdsSsuProgress(_pid, tableIdExtension, completionStatus.Item1, completionStatus.Item2, completionStatus.Item3);
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataMap[] dataMaps;
|
private NdsSsuDataMap[] dataMaps;
|
||||||
class DataMap
|
}
|
||||||
{
|
|
||||||
|
|
||||||
private Superblock[] superblocks;
|
public class NdsSsuDataMap : IDisposable
|
||||||
public void PushPacket(byte[] payload,byte currentSection, byte lastSection)
|
{
|
||||||
|
|
||||||
|
private Superblock[] superblocks;
|
||||||
|
|
||||||
|
public void PushPacket(byte[] payload, byte currentSection, byte lastSection)
|
||||||
|
{
|
||||||
|
byte maxNumSuperblocks = payload[3];
|
||||||
|
maxNumSuperblocks++;
|
||||||
|
if (superblocks == null)
|
||||||
|
superblocks = new Superblock[maxNumSuperblocks];
|
||||||
|
if (superblocks.Length < maxNumSuperblocks)
|
||||||
|
Array.Resize(ref superblocks, maxNumSuperblocks);
|
||||||
|
if (superblocks[payload[3]] == null)
|
||||||
{
|
{
|
||||||
byte maxNumSuperblocks = payload[3];
|
superblocks[payload[3]] = new Superblock(lastSection);
|
||||||
maxNumSuperblocks++;
|
|
||||||
if (superblocks == null)
|
|
||||||
superblocks = new Superblock[maxNumSuperblocks];
|
|
||||||
if (superblocks.Length < maxNumSuperblocks)
|
|
||||||
Array.Resize(ref superblocks, maxNumSuperblocks);
|
|
||||||
if (superblocks[payload[3]] == null)
|
|
||||||
{
|
|
||||||
superblocks[payload[3]] = new Superblock(lastSection);
|
|
||||||
}
|
|
||||||
superblocks[payload[3]].PushPacket(payload,currentSection,lastSection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Superblock
|
superblocks[payload[3]].PushPacket(payload, currentSection, lastSection);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Superblock : IDisposable
|
||||||
|
{
|
||||||
|
private byte[][] blocks;
|
||||||
|
|
||||||
|
public Superblock(byte lastSection)
|
||||||
{
|
{
|
||||||
private byte[][] blocks;
|
int maxNumBlocks = lastSection;
|
||||||
public Superblock(byte lastSection)
|
maxNumBlocks++;
|
||||||
{
|
blocks = new byte[maxNumBlocks][];
|
||||||
int maxNumBlocks = lastSection;
|
}
|
||||||
maxNumBlocks++;
|
|
||||||
blocks = new byte[maxNumBlocks][];
|
|
||||||
}
|
|
||||||
|
|
||||||
public void PushPacket(byte[] payload, byte currentSection, byte lastSection)
|
public void PushPacket(byte[] payload, byte currentSection, byte lastSection)
|
||||||
{
|
{
|
||||||
int maxNumBlocks = lastSection;
|
int maxNumBlocks = lastSection;
|
||||||
maxNumBlocks++;
|
maxNumBlocks++;
|
||||||
if (blocks.Length > maxNumBlocks)
|
if (blocks.Length > maxNumBlocks)
|
||||||
Array.Resize(ref blocks, maxNumBlocks);
|
Array.Resize(ref blocks, maxNumBlocks);
|
||||||
blocks[currentSection] = payload;
|
blocks[currentSection] = payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool WasAlreadyPushed(byte currentSection)
|
public bool WasAlreadyPushed(byte currentSection)
|
||||||
{
|
{
|
||||||
byte maxNumBlocks = currentSection;
|
byte maxNumBlocks = currentSection;
|
||||||
maxNumBlocks++;
|
maxNumBlocks++;
|
||||||
|
|
||||||
if (blocks.Length < currentSection)
|
if (blocks.Length < currentSection)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return blocks[currentSection] != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsComplete
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (blocks == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return blocks[currentSection] != null;
|
for (int i = 0; i < blocks.Length; i++)
|
||||||
|
{
|
||||||
|
if (blocks[i] == null)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool WasAlreadyPushed(byte[] payload, byte sectionNumber, byte lastSectionNumber)
|
public int BlocksDone
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
int result = 0;
|
||||||
|
for (int i = 0; i < blocks.Length; i++)
|
||||||
|
{
|
||||||
|
if (blocks[i] != null)
|
||||||
|
result++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int BlocksTotal => blocks.Length;
|
||||||
|
|
||||||
|
public void WriteToStream(Stream fileStream)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < blocks.Length; i++)
|
||||||
|
{
|
||||||
|
fileStream.Write(blocks[i], 4, blocks[i].Length - 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < blocks.Length; i++)
|
||||||
|
{
|
||||||
|
blocks[i] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool WasAlreadyPushed(byte[] payload, byte sectionNumber, byte lastSectionNumber)
|
||||||
|
{
|
||||||
|
if (superblocks == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
byte maxNumSuperblocks = payload[3];
|
||||||
|
maxNumSuperblocks++;
|
||||||
|
if (superblocks.Length < maxNumSuperblocks)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (superblocks[payload[3]] == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return superblocks[payload[3]].WasAlreadyPushed(sectionNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsComplete
|
||||||
|
{
|
||||||
|
get
|
||||||
{
|
{
|
||||||
if (superblocks == null)
|
if (superblocks == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
byte maxNumSuperblocks = payload[3];
|
for (int i = 0; i < superblocks.Length; i++)
|
||||||
maxNumSuperblocks++;
|
{
|
||||||
if (superblocks.Length < maxNumSuperblocks)
|
if (superblocks[i] == null)
|
||||||
return false;
|
return false;
|
||||||
|
if (!superblocks[i].IsComplete)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return superblocks[payload[3]].WasAlreadyPushed(sectionNumber);
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Tuple<int, int, bool> GetCompletionStatus()
|
||||||
|
{
|
||||||
|
int done = 0;
|
||||||
|
int total = 0;
|
||||||
|
bool theresMore = false;
|
||||||
|
for (int i = 0; i < this.superblocks.Length; i++)
|
||||||
|
{
|
||||||
|
if (superblocks[i] != null)
|
||||||
|
{
|
||||||
|
done += superblocks[i].BlocksDone;
|
||||||
|
total += superblocks[i].BlocksTotal;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
theresMore = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Tuple<int, int, bool>(done, total, theresMore);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool WasProcessed { get; private set; }
|
||||||
|
|
||||||
|
public void SetSucessfullyProcessed()
|
||||||
|
{
|
||||||
|
WasProcessed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void WriteToStream(Stream fileStream)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < superblocks.Length; x++)
|
||||||
|
{
|
||||||
|
superblocks[x].WriteToStream(fileStream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
for (int x = 0; x < superblocks.Length; x++)
|
||||||
|
{
|
||||||
|
superblocks[x].Dispose();
|
||||||
|
superblocks[x] = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -120,6 +120,7 @@ namespace skyscraper8.Experimentals.OtvSsu
|
|||||||
Score--;
|
Score--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void OnOtvSsuFileAnnouncement(int pid, ushort tableIdExtension, uint fileId, uint unknown1, uint length)
|
public void OnOtvSsuFileAnnouncement(int pid, ushort tableIdExtension, uint fileId, uint unknown1, uint length)
|
||||||
{
|
{
|
||||||
Score--;
|
Score--;
|
||||||
|
|||||||
@ -17,6 +17,12 @@ namespace skyscraper8.Experimentals.OtvSsu
|
|||||||
_handler = handler;
|
_handler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int errors;
|
||||||
|
protected override void HandleTable(byte tableId, int sourcePid, byte[] payload)
|
||||||
|
{
|
||||||
|
errors++;
|
||||||
|
}
|
||||||
|
|
||||||
private Dictionary<Coordinate, DataMap> _dataMaps;
|
private Dictionary<Coordinate, DataMap> _dataMaps;
|
||||||
protected override void HandleTable(byte tableId, int sourcePid, byte sectionNumber, byte lastSectionNumber, ushort tableIdExtension, byte[] payload)
|
protected override void HandleTable(byte tableId, int sourcePid, byte sectionNumber, byte lastSectionNumber, ushort tableIdExtension, byte[] payload)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
"profiles": {
|
"profiles": {
|
||||||
"skyscraper8": {
|
"skyscraper8": {
|
||||||
"commandName": "Project",
|
"commandName": "Project",
|
||||||
"commandLineArgs": "\"C:\\Temp\\bem-service-a01.ts\"",
|
"commandLineArgs": "\"C:\\Users\\Sascha Schiemann\\Downloads\\36E-12226L(1)\\36E-12226L.ts\"",
|
||||||
"remoteDebugEnabled": false
|
"remoteDebugEnabled": false
|
||||||
},
|
},
|
||||||
"Container (Dockerfile)": {
|
"Container (Dockerfile)": {
|
||||||
|
|||||||
@ -306,6 +306,12 @@ namespace skyscraper5.Skyscraper.Scraper
|
|||||||
if (id == 0x09b5)
|
if (id == 0x09b5)
|
||||||
return "NDS Videoguard (?)";
|
return "NDS Videoguard (?)";
|
||||||
|
|
||||||
|
if ((id >= 0x7700) && (id <= 0x7704))
|
||||||
|
return "Cifra";
|
||||||
|
|
||||||
|
if (id == 0x2710)
|
||||||
|
return "DRE-Crypt";
|
||||||
|
|
||||||
return "???";
|
return "???";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -587,7 +587,10 @@ namespace skyscraper5.Skyscraper.Scraper
|
|||||||
//DvbContext.RegisterPacketProcessor(mappingStream.ElementaryPid, new PacketDumper(new FileInfo("subtitle.ts")));
|
//DvbContext.RegisterPacketProcessor(mappingStream.ElementaryPid, new PacketDumper(new FileInfo("subtitle.ts")));
|
||||||
break;
|
break;
|
||||||
case StreamType.DvbMhp:
|
case StreamType.DvbMhp:
|
||||||
DvbContext.RegisterPacketProcessor(mappingStream.ElementaryPid,
|
//Test and make up component tags.
|
||||||
|
if (!mappingStream.ComponentTag.HasValue)
|
||||||
|
MakeUpComponentTags(result);
|
||||||
|
DvbContext.RegisterPacketProcessor(mappingStream.ElementaryPid,
|
||||||
new PsiDecoder(mappingStream.ElementaryPid,
|
new PsiDecoder(mappingStream.ElementaryPid,
|
||||||
new DataCarouselDecoder(mappingStream, result, DataCarouselIntention.NoIntention, this)));
|
new DataCarouselDecoder(mappingStream, result, DataCarouselIntention.NoIntention, this)));
|
||||||
break;
|
break;
|
||||||
@ -2941,17 +2944,26 @@ namespace skyscraper5.Skyscraper.Scraper
|
|||||||
|
|
||||||
public void OnNdsSsuError(int pid, NdsSsuError error)
|
public void OnNdsSsuError(int pid, NdsSsuError error)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnNdsSsuProgress(int pid, ushort tableIdExtension, byte sectionNumber, byte lastSectionNumber, byte b)
|
public void OnNdsSsuFileAnnouncement(int pid, ushort tableIdExtension)
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnNdsFileAccouncement(int pid, ushort tableIdExtension)
|
|
||||||
{
|
{
|
||||||
LogEvent(SkyscraperContextEvent.NdsSsuFileAnnounced, String.Format("PID = 0x{1:X4}, Table ID Extension = {0}", tableIdExtension, pid));
|
LogEvent(SkyscraperContextEvent.NdsSsuFileAnnounced, String.Format("PID = 0x{1:X4}, Table ID Extension = {0}", tableIdExtension, pid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnNdsSsuFileComplete(int pid, ushort tableIdExtension, NdsSsuDataMap dataMap)
|
||||||
|
{
|
||||||
|
ObjectStorage.OnNdsSsuComplete(CurrentNetworkId, CurrentTransportStreamId, pid, tableIdExtension, dataMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnNdsSsuProgress(int pid, ushort tableIdExtension, int blocksDone, int blocksTotal, bool theresMore)
|
||||||
|
{
|
||||||
|
LogEvent(SkyscraperContextEvent.NdsSsuProgress, String.Format("PID 0x{0:X4}, File ID {1}, Blocks: {2}/{3}{4}", pid, tableIdExtension, blocksDone, blocksTotal, theresMore ? "+" : ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool TestNdsSsuFileExists(int pid, ushort tableIdExtension)
|
||||||
|
{
|
||||||
|
return ObjectStorage.NdsSsuTestFile(CurrentNetworkId, CurrentTransportStreamId, pid, tableIdExtension);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -84,6 +84,7 @@
|
|||||||
FluteFileAnnouncement,
|
FluteFileAnnouncement,
|
||||||
OtvSsuFileDetected,
|
OtvSsuFileDetected,
|
||||||
OtvSsuComplete,
|
OtvSsuComplete,
|
||||||
NdsSsuFileAnnounced
|
NdsSsuFileAnnounced,
|
||||||
|
NdsSsuProgress
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,6 +35,7 @@ using skyscraper5.src.Skyscraper.Scraper.Storage.InMemory;
|
|||||||
using skyscraper5.Teletext;
|
using skyscraper5.Teletext;
|
||||||
using skyscraper8.DvbI;
|
using skyscraper8.DvbI;
|
||||||
using skyscraper8.DvbNip;
|
using skyscraper8.DvbNip;
|
||||||
|
using skyscraper8.Experimentals.NdsSsu;
|
||||||
using skyscraper8.Ietf.FLUTE;
|
using skyscraper8.Ietf.FLUTE;
|
||||||
using skyscraper8.Ses;
|
using skyscraper8.Ses;
|
||||||
using skyscraper8.Skyscraper.Drawing;
|
using skyscraper8.Skyscraper.Drawing;
|
||||||
@ -1452,7 +1453,9 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.Filesystem
|
|||||||
|
|
||||||
public bool TestForSgtList(SgtList list)
|
public bool TestForSgtList(SgtList list)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
string path = Path.Combine(rootDirectory.FullName, "Astra-SGT", list.ServiceListId.ToString() + ".json");
|
||||||
|
FileInfo fi = new FileInfo(path);
|
||||||
|
return fi.Exists;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InsertSgtList(SgtList list)
|
public void InsertSgtList(SgtList list)
|
||||||
@ -1552,6 +1555,32 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.Filesystem
|
|||||||
getStream.Dispose();
|
getStream.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnNdsSsuComplete(int? currentNetworkId, int? currentTransportStreamId, int pid, ushort tableIdExtension,
|
||||||
|
NdsSsuDataMap dataMap)
|
||||||
|
{
|
||||||
|
string cnid = currentNetworkId.HasValue ? currentNetworkId.Value.ToString() : "unknown";
|
||||||
|
string ctsid = currentTransportStreamId.HasValue ? currentTransportStreamId.Value.ToString() : "unknown";
|
||||||
|
string fname = tableIdExtension.ToString() + ".bin";
|
||||||
|
string path = Path.Combine(rootDirectory.FullName, "NDS-SSU", cnid, ctsid, pid.ToString(), fname);
|
||||||
|
FileInfo fi = new FileInfo(path);
|
||||||
|
fi.Directory.EnsureExists();
|
||||||
|
FileStream fileStream = fi.OpenWrite();
|
||||||
|
dataMap.WriteToStream(fileStream);
|
||||||
|
fileStream.Flush(true);
|
||||||
|
fileStream.Close();
|
||||||
|
dataMap.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool NdsSsuTestFile(int? currentNetworkId, int? currentTransportStreamId, int pid, ushort tableIdExtension)
|
||||||
|
{
|
||||||
|
string cnid = currentNetworkId.HasValue ? currentNetworkId.Value.ToString() : "unknown";
|
||||||
|
string ctsid = currentTransportStreamId.HasValue ? currentTransportStreamId.Value.ToString() : "unknown";
|
||||||
|
string fname = tableIdExtension.ToString() + ".bin";
|
||||||
|
string path = Path.Combine(rootDirectory.FullName, "NDS-SSU", cnid, ctsid, pid.ToString(), fname);
|
||||||
|
FileInfo fi = new FileInfo(path);
|
||||||
|
return fi.Exists;
|
||||||
|
}
|
||||||
|
|
||||||
class NipPds
|
class NipPds
|
||||||
{
|
{
|
||||||
public DateTime VersionUpdate;
|
public DateTime VersionUpdate;
|
||||||
|
|||||||
@ -669,7 +669,7 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.InMemory
|
|||||||
{
|
{
|
||||||
if (dsmCcBlacklist == null)
|
if (dsmCcBlacklist == null)
|
||||||
{
|
{
|
||||||
FileInfo fi = new FileInfo("dsmcc_blacklist.csv");
|
FileInfo fi = new FileInfo("dsmcc_fail_history.csv");
|
||||||
dsmCcBlacklist = new DsmCcModuleBlacklist(fi);
|
dsmCcBlacklist = new DsmCcModuleBlacklist(fi);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1120,7 +1120,13 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.InMemory
|
|||||||
|
|
||||||
public void FailDsmCcDownload(DatabaseKeyDsmCcModule key, double value)
|
public void FailDsmCcDownload(DatabaseKeyDsmCcModule key, double value)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (dsmCcBlacklist == null)
|
||||||
|
{
|
||||||
|
FileInfo fi = new FileInfo("dsmcc_fail_history.csv");
|
||||||
|
dsmCcBlacklist = new DsmCcModuleBlacklist(fi);
|
||||||
|
}
|
||||||
|
|
||||||
|
dsmCcBlacklist.AddFailedModule(key.CurrentNetworkId, key.CurrentTransportStreamId, key.ElementaryPid, key.ModuleId, key.ModuleVersion, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TestForTerminalBurstTimePlan(ushort interactiveNetworkId, uint groupId)
|
public bool TestForTerminalBurstTimePlan(ushort interactiveNetworkId, uint groupId)
|
||||||
|
|||||||
@ -10,10 +10,10 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.InMemory.Model
|
|||||||
public DsmCcModuleBlacklist(FileInfo fi)
|
public DsmCcModuleBlacklist(FileInfo fi)
|
||||||
{
|
{
|
||||||
entries = new List<Tuple<int, int, int, ushort, byte>>();
|
entries = new List<Tuple<int, int, int, ushort, byte>>();
|
||||||
if (!fi.Exists)
|
ListPath = fi;
|
||||||
|
if (!fi.Exists)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ListPath = fi;
|
|
||||||
StreamReader streamReader = fi.OpenText();
|
StreamReader streamReader = fi.OpenText();
|
||||||
while (!streamReader.EndOfStream)
|
while (!streamReader.EndOfStream)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
|||||||
using skyscraper5.Dvb.DataBroadcasting.SkyscraperVfs;
|
using skyscraper5.Dvb.DataBroadcasting.SkyscraperVfs;
|
||||||
using skyscraper5.Dvb.Descriptors;
|
using skyscraper5.Dvb.Descriptors;
|
||||||
using skyscraper8.DvbNip;
|
using skyscraper8.DvbNip;
|
||||||
|
using skyscraper8.Experimentals.NdsSsu;
|
||||||
using skyscraper8.Ietf.FLUTE;
|
using skyscraper8.Ietf.FLUTE;
|
||||||
using skyscraper8.Skyscraper.Drawing;
|
using skyscraper8.Skyscraper.Drawing;
|
||||||
|
|
||||||
@ -111,5 +112,16 @@ namespace skyscraper8.Skyscraper.Scraper.Storage
|
|||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnNdsSsuComplete(int? currentNetworkId, int? currentTransportStreamId, int pid, ushort tableIdExtension,
|
||||||
|
NdsSsuDataMap dataMap)
|
||||||
|
{
|
||||||
|
dataMap.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool NdsSsuTestFile(int? currentNetworkId, int? currentTransportStreamId, int pid, ushort tableIdExtension)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ using skyscraper5.Dvb.DataBroadcasting.SkyscraperVfs;
|
|||||||
using skyscraper5.Dvb.Descriptors;
|
using skyscraper5.Dvb.Descriptors;
|
||||||
using skyscraper5.Teletext;
|
using skyscraper5.Teletext;
|
||||||
using skyscraper8.DvbNip;
|
using skyscraper8.DvbNip;
|
||||||
|
using skyscraper8.Experimentals.NdsSsu;
|
||||||
using skyscraper8.Ietf.FLUTE;
|
using skyscraper8.Ietf.FLUTE;
|
||||||
using skyscraper8.Skyscraper.Drawing;
|
using skyscraper8.Skyscraper.Drawing;
|
||||||
|
|
||||||
@ -33,5 +34,7 @@ namespace skyscraper8.Skyscraper.Scraper.Storage
|
|||||||
void DeleteRfSpectrum(Guid selectedGuid);
|
void DeleteRfSpectrum(Guid selectedGuid);
|
||||||
bool OtvSsuTestFile(int? currentNetworkId, int? currentTransportStreamId, int sourcePid, ushort tableIdExtension, uint fileId, uint unknown1, uint length);
|
bool OtvSsuTestFile(int? currentNetworkId, int? currentTransportStreamId, int sourcePid, ushort tableIdExtension, uint fileId, uint unknown1, uint length);
|
||||||
void OnOtvSsuComplete(int? currentNetworkId, int? currentTransportStreamId, int sourcePid, Stream getStream, ushort tableIdExtension, uint fileId, uint unknown1, uint length);
|
void OnOtvSsuComplete(int? currentNetworkId, int? currentTransportStreamId, int sourcePid, Stream getStream, ushort tableIdExtension, uint fileId, uint unknown1, uint length);
|
||||||
|
void OnNdsSsuComplete(int? currentNetworkId, int? currentTransportStreamId, int pid, ushort tableIdExtension, NdsSsuDataMap dataMap);
|
||||||
|
bool NdsSsuTestFile(int? currentNetworkId, int? currentTransportStreamId, int pid, ushort tableIdExtension);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user