FastVideoDSEncoder/FastVideoDSInfo/Program.cs
2022-10-13 11:27:48 +02:00

36 lines
1.4 KiB
C#

using System;
using System.Buffers.Binary;
using System.IO;
namespace Gericom.FastVideoDSInfo
{
internal class Program
{
static void Main(string[] args)
{
using var stream = File.OpenRead(args[0]);
stream.Position += 0x20;
var keyFrame0OffsBuf = new byte[4];
stream.Read(keyFrame0OffsBuf);
stream.Position = BinaryPrimitives.ReadUInt32LittleEndian(keyFrame0OffsBuf);
using var csvStream = File.CreateText(args[1]);
csvStream.WriteLine("frame;type;size;audioBlocks");
var frameHeaderBuf = new byte[4];
int frame = 0;
while (true)
{
if (stream.Read(frameHeaderBuf) < 4)
break;
uint frameHeader = BinaryPrimitives.ReadUInt32LittleEndian(frameHeaderBuf);
uint frameLen = frameHeader & 0x1FFFFu;
uint audioFrames = frameHeader >> 17;
stream.Read(frameHeaderBuf.AsSpan(0, 2));
bool isPFrame = (BinaryPrimitives.ReadUInt16LittleEndian(frameHeaderBuf) >> 15) == 1;
csvStream.WriteLine($"{frame};{(isPFrame ? "P" : "I")};{frameLen};{audioFrames}");
stream.Position += frameLen - 2;
stream.Position += audioFrames * 132 * 2;
frame++;
}
}
}
}