From 7bbada8e53d91ea8a808e7564962f3e21c8a1f67 Mon Sep 17 00:00:00 2001 From: chudov Date: Thu, 24 Dec 2009 16:17:42 +0000 Subject: [PATCH] integrate FlaCuda --- CUETools.Processor/AudioReadWrite.cs | 10 +++++- CUETools.Processor/CUETools.Processor.csproj | 4 +++ CUETools.Processor/Processor.cs | 36 ++++++++++++++------ 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/CUETools.Processor/AudioReadWrite.cs b/CUETools.Processor/AudioReadWrite.cs index 5a51cef..183189d 100644 --- a/CUETools.Processor/AudioReadWrite.cs +++ b/CUETools.Processor/AudioReadWrite.cs @@ -3,6 +3,7 @@ using System.IO; using CUETools.Codecs; using CUETools.Codecs.ALAC; using CUETools.Codecs.FLAKE; +using CUETools.Codecs.FlaCuda; #if !MONO using CUETools.Codecs.FLAC; using CUETools.Codecs.WavPack; @@ -98,7 +99,14 @@ namespace CUETools.Processor dest = new FlakeWriter(path, bitsPerSample, channelCount, sampleRate, null); ((FlakeWriter)dest).PaddingLength = padding; ((FlakeWriter)dest).CompressionLevel = encoder.DefaultModeIndex; - dest = new BufferedWriter(dest, 128 * 1024); + //dest = new BufferedWriter(dest, 128 * 1024); + break; + case "FlaCudaWriter": + dest = new FlaCudaWriter(path, bitsPerSample, channelCount, sampleRate, null); + ((FlaCudaWriter)dest).PaddingLength = padding; + ((FlaCudaWriter)dest).CompressionLevel = encoder.DefaultModeIndex; + ((FlaCudaWriter)dest).DoVerify = config.flaCudaVerify; + ((FlaCudaWriter)dest).GPUOnly = config.flaCudaGPUOnly; break; case "ALACWriter": dest = new ALACWriter(path, bitsPerSample, channelCount, sampleRate, null); diff --git a/CUETools.Processor/CUETools.Processor.csproj b/CUETools.Processor/CUETools.Processor.csproj index fad3f3c..1649375 100644 --- a/CUETools.Processor/CUETools.Processor.csproj +++ b/CUETools.Processor/CUETools.Processor.csproj @@ -140,6 +140,10 @@ {1DD41038-D885-46C5-8DDE-E0B82F066584} CUETools.CDImage + + {DFE50673-906C-4B8F-993B-A24CAD1CA17D} + CUETools.Codecs.FlaCuda + {8CF07381-BEA2-4AFC-B3DD-9B2F21C65A3A} CUETools.Ripper.SCSI diff --git a/CUETools.Processor/Processor.cs b/CUETools.Processor/Processor.cs index 6b91342..1c3b42a 100644 --- a/CUETools.Processor/Processor.cs +++ b/CUETools.Processor/Processor.cs @@ -786,6 +786,8 @@ namespace CUETools.Processor public bool noUnverifiedOutput; public bool autoCorrectFilenames; public bool flacVerify; + public bool flaCudaVerify; + public bool flaCudaGPUOnly; public bool preserveHTOA; public int wvExtraMode; public bool wvStoreMD5; @@ -859,6 +861,8 @@ namespace CUETools.Processor autoCorrectFilenames = true; flacVerify = false; + flaCudaVerify = false; + flaCudaGPUOnly = false; preserveHTOA = true; wvExtraMode = 0; wvStoreMD5 = false; @@ -916,7 +920,8 @@ namespace CUETools.Processor encoders.Add(new CUEToolsUDC("ttalib", "tta", true, "", "", "TTAWriter")); #endif encoders.Add(new CUEToolsUDC("libFlake", "flac", true, "0 1 2 3 4 5 6 7 8 9 10 11", "7", "FlakeWriter")); - encoders.Add(new CUEToolsUDC("libALAC", "m4a", true, "0 1 2 3 4 5 6 7 8", "3", "ALACWriter")); + encoders.Add(new CUEToolsUDC("FlaCuda", "flac", true, "0 1 2 3 4 5 6 7 8 9 10 11", "8", "FlaCudaWriter")); + encoders.Add(new CUEToolsUDC("libALAC", "m4a", true, "0 1 2 3 4 5 6 7 8 9 10", "3", "ALACWriter")); encoders.Add(new CUEToolsUDC("builtin wav", "wav", true, "", "", "WAVWriter")); encoders.Add(new CUEToolsUDC("flake", "flac", true, "0 1 2 3 4 5 6 7 8 9 10 11", "10", "flake.exe", "-%M - -o %O -p %P")); encoders.Add(new CUEToolsUDC("takc", "tak", true, "0 1 2 2e 2m 3 3e 3m 4 4e 4m", "2", "takc.exe", "-e -p%M -overwrite - %O")); @@ -1012,6 +1017,8 @@ return processor.Go(); sw.Save("PreserveHTOA", preserveHTOA); sw.Save("AutoCorrectFilenames", autoCorrectFilenames); sw.Save("FLACVerify", flacVerify); + sw.Save("FlaCudaVerify", flaCudaVerify); + sw.Save("FlaCudaGPUOnly", flaCudaGPUOnly); sw.Save("WVExtraMode", wvExtraMode); sw.Save("WVStoreMD5", wvStoreMD5); sw.Save("KeepOriginalFilenames", keepOriginalFilenames); @@ -1139,6 +1146,8 @@ return processor.Go(); preserveHTOA = sr.LoadBoolean("PreserveHTOA") ?? true; autoCorrectFilenames = sr.LoadBoolean("AutoCorrectFilenames") ?? true; flacVerify = sr.LoadBoolean("FLACVerify") ?? false; + flaCudaVerify = sr.LoadBoolean("FlaCudaVerify") ?? false; + flaCudaGPUOnly = sr.LoadBoolean("FlaCudaGPUOnly") ?? false; wvExtraMode = sr.LoadInt32("WVExtraMode", 0, 6) ?? 0; wvStoreMD5 = sr.LoadBoolean("WVStoreMD5") ?? false; keepOriginalFilenames = sr.LoadBoolean("KeepOriginalFilenames") ?? false; @@ -3970,7 +3979,7 @@ return processor.Go(); public void WriteAudioFilesPass(string dir, CUEStyle style, int[] destLengths, bool htoaToFile, bool noOutput) { - const int buffLen = 16384; + const int buffLen = 0x8000; int iTrack, iIndex; int[,] sampleBuffer = new int[buffLen, 2]; TrackInfo track; @@ -4121,7 +4130,7 @@ return processor.Go(); if (trackLength > 0 && !_isCD) { double trackPercent = (double)currentOffset / trackLength; - ShowProgress(String.Format("{2} track {0:00} ({1:00}%)...", iIndex > 0 ? iTrack + 1 : iTrack, (uint)(100*trackPercent), + ShowProgress(String.Format("{2} track {0:00} ({1:00}%)...", iIndex > 0 ? iTrack + 1 : iTrack, (uint)(100 * trackPercent), noOutput ? "Verifying" : "Writing"), trackPercent, (int)diskOffset, (int)diskLength, _isCD ? string.Format("{0}: {1:00} - {2}", audioSource.Path, iTrack + 1, _tracks[iTrack].Title) : audioSource.Path, discardOutput ? null : audioDest.Path); } @@ -4154,9 +4163,11 @@ return processor.Go(); } } if (_useAccurateRip) + { _arVerify.Write(sampleBuffer, 0, (int)copyCount); - if (iTrack > 0 || iIndex > 0) - Tracks[iTrack + (iIndex == 0 ? -1 : 0)].MeasurePeakLevel(sampleBuffer, copyCount); + if (iTrack > 0 || iIndex > 0) + Tracks[iTrack + (iIndex == 0 ? -1 : 0)].MeasurePeakLevel(sampleBuffer, copyCount); + } currentOffset += copyCount; diskOffset += copyCount; @@ -5213,12 +5224,17 @@ return processor.Go(); _peakLevel = 0; } - public void MeasurePeakLevel(int[,] samplesBuffer, uint sampleCount) + public unsafe void MeasurePeakLevel(int[,] samplesBuffer, uint sampleCount) { - for (uint i = 0; i < sampleCount; i++) - for (uint j = 0; j < 2; j++) - if (_peakLevel < Math.Abs(samplesBuffer[i, j])) - _peakLevel = Math.Abs(samplesBuffer[i, j]); + fixed (int* s = samplesBuffer) + { + for (int i = 0; i < sampleCount * 2; i++) + _peakLevel = Math.Max(_peakLevel, Math.Abs(s[i])); + } + //for (uint i = 0; i < sampleCount; i++) + // for (uint j = 0; j < 2; j++) + // if (_peakLevel < Math.Abs(samplesBuffer[i, j])) + // _peakLevel = Math.Abs(samplesBuffer[i, j]); } public int PeakLevel