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.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);

View File

@@ -140,6 +140,10 @@
<Project>{1DD41038-D885-46C5-8DDE-E0B82F066584}</Project>
<Name>CUETools.CDImage</Name>
</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">
<Project>{8CF07381-BEA2-4AFC-B3DD-9B2F21C65A3A}</Project>
<Name>CUETools.Ripper.SCSI</Name>

View File

@@ -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