public static long OffsetToMpegHeader(FileInfo file) { long tagSize = TagUtils.TagSizeV2(file); using (Stream s = VirtualDrive.OpenInStream(file.FullName)) { s.Seek(tagSize, SeekOrigin.Begin); return(tagSize + TagUtils.OffsetToFirstMpegHeader(s)); } }
private static void TestTagUtilsWriteRawSmallerQuantizeAbove() { string fileName = VirtualDrive.VirtualFileName("TestTagUtilsWriteRawSmallerQuantizeAbove\\t1.mp3"); TestTags.WriteDemoMp3(fileName, TestTags.demoTag2_4); FileInfo fileInfo = new FileInfo(fileName); TagUtils.WriteTagV2(TestTags.demoTag2_3, fileInfo, Rewriter.Strategy.Quantize); UnitTest.Test(TagUtils.TagSizeV2(new FileInfo(fileName)) % Rewriter.BlockSize == 0); TagUtils.StripTagV2(new FileInfo(fileName), 0); UnitTest.Test(ArrayUtils.IsEqual(VirtualDrive.Load(fileName), TestTags.mpegDummy)); }
private static void TestTagUtilsWriteRawSmallerNeverShrink() { string fileName = VirtualDrive.VirtualFileName("TestTagUtilsWriteRawSmallerNeverShrink\\t1.mp3"); TestTags.WriteDemoMp3(fileName, TestTags.demoTag2_4); FileInfo fileInfo = new FileInfo(fileName); TagUtils.WriteTagV2(TestTags.demoTag2_3, fileInfo, Rewriter.Strategy.NeverShrink); UnitTest.Test(TagUtils.TagSizeV2(fileInfo) == TestTags.demoTag2_4.Length); TagUtils.StripTagV2(fileInfo, 0); UnitTest.Test(ArrayUtils.IsEqual(VirtualDrive.Load(fileName), TestTags.mpegDummy)); }
public int Rewrite(int bytesRequired, FileInfo file) { int padding = CalculatePadding(bytesRequired, file); if (padding < bytesRequired) { throw new Exception("CalculatePadding failed! Padding too small!"); } if (TagUtils.TagSizeV2(file) != padding) { TagUtils.StripTagV2(file, padding); } return(padding); }
public static long OffsetTagToMpegHeader(FileInfo file) { long tagSize = TagUtils.TagSizeV2(file); using (Stream s = VirtualDrive.OpenInStream(file.FullName)) { s.Seek(tagSize, SeekOrigin.Begin); long offset = TagUtils.OffsetToFirstMpegHeader(s); if (offset > 0) { Logger.WriteLine(Tokens.Warning, "Tag V2 has wrong size. Offset to MPEG header: " + offset + " in file " + file.FullName); } return(offset); } }
private int CalculatePadding(int bytesRequired, FileInfo file) { int padding = 0; switch (CurrentStrategy) { case Strategy.Exact: padding = bytesRequired; break; case Strategy.NeverShrink: padding = Math.Max(bytesRequired, TagUtils.TagSizeV2(file)); break; case Strategy.Quantize: padding = CeilBlockSize(bytesRequired); break; default: throw new Exception("Unknown write strategy"); } return(padding); }