integrate FlaCuda

This commit is contained in:
chudov
2009-12-24 16:17:42 +00:00
parent 0a91d0436a
commit 7bbada8e53
3 changed files with 39 additions and 11 deletions

View File

@@ -3,6 +3,7 @@ using System.IO;
using CUETools.Codecs; using CUETools.Codecs;
using CUETools.Codecs.ALAC; using CUETools.Codecs.ALAC;
using CUETools.Codecs.FLAKE; using CUETools.Codecs.FLAKE;
using CUETools.Codecs.FlaCuda;
#if !MONO #if !MONO
using CUETools.Codecs.FLAC; using CUETools.Codecs.FLAC;
using CUETools.Codecs.WavPack; using CUETools.Codecs.WavPack;
@@ -98,7 +99,14 @@ namespace CUETools.Processor
dest = new FlakeWriter(path, bitsPerSample, channelCount, sampleRate, null); dest = new FlakeWriter(path, bitsPerSample, channelCount, sampleRate, null);
((FlakeWriter)dest).PaddingLength = padding; ((FlakeWriter)dest).PaddingLength = padding;
((FlakeWriter)dest).CompressionLevel = encoder.DefaultModeIndex; ((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; break;
case "ALACWriter": case "ALACWriter":
dest = new ALACWriter(path, bitsPerSample, channelCount, sampleRate, null); dest = new ALACWriter(path, bitsPerSample, channelCount, sampleRate, null);

View File

@@ -140,6 +140,10 @@
<Project>{1DD41038-D885-46C5-8DDE-E0B82F066584}</Project> <Project>{1DD41038-D885-46C5-8DDE-E0B82F066584}</Project>
<Name>CUETools.CDImage</Name> <Name>CUETools.CDImage</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\CUETools.FlaCuda\CUETools.Codecs.FlaCuda.csproj">
<Project>{DFE50673-906C-4B8F-993B-A24CAD1CA17D}</Project>
<Name>CUETools.Codecs.FlaCuda</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.Ripper.SCSI\CUETools.Ripper.SCSI.csproj"> <ProjectReference Include="..\CUETools.Ripper.SCSI\CUETools.Ripper.SCSI.csproj">
<Project>{8CF07381-BEA2-4AFC-B3DD-9B2F21C65A3A}</Project> <Project>{8CF07381-BEA2-4AFC-B3DD-9B2F21C65A3A}</Project>
<Name>CUETools.Ripper.SCSI</Name> <Name>CUETools.Ripper.SCSI</Name>

View File

@@ -786,6 +786,8 @@ namespace CUETools.Processor
public bool noUnverifiedOutput; public bool noUnverifiedOutput;
public bool autoCorrectFilenames; public bool autoCorrectFilenames;
public bool flacVerify; public bool flacVerify;
public bool flaCudaVerify;
public bool flaCudaGPUOnly;
public bool preserveHTOA; public bool preserveHTOA;
public int wvExtraMode; public int wvExtraMode;
public bool wvStoreMD5; public bool wvStoreMD5;
@@ -859,6 +861,8 @@ namespace CUETools.Processor
autoCorrectFilenames = true; autoCorrectFilenames = true;
flacVerify = false; flacVerify = false;
flaCudaVerify = false;
flaCudaGPUOnly = false;
preserveHTOA = true; preserveHTOA = true;
wvExtraMode = 0; wvExtraMode = 0;
wvStoreMD5 = false; wvStoreMD5 = false;
@@ -916,7 +920,8 @@ namespace CUETools.Processor
encoders.Add(new CUEToolsUDC("ttalib", "tta", true, "", "", "TTAWriter")); encoders.Add(new CUEToolsUDC("ttalib", "tta", true, "", "", "TTAWriter"));
#endif #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("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("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("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")); 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("PreserveHTOA", preserveHTOA);
sw.Save("AutoCorrectFilenames", autoCorrectFilenames); sw.Save("AutoCorrectFilenames", autoCorrectFilenames);
sw.Save("FLACVerify", flacVerify); sw.Save("FLACVerify", flacVerify);
sw.Save("FlaCudaVerify", flaCudaVerify);
sw.Save("FlaCudaGPUOnly", flaCudaGPUOnly);
sw.Save("WVExtraMode", wvExtraMode); sw.Save("WVExtraMode", wvExtraMode);
sw.Save("WVStoreMD5", wvStoreMD5); sw.Save("WVStoreMD5", wvStoreMD5);
sw.Save("KeepOriginalFilenames", keepOriginalFilenames); sw.Save("KeepOriginalFilenames", keepOriginalFilenames);
@@ -1139,6 +1146,8 @@ return processor.Go();
preserveHTOA = sr.LoadBoolean("PreserveHTOA") ?? true; preserveHTOA = sr.LoadBoolean("PreserveHTOA") ?? true;
autoCorrectFilenames = sr.LoadBoolean("AutoCorrectFilenames") ?? true; autoCorrectFilenames = sr.LoadBoolean("AutoCorrectFilenames") ?? true;
flacVerify = sr.LoadBoolean("FLACVerify") ?? false; flacVerify = sr.LoadBoolean("FLACVerify") ?? false;
flaCudaVerify = sr.LoadBoolean("FlaCudaVerify") ?? false;
flaCudaGPUOnly = sr.LoadBoolean("FlaCudaGPUOnly") ?? false;
wvExtraMode = sr.LoadInt32("WVExtraMode", 0, 6) ?? 0; wvExtraMode = sr.LoadInt32("WVExtraMode", 0, 6) ?? 0;
wvStoreMD5 = sr.LoadBoolean("WVStoreMD5") ?? false; wvStoreMD5 = sr.LoadBoolean("WVStoreMD5") ?? false;
keepOriginalFilenames = sr.LoadBoolean("KeepOriginalFilenames") ?? 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) 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 iTrack, iIndex;
int[,] sampleBuffer = new int[buffLen, 2]; int[,] sampleBuffer = new int[buffLen, 2];
TrackInfo track; TrackInfo track;
@@ -4154,9 +4163,11 @@ return processor.Go();
} }
} }
if (_useAccurateRip) if (_useAccurateRip)
{
_arVerify.Write(sampleBuffer, 0, (int)copyCount); _arVerify.Write(sampleBuffer, 0, (int)copyCount);
if (iTrack > 0 || iIndex > 0) if (iTrack > 0 || iIndex > 0)
Tracks[iTrack + (iIndex == 0 ? -1 : 0)].MeasurePeakLevel(sampleBuffer, copyCount); Tracks[iTrack + (iIndex == 0 ? -1 : 0)].MeasurePeakLevel(sampleBuffer, copyCount);
}
currentOffset += copyCount; currentOffset += copyCount;
diskOffset += copyCount; diskOffset += copyCount;
@@ -5213,12 +5224,17 @@ return processor.Go();
_peakLevel = 0; _peakLevel = 0;
} }
public void MeasurePeakLevel(int[,] samplesBuffer, uint sampleCount) public unsafe void MeasurePeakLevel(int[,] samplesBuffer, uint sampleCount)
{ {
for (uint i = 0; i < sampleCount; i++) fixed (int* s = samplesBuffer)
for (uint j = 0; j < 2; j++) {
if (_peakLevel < Math.Abs(samplesBuffer[i, j])) for (int i = 0; i < sampleCount * 2; i++)
_peakLevel = Math.Abs(samplesBuffer[i, j]); _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 public int PeakLevel