mirror of
https://github.com/aaru-dps/Aaru.Decryption.git
synced 2025-12-16 19:24:33 +00:00
[Aaru.Decryption] Reformat and cleanup.
This commit is contained in:
131
DVD/MPEG.cs
131
DVD/MPEG.cs
@@ -44,44 +44,107 @@ namespace Aaru.Decryption.DVD;
|
||||
|
||||
public class MPEG
|
||||
{
|
||||
static byte[] _mpeg2PackHeaderStartCode =
|
||||
{
|
||||
0x0, 0x0, 0x1
|
||||
};
|
||||
#region Mpeg2StreamId enum
|
||||
|
||||
public enum Mpeg2StreamId : byte
|
||||
{
|
||||
ProgramEnd = 0xB9, PackHeader = 0xBA, SystemHeader = 0xBB,
|
||||
ProgramStreamMap = 0xBC, PrivateStream1 = 0xBD, PaddingStream = 0xBE,
|
||||
PrivateStream2 = 0xBF, EcmStream = 0xF0, EmmStream = 0xF1,
|
||||
ItuTRecH222_0_or_IsoIec13818_1AnnexA_or_IsoIec13818_6DsmccStream = 0xF2, IsoIec13522Stream = 0xF3,
|
||||
ItuTRecH222_1TypeA = 0xF4, ItuTRecH222_1TypeB = 0xF5, ItuTRecH222_1TypeC = 0xF6,
|
||||
ItuTRecH222_1TypeD = 0xF7, ItuTRecH222_1TypeE = 0xF8, AncillaryStream = 0xF9,
|
||||
Reserved1 = 0xFA, Reserved2 = 0xFB, Reserved3 = 0xFC,
|
||||
Reserved4 = 0xFD, Reserved5 = 0xFE, ProgramStreamDirectory = 0xFF,
|
||||
ProgramEnd = 0xB9,
|
||||
PackHeader = 0xBA,
|
||||
SystemHeader = 0xBB,
|
||||
ProgramStreamMap = 0xBC,
|
||||
PrivateStream1 = 0xBD,
|
||||
PaddingStream = 0xBE,
|
||||
PrivateStream2 = 0xBF,
|
||||
EcmStream = 0xF0,
|
||||
EmmStream = 0xF1,
|
||||
ItuTRecH222_0_or_IsoIec13818_1AnnexA_or_IsoIec13818_6DsmccStream = 0xF2,
|
||||
IsoIec13522Stream = 0xF3,
|
||||
ItuTRecH222_1TypeA = 0xF4,
|
||||
ItuTRecH222_1TypeB = 0xF5,
|
||||
ItuTRecH222_1TypeC = 0xF6,
|
||||
ItuTRecH222_1TypeD = 0xF7,
|
||||
ItuTRecH222_1TypeE = 0xF8,
|
||||
AncillaryStream = 0xF9,
|
||||
Reserved1 = 0xFA,
|
||||
Reserved2 = 0xFB,
|
||||
Reserved3 = 0xFC,
|
||||
Reserved4 = 0xFD,
|
||||
Reserved5 = 0xFE,
|
||||
ProgramStreamDirectory = 0xFF,
|
||||
|
||||
// DVD Video can only hold 8 audio streams
|
||||
MpegAudioStream1 = 0xC0, MpegAudioStream2 = 0xC1, MpegAudioStream3 = 0xC2,
|
||||
MpegAudioStream4 = 0xC3, MpegAudioStream5 = 0xC4, MpegAudioStream6 = 0xC5,
|
||||
MpegAudioStream7 = 0xC6, MpegAudioStream8 = 0xC7, MpegAudioStream9 = 0xC8,
|
||||
MpegAudioStream10 = 0xC9, MpegAudioStream11 = 0xCA, MpegAudioStream12 = 0xCB,
|
||||
MpegAudioStream13 = 0xCC, MpegAudioStream14 = 0xCD, MpegAudioStream15 = 0xCE,
|
||||
MpegAudioStream16 = 0xCF, MpegAudioStream17 = 0xD0, MpegAudioStream18 = 0xD1,
|
||||
MpegAudioStream19 = 0xD2, MpegAudioStream20 = 0xD3, MpegAudioStream21 = 0xD4,
|
||||
MpegAudioStream22 = 0xD5, MpegAudioStream23 = 0xD6, MpegAudioStream24 = 0xD7,
|
||||
MpegAudioStream25 = 0xD8, MpegAudioStream26 = 0xD9, MpegAudioStream27 = 0xDA,
|
||||
MpegAudioStream28 = 0xDB, MpegAudioStream29 = 0xDC, MpegAudioStream30 = 0xDD,
|
||||
MpegAudioStream31 = 0xDE, MpegAudioStream32 = 0xDF,
|
||||
MpegAudioStream1 = 0xC0,
|
||||
MpegAudioStream2 = 0xC1,
|
||||
MpegAudioStream3 = 0xC2,
|
||||
MpegAudioStream4 = 0xC3,
|
||||
MpegAudioStream5 = 0xC4,
|
||||
MpegAudioStream6 = 0xC5,
|
||||
MpegAudioStream7 = 0xC6,
|
||||
MpegAudioStream8 = 0xC7,
|
||||
MpegAudioStream9 = 0xC8,
|
||||
MpegAudioStream10 = 0xC9,
|
||||
MpegAudioStream11 = 0xCA,
|
||||
MpegAudioStream12 = 0xCB,
|
||||
MpegAudioStream13 = 0xCC,
|
||||
MpegAudioStream14 = 0xCD,
|
||||
MpegAudioStream15 = 0xCE,
|
||||
MpegAudioStream16 = 0xCF,
|
||||
MpegAudioStream17 = 0xD0,
|
||||
MpegAudioStream18 = 0xD1,
|
||||
MpegAudioStream19 = 0xD2,
|
||||
MpegAudioStream20 = 0xD3,
|
||||
MpegAudioStream21 = 0xD4,
|
||||
MpegAudioStream22 = 0xD5,
|
||||
MpegAudioStream23 = 0xD6,
|
||||
MpegAudioStream24 = 0xD7,
|
||||
MpegAudioStream25 = 0xD8,
|
||||
MpegAudioStream26 = 0xD9,
|
||||
MpegAudioStream27 = 0xDA,
|
||||
MpegAudioStream28 = 0xDB,
|
||||
MpegAudioStream29 = 0xDC,
|
||||
MpegAudioStream30 = 0xDD,
|
||||
MpegAudioStream31 = 0xDE,
|
||||
MpegAudioStream32 = 0xDF,
|
||||
|
||||
// DVD Video can only hold 1 video stream
|
||||
MpegVideStream1 = 0xE0, MpegVideStream2 = 0xE1, MpegVideStream3 = 0xE2,
|
||||
MpegVideStream4 = 0xE3, MpegVideStream5 = 0xE4, MpegVideStream6 = 0xE5,
|
||||
MpegVideStream7 = 0xE6, MpegVideStream8 = 0xE7, MpegVideStream9 = 0xE8,
|
||||
MpegVideStream10 = 0xE9, MpegVideStream11 = 0xEA, MpegVideStream12 = 0xEB,
|
||||
MpegVideStream13 = 0xEC, MpegVideStream14 = 0xED, MpegVideStream15 = 0xEE,
|
||||
MpegVideStream1 = 0xE0,
|
||||
MpegVideStream2 = 0xE1,
|
||||
MpegVideStream3 = 0xE2,
|
||||
MpegVideStream4 = 0xE3,
|
||||
MpegVideStream5 = 0xE4,
|
||||
MpegVideStream6 = 0xE5,
|
||||
MpegVideStream7 = 0xE6,
|
||||
MpegVideStream8 = 0xE7,
|
||||
MpegVideStream9 = 0xE8,
|
||||
MpegVideStream10 = 0xE9,
|
||||
MpegVideStream11 = 0xEA,
|
||||
MpegVideStream12 = 0xEB,
|
||||
MpegVideStream13 = 0xEC,
|
||||
MpegVideStream14 = 0xED,
|
||||
MpegVideStream15 = 0xEE,
|
||||
MpegVideStream16 = 0xEF
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
static readonly byte[] _mpeg2PackHeaderStartCode = { 0x0, 0x0, 0x1 };
|
||||
|
||||
public static bool ContainsMpegPackets(byte[] sectorData, uint blocks = 1, uint blockSize = 2048)
|
||||
{
|
||||
for(uint i = 0; i < blocks; i++)
|
||||
{
|
||||
if(IsMpegPacket(sectorData.Skip((int)(i * blockSize))))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool IsMpegPacket(IEnumerable<byte> sector) =>
|
||||
sector.Take(3).ToArray().SequenceEqual(_mpeg2PackHeaderStartCode);
|
||||
|
||||
#region Nested type: MpegHeader
|
||||
|
||||
public struct MpegHeader
|
||||
{
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
|
||||
@@ -94,15 +157,5 @@ public class MPEG
|
||||
byte packStuffingLengthBlock;
|
||||
}
|
||||
|
||||
public static bool ContainsMpegPackets(byte[] sectorData, uint blocks = 1, uint blockSize = 2048)
|
||||
{
|
||||
for(uint i = 0; i < blocks; i++)
|
||||
if(IsMpegPacket(sectorData.Skip((int)(i * blockSize))))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool IsMpegPacket(IEnumerable<byte> sector) =>
|
||||
sector.Take(3).ToArray().SequenceEqual(_mpeg2PackHeaderStartCode);
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user