Example #1
0
        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));
            }
        }
Example #2
0
        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));
        }
Example #3
0
        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));
        }
Example #4
0
        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);
        }
Example #5
0
        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);
            }
        }
Example #6
0
        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);
        }