Updated the build system, now using .NET Framework v4.0 for most things

This commit is contained in:
Grigory Chudov
2018-03-11 17:07:48 -04:00
parent a66bfe28cc
commit 929b7de944
905 changed files with 13647 additions and 216371 deletions

7
.gitignore vendored
View File

@@ -3,11 +3,12 @@ obj/
bin/
lib/
Release/
Debug/
*.vcxproj.user
*.csproj.user
*.sdf
*.suo
*.opensdf
Win32/
x64/
ia32/
a32/
launchSettings.json
/CUETools/TestResults

View File

@@ -1,22 +0,0 @@
syntax: glob
CUETools.AVX/Release
CUETools.CLParity
*.vcxproj.user
CUETools.Codecs.DirectSound
obj
_UpgradeReport_Files
MAC_SDK/Source/MACLib/Release
MAC_SDK/Source/MACLib/x64
ttalib-1.1/x64
*.sdf
*.suo
*.opensdf
CUETools.AVX/Win32
CUETools.AVX/x64
CUETools/TestResults/
*.csproj.user
bin/
flac/src/libFLAC/ia32/*.obj
CUETools/ipch/
flac/src/libFLAC/x64/
flac/src/libFLAC/Release/

View File

@@ -1,117 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{B75FA7AD-968E-4990-B342-1B4B17C850DF}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Bwg.Hardware</RootNamespace>
<TargetFrameworks>net40;net20</TargetFrameworks>
<Version>0.0.7.1</Version>
<AssemblyName>Bwg.Hardware</AssemblyName>
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<RootNamespace>Bwg.Hardware</RootNamespace>
<Product>BwgBurn</Product>
<Description>CD-R/CD-RW/DVD-R/DVD-RW burning program for Windows XP: devices.</Description>
<Copyright>Copyright © 2006 by Jack W. Griffin, Jr.</Copyright>
<Authors>Jack W. Griffin, Jr</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputPath>..\bin\$(Configuration)\plugins</OutputPath>
<RepositoryUrl>https://svn.code.sf.net/p/bwgburn/code/</RepositoryUrl>
<RepositoryType>svn</RepositoryType>
<Company>BwgSoftware</Company>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Debug\Bwg.Hardware.XML</DocumentationFile>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\plugins\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="HardwareDevice.cs" />
<Compile Include="HardwareManager.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,35 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Bwg.Hardware")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("BwgSoftware")]
[assembly: AssemblyProduct("BwgBurn")]
[assembly: AssemblyCopyright("Copyright © 2006 by Jack W. Griffin, Jr.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("de5dc145-3520-47ee-8988-205a142c6177")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("0.0.7.1")]
[assembly: AssemblyFileVersion("0.0.7.1")]

View File

@@ -1,3 +0,0 @@
<?xml version="1.0"?>
<configuration>
<startup/></configuration>

View File

@@ -1,125 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{F2DFEB00-BB35-4665-85EA-CB8C7729A6B7}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Bwg.Logging</RootNamespace>
<TargetFrameworks>net40;net20</TargetFrameworks>
<Version>0.0.7.1</Version>
<AssemblyName>Bwg.Logging</AssemblyName>
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<RootNamespace>Bwg.Logging</RootNamespace>
<Product>BwgBurn</Product>
<Description>CD-R/CD-RW/DVD-R/DVD-RW burning program for Windows XP: logging.</Description>
<Copyright>Copyright © 2006 by Jack W. Griffin, Jr.</Copyright>
<Authors>Jack W. Griffin, Jr</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputPath>..\bin\$(Configuration)\plugins</OutputPath>
<RepositoryUrl>https://svn.code.sf.net/p/bwgburn/code/</RepositoryUrl>
<RepositoryType>svn</RepositoryType>
<Company>BwgSoftware</Company>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Debug\Bwg.Logging.XML</DocumentationFile>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\plugins\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>
</DocumentationFile>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ConsoleSink.cs" />
<Compile Include="FileSink.cs" />
<Compile Include="Logger.cs" />
<Compile Include="MemorySink.cs" />
<Compile Include="MessageAddedArgs.cs" />
<Compile Include="TeeSink.cs" />
<Compile Include="UserMessage.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Sink.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,35 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Bwg.Logging")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("BwgSoftware")]
[assembly: AssemblyProduct("BwgBurn")]
[assembly: AssemblyCopyright("Copyright © 2006 by Jack W. Griffin, Jr.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("216f12e9-2978-457c-95d6-32b4b87a361d")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("0.0.7.1")]
[assembly: AssemblyFileVersion("0.0.7.1")]

View File

@@ -1,3 +0,0 @@
<?xml version="1.0"?>
<configuration>
<startup/></configuration>

View File

@@ -1,162 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{A05B6AA6-0EC3-495D-BCC4-ECE1210071A8}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Bwg.Scsi</RootNamespace>
<TargetFrameworks>net40;net20</TargetFrameworks>
<Version>0.0.7.1</Version>
<AssemblyName>Bwg.Scsi</AssemblyName>
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RootNamespace>Bwg.Scsi</RootNamespace>
<Product>BwgBurn</Product>
<Description>CD-R/CD-RW/DVD-R/DVD-RW burning program for Windows XP: Windows SCSI interface.</Description>
<Copyright>Copyright © 2006 by Jack W. Griffin, Jr.</Copyright>
<Authors>Jack W. Griffin, Jr</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DocumentationFile>bin\Debug\Bwg.Scsi.XML</DocumentationFile>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<OutputPath>..\bin\$(Configuration)\plugins</OutputPath>
<RepositoryUrl>https://svn.code.sf.net/p/bwgburn/code/</RepositoryUrl>
<RepositoryType>svn</RepositoryType>
<Company>BwgSoftware</Company>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\plugins\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DocumentationFile>
</DocumentationFile>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AtipInfo.cs" />
<Compile Include="CapacityDescriptor.cs" />
<Compile Include="Command.cs" />
<Compile Include="Defs.cs" />
<Compile Include="Device.cs" />
<Compile Include="DeviceInfo.cs" />
<Compile Include="DeviceManager.cs" />
<Compile Include="DeviceManagerRescanArgs.cs" />
<Compile Include="DiskInformation.cs" />
<Compile Include="EventStatusNotification.cs" />
<Compile Include="Feature.cs" />
<Compile Include="FeatureList.cs" />
<None Include="app.config" />
<None Include="FileReader.cs" />
<Compile Include="FormatParameterList.cs" />
<Compile Include="HeaderData.cs" />
<Compile Include="InitializationPattern.cs" />
<Compile Include="InquiryResult.cs" />
<Compile Include="MinuteSecondFrame.cs" />
<Compile Include="ModePage.cs" />
<Compile Include="ModeTable.cs" />
<Compile Include="OpcTableEntry.cs" />
<Compile Include="Performance.cs" />
<Compile Include="PerformanceList.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Result.cs" />
<Compile Include="SpeedDescriptor.cs" />
<Compile Include="SpeedDescriptorList.cs" />
<Compile Include="SubheaderData.cs" />
<Compile Include="TocEntry.cs" />
<Compile Include="TrackInformation.cs" />
<Compile Include="WinDev.cs" />
<Compile Include="WriteBuffer.cs" />
<Compile Include="WriteBufferPool.cs" />
<Compile Include="WriteBufferStream.cs" />
<Compile Include="WriteParameterModePage.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Bwg.Logging\Bwg.Logging.csproj">
<Project>{F2DFEB00-BB35-4665-85EA-CB8C7729A6B7}</Project>
<Name>Bwg.Logging</Name>
<ItemDefinitionGroup>
<ProjectReference>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
</ItemDefinitionGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<ProjectReference Include="..\Bwg.Logging\Bwg.Logging.csproj" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Messages.resx">
</EmbeddedResource>
<EmbeddedResource Include="Messages.ru-RU.resx" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,142 +0,0 @@
//
// BwgBurn - CD-R/CD-RW/DVD-R/DVD-RW burning program for Windows XP
//
// Copyright (C) 2006 by Jack W. Griffin (butchg@comcast.net)
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the
//
// Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330,
// Boston, MA 02111-1307 USA
//
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
//using Bwg.Utils;
namespace Bwg.Scsi
{
/// <summary>
/// This class reads data from a file and sends this data to the buffered
/// write stream.
/// </summary>
public unsafe class FileReader
{
#region private member variables
/// <summary>
/// The OS file for reading data from a file into a memory buffer (IntPtr)
/// </summary>
private OsFileReader m_reader;
/// <summary>
/// The buffer pool to receive the data
/// </summary>
private WriteBufferPool m_buffer_stream;
#endregion
/// <summary>
/// Create a new file reader that sends the data read to a buffer stream
/// object
/// </summary>
/// <param name="buffer">the buffer to receive the data</param>
public FileReader(WriteBufferPool buffer)
{
m_buffer_stream = buffer;
m_reader = new OsFileReader();
}
/// <summary>
/// Open a file to read data from
/// </summary>
/// <param name="filename">the name of the file</param>
/// <returns>true if the file is opened, false otherwise</returns>
public bool Open(string filename)
{
return m_reader.Open(filename);
}
/// <summary>
/// This method closes an open file.
/// </summary>
/// <returns>true if the file is closed sucessfully, false otherwise</returns>
public bool Close()
{
return m_reader.Close();
}
/// <summary>
/// This function reads data from the file and sends it to the
/// buffer stream to be sent to the burner. This function does not
/// return until all of the data from the file is read.
/// </summary>
/// <returns></returns>
public bool ReadData(int sector_size, long lba)
{
bool shortbuf = false;
int NumberRead ;
int num_sectors ;
bool first = true;
// This is the number of whole sectors that will fit into the buffer.
num_sectors = m_buffer_stream.PageSize / sector_size;
while (true)
{
WriteBuffer buf ;
buf = m_buffer_stream.GetFreeBuffer();
if (!m_reader.ReadData(buf.BufferPtr, num_sectors * sector_size, out NumberRead))
return false ;
// If the read succeeded, but read zero bytes, we have reached the
// end of the file.
if (NumberRead == 0)
return true;
if (shortbuf)
throw new Exception("read two short packets");
// Mark the buffer with the amount of data that has
// been read from the file
int sectors = NumberRead / sector_size ;
if ((NumberRead % sector_size) != 0)
{
shortbuf = true;
sectors++;
}
if (first)
{
buf.SourceString = "First block from FileReader";
buf.LogicalBlockAddress = lba;
first = false;
}
else
{
buf.SourceString = "Not first block from FileReader";
buf.LogicalBlockAddress = long.MaxValue;
}
buf.SectorSize = sector_size;
buf.DataSize = sectors;
// Send the buffer to the device
m_buffer_stream.SendBufferToDevice(buf);
}
}
}
}

View File

@@ -1,35 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Bwg.Scsi")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("BwgSoftware")]
[assembly: AssemblyProduct("BwgBurn")]
[assembly: AssemblyCopyright("Copyright © 2006 by Jack W. Griffin, Jr.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("d8330703-34ac-4124-a059-ba011391cc2e")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("0.0.7.1")]
[assembly: AssemblyFileVersion("0.0.7.1")]

View File

@@ -1,3 +0,0 @@
<?xml version="1.0"?>
<configuration>
<startup/></configuration>

View File

@@ -1,131 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{CA4D64E6-6544-4A29-8BA5-7DB08D50D072}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CUEControls</RootNamespace>
<TargetFrameworks>net40;net20</TargetFrameworks>
<Version>2.1.6.0</Version>
<AssemblyName>CUEControls</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RootNamespace>CUEControls</RootNamespace>
<Product>CUETools</Product>
<Description>Library containing windows GUI controls for CUETools.</Description>
<Copyright>Copyright (c) 2008-2018 Grigory Chudov</Copyright>
<Authors>Grigory Chudov</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<OutputPath>..\bin\$(Configuration)\</OutputPath>
<RepositoryUrl>https://github.com/gchudov/cuetools.net</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company />
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="FileSystemTreeView.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="FileSystemTreeView.Designer.cs">
<DependentUpon>FileSystemTreeView.cs</DependentUpon>
</Compile>
<Compile Include="IIconManager.cs" />
<Compile Include="ImgComboBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="MediaSlider.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="MediaSlider.designer.cs">
<DependentUpon>MediaSlider.cs</DependentUpon>
</Compile>
<Compile Include="PeakMeterCtrl.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="PeakMeterCtrl.designer.cs">
<DependentUpon>PeakMeterCtrl.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="ShellIconMgr.cs" />
<Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<SubType>Designer</SubType>
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="pmicon.bmp" />
<None Include="Resources\folder.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -10,7 +10,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CUEPlayer</RootNamespace>
<AssemblyName>CUEPlayer</AssemblyName>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<IsWebBootstrapper>false</IsWebBootstrapper>
<FileUpgradeFlags>
@@ -31,12 +31,13 @@
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\bin\Debug\</OutputPath>
<OutputPath>..\bin\Debug\net40\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -45,7 +46,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\</OutputPath>
<OutputPath>..\bin\Release\net40\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -71,12 +72,6 @@
</Compile>
<Compile Include="DataSet1.cs">
<DependentUpon>DataSet1.xsd</DependentUpon>
<SubType>Component</SubType>
</Compile>
<Compile Include="DataSet1.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>DataSet1.xsd</DependentUpon>
</Compile>
<Compile Include="Deck.cs">
<SubType>Form</SubType>
@@ -162,10 +157,12 @@
<ProjectReference Include="..\CUEControls\CUEControls.csproj">
<Project>{CA4D64E6-6544-4A29-8BA5-7DB08D50D072}</Project>
<Name>CUEControls</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\CUETools.CDImage\CUETools.CDImage.csproj">
<Project>{1DD41038-D885-46C5-8DDE-E0B82F066584}</Project>
<Name>CUETools.CDImage</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\CUETools.Codecs.CoreAudio\CUETools.Codecs.CoreAudio.csproj">
<Project>{FAD09EE2-D6B2-4A8E-9F1C-2A9FB293661A}</Project>
@@ -178,6 +175,7 @@
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj">
<Project>{6458A13A-30EF-45A9-9D58-E5031B17BEE2}</Project>
<Name>CUETools.Codecs</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\CUETools.DSP.Mixer\CUETools.DSP.Mixer.csproj">
<Project>{AFF1AFF9-839D-4892-88CD-8BD09BAFC1D2}</Project>
@@ -190,6 +188,7 @@
<ProjectReference Include="..\CUETools.Processor\CUETools.Processor.csproj">
<Project>{4911BD82-49EF-4858-8B51-5394F86739A4}</Project>
<Name>CUETools.Processor</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\ProgressODoom\ProgressODoom.csproj">
<Project>{8DD1E84B-0B03-4C0B-9B42-1E49F75E7CB1}</Project>
@@ -234,7 +233,6 @@
<None Include="DataSet1.xsd">
<SubType>Designer</SubType>
<Generator>MSDataSetGenerator</Generator>
<LastGenOutput>DataSet1.Designer.cs</LastGenOutput>
</None>
<None Include="DataSet1.xss">
<DependentUpon>DataSet1.xsd</DependentUpon>

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,7 @@ namespace CUEPlayer
{
public partial class Output : Form
{
private IWavePlayer _player;
private CUETools.Codecs.CoreAudio.IWavePlayer _player;
private AudioBuffer resampled;
private SOXResampler _resampler;
private MMDevice _device;

View File

@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.239
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -19,7 +19,7 @@ namespace CUEPlayer.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@@ -60,6 +60,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap cog {
get {
object obj = ResourceManager.GetObject("cog", resourceCulture);
@@ -67,6 +70,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_eject {
get {
object obj = ResourceManager.GetObject("control_eject", resourceCulture);
@@ -74,6 +80,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_eject_blue {
get {
object obj = ResourceManager.GetObject("control_eject_blue", resourceCulture);
@@ -81,6 +90,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_end_blue {
get {
object obj = ResourceManager.GetObject("control_end_blue", resourceCulture);
@@ -88,6 +100,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_equalizer_blue {
get {
object obj = ResourceManager.GetObject("control_equalizer_blue", resourceCulture);
@@ -95,6 +110,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_fastforward_blue {
get {
object obj = ResourceManager.GetObject("control_fastforward_blue", resourceCulture);
@@ -102,6 +120,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_pause_blue {
get {
object obj = ResourceManager.GetObject("control_pause_blue", resourceCulture);
@@ -109,6 +130,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_play_blue {
get {
object obj = ResourceManager.GetObject("control_play_blue", resourceCulture);
@@ -116,6 +140,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_repeat_blue {
get {
object obj = ResourceManager.GetObject("control_repeat_blue", resourceCulture);
@@ -123,6 +150,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_rewind_blue {
get {
object obj = ResourceManager.GetObject("control_rewind_blue", resourceCulture);
@@ -130,6 +160,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_start_blue {
get {
object obj = ResourceManager.GetObject("control_start_blue", resourceCulture);
@@ -137,6 +170,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap control_stop_blue {
get {
object obj = ResourceManager.GetObject("control_stop_blue", resourceCulture);
@@ -144,6 +180,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ctdb {
get {
object obj = ResourceManager.GetObject("ctdb", resourceCulture);
@@ -151,6 +190,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap sound {
get {
object obj = ResourceManager.GetObject("sound", resourceCulture);
@@ -158,6 +200,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap sound_mute {
get {
object obj = ResourceManager.GetObject("sound_mute", resourceCulture);
@@ -165,6 +210,9 @@ namespace CUEPlayer.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap transmit_blue {
get {
object obj = ResourceManager.GetObject("transmit_blue", resourceCulture);

View File

@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.239
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -12,7 +12,7 @@ namespace CUEPlayer.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

View File

@@ -1,15 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="CUEPlayer.Properties.Settings.CUEPlayerConnectionString"
connectionString="Data Source=|DataDirectory|\CUEPlayer.sdf"
providerName="Microsoft.SqlServerCe.Client.3.5" />
<add name="CUEPlayer.Properties.Settings.CUEPlayerConnectionString" connectionString="Data Source=|DataDirectory|\CUEPlayer.sdf" providerName="Microsoft.SqlServerCe.Client.3.5"/>
</connectionStrings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="plugins (x64)"/>
</assemblyBinding>
</runtime>
</configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

8
CUERipper.WPF/App.xaml Normal file
View File

@@ -0,0 +1,8 @@
<Application x:Class="CUERipper.WPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
<Application.Resources>
</Application.Resources>
</Application>

16
CUERipper.WPF/App.xaml.cs Normal file
View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;
namespace CUERipper.WPF
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}

View File

@@ -0,0 +1,158 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{2D8D7A03-DFFA-44EF-9299-8BB56D122245}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CUERipper.WPF</RootNamespace>
<AssemblyName>CUERipper.WPF</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\bin\Debug\net40\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\net40\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationFramework">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="Window1.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Window1.xaml.cs">
<DependentUpon>Window1.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<AppDesigner Include="Properties\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CUEControls\CUEControls.csproj">
<Project>{CA4D64E6-6544-4A29-8BA5-7DB08D50D072}</Project>
<Name>CUEControls</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.CDImage\CUETools.CDImage.csproj">
<Project>{1DD41038-D885-46C5-8DDE-E0B82F066584}</Project>
<Name>CUETools.CDImage</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.Processor\CUETools.Processor.csproj">
<Project>{4911BD82-49EF-4858-8B51-5394F86739A4}</Project>
<Name>CUETools.Processor</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Resource Include="musicbrainz.ico" />
</ItemGroup>
<ItemGroup>
<Resource Include="freedb16.png" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,15 +1,17 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CUETools.Codecs.CoreAudio")]
[assembly: AssemblyTitle("CUERipper.WPF")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("CUETools.Codecs.CoreAudio")]
[assembly: AssemblyProduct("CUERipper.WPF")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -19,8 +21,25 @@ using System.Runtime.InteropServices;
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("f597837f-dd1c-4e0f-b915-0e929bf0dd35")]
//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
// Version information for an assembly consists of the following four values:
//

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace CUERipper.WPF.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CUERipper.WPF.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace CUERipper.WPF.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -0,0 +1,95 @@
<Window x:Class="CUERipper.WPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CUERipper" Height="504" Width="623" ResizeMode="CanResize" SizeToContent="Manual" Background="#efefef" Loaded="Window_Loaded"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Window.Resources>
<!--<Image></Image>
<XmlDataProvider x:Key="data" XPath="Images/Image">
<x:XData>
<Images xxmlns="">
<Image Name="Apple"></Image>
</Images>
</x:XData>
</XmlDataProvider>-->
</Window.Resources>
<Grid Height="Auto" Width="Auto" Margin="10,10,10,10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="249*" />
<RowDefinition Height="110*" />
<RowDefinition Height="30*" />
</Grid.RowDefinitions>
<ListView Name="listView1" Grid.Row="3" IsTabStop="True" ItemsSource="{Binding SelectedRelease.metadata.Tracks}" Margin="0,5">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Title}" Width="50" >Track</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Title}" Width="300">Title</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Artist}" Width="200">Artist</GridViewColumn>
</GridView>
<!--<GridView ColumnHeaderContainerStyle="{DynamicResource CustomHeaderStyle}"></GridView>-->
</ListView.View>
</ListView>
<ProgressBar Name="progressBar1" HorizontalAlignment="Right" Width="158" Grid.Row="4" Margin="0,0,14,12" Height="20" VerticalAlignment="Bottom" />
<ComboBox Name="comboBox1" IsEditable="False" ClipToBounds="False" IsReadOnly="False" SelectedItem="{Binding SelectedDrive}" ItemsSource="{Binding Drives}" Padding="4,0" VerticalContentAlignment="Center" Margin="0,5">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Icon}" Width="Auto" Margin="1,1,5,1" MinWidth="16" MinHeight="16"></Image>
<TextBlock Text="{Binding Name}" Width="Auto"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<ComboBox x:Name="comboBoxReleases" Grid.Row="1" IsEditable="False" ClipToBounds="False" Padding="4,0" SelectedItem="{Binding SelectedRelease}" ItemsSource="{Binding Releases}" VerticalContentAlignment="Center" Margin="0,5">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImageKey}" Width="Auto" Margin="1,1,5,1" MinWidth="16" MinHeight="16"></Image>
<TextBlock Text="{Binding}" Width="Auto"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<GroupBox Name="groupBox1" Grid.Row="4" Margin="6,6,178,12">
<Grid Height="auto" Name="grid1" Width="auto">
<Grid.RowDefinitions>
<RowDefinition Height="100*" />
<RowDefinition Height="100*" />
<RowDefinition Height="100*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="104*" />
<ColumnDefinition Width="104*" />
<ColumnDefinition Width="88*" />
<ColumnDefinition Width="119.5*" />
</Grid.ColumnDefinitions>
<ComboBox Margin="10,5,10,5" Name="comboBox3" SelectedIndex="0" Padding="4,1" VerticalContentAlignment="Center">
<ComboBoxItem>lossless</ComboBoxItem>
<ComboBoxItem>lossy</ComboBoxItem>
</ComboBox>
<ComboBox Margin="10,5,10,5" Name="comboBox4" Grid.Row="1" SelectedIndex="0" Padding="4,1" VerticalContentAlignment="Center">
<ComboBoxItem>image</ComboBoxItem>
<ComboBoxItem>tracks</ComboBoxItem>
</ComboBox>
<ComboBox Margin="10,5,10,5" Name="comboBox5" Grid.Column="1" Padding="4,1" />
<ComboBox Margin="10,5,10,5" Name="comboBox6" Grid.Column="1" Grid.Row="1" Padding="4,1" />
<Slider Grid.ColumnSpan="2" Grid.Row="2" Margin="25,3,25,3" Name="slider1" TickPlacement="BottomRight" />
<Slider Grid.Column="3" Grid.Row="2" Margin="15,3,15,3" Name="slider2" />
<CheckBox Grid.Column="3" Grid.Row="1" Margin="15,3,15,3" Name="checkBox1">EAC log</CheckBox>
<TextBox Grid.Column="3" Margin="56,5,10,5" Name="textBox1" />
</Grid>
</GroupBox>
<Button HorizontalAlignment="Right" Width="158" Margin="0,14,14,52" Grid.Row="4">Ok</Button>
<StatusBar Grid.Row="5" Height="Auto" HorizontalAlignment="Stretch" Name="statusBar1" VerticalAlignment="Stretch" Width="Auto">
<StatusBarItem HorizontalAlignment="Right" VerticalAlignment="Center">
<ProgressBar Width="84" Height="15"></ProgressBar>
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right" VerticalAlignment="Center">
<ProgressBar Width="84" Height="15"></ProgressBar>
</StatusBarItem>
</StatusBar>
</Grid>
</Window>

View File

@@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using CUETools.CDImage;
using CUETools.Processor;
namespace CUERipper.WPF
{
public class DriveInfo
{
public string Name { get; set; }
public string Icon { get; set; }
}
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
private CUEControls.ShellIconMgr m_icon_mgr;
public Window1()
{
InitializeComponent();
m_icon_mgr = new CUEControls.ShellIconMgr();
}
ObservableCollection<CUEMetadataEntry> _Releases = new ObservableCollection<CUEMetadataEntry>();
ObservableCollection<DriveInfo> _Drives = new ObservableCollection<DriveInfo>();
public ObservableCollection<DriveInfo> Drives { get { return _Drives; } }
public ObservableCollection<CUEMetadataEntry> Releases { get { return _Releases; } }
public static DependencyProperty SelectedDriveProperty = DependencyProperty.Register("SelectedDrive", typeof(DriveInfo), typeof(Window1));
public DriveInfo SelectedDrive
{
get { return ((DriveInfo)(base.GetValue(SelectedDriveProperty))); }
set { base.SetValue(SelectedDriveProperty, value); }
}
public static DependencyProperty SelectedReleaseProperty = DependencyProperty.Register("SelectedRelease", typeof(CUEMetadataEntry), typeof(Window1));
public CUEMetadataEntry SelectedRelease
{
get { return ((CUEMetadataEntry)(base.GetValue(SelectedReleaseProperty))); }
set { base.SetValue(SelectedReleaseProperty, value); }
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Drives.Add(new DriveInfo { Name = "aa", Icon = "/CUERipper.WPF;component/musicbrainz.ico" });
Drives.Add(new DriveInfo { Name = "cc", Icon = "/CUERipper.WPF;component/freedb16.png" });
Drives.Add(new DriveInfo { Name = "ee", Icon = "ff" });
SelectedDrive = Drives[0];
CDImageLayout toc = new CDImageLayout(2, 2, 1, "0 10000 20000");
Releases.Add(new CUEMetadataEntry(toc, "/CUERipper.WPF;component/musicbrainz.ico"));
Releases[0].metadata.Artist = "Mike Oldfield";
Releases[0].metadata.Title = "Amarok";
Releases[0].metadata.Tracks[0].Artist = "Mike Oldfield";
Releases[0].metadata.Tracks[0].Title = "Amarok 01";
Releases[0].metadata.Tracks[1].Artist = "Mike Oldfield";
Releases[0].metadata.Tracks[1].Title = "Amarok 02";
Releases.Add(new CUEMetadataEntry(toc, "/CUERipper.WPF;component/freedb16.png"));
SelectedRelease = Releases[0];
}
}
}

4
CUERipper.WPF/app.config Normal file
View File

@@ -0,0 +1,4 @@
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

17
CUERipper.WPF/depprop.txt Normal file
View File

@@ -0,0 +1,17 @@
//public static global::System.Workflow.ComponentModel.DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyProperty", typeof(string), typeof(Window1));
//[System.ComponentModel.DescriptionAttribute("MyProperty")]
//[System.ComponentModel.CategoryAttribute("MyProperty Category")]
//[System.ComponentModel.BrowsableAttribute(true)]
//[System.ComponentModel.DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Visible)]
//public string MyProperty
//{
// get
// {
// return ((string)(base.GetValue(Window1.MyPropertyProperty)));
// }
// set
// {
// base.SetValue(Window1.MyPropertyProperty, value);
// }
//}

BIN
CUERipper.WPF/freedb16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -26,7 +26,7 @@
</AssemblyOriginatorKeyFile>
<TargetZone>LocalIntranet</TargetZone>
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Web</InstallFrom>
@@ -48,12 +48,13 @@
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\bin\Debug\</OutputPath>
<OutputPath>..\bin\Debug\net40\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -63,7 +64,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\</OutputPath>
<OutputPath>..\bin\Release\net40\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -156,6 +157,10 @@
<Project>{6458A13A-30EF-45A9-9D58-E5031B17BEE2}</Project>
<Name>CUETools.Codecs</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.CTDB.Types\CUETools.CTDB.Types.csproj">
<Project>{c36efaa5-4f81-4a29-800d-ba866ff13bc8}</Project>
<Name>CUETools.CTDB.Types</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.CTDB\CUETools.CTDB.csproj">
<Project>{AA2A9A7E-45FB-4632-AD85-85B0E556F818}</Project>
<Name>CUETools.CTDB</Name>

View File

@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18033
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -19,7 +19,7 @@ namespace CUERipper.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {

View File

@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.239
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -12,7 +12,7 @@ namespace CUERipper.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

View File

@@ -17,4 +17,4 @@
<probing privatePath="plugins"/>
</assemblyBinding>
</runtime>
</configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

View File

@@ -5,4 +5,4 @@
<probing privatePath="plugins"/>
</assemblyBinding>
</runtime>
</configuration>
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

View File

@@ -1,102 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{8E6E1763-39AE-491D-A10F-44C8844ABA5B}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CUETools.ALACEnc</RootNamespace>
<TargetFrameworks>net40;net20;netcoreapp2.0</TargetFrameworks>
<Version>2.1.6.0</Version>
<AssemblyName>CUETools.ALACEnc</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<RootNamespace>CUETools.ALACEnc</RootNamespace>
<Product>CUETools</Product>
<OutputType>Exe</OutputType>
<Description>A tool for encoding and decoding ALAC.</Description>
<Copyright>Copyright (c) 2008-2018 Grigory Chudov</Copyright>
<Authors>Grigory Chudov</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputPath>..\bin\$(Configuration)\</OutputPath>
<RepositoryUrl>https://github.com/gchudov/cuetools.net</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CUETools.Codecs.ALAC\CUETools.Codecs.ALAC.csproj">
<Project>{F2EC7193-D5E5-4252-9803-5CEB407E910F}</Project>
<Name>CUETools.Codecs.ALAC</Name>
<ItemDefinitionGroup>
<ProjectReference>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj">
<Project>{6458A13A-30EF-45A9-9D58-E5031B17BEE2}</Project>
<Name>CUETools.Codecs</Name>
</ProjectReference>
</ItemGroup>
</ItemDefinitionGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<ProjectReference Include="..\CUETools.Codecs.ALAC\CUETools.Codecs.ALAC.csproj" />
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,33 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CUETools.ALACEnc")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("CUETools.ALACEnc")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("24fa1fb9-e01a-48cf-b478-f560496d1ed3")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,102 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{A5A8D8FA-9E32-4010-8AAF-AE580C5AF728}</ProjectGuid>
<TargetFrameworks>net40;netcoreapp2.0</TargetFrameworks>
<Version>2.1.6.0</Version>
<AssemblyName>CUETools.ARCUE</AssemblyName>
<RootNamespace>CUETools.ARCUE</RootNamespace>
<Product>CUETools</Product>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ArCueDotNet</RootNamespace>
<AssemblyName>ArCueDotNet</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<Description>A tool for CD image verification against AccurateRip.</Description>
<Copyright>Copyright (c) 2008-2018 Grigory Chudov</Copyright>
<Authors>Grigory Chudov</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputPath>..\bin\$(Configuration)\</OutputPath>
<RepositoryUrl>https://github.com/gchudov/cuetools.net</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj">
<Project>{6458A13A-30EF-45A9-9D58-E5031B17BEE2}</Project>
<Name>CUETools.Codecs</Name>
<ItemDefinitionGroup>
<ProjectReference>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\CUETools.CTDB\CUETools.CTDB.csproj">
<Project>{AA2A9A7E-45FB-4632-AD85-85B0E556F818}</Project>
<Name>CUETools.CTDB</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.Processor\CUETools.Processor.csproj">
<Project>{4911BD82-49EF-4858-8B51-5394F86739A4}</Project>
<Name>CUETools.Processor</Name>
</ProjectReference>
</ItemGroup>
</ItemDefinitionGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj" />
<ProjectReference Include="..\CUETools.CTDB.Types\CUETools.CTDB.Types.csproj" />
<ProjectReference Include="..\CUETools.CTDB\CUETools.CTDB.csproj" />
<ProjectReference Include="..\CUETools.Processor\CUETools.Processor.csproj" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,33 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CUETools.ARCUE")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CUETools.ARCUE")]
[assembly: AssemblyCopyright("Copyright © 2008-2010 Grigory Chudov")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("2da81ac9-8929-42c8-ae27-9431b4f71508")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("2.1.6.0")]
[assembly: AssemblyFileVersion("2.1.6.0")]

View File

@@ -1,109 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{5802C7E9-157E-4124-946D-70B5AE48A5A1}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CUETools.AccurateRip</RootNamespace>
<TargetFrameworks>net40;net20;netstandard2.0</TargetFrameworks>
<Version>2.1.6.0</Version>
<AssemblyName>CUETools.AccurateRip</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<SignAssembly>false</SignAssembly>
<AssemblyOriginatorKeyFile>
</AssemblyOriginatorKeyFile>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RootNamespace>CUETools.AccurateRip</RootNamespace>
<Product>CUETools</Product>
<Description>A library for calculating AccurateRip checksums, CRC32 and Reed-solomon codes of CD audio.</Description>
<Copyright>Copyright (c) 2008-2018 Grigory Chudov</Copyright>
<Authors>Grigory Chudov</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<OutputPath>..\bin\$(Configuration)\</OutputPath>
<RepositoryUrl>https://github.com/gchudov/cuetools.net</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AccurateRip.cs" />
<Compile Include="CDRepair.cs" />
<Compile Include="OffsetSafeCRCRecord.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj">
<Project>{6458A13A-30EF-45A9-9D58-E5031B17BEE2}</Project>
<Name>CUETools.Codecs</Name>
<ItemDefinitionGroup>
<ProjectReference>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\CUETools.CDImage\CUETools.CDImage.csproj">
<Project>{1DD41038-D885-46C5-8DDE-E0B82F066584}</Project>
<Name>CUETools.CDImage</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.Parity\CUETools.Parity.csproj">
<Project>{ECEB839C-171B-4535-958F-9899310A0342}</Project>
<Name>CUETools.Parity</Name>
</ProjectReference>
</ItemGroup>
</ItemDefinitionGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<ProjectReference Include="..\CUETools.CDImage\CUETools.CDImage.csproj" />
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj" />
<ProjectReference Include="..\CUETools.Parity\CUETools.Parity.csproj" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,35 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CUETools.AccurateRip")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CUETools.AccurateRip")]
[assembly: AssemblyCopyright("Copyright © 2008-2010 Grigory Chudov")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("080b79f6-6b19-417e-a1d1-afcb6e469112")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("2.1.6.0")]
[assembly: AssemblyFileVersion("2.1.6.0")]

View File

@@ -1,91 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{1DD41038-D885-46C5-8DDE-E0B82F066584}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CUETools.CDImage</RootNamespace>
<TargetFrameworks>net40;net20;netstandard2.0</TargetFrameworks>
<Version>2.1.6.0</Version>
<AssemblyName>CUETools.CDImage</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<SignAssembly>false</SignAssembly>
<AssemblyOriginatorKeyFile>
</AssemblyOriginatorKeyFile>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<RootNamespace>CUETools.CDImage</RootNamespace>
<Product>CUETools</Product>
<Description>A library for working with CD TOC.</Description>
<Copyright>Copyright (c) 2008-2018 Grigory Chudov</Copyright>
<Authors>Grigory Chudov</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputPath>..\bin\$(Configuration)\</OutputPath>
<RepositoryUrl>https://github.com/gchudov/cuetools.net</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CDImage.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,35 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CUETools.CDImage")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CUETools.CDImage")]
[assembly: AssemblyCopyright("Copyright © 2008-2010 Grigory Chudov")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("3db8bfa6-d3ba-4875-b02f-ef81119eab98")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("2.1.6.0")]
[assembly: AssemblyFileVersion("2.1.6.0")]

View File

@@ -10,7 +10,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CUETools.CDRepair</RootNamespace>
<AssemblyName>CUETools.CDRepair</AssemblyName>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

View File

@@ -0,0 +1,664 @@
/**
* CUETools.CLParity: Reed-Solomon (32 bit) using OpenCL
* Copyright (c) 2009 Gregory S. Chudov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Threading;
using System.Text;
using System.Runtime.InteropServices;
using CUETools.Codecs;
using OpenCLNet;
namespace CUETools.CLParity
{
public class CLParitySettings
{
public CLParitySettings()
{
this.MappedMemory = false;
this.GroupSize = 128;
this.DeviceType = OpenCLDeviceType.GPU;
}
[DefaultValue(false)]
[SRDescription(typeof(Properties.Resources), "DescriptionMappedMemory")]
public bool MappedMemory { get; set; }
[TypeConverter(typeof(CLParitySettingsGroupSizeConverter))]
[DefaultValue(128)]
[SRDescription(typeof(Properties.Resources), "DescriptionGroupSize")]
public int GroupSize { get; set; }
[SRDescription(typeof(Properties.Resources), "DescriptionDefines")]
public string Defines { get; set; }
[TypeConverter(typeof(CLParitySettingsPlatformConverter))]
[SRDescription(typeof(Properties.Resources), "DescriptionPlatform")]
public string Platform { get; set; }
[DefaultValue(OpenCLDeviceType.GPU)]
[SRDescription(typeof(Properties.Resources), "DescriptionDeviceType")]
public OpenCLDeviceType DeviceType { get; set; }
}
public class CLParitySettingsPlatformConverter : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
var res = new List<string>();
foreach (var p in OpenCL.GetPlatforms())
res.Add(p.Name);
return new StandardValuesCollection(res);
}
}
public class CLParitySettingsGroupSizeConverter : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(new int[] { 64, 128, 256 });
}
}
public enum OpenCLDeviceType : ulong
{
CPU = DeviceType.CPU,
GPU = DeviceType.GPU
}
//[AudioEncoderClass("CLParity", typeof(CLParitySettings))]
public class CLParityWriter : IAudioDest
{
long _position;
// total stream samples
// if 0, stream length is unknown
int sample_count = -1;
TimeSpan _userProcessorTime;
int samplesInBuffer = 0;
bool inited = false;
OpenCLManager OCLMan;
Program openCLProgram;
CLParityTask task1;
CLParityTask task2;
int npar, stride, stridesPerTask;
AudioPCMConfig _pcm;
public CLParityWriter(string path, Stream IO, AudioPCMConfig pcm)
{
_pcm = pcm;
if (pcm.BitsPerSample != 16)
throw new Exception("Bits per sample must be 16.");
if (pcm.ChannelCount != 2)
throw new Exception("ChannelCount must be 2.");
npar = 256;
stride = 1;
}
public CLParityWriter(string path, AudioPCMConfig pcm)
: this(path, null, pcm)
{
}
internal CLParitySettings _settings = new CLParitySettings();
public object Settings
{
get
{
return _settings;
}
set
{
if (value as CLParitySettings == null)
throw new Exception("Unsupported options " + value);
_settings = value as CLParitySettings;
}
}
//[DllImport("kernel32.dll")]
//static extern bool GetThreadTimes(IntPtr hThread, out long lpCreationTime, out long lpExitTime, out long lpKernelTime, out long lpUserTime);
//[DllImport("kernel32.dll")]
//static extern IntPtr GetCurrentThread();
void DoClose()
{
if (inited)
{
int strideCount = samplesInBuffer / stride;
if (strideCount > 0)
do_output_frames(strideCount);
if (samplesInBuffer > 0)
throw new Exception(string.Format("samplesInBuffer % stride != 0"));
if (task2.strideCount > 0)
{
task2.openCLCQ.Finish(); // cuda.SynchronizeStream(task2.stream);
task2.strideCount = 0;
}
task1.Dispose();
task2.Dispose();
openCLProgram.Dispose();
OCLMan.Dispose();
inited = false;
}
}
public void Close()
{
DoClose();
if (sample_count > 0 && _position != sample_count)
throw new Exception(string.Format("Samples written differs from the expected sample count. Expected {0}, got {1}.", sample_count, _position));
}
public void Delete()
{
if (inited)
{
task1.Dispose();
task2.Dispose();
openCLProgram.Dispose();
OCLMan.Dispose();
inited = false;
}
}
public long Position
{
get
{
return _position;
}
}
public long FinalSampleCount
{
set { sample_count = (int)value; }
}
public TimeSpan UserProcessorTime
{
get { return _userProcessorTime; }
}
public AudioPCMConfig PCM
{
get { return _pcm; }
}
public unsafe void InitTasks()
{
if (!inited)
{
if (OpenCL.NumberOfPlatforms < 1)
throw new Exception("no opencl platforms found");
int groupSize = _settings.DeviceType == OpenCLDeviceType.CPU ? 1 : _settings.GroupSize;
OCLMan = new OpenCLManager();
// Attempt to save binaries after compilation, as well as load precompiled binaries
// to avoid compilation. Usually you'll want this to be true.
OCLMan.AttemptUseBinaries = true; // true;
// Attempt to compile sources. This should probably be true for almost all projects.
// Setting it to false means that when you attempt to compile "mysource.cl", it will
// only scan the precompiled binary directory for a binary corresponding to a source
// with that name. There's a further restriction that the compiled binary also has to
// use the same Defines and BuildOptions
OCLMan.AttemptUseSource = true;
// Binary and source paths
// This is where we store our sources and where compiled binaries are placed
//OCLMan.BinaryPath = @"OpenCL\bin";
//OCLMan.SourcePath = @"OpenCL\src";
// If true, RequireImageSupport will filter out any devices without image support
// In this project we don't need image support though, so we set it to false
OCLMan.RequireImageSupport = false;
// The BuildOptions string is passed directly to clBuild and can be used to do debug builds etc
OCLMan.BuildOptions = "";
OCLMan.SourcePath = System.IO.Path.GetDirectoryName(GetType().Assembly.Location);
OCLMan.BinaryPath = System.IO.Path.Combine(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CUE Tools"), "OpenCL");
int platformId = 0;
if (_settings.Platform != null)
{
platformId = -1;
string platforms = "";
for (int i = 0; i < OpenCL.NumberOfPlatforms; i++)
{
var platform = OpenCL.GetPlatform(i);
platforms += " \"" + platform.Name + "\"";
if (platform.Name.Equals(_settings.Platform, StringComparison.InvariantCultureIgnoreCase))
{
platformId = i;
break;
}
}
if (platformId < 0)
throw new Exception("unknown platform \"" + _settings.Platform + "\". Platforms available:" + platforms);
}
OCLMan.CreateDefaultContext(platformId, (DeviceType)_settings.DeviceType);
this.stridesPerTask = (int)OCLMan.Context.Devices[0].MaxComputeUnits * npar * 8;
// The Defines string gets prepended to any and all sources that are compiled
// and serve as a convenient way to pass configuration information to the compilation process
OCLMan.Defines =
"#define GROUP_SIZE " + groupSize.ToString() + "\n" +
"#define CLPARITY_VERSION \"" + vendor_string + "\"\n" +
#if DEBUG
"#define DEBUG\n" +
#endif
(_settings.DeviceType == OpenCLDeviceType.CPU ? "#define CLPARITY_CPU\n" : "") +
_settings.Defines + "\n";
var exts = new string[] { "cl_khr_local_int32_base_atomics", "cl_khr_local_int32_extended_atomics", "cl_khr_fp64", "cl_amd_fp64" };
foreach (string extension in exts)
if (OCLMan.Context.Devices[0].Extensions.Contains(extension))
{
OCLMan.Defines += "#pragma OPENCL EXTENSION " + extension + ": enable\n";
OCLMan.Defines += "#define HAVE_" + extension + "\n";
}
try
{
openCLProgram = OCLMan.CompileFile("parity.cl");
}
catch (OpenCLBuildException ex)
{
string buildLog = ex.BuildLogs[0];
throw ex;
}
//using (Stream kernel = GetType().Assembly.GetManifestResourceStream(GetType(), "parity.cl"))
//using (StreamReader sr = new StreamReader(kernel))
//{
// try
// {
// openCLProgram = OCLMan.CompileSource(sr.ReadToEnd()); ;
// }
// catch (OpenCLBuildException ex)
// {
// string buildLog = ex.BuildLogs[0];
// throw ex;
// }
//}
#if TTTTKJHSKJH
var openCLPlatform = OpenCL.GetPlatform(0);
openCLContext = openCLPlatform.CreateDefaultContext();
using (Stream kernel = GetType().Assembly.GetManifestResourceStream(GetType(), "parity.cl"))
using (StreamReader sr = new StreamReader(kernel))
openCLProgram = openCLContext.CreateProgramWithSource(sr.ReadToEnd());
try
{
openCLProgram.Build();
}
catch (OpenCLException)
{
string buildLog = openCLProgram.GetBuildLog(openCLProgram.Devices[0]);
throw;
}
#endif
task1 = new CLParityTask(openCLProgram, this, groupSize, this.npar, this.stride, this.stridesPerTask);
task2 = new CLParityTask(openCLProgram, this, groupSize, this.npar, this.stride, this.stridesPerTask);
inited = true;
}
}
public unsafe void Write(AudioBuffer buff)
{
InitTasks();
buff.Prepare(this);
int pos = 0;
while (pos < buff.Length)
{
int block = Math.Min(buff.Length - pos, stride * stridesPerTask - samplesInBuffer);
fixed (byte* buf = buff.Bytes)
AudioSamples.MemCpy(((byte*)task1.clSamplesBytesPtr) + samplesInBuffer * _pcm.BlockAlign, buf + pos * _pcm.BlockAlign, block * _pcm.BlockAlign);
samplesInBuffer += block;
pos += block;
int strideCount = samplesInBuffer / stride;
if (strideCount >= stridesPerTask)
do_output_frames(strideCount);
}
}
public unsafe void do_output_frames(int strideCount)
{
task1.strideCount = strideCount;
if (!task1.UseMappedMemory)
task1.openCLCQ.EnqueueWriteBuffer(task1.clSamplesBytes, false, 0, sizeof(int) * stride * strideCount, task1.clSamplesBytesPtr);
//task.openCLCQ.EnqueueUnmapMemObject(task.clSamplesBytes, task.clSamplesBytes.HostPtr);
//task.openCLCQ.EnqueueMapBuffer(task.clSamplesBytes, true, MapFlags.WRITE, 0, task.samplesBufferLen / 2);
task1.EnqueueKernels();
if (task2.strideCount > 0)
task2.openCLCQ.Finish();
int bs = stride * strideCount;
samplesInBuffer -= bs;
if (samplesInBuffer > 0)
AudioSamples.MemCpy(
((byte*)task2.clSamplesBytesPtr),
((byte*)task1.clSamplesBytesPtr) + bs * _pcm.BlockAlign,
samplesInBuffer * _pcm.BlockAlign);
CLParityTask tmp = task1;
task1 = task2;
task2 = tmp;
task1.strideCount = 0;
}
public string Path { get { return null; } }
public static readonly string vendor_string = "CLParity#2.1.6";
}
internal class CLParityTask
{
Program openCLProgram;
public CommandQueue openCLCQ;
public Kernel reedSolomonInit;
public Kernel reedSolomonInitGx;
public Kernel reedSolomonA;
public Kernel reedSolomonB;
public Kernel reedSolomon;
public Kernel reedSolomonDecodeInit;
public Kernel reedSolomonDecode;
public Kernel chienSearch;
public Mem clSamplesBytes;
public Mem clExp;
public Mem clEncodeGx0;
public Mem clEncodeGx1;
public Mem clParity0;
public Mem clParity1;
public Mem clSigma;
public Mem clWkOut;
public Mem clSamplesBytesPinned;
public Mem clExpPinned;
public Mem clParity0Pinned;
public Mem clParity1Pinned;
public IntPtr clSamplesBytesPtr;
public IntPtr clExpPtr;
public IntPtr clParity0Ptr;
public IntPtr clParity1Ptr;
public int[] samplesBuffer;
public int strideCount = 0;
public int npar;
public int stride;
public int maxStridesCount;
public Thread workThread = null;
public Exception exception = null;
public bool done = false;
public bool exit = false;
public int groupSize = 128;
public CLParityWriter writer;
public bool UseMappedMemory = false;
unsafe public CLParityTask(Program _openCLProgram, CLParityWriter writer, int groupSize, int npar, int stride, int maxStridesCount)
{
this.UseMappedMemory = writer._settings.MappedMemory || writer._settings.DeviceType == OpenCLDeviceType.CPU;
this.groupSize = groupSize;
this.writer = writer;
openCLProgram = _openCLProgram;
#if DEBUG
var prop = CommandQueueProperties.PROFILING_ENABLE;
#else
var prop = CommandQueueProperties.NONE;
#endif
openCLCQ = openCLProgram.Context.CreateCommandQueue(openCLProgram.Context.Devices[0], prop);
this.npar = npar;
this.stride = stride;
this.maxStridesCount = maxStridesCount;
int samplesBufferLen = this.maxStridesCount * this.stride * sizeof(int);
int parityLength = (this.npar + 1) * sizeof(int);
int encodeGxLength = (this.npar + this.groupSize) * sizeof(int);
int expLength = this.npar * sizeof(int);
int sigmaLength = this.npar * sizeof(int);
//int wkOutLength = this.npar * sizeof(int);
if (!this.UseMappedMemory)
{
clSamplesBytes = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, samplesBufferLen);
clParity0 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, parityLength);
clParity1 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, parityLength);
clExp = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, expLength);
clSamplesBytesPinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, samplesBufferLen);
clParity0Pinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, parityLength);
clParity1Pinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, parityLength);
clExpPinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, expLength);
clSamplesBytesPtr = openCLCQ.EnqueueMapBuffer(clSamplesBytesPinned, true, MapFlags.READ_WRITE, 0, samplesBufferLen);
clParity0Ptr = openCLCQ.EnqueueMapBuffer(clParity0Pinned, true, MapFlags.READ_WRITE, 0, parityLength);
clParity1Ptr = openCLCQ.EnqueueMapBuffer(clParity1Pinned, true, MapFlags.READ_WRITE, 0, parityLength);
clExpPtr = openCLCQ.EnqueueMapBuffer(clExpPinned, true, MapFlags.READ_WRITE, 0, expLength);
}
else
{
clSamplesBytes = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, samplesBufferLen);
clParity0 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, parityLength);
clParity1 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, parityLength);
clExp = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, expLength);
clSamplesBytesPtr = openCLCQ.EnqueueMapBuffer(clSamplesBytes, true, MapFlags.READ_WRITE, 0, samplesBufferLen);
clParity0Ptr = openCLCQ.EnqueueMapBuffer(clParity0, true, MapFlags.READ_WRITE, 0, parityLength);
clParity1Ptr = openCLCQ.EnqueueMapBuffer(clParity1, true, MapFlags.READ_WRITE, 0, parityLength);
clExpPtr = openCLCQ.EnqueueMapBuffer(clExp, true, MapFlags.READ_WRITE, 0, expLength);
//clSamplesBytesPtr = clSamplesBytes.HostPtr;
//clResidualPtr = clResidual.HostPtr;
//clBestRiceParamsPtr = clBestRiceParams.HostPtr;
//clResidualTasksPtr = clResidualTasks.HostPtr;
//clWindowFunctionsPtr = clWindowFunctions.HostPtr;
}
clEncodeGx0 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, encodeGxLength);
clEncodeGx1 = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, encodeGxLength);
//clSamples = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, samplesBufferLen);
//openCLCQ.EnqueueMapBuffer(clSamplesBytes, true, MapFlags.WRITE, 0, samplesBufferLen / 2);
reedSolomonInit = openCLProgram.CreateKernel("reedSolomonInit");
reedSolomonInitGx = openCLProgram.CreateKernel("reedSolomonInitGx");
reedSolomonA = openCLProgram.CreateKernel("reedSolomonA");
reedSolomonB = openCLProgram.CreateKernel("reedSolomonB");
reedSolomon = openCLProgram.CreateKernel("reedSolomon");
reedSolomonDecodeInit = openCLProgram.CreateKernel("reedSolomonDecodeInit");
reedSolomonDecode = openCLProgram.CreateKernel("reedSolomonDecode");
chienSearch = openCLProgram.CreateKernel("chienSearch");
samplesBuffer = new int[this.maxStridesCount * this.stride];
InitData();
}
public void Dispose()
{
if (workThread != null)
{
lock (this)
{
exit = true;
Monitor.Pulse(this);
}
workThread.Join();
workThread = null;
}
openCLCQ.Finish();
reedSolomonInit.Dispose();
reedSolomonInitGx.Dispose();
reedSolomonA.Dispose();
reedSolomonB.Dispose();
reedSolomon.Dispose();
reedSolomonDecodeInit.Dispose();
reedSolomonDecode.Dispose();
chienSearch.Dispose();
if (!this.UseMappedMemory)
{
if (clSamplesBytesPtr != IntPtr.Zero)
openCLCQ.EnqueueUnmapMemObject(clSamplesBytesPinned, clSamplesBytesPtr);
clSamplesBytesPtr = IntPtr.Zero;
if (clParity0Ptr != IntPtr.Zero)
openCLCQ.EnqueueUnmapMemObject(clParity0Pinned, clParity0Ptr);
clParity0Ptr = IntPtr.Zero;
if (clParity1Ptr != IntPtr.Zero)
openCLCQ.EnqueueUnmapMemObject(clParity1Pinned, clParity1Ptr);
clParity1Ptr = IntPtr.Zero;
if (clExpPtr != IntPtr.Zero)
openCLCQ.EnqueueUnmapMemObject(clExpPinned, clExpPtr);
clExpPtr = IntPtr.Zero;
clSamplesBytesPinned.Dispose();
clParity0Pinned.Dispose();
clParity1Pinned.Dispose();
clExpPinned.Dispose();
}
else
{
openCLCQ.EnqueueUnmapMemObject(clSamplesBytes, clSamplesBytesPtr);
openCLCQ.EnqueueUnmapMemObject(clParity0, clParity0Ptr);
openCLCQ.EnqueueUnmapMemObject(clParity1, clParity1Ptr);
openCLCQ.EnqueueUnmapMemObject(clExp, clExpPtr);
}
clSamplesBytes.Dispose();
clParity0.Dispose();
clParity1.Dispose();
clEncodeGx0.Dispose();
clEncodeGx1.Dispose();
clExp.Dispose();
//clSamples.Dispose();
openCLCQ.Dispose();
GC.SuppressFinalize(this);
}
private unsafe void InitData()
{
reedSolomonInit.SetArgs(
clEncodeGx0,
clEncodeGx1,
clParity0,
clParity1,
npar);
openCLCQ.EnqueueNDRangeKernel(
reedSolomonInit,
groupSize, npar / groupSize);
for (int i = 0; i < npar / (groupSize / 2); i++)
{
reedSolomonInitGx.SetArgs(
clExp,
clEncodeGx0,
clEncodeGx1,
npar,
i);
openCLCQ.EnqueueNDRangeKernel(
reedSolomonInitGx,
groupSize, npar / (groupSize / 2));
var temp = clEncodeGx0; clEncodeGx0 = clEncodeGx1; clEncodeGx1 = temp;
}
}
internal unsafe void EnqueueKernels()
{
int blocks = strideCount / groupSize;
for (int i = 0; i < blocks; i++)
{
reedSolomonA.SetArgs(clSamplesBytes, clEncodeGx0, clParity0, this.npar, i * groupSize);
openCLCQ.EnqueueNDRangeKernel(reedSolomonA, groupSize, 1);
reedSolomonB.SetArgs(clSamplesBytes, clEncodeGx0, clParity0, this.npar, i * groupSize);
openCLCQ.EnqueueNDRangeKernel(reedSolomonB, groupSize, npar / groupSize);
}
for (int i = blocks * groupSize; i < strideCount; i++)
{
reedSolomon.SetArgs(clSamplesBytes, clEncodeGx0, clParity0, clParity1, this.npar, i);
openCLCQ.EnqueueNDRangeKernel(reedSolomon, groupSize, npar / groupSize);
var temp = clParity0; clParity0 = clParity1; clParity1 = temp;
}
//openCLCQ.EnqueueReadBuffer(clRiceOutput, false, 0, (channels * frameSize * (writer.PCM.BitsPerSample + 1) + 256) / 8 * frameCount, clRiceOutputPtr);
}
}
#if LKJLKJLJK
public static class OpenCLExtensions
{
public static void SetArgs(this Kernel kernel, params object[] args)
{
int i = 0;
foreach (object arg in args)
{
if (arg is int)
kernel.SetArg(i, (int)arg);
else if (arg is Mem)
kernel.SetArg(i, (Mem)arg);
else
throw new ArgumentException("Invalid argument type", arg.GetType().ToString());
i++;
}
}
public static void EnqueueNDRangeKernel(this CommandQueue queue, Kernel kernel, long localSize, long globalSize)
{
if (localSize == 0)
queue.EnqueueNDRangeKernel(kernel, 1, null, new long[] { globalSize }, null);
else
queue.EnqueueNDRangeKernel(kernel, 1, null, new long[] { localSize * globalSize }, new long[] { localSize });
}
public static void EnqueueNDRangeKernel(this CommandQueue queue, Kernel kernel, long localSizeX, long localSizeY, long globalSizeX, long globalSizeY)
{
queue.EnqueueNDRangeKernel(kernel, 2, null, new long[] { localSizeX * globalSizeX, localSizeY * globalSizeY }, new long[] { localSizeX, localSizeY });
}
}
#endif
}

View File

@@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{D41FEFF9-9D43-4049-BF9B-B13D9AC7E192}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CUETools.CLParity</RootNamespace>
<AssemblyName>CUETools.CLParity</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\bin\Debug\plugins\net40\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\plugins\net40\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="OpenCLNet, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\ThirdParty\OpenCLNet.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CLParity.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CUETools.Codecs.FLAKE\CUETools.Codecs.FLAKE.csproj">
<Project>{082D6B9E-326E-4D15-9798-EDAE9EDE70A6}</Project>
<Name>CUETools.Codecs.FLAKE</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj">
<Project>{6458A13A-30EF-45A9-9D58-E5031B17BEE2}</Project>
<Name>CUETools.Codecs</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="parity.cl">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.ru-RU.resx" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
<PreBuildEvent>
</PreBuildEvent>
</PropertyGroup>
</Project>

View File

@@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CUEControls")]
[assembly: AssemblyTitle("CUETools.CLParity")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CUEControls")]
[assembly: AssemblyCopyright("Copyright © 2008-2010 Grigory Chudov")]
[assembly: AssemblyProduct("CUETools.CLParity")]
[assembly: AssemblyCopyright("Copyright © 2011 Gregory S. Chudov")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("3c6acc24-0c31-4ad1-8856-218877a987fd")]
[assembly: Guid("b28ffece-6c89-426b-b227-e647b435cc3d")]
// Version information for an assembly consists of the following four values:
//

View File

@@ -0,0 +1,180 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18033
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace CUETools.CLParity.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CUETools.CLParity.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Use additional CPU threads.
/// </summary>
internal static string DescriptionCPUThreads {
get {
return ResourceManager.GetString("DescriptionCPUThreads", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Additional preprocessor definitions for OpenCL kernel.
/// </summary>
internal static string DescriptionDefines {
get {
return ResourceManager.GetString("DescriptionDefines", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Use CPU or GPU device.
/// </summary>
internal static string DescriptionDeviceType {
get {
return ResourceManager.GetString("DescriptionDeviceType", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Do final encoding stages on GPU (experimental).
/// </summary>
internal static string DescriptionDoRice {
get {
return ResourceManager.GetString("DescriptionDoRice", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Use GPU on all stages.
/// </summary>
internal static string DescriptionGPUOnly {
get {
return ResourceManager.GetString("DescriptionGPUOnly", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to GPU thread block size (64, 128, 256).
/// </summary>
internal static string DescriptionGroupSize {
get {
return ResourceManager.GetString("DescriptionGroupSize", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Device uses host memory (Don&apos;t use).
/// </summary>
internal static string DescriptionMappedMemory {
get {
return ResourceManager.GetString("DescriptionMappedMemory", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to OpenCL platform to use.
/// </summary>
internal static string DescriptionPlatform {
get {
return ResourceManager.GetString("DescriptionPlatform", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Number of frames processed per one multiprocessor.
/// </summary>
internal static string DescriptionTaskSize {
get {
return ResourceManager.GetString("DescriptionTaskSize", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Calculate MD5 hash for audio stream.
/// </summary>
internal static string DoMD5Description {
get {
return ResourceManager.GetString("DoMD5Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Decode each frame and compare with original.
/// </summary>
internal static string DoVerifyDescription {
get {
return ResourceManager.GetString("DoVerifyDescription", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Samples written differs from the expected sample count.
/// </summary>
internal static string ExceptionSampleCount {
get {
return ResourceManager.GetString("ExceptionSampleCount", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Validation failed.
/// </summary>
internal static string ExceptionValidationFailed {
get {
return ResourceManager.GetString("ExceptionValidationFailed", resourceCulture);
}
}
}
}

View File

@@ -0,0 +1,159 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="DescriptionCPUThreads" xml:space="preserve">
<value>Use additional CPU threads</value>
</data>
<data name="DescriptionDefines" xml:space="preserve">
<value>Additional preprocessor definitions for OpenCL kernel</value>
</data>
<data name="DescriptionDeviceType" xml:space="preserve">
<value>Use CPU or GPU device</value>
</data>
<data name="DescriptionDoRice" xml:space="preserve">
<value>Do final encoding stages on GPU (experimental)</value>
</data>
<data name="DescriptionGPUOnly" xml:space="preserve">
<value>Use GPU on all stages</value>
</data>
<data name="DescriptionGroupSize" xml:space="preserve">
<value>GPU thread block size (64, 128, 256)</value>
</data>
<data name="DescriptionMappedMemory" xml:space="preserve">
<value>Device uses host memory (Don't use)</value>
</data>
<data name="DescriptionPlatform" xml:space="preserve">
<value>OpenCL platform to use</value>
</data>
<data name="DescriptionTaskSize" xml:space="preserve">
<value>Number of frames processed per one multiprocessor</value>
</data>
<data name="DoMD5Description" xml:space="preserve">
<value>Calculate MD5 hash for audio stream</value>
</data>
<data name="DoVerifyDescription" xml:space="preserve">
<value>Decode each frame and compare with original</value>
</data>
<data name="ExceptionSampleCount" xml:space="preserve">
<value>Samples written differs from the expected sample count</value>
</data>
<data name="ExceptionValidationFailed" xml:space="preserve">
<value>Validation failed</value>
</data>
</root>

View File

@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="DescriptionCPUThreads" xml:space="preserve">
<value>Использовать дополнительные потоки</value>
</data>
<data name="DescriptionGPUOnly" xml:space="preserve">
<value>Использовать GPU на всех стадиях</value>
</data>
<data name="DoMD5Description" xml:space="preserve">
<value>Вычислять MD5-хеш аудиопотока</value>
</data>
<data name="DoVerifyDescription" xml:space="preserve">
<value>Декодировать каждый блок и сравнивать с оригиналом</value>
</data>
<data name="ExceptionSampleCount" xml:space="preserve">
<value>Количество записанных сэмплов отличается от ожидавшегося</value>
</data>
<data name="ExceptionValidationFailed" xml:space="preserve">
<value>Ошибка верификации</value>
</data>
</root>

Binary file not shown.

View File

@@ -0,0 +1,3 @@
q = 2^m = 65536, m = 16
k == npar?
n < q

View File

@@ -0,0 +1 @@
Mon Jul 13 12:03:07 CEST 2009

View File

@@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fastdecode", "fastdecode.vcproj", "{32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}.Debug|Win32.ActiveCfg = Debug|Win32
{32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}.Debug|Win32.Build.0 = Debug|Win32
{32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}.Release|Win32.ActiveCfg = Release|Win32
{32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="Windows-1252"?>
<?xml version="1.0" encoding="UTF-8"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="flac_ren"
ProjectGUID="{4cefbc7f-c215-11db-8314-0800200c9a66}"
RootNamespace="flac_ren"
Version="9,00"
Name="fastdecode"
ProjectGUID="{32B8B6B7-FAED-4D9D-B90D-7E5C1E392DD8}"
Keyword="Win32Proj"
TargetFrameworkVersion="0"
>
<Platforms>
<Platform
@@ -17,7 +17,7 @@
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="..\..\..\objs\debug\bin"
OutputDirectory="Debug"
IntermediateDirectory="Debug"
ConfigurationType="1"
>
@@ -42,13 +42,11 @@
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
CompileAs="0"
DisableSpecificWarnings="4267;4996"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -62,7 +60,6 @@
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
IgnoreDefaultLibraryNames="uuid.lib"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
@@ -91,7 +88,7 @@
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="..\..\..\objs\release\bin"
OutputDirectory="Release"
IntermediateDirectory="Release"
ConfigurationType="1"
>
@@ -112,19 +109,12 @@
/>
<Tool
Name="VCCLCompilerTool"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="1"
OmitFramePointers="true"
WholeProgramOptimization="true"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;"
RuntimeLibrary="0"
BufferSecurityCheck="false"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
CompileAs="0"
DisableSpecificWarnings="4267;4996"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -137,13 +127,11 @@
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
IgnoreDefaultLibraryNames="uuid.lib"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
LinkTimeCodeGeneration="1"
TargetMachine="1"
/>
<Tool
@@ -177,6 +165,16 @@
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\reed_solomon.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
<Filter
Name="Source Files"
@@ -187,6 +185,18 @@
RelativePath=".\main.c"
>
</File>
<File
RelativePath=".\reed_solomon.c"
>
</File>
<File
RelativePath=".\speed.c"
>
</File>
<File
RelativePath=".\test_rs.c"
>
</File>
</Filter>
</Files>
<Globals>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="9,00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="FANDRAHOMEVS"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="FANDRAHOMEVS"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8"?><VisualStudioUserFile ProjectType="Visual C++" Version="9.00" ShowAllFiles="true"></VisualStudioUserFile>

View File

@@ -0,0 +1,305 @@
// ISO C9x compliant inttypes.h for Microsoft Visual Studio
// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
//
// Copyright (c) 2006 Alexander Chemeris
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. The name of the author may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _MSC_VER // [
#error "Use this header only with Microsoft Visual C++ compilers!"
#endif // _MSC_VER ]
#ifndef _MSC_INTTYPES_H_ // [
#define _MSC_INTTYPES_H_
#if _MSC_VER > 1000
#pragma once
#endif
#include "stdint.h"
// 7.8 Format conversion of integer types
typedef struct {
intmax_t quot;
intmax_t rem;
} imaxdiv_t;
// 7.8.1 Macros for format specifiers
#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198
// The fprintf macros for signed integers are:
#define PRId8 "d"
#define PRIi8 "i"
#define PRIdLEAST8 "d"
#define PRIiLEAST8 "i"
#define PRIdFAST8 "d"
#define PRIiFAST8 "i"
#define PRId16 "hd"
#define PRIi16 "hi"
#define PRIdLEAST16 "hd"
#define PRIiLEAST16 "hi"
#define PRIdFAST16 "hd"
#define PRIiFAST16 "hi"
#define PRId32 "I32d"
#define PRIi32 "I32i"
#define PRIdLEAST32 "I32d"
#define PRIiLEAST32 "I32i"
#define PRIdFAST32 "I32d"
#define PRIiFAST32 "I32i"
#define PRId64 "I64d"
#define PRIi64 "I64i"
#define PRIdLEAST64 "I64d"
#define PRIiLEAST64 "I64i"
#define PRIdFAST64 "I64d"
#define PRIiFAST64 "I64i"
#define PRIdMAX "I64d"
#define PRIiMAX "I64i"
#define PRIdPTR "Id"
#define PRIiPTR "Ii"
// The fprintf macros for unsigned integers are:
#define PRIo8 "o"
#define PRIu8 "u"
#define PRIx8 "x"
#define PRIX8 "X"
#define PRIoLEAST8 "o"
#define PRIuLEAST8 "u"
#define PRIxLEAST8 "x"
#define PRIXLEAST8 "X"
#define PRIoFAST8 "o"
#define PRIuFAST8 "u"
#define PRIxFAST8 "x"
#define PRIXFAST8 "X"
#define PRIo16 "ho"
#define PRIu16 "hu"
#define PRIx16 "hx"
#define PRIX16 "hX"
#define PRIoLEAST16 "ho"
#define PRIuLEAST16 "hu"
#define PRIxLEAST16 "hx"
#define PRIXLEAST16 "hX"
#define PRIoFAST16 "ho"
#define PRIuFAST16 "hu"
#define PRIxFAST16 "hx"
#define PRIXFAST16 "hX"
#define PRIo32 "I32o"
#define PRIu32 "I32u"
#define PRIx32 "I32x"
#define PRIX32 "I32X"
#define PRIoLEAST32 "I32o"
#define PRIuLEAST32 "I32u"
#define PRIxLEAST32 "I32x"
#define PRIXLEAST32 "I32X"
#define PRIoFAST32 "I32o"
#define PRIuFAST32 "I32u"
#define PRIxFAST32 "I32x"
#define PRIXFAST32 "I32X"
#define PRIo64 "I64o"
#define PRIu64 "I64u"
#define PRIx64 "I64x"
#define PRIX64 "I64X"
#define PRIoLEAST64 "I64o"
#define PRIuLEAST64 "I64u"
#define PRIxLEAST64 "I64x"
#define PRIXLEAST64 "I64X"
#define PRIoFAST64 "I64o"
#define PRIuFAST64 "I64u"
#define PRIxFAST64 "I64x"
#define PRIXFAST64 "I64X"
#define PRIoMAX "I64o"
#define PRIuMAX "I64u"
#define PRIxMAX "I64x"
#define PRIXMAX "I64X"
#define PRIoPTR "Io"
#define PRIuPTR "Iu"
#define PRIxPTR "Ix"
#define PRIXPTR "IX"
// The fscanf macros for signed integers are:
#define SCNd8 "d"
#define SCNi8 "i"
#define SCNdLEAST8 "d"
#define SCNiLEAST8 "i"
#define SCNdFAST8 "d"
#define SCNiFAST8 "i"
#define SCNd16 "hd"
#define SCNi16 "hi"
#define SCNdLEAST16 "hd"
#define SCNiLEAST16 "hi"
#define SCNdFAST16 "hd"
#define SCNiFAST16 "hi"
#define SCNd32 "ld"
#define SCNi32 "li"
#define SCNdLEAST32 "ld"
#define SCNiLEAST32 "li"
#define SCNdFAST32 "ld"
#define SCNiFAST32 "li"
#define SCNd64 "I64d"
#define SCNi64 "I64i"
#define SCNdLEAST64 "I64d"
#define SCNiLEAST64 "I64i"
#define SCNdFAST64 "I64d"
#define SCNiFAST64 "I64i"
#define SCNdMAX "I64d"
#define SCNiMAX "I64i"
#ifdef _WIN64 // [
# define SCNdPTR "I64d"
# define SCNiPTR "I64i"
#else // _WIN64 ][
# define SCNdPTR "ld"
# define SCNiPTR "li"
#endif // _WIN64 ]
// The fscanf macros for unsigned integers are:
#define SCNo8 "o"
#define SCNu8 "u"
#define SCNx8 "x"
#define SCNX8 "X"
#define SCNoLEAST8 "o"
#define SCNuLEAST8 "u"
#define SCNxLEAST8 "x"
#define SCNXLEAST8 "X"
#define SCNoFAST8 "o"
#define SCNuFAST8 "u"
#define SCNxFAST8 "x"
#define SCNXFAST8 "X"
#define SCNo16 "ho"
#define SCNu16 "hu"
#define SCNx16 "hx"
#define SCNX16 "hX"
#define SCNoLEAST16 "ho"
#define SCNuLEAST16 "hu"
#define SCNxLEAST16 "hx"
#define SCNXLEAST16 "hX"
#define SCNoFAST16 "ho"
#define SCNuFAST16 "hu"
#define SCNxFAST16 "hx"
#define SCNXFAST16 "hX"
#define SCNo32 "lo"
#define SCNu32 "lu"
#define SCNx32 "lx"
#define SCNX32 "lX"
#define SCNoLEAST32 "lo"
#define SCNuLEAST32 "lu"
#define SCNxLEAST32 "lx"
#define SCNXLEAST32 "lX"
#define SCNoFAST32 "lo"
#define SCNuFAST32 "lu"
#define SCNxFAST32 "lx"
#define SCNXFAST32 "lX"
#define SCNo64 "I64o"
#define SCNu64 "I64u"
#define SCNx64 "I64x"
#define SCNX64 "I64X"
#define SCNoLEAST64 "I64o"
#define SCNuLEAST64 "I64u"
#define SCNxLEAST64 "I64x"
#define SCNXLEAST64 "I64X"
#define SCNoFAST64 "I64o"
#define SCNuFAST64 "I64u"
#define SCNxFAST64 "I64x"
#define SCNXFAST64 "I64X"
#define SCNoMAX "I64o"
#define SCNuMAX "I64u"
#define SCNxMAX "I64x"
#define SCNXMAX "I64X"
#ifdef _WIN64 // [
# define SCNoPTR "I64o"
# define SCNuPTR "I64u"
# define SCNxPTR "I64x"
# define SCNXPTR "I64X"
#else // _WIN64 ][
# define SCNoPTR "lo"
# define SCNuPTR "lu"
# define SCNxPTR "lx"
# define SCNXPTR "lX"
#endif // _WIN64 ]
#endif // __STDC_FORMAT_MACROS ]
// 7.8.2 Functions for greatest-width integer types
// 7.8.2.1 The imaxabs function
#define imaxabs _abs64
// 7.8.2.2 The imaxdiv function
// This is modified version of div() function from Microsoft's div.c found
// in %MSVC.NET%\crt\src\div.c
#ifdef STATIC_IMAXDIV // [
static
#else // STATIC_IMAXDIV ][
_inline
#endif // STATIC_IMAXDIV ]
imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
{
imaxdiv_t result;
result.quot = numer / denom;
result.rem = numer % denom;
if (numer < 0 && result.rem > 0) {
// did division wrong; must fix up
++result.quot;
result.rem -= denom;
}
return result;
}
// 7.8.2.3 The strtoimax and strtoumax functions
#define strtoimax _strtoi64
#define strtoumax _strtoui64
// 7.8.2.4 The wcstoimax and wcstoumax functions
#define wcstoimax _wcstoi64
#define wcstoumax _wcstoui64
#endif // _MSC_INTTYPES_H_ ]

View File

@@ -0,0 +1,422 @@
// ************************************************
// ************************************************
// Sample program to use reed_solomon.c
// (c) 2009 Frederic Didier.
#include "reed_solomon.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
/************************************************/
/** Random number generator -> 32bits **/
/** Mersenne twister code **/
/************************************************/
/* A C-program for MT19937: Integer version */
/* genrand() generates one pseudorandom unsigned integer (32bit) */
/* which is uniformly distributed among 0 to 2^32-1 for each */
/* call. sgenrand(seed) set initial values to the working area */
/* of 624 words. Before genrand(), sgenrand(seed) must be */
/* called once. (seed is any 32-bit integer except for 0). */
/* Coded by Takuji Nishimura, considering the suggestions by */
/* Topher Cooper and Marc Rieffel in July-Aug. 1997. */
/* This library is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU Library General Public */
/* License as published by the Free Software Foundation; either */
/* version 2 of the License, or (at your option) any later */
/* version. */
/* This library is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */
/* See the GNU Library General Public License for more details. */
/* You should have received a copy of the GNU Library General */
/* Public License along with this library; if not, write to the */
/* Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA */
/* 02111-1307 USA */
/* Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. */
/* Any feedback is very welcome. For any question, comments, */
/* see http://www.math.keio.ac.jp/matumoto/emt.html or email */
/* matumoto@math.keio.ac.jp */
/* Period parameters */
#define MT_N 624
#define MT_M 397
#define MATRIX_A 0x9908b0df /* constant vector a */
#define UPPER_MASK 0x80000000 /* most significant w-r bits */
#define LOWER_MASK 0x7fffffff /* least significant r bits */
/* Tempering parameters */
#define TEMPERING_MASK_B 0x9d2c5680
#define TEMPERING_MASK_C 0xefc60000
#define TEMPERING_SHIFT_U(y) (y >> 11)
#define TEMPERING_SHIFT_S(y) (y << 7)
#define TEMPERING_SHIFT_T(y) (y << 15)
#define TEMPERING_SHIFT_L(y) (y >> 18)
static unsigned long mt[MT_N]; /* the table for the state vector */
static int mti=MT_N+1; /* mti==MT_N+1 means mt[MT_N] is not initialized */
/* initializing the table with a NONZERO seed */
void sgenrand(unsigned long seed)
{
/* setting initial seeds to mt[MT_N] using */
/* the generator Line 25 of Table 1 in */
/* [KNUTH 1981, The Art of Computer Programming */
/* Vol. 2 (2nd Ed.), pp102] */
mt[0]= seed & 0xffffffff;
for (mti=1; mti<MT_N; mti++)
mt[mti] = (69069 * mt[mti-1]) & 0xffffffff;
}
unsigned int genrand()
{
unsigned int y;
static unsigned long mag01[2]={0x0, MATRIX_A};
/* mag01[x] = x * MATRIX_A for x=0,1 */
if (mti >= MT_N) { /* generate MT_N words at one time */
int kk;
if (mti == MT_N+1) /* if sgenrand() has not been called, */
sgenrand(4357); /* a default initial seed is used */
for (kk=0;kk<MT_N-MT_M;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk] = mt[kk+MT_M] ^ (y >> 1) ^ mag01[y & 0x1];
}
for (;kk<MT_N-1;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk] = mt[kk+(MT_M-MT_N)] ^ (y >> 1) ^ mag01[y & 0x1];
}
y = (mt[MT_N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);
mt[MT_N-1] = mt[MT_M-1] ^ (y >> 1) ^ mag01[y & 0x1];
mti = 0;
}
y = mt[mti++];
y ^= TEMPERING_SHIFT_U(y);
y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B;
y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C;
y ^= TEMPERING_SHIFT_L(y);
return y;
}
double double_genrand() {
return genrand() * (1.0/4294967295.0);
}
// *******************************************************
// The Art of Computer programming - Knuth
// vol 2 - section 3.4.2 page 137
// Algorithm S (Selection sampling technique)
void generate_positions(int N, int K, int *pos)
{
int size=N;
int w=K;
do {
if (double_genrand()*size <= w) {
pos[K-w] = N-size;
w--;
}
size--;
} while (size);
}
//void generate_message(byte *data, int size)
//{
// int *p = (int *)data;
// size >>=2;
// int i;
// for (i=0; i<size; i++) {
// *p++ = genrand();
// }
//}
void generate_message(void *data, int size, int n_field)
{
if (n_field==8 || n_field==16) {
int *p = (int *)data;
int i;
size >>=2;
for (i=0; i<size; i++) {
*p++ = genrand();
}
} else {
unsigned short int *p = (unsigned short int *)data;
int i;
size>>=1;
for (i=0; i<size; i++) {
*p++ = genrand() & ((1<<n_field)-1);
}
}
}
int compare_message(byte *p, byte *q, int size)
{
int *pi = (int *)p;
int *qi = (int *)q;
int res=0;
int i;
size >>=2;
for (i=0; i<size; i++) {
if (pi[i]!=qi[i]) {
res++;
if (res<100) {
printf("%d ",i*4);
}
}
}
return res;
}
// *******************************************************
double get_sec(clock_t diff)
{
return (double)diff / (double)CLOCKS_PER_SEC;
}
double get_rate(clock_t diff, int byte)
{
return (double)(byte)/((double)(1<<20) * get_sec(diff));
}
double get_KB(int byte)
{
return (double)byte/(double)(1<<10);
}
// *******************************************************
int main(int argc, char *argv[])
{
int i,j,n;
clock_t tick;
// get parameters
int n_field,K,N,S,m_size;
char flag[256];
int inc;
int temp=0;
int nb_elt;
int nb_bloc;
int n_walsh=1;
int *positions;
byte *message;
byte *received;
byte *codeword;
byte *dst;
// default ones
m_size = 1<<26;
S = 1<<10;
// help message
if (argc<=5) {
printf("usage: %s flag n_field K N S [message size in MB]\n",argv[0]);
printf("where flag is a combinaison of \n");
printf(" x : Use xor for field multiplication\n");
printf(" l : Use another xor version\n");
printf(" t : Use table for field multiplication\n");
printf(" d : Use direct field multiplication\n");
printf(" q : Quadratic algorithm\n");
printf(" i : Incremental algorithm\n");
printf(" k : Karatsuba algorithm\n");
printf(" s : Quadratic with one table for multiplication\n");
return 0;
}
for (i=0; i<256; i++) flag[i]=0;
i=0;
while (argv[1][i]!=0) {
flag[argv[1][i]]=1;
i++;
}
// read parameters
n_field = atoi(argv[2]);
K = atoi(argv[3]);
N = atoi(argv[4]);
if (argc>5) S = atoi(argv[5]);
if (argc>6) m_size = atoi(argv[6]) << 20;
// modify packet size
// always divisible by [4],
// if xor code used, divisible by [4*n_field]
inc = 4 * n_field;
while (temp < S) temp +=inc;
S = temp;
// number of field elements per packets.
nb_elt = (S * 8) / n_field;
// compute number of blocs
nb_bloc = m_size / (K*S);
if (nb_bloc==0) nb_bloc=1;
// power of two just greater than N
while ((1<<n_walsh) < N) n_walsh++;
// print parameters
printf("[parameters]\n");
printf("GF 2^%d\n", n_field);
printf("n = %d (n_walsh = %d)\n", N, n_walsh);
printf("k = %d\n", K);
printf("s = %d (bytes per packet)\n", S);
printf("field elements per packet = %d\n", nb_elt);
printf("segment size = %d \n", S/n_field);
printf("unused bits per packet = %d\n", S*8 - nb_elt*n_field);
printf("number of bloc = %d\n", nb_bloc);
printf("bloc size = %f KB\n", get_KB(K*S));
printf("message size = %f KB\n", get_KB(K*S*nb_bloc));
printf("\n");
// code init
fill_table(n_field);
code_init(n_walsh);
// method to perform field multiply and xor
if (flag['x']) use_xor();
if (flag['t']) use_table();
if (flag['d']) use_direct();
if (flag['l']) use_xor2();
// method to encode/decode
if (flag['q']) use_quadratic();
if (flag['i']) use_incremental();
if (flag['k']) use_karatsuba();
if (flag['s']) use_special();
if (process==NULL) {
printf("you should specify a way to multiply in the field\n");
exit(0);
}
if (RS_encode == NULL || RS_decode == NULL) {
printf("you should specify an algorithm for encoding/decoding\n");
exit(0);
}
printf("\n");
// ****************************************
// ****************************************
printf("[initialisation (memory + randomness)]\n");
tick = clock();
// memory for the full message
positions = (int *)malloc(sizeof(int)*K*nb_bloc);
message = (byte *)malloc(sizeof(byte)*S*K*nb_bloc);
received = (byte *)malloc(sizeof(byte)*S*K*nb_bloc);
// memory for encoding/decoding one bloc
codeword = (byte *)malloc(sizeof(byte)*S*N);
fast_init(N,S);
// init random number generator
// sgenrand(time(NULL));
sgenrand(123);
// sgenrand(321);
// Generate the random message
generate_message(message, S*K*nb_bloc, n_field);
// Generate the random positions
for (n=0; n<nb_bloc; n++) {
generate_positions(N, K, positions + n*K);
}
// end of initialisation
tick = clock() - tick;
printf("%f s\n", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S*K*nb_bloc));
printf("\n");
// ****************************************
// ****************************************
printf("[encoding message]\n");
tick = clock();
encode_init(N, K);
dst=received;
for (n=0; n<nb_bloc; n++)
{
int *pos = positions + n*K;
byte *systematic = message + n*K*S;
RS_encode(N, K, S, systematic, codeword);
// simulate errors...
for (i=0; i<K; i++)
{
byte *src;
if (pos[i]<K) src = systematic + pos[i] * S;
else src = codeword + (pos[i]-K) * S;
memcpy(dst, src, S);
dst += S;
}
}
tick = clock() - tick;
printf("%f s\n", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S*K*nb_bloc));
printf("%f MB/s\n", get_rate(tick, S*N*nb_bloc));
printf("\n");
// ****************************************
// ****************************************
printf("[decoding]\n");
tick = clock();
double syst=0;
for (n=0; n<nb_bloc; n++)
{
// current bloc
int *pos = positions + n*K;
byte *rec = received + n*S*K;
// stat for systematic packet
for (i=0; i<K; i++) {
if (pos[i]<K) syst++;
}
RS_decode(N, K, S, pos, rec, codeword);
// put result back into received
memcpy(rec, codeword, S*K);
}
tick = clock() - tick;
printf("%f s\n", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S*K*nb_bloc));
printf("%f percent of systematic packets received\n", syst / (double)(K*nb_bloc));
printf("\n");
// ****************************************
// ****************************************
// verify that we recovered the message correctly
printf("[errors]\n");
printf("%d\n\n", compare_message(message, received, S*K*nb_bloc));
// ****************************************
// ****************************************
// clear code
code_clear();
// end;
return 0;
}

View File

@@ -0,0 +1,25 @@
You can find the actual encoding/decoding code in
reed_solomon.c and reed_solomon.h
The file main.c is just there as an example to show how to use the
encoding/decoding functions and to display the speed in MB/s.
Compile it with one of the following commands
gcc -O3 reed_solomon.c main.c -o test
gcc -O3 -DSSE -mssse3 reed_solomon.c main.c -o test_sse
Then the program work with
./test K N [S in Byte] [message size in MB]
Like
./test 1024 2048 1024 50
We give three speed:
1. message size / encoding time
2. full coded size / encoding time
3. message size / decoding time
The current version is optimised for GF(2^16).
But all the code is present to work on other field of the form GF(2^m).

View File

@@ -0,0 +1 @@
Mon Jul 6 14:17:13 CEST 2009

View File

@@ -0,0 +1,891 @@
// ************************************************
// ************************************************
// Fast RS on GF(2^16+1)
// (c) 2009 Frederic Didier.
#include <complex>
using namespace std;
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
typedef unsigned char byte;
/************************************************/
/** Random number generator -> 32bits **/
/** Mersenne twister code **/
/************************************************/
/* A C-program for MT19937: Integer version */
/* genrand() generates one pseudorandom unsigned integer (32bit) */
/* which is uniformly distributed among 0 to 2^32-1 for each */
/* call. sgenrand(seed) set initial values to the working area */
/* of 624 words. Before genrand(), sgenrand(seed) must be */
/* called once. (seed is any 32-bit integer except for 0). */
/* Coded by Takuji Nishimura, considering the suggestions by */
/* Topher Cooper and Marc Rieffel in July-Aug. 1997. */
/* This library is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU Library General Public */
/* License as published by the Free Software Foundation; either */
/* version 2 of the License, or (at your option) any later */
/* version. */
/* This library is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */
/* See the GNU Library General Public License for more details. */
/* You should have received a copy of the GNU Library General */
/* Public License along with this library; if not, write to the */
/* Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA */
/* 02111-1307 USA */
/* Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. */
/* Any feedback is very welcome. For any question, comments, */
/* see http://www.math.keio.ac.jp/matumoto/emt.html or email */
/* matumoto@math.keio.ac.jp */
/* Period parameters */
#define MT_N 624
#define MT_M 397
#define MATRIX_A 0x9908b0df /* constant vector a */
#define UPPER_MASK 0x80000000 /* most significant w-r bits */
#define LOWER_MASK 0x7fffffff /* least significant r bits */
/* Tempering parameters */
#define TEMPERING_MASK_B 0x9d2c5680
#define TEMPERING_MASK_C 0xefc60000
#define TEMPERING_SHIFT_U(y) (y >> 11)
#define TEMPERING_SHIFT_S(y) (y << 7)
#define TEMPERING_SHIFT_T(y) (y << 15)
#define TEMPERING_SHIFT_L(y) (y >> 18)
static unsigned long mt[MT_N]; /* the table for the state vector */
static int mti=MT_N+1; /* mti==MT_N+1 means mt[MT_N] is not initialized */
/* initializing the table with a NONZERO seed */
void sgenrand(unsigned long seed)
{
/* setting initial seeds to mt[MT_N] using */
/* the generator Line 25 of Table 1 in */
/* [KNUTH 1981, The Art of Computer Programming */
/* Vol. 2 (2nd Ed.), pp102] */
mt[0]= seed & 0xffffffff;
for (mti=1; mti<MT_N; mti++)
mt[mti] = (69069 * mt[mti-1]) & 0xffffffff;
}
unsigned int genrand()
{
unsigned int y;
static unsigned long mag01[2]={0x0, MATRIX_A};
/* mag01[x] = x * MATRIX_A for x=0,1 */
if (mti >= MT_N) { /* generate MT_N words at one time */
int kk;
if (mti == MT_N+1) /* if sgenrand() has not been called, */
sgenrand(4357); /* a default initial seed is used */
for (kk=0;kk<MT_N-MT_M;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk] = mt[kk+MT_M] ^ (y >> 1) ^ mag01[y & 0x1];
}
for (;kk<MT_N-1;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk] = mt[kk+(MT_M-MT_N)] ^ (y >> 1) ^ mag01[y & 0x1];
}
y = (mt[MT_N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);
mt[MT_N-1] = mt[MT_M-1] ^ (y >> 1) ^ mag01[y & 0x1];
mti = 0;
}
y = mt[mti++];
y ^= TEMPERING_SHIFT_U(y);
y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B;
y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C;
y ^= TEMPERING_SHIFT_L(y);
return y;
}
double double_genrand() {
return genrand() * (1.0/4294967295.0);
}
// *******************************************************
// The Art of Computer programming - Knuth
// vol 2 - section 3.4.2 page 137
// Algorithm S (Selection sampling technique)
void generate_positions(int N, int K, int *pos)
{
int size=N;
int w=K;
do {
if (double_genrand()*size <= w) {
pos[K-w] = N-size;
w--;
}
size--;
} while (size);
}
void generate_message(byte *data, int size)
{
int *p = (int *)data;
size >>=2;
int i;
for (i=0; i<size; i++) {
*p++ = genrand();
}
}
int compare_message(byte *p, byte *q, int size)
{
int *pi = (int *)p;
int *qi = (int *)q;
size >>=2;
int res=0;
int i;
for (i=0; i<size; i++) {
if (pi[i]!=qi[i]) {
res++;
if (res<100) {
printf("%d ",i*4);
}
}
}
printf("\n");
return res;
}
// *******************************************************
double get_sec(clock_t diff)
{
return (double)diff / (double)CLOCKS_PER_SEC;
}
double get_rate(clock_t diff, int byte)
{
return (double)(byte)/((double)(1<<20) * get_sec(diff));
}
double get_KB(int byte)
{
return (double)byte/(double)(1<<10);
}
// *******************************************************
#define GF ((1<<16)+1)
int *GF_log, *GF_exp, *inv;
int inline reduce(unsigned int a)
{
a = (a& ((1<<16)-1)) - (a>>16);
a += (((int)a)>>31) & GF;
return a;
}
int inline field_mult(unsigned int a, unsigned int b)
{
if (a==(1<<16)) return -(int)b + (((-(int)b)>>31) & GF);
return reduce(a*b);
}
// this one work if not both a and b are (1<<16) that is -1.
int inline field_mult_no(unsigned int a, unsigned int b)
{
return reduce(a*b);
}
int inline field_diff(unsigned int a, unsigned int b)
{
a -= b;
return a + ((((int)a)>>31)&GF);
}
int inline field_sum(unsigned int a, unsigned int b)
{
a -= GF-b;
return a + ((((int)a)>>31)&GF);
}
void init_field()
{
GF_log = (int *) malloc(sizeof(int) * GF);
GF_exp = (int *) malloc(sizeof(int) * GF);
inv = (int *) malloc(sizeof(int) * GF);
int p = 1;
int i;
for (i=0; i+1<GF; i++) {
GF_exp[i]=p;
GF_log[p]=i;
p = reduce(3*p);
}
GF_exp[GF-1]=1;
GF_log[0]=0;
for (i=0; i<GF; i++) {
inv[i]=GF_exp[GF-1-GF_log[i]];
}
inv[0]=0;
inv[1]=1;
//test
for (i=0; i<GF; i++) {
if (field_mult(i, inv[i]) != 1) printf("%d ",i);
if (GF_exp[GF_log[i]]!=i) printf("%d ", i);
}
printf("\n");
}
//*********************************************************************
//*********************************************************************
// return GF_log_2(b);
int get_log(int n)
{
int i=0;
while (n>>(i+1))
i++;
return i;
}
void reverse(int *vect, int n)
{
int i,j;
j=n >> 1;
for (i=1; i<n; i++)
{
if (j > i) {
int temp=vect[i];
vect[i]=vect[j];
vect[j]=temp;
}
int m = n >> 1;
while (m >= 1 && (j & m)) {
j ^= m;
m >>= 1;
}
j += m;
}
}
void fft_dit(int *vect, int n)
{
reverse(vect, n);
int i,j;
int step=1;
int number=n/2;
int mult=15;
while (number>0)
{
int *p=vect;
int *q=vect+step;
for (i=0; i<number; i++) {
for (j=0; j<step; j++) {
int a = *p;
int b = field_mult_no(*q, GF_exp[j<<mult]);
*(p++) = field_sum(a,b);
*(q++) = field_diff(a,b);
}
p+=step;
q+=step;
}
step<<=1;
number>>=1;
mult--;
}
}
void ifft_dit(int *vect, int n)
{
reverse(vect, n);
int i,j;
int step=1;
int number=n/2;
int mult=15;
while (number>0)
{
int *p=vect;
int *q=vect+step;
for (i=0; i<number; i++) {
for (j=2*step; j>step; j--) {
int a = *p;
int b = field_mult_no(*q, GF_exp[j<<mult]);
*(p++) = field_sum(a,b);
*(q++) = field_diff(a,b);
}
p+=step;
q+=step;
}
step<<=1;
number>>=1;
mult--;
}
}
void fft2(int *vect, int n)
{
int i=n/2;
while (i--) {
int a = *vect;
int b = *(vect+1);
*(vect++) = field_sum(a,b);
*(vect++) = field_diff(a,b);
}
}
// decimation in frequency
void fft_inc(int *vect, int n)
{
int i,j;
int number=1;
int step=n/2;
int mult = 16 - get_log(n);
while (step>0)
{
int *p=vect;
int *q=vect+step;
for (i=0; i<number; i++) {
for (j=0; j<step; j++) {
int a = *p;
int b = *q;
*(p++) = field_sum(a,b);
// GF_exp[1<<15] never happen, so we are safe to use mult_no
*(q++) = field_mult_no(field_diff(a,b), GF_exp[j<<mult]);
}
p+=step;
q+=step;
}
step>>=1;
number<<=1;
mult++;
}
}
// decimation in time
void ifft_inc(int *vect, int n)
{
int i,j;
int number=n/2;
int step=1;
int mult=15;
int *root=GF_exp + (1<<16);
while (number>0)
{
int *p=vect;
int *q=vect+step;
for (i=0; i<number; i++) {
for (j=0; j<step; j++) {
int a = *p;
// GF_exp[1<<15] never happen, so we are safe to use mult_no
int b = field_mult_no(*q, *(root - (j<<mult)));
*(p++) = field_sum(a,b);
*(q++) = field_diff(a,b);
}
p+=step;
q+=step;
}
step<<=1;
number>>=1;
mult--;
}
}
void fft_rec(int *vect, int n)
{
if (n == 1<<11) return fft_inc(vect, n);
/* if (n==2) {
int a = vect[0];
int b = vect[1];
vect[0] = field_sum(a,b);
vect[1] = field_diff(a,b);
return;
}
*/
int i;
int mult = 16 - get_log(n);
n/=2;
int *l = vect;
int *h = vect + n;
for (i=0; i<n; i++) {
int a = *l;
int b = *h;
*(l++) = field_sum(a,b);
// GF_exp[1<<15] never happen, so we are safe to use mult_no
*(h++) = field_mult_no(field_diff(a,b), GF_exp[i<<mult]);
}
fft_rec(vect, n);
fft_rec(vect+n, n);
}
void ifft_rec(int *vect, int n)
{
if (n <= 1<<11) return ifft_inc(vect, n);
/* if (n==2) {
int a = vect[0];
int b = vect[1];
vect[0] = field_sum(a,b);
vect[1] = field_diff(a,b);
return;
}
*/
int i;
int mult = 16 - get_log(n);
n/=2;
ifft_rec(vect, n);
ifft_rec(vect+n, n);
int *l = vect;
int *h = vect + n;
int *root = GF_exp + (1<<16);
for (i=0; i<n; i++) {
int a = *l;
// GF_exp[1<<15] never happen, so we are safe to use mult_no
int b = field_mult_no(*h, *(root - (i<<mult)));
*(l++) = field_sum(a,b);
*(h++) = field_diff(a,b);
}
}
void (*fft)(int *, int) = fft_rec;
void (*ifft)(int *, int) = ifft_rec;
//*********************************************************************
//*********************************************************************
void compute_prod_old(int *prod, int *pos, int k, int n)
{
int x,i;
for (x=0; x<n; x++) {
long long t=1;
for (i=0; i<k; i++) {
if (x!=pos[i])
t = field_mult(t, field_diff(x,pos[i]));
}
prod[x]=t;
}
}
void compute_prod(int *prod, int *pos, int k, int n)
{
int x,i;
for (x=0; x<n; x++) {
unsigned int t=0;
for (i=0; i<k; i++) {
t += GF_log[field_diff(x,pos[i])];
}
prod[x]=GF_exp[t % (1<<16)];
}
}
// C++ part for FFT, better use a good fft library instead.
const double Pi = acos(-1);
// decimation in frequency
// output is bit reversed
void complex_fft_rec(complex<double>* X, int n)
{
if (n==1) return;
for (int i=0; i<n/2; i++) {
complex<double> a = X[i];
complex<double> b = X[n/2 + i];
X[i] = a + b;
X[n/2 + i] = (a - b) * polar(1.0, -2*Pi*i/double(n));
}
complex_fft_rec(X, n/2);
complex_fft_rec(X + n/2, n/2);
}
// decimation in time
// input is bit reversed.
void complex_ifft_rec(complex<double>* X, int n)
{
if (n==1) return;
complex_ifft_rec(X, n/2);
complex_ifft_rec(X + n/2, n/2);
for (int i=0; i<n/2; i++) {
complex<double> a = X[i];
complex<double> b = X[n/2 + i] * polar(1.0, 2*Pi*i/double(n));
X[i] = a + b;
X[n/2 + i] = (a - b);
}
}
// The memory can be allocated only once if many call to this
// function are expected. the fft of the log can be precomputed.
void compute_prod_fast(int *prod, int *pos, int k, int n)
{
const int NN = 2*n;
complex<double>* R = (complex<double> *)malloc(NN * sizeof(complex<double>));
complex<double>* L = (complex<double> *)malloc(NN * sizeof(complex<double>));
for (int i=0; i<NN; ++i) {
R[i] = 0;
L[i] = 0;
}
for (int i=0; i < k; ++i) {
R[pos[i]] = 1;
}
for (int i=0; i < n; ++i) {
L[i] = GF_log[i];
if (i>0) {
L[NN - i] = GF_log[GF - i];
}
}
// convolution
complex_fft_rec(R, NN);
complex_fft_rec(L, NN);
for (int i=0; i < NN; ++i) {
R[i] *= L[i];
}
complex_ifft_rec(R, NN);
// now we have the GF_log(prod[i]) in Re(R[i])
// we take the result mod 2^16 since we are in the multiplicative
// field of GF(2^16+1)
for (int x=0; x < n; ++x) {
prod[x] = GF_exp[((long long) (real(R[x])/double(NN) + 0.5)) % (1<<16)];
}
free(R);
free(L);
}
//*********************************************************************
//*********************************************************************
int *high;
int *low;
int *prod;
int *enc_fft;
int *rev_fft;
int *mid_fft;
int *prod_enc;
void init_code(int n)
{
low = (int *) malloc(sizeof(int) * n);
high = (int *) malloc(sizeof(int) * n);
prod = (int *) malloc(sizeof(int) * n);
prod_enc = (int *) malloc(sizeof(int) * n);
enc_fft = (int *) malloc(sizeof(int) * n);
rev_fft = (int *) malloc(sizeof(int) * n);
mid_fft = (int *) malloc(sizeof(int) * n);
int x;
for (x=0; x<n; x++) {
enc_fft[x] = inv[x];
rev_fft[n - x - 1] = inv[GF - x - 1];
if (x<n/2) {
mid_fft[x] = inv[x];
} else {
mid_fft[x] = inv[GF - n + x];
}
}
fft(enc_fft,n);
fft(rev_fft,n);
fft(mid_fft,n);
// already divide by the correct value, so we
// will not have to do it after the inverse fft.
for (x=0; x<n; x++) {
enc_fft[x] = field_mult(enc_fft[x], inv[n]);
rev_fft[x] = field_mult(rev_fft[x], inv[n]);
mid_fft[x] = field_mult(mid_fft[x], inv[n]);
}
}
//*********************************************************************
//*********************************************************************
void convolution(int *dst, int *src, int n)
{
int x,y;
for (x=0; x<n; x++) {
int t=0;
for (y=0; y<n; y++) {
t = (t + field_mult(src[y], inv[(x + GF - y)%GF])) % GF;
}
dst[x]= t;
}
}
//*********************************************************************
//*********************************************************************
void encode(int *dst, int *src, int k, int n)
{
int x,i;
// put received packet in place
// divide by prod[pos[i]]
for (x=k; x<n; x++) dst[x] = 0;
for (i=0; i<k; i++) dst[i] = field_mult(src[i], inv[prod_enc[i]]);
// convolve with inverse function
// TODO: depending on k we can gain a little because
// either k<n/2 and the second half of the input is 0
// either k>=n/2 and we don't need the fist half of the output
fft(dst, n);
for (x=0; x<n; x++)
dst[x] = field_mult(dst[x], enc_fft[x]);
ifft(dst,n);
// multiply by prod[x] the parity positions
for (x=k; x<n; x++) {
dst[x] = field_mult(dst[x], prod_enc[x]);
}
// put systematic symbol in place
for (i=0; i<k; i++) dst[i]=src[i];
}
// This work like encode except that now, we cannot just
// compute the convolution with one fft since the src position
// are all over the codeword and we need the first k output position.
void decode(int *dst, int *src, int *pos, int k, int n)
{
int i;
// put received packet in place and divide by prod[pos[i]]
// low contains the first half and then is null,
// high is null and then contains the second half.
// since we need to take the fft of both, I did some optimisations.
memset(high, 0, n * sizeof(int));
memset(low, 0, n * sizeof(int));
// needed for the first fft pass done here
int mult = 16 - get_log(n);
int *root = GF_exp + (1<<16);
for (i=0; i<k; i++) {
int v = src[i];
if (v == 0) continue;
int x = pos[i];
v = field_mult(v, inv[prod[x]]);
// remark that v is non-zero since prod is never 0
// and taking the inverse will not change this.
if (x < n/2) {
low[x] = v;
low[n/2 + x] = field_mult_no(v, GF_exp[x << mult]);
} else {
high[x - n/2] = v;
high[x] = field_mult_no(GF - v, GF_exp[(x - n/2) << mult]);
}
}
fft(low, n/2);
fft(low + n/2, n/2);
fft(high, n/2);
fft(high + n/2, n/2);
// compute low part of the convolution
for (i=0; i<n; i++) {
dst[i] = field_sum(field_mult(low[i], mid_fft[i]),
field_mult(high[i], rev_fft[i]));
}
// ifft(dst, n);
// small optimisation since second part is not needed
ifft(dst, n/2);
ifft(dst + n/2, n/2);
for (i=0; i<n/2; i++) {
int v = field_mult_no(dst[i + n/2], *(root - (i<<mult)));
v = field_sum(dst[i], v);
dst[i] = field_mult(v, prod[i]);
}
// compute high part of the convolution
// only needed if k > n/2
if (k > n/2) {
for (i=0; i<n; i++) {
// we can reuse high as it is no longer needed.
high[i] = field_sum(field_mult(low[i], enc_fft[i]),
field_mult(high[i], mid_fft[i]));
}
// small optimisation since first part is not needed
ifft(high, n/2);
ifft(high + n/2, n/2);
for (i=n/2; i<k; i++) {
int v = field_mult_no(high[i], *(root - ((i-n/2)<<mult)));
v = field_diff(high[i - n/2], v);
dst[i] = field_mult(v, prod[i]);
}
}
// replace received positions by the correct symbol
for (i=0; i<k; i++)
if (pos[i]<k)
dst[pos[i]]=src[i];
}
int main(int argc, char *argv[])
{
int i,j,n;
clock_t tick;
// get parameters
int N, K, S, nb_bloc;
// help message
if (argc<=3) {
printf("usage: %s K N S\n",argv[0]);
return 0;
}
K = atoi(argv[1]);
N = atoi(argv[2]);
nb_bloc = atoi(argv[3]);
S = 2;
// power of two just greater or equal to N
int n_walsh=1;
while ((1<<n_walsh) < N) n_walsh++;
N = 1<<n_walsh;
printf("GF(%d)\n", GF);
printf("K=%d\n",K);
printf("N=%d\n",N);
printf("nb_bloc=%d\n", nb_bloc);
printf("message size = %f KB\n", get_KB(S*K*nb_bloc));
// ****************************************
// ****************************************
printf("[initialisation (memory + randomness)]\n");
tick = clock();
// code init
init_field();
init_code(N);
// memory for the full message
int *positions = (int *)malloc(sizeof(int)*K*nb_bloc);
int *message = (int *)malloc(sizeof(int)*K*nb_bloc);
int *received = (int *)malloc(sizeof(int)*K*nb_bloc);
// init random number generator
sgenrand(time(NULL));
// sgenrand(123);
// sgenrand(321);
// Generate the random message
for (i=0; i<K*nb_bloc; i++) {
message[i] = genrand() % GF;
}
// Generate the random positions
// for (n=0; n<nb_bloc; n++) {
// generate_positions(N, K, positions + n*K);
// }
generate_positions(N, K, positions);
// memory for encoding/decoding one bloc
int *codeword = (int *)malloc(sizeof(int)*N);
// for encoding
int *kpos=(int *)malloc(sizeof(int)*K);
for(i=0; i<K; i++) kpos[i] = i;
compute_prod_fast(prod_enc, kpos, K, N);
// end of initialisation
tick = clock() - tick;
printf("%f s\n", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S*K*nb_bloc));
printf("\n");
// ****************************************
// ****************************************
printf("[encoding message]\n");
tick = clock();
int *pos = positions;
for (n=0; n<nb_bloc; n++)
{
// int *pos = positions + n*K;
int *sys = message + n*K;
int *rec = received + n*K;
encode(codeword, sys, K, N);
// simulate errors...
for (i=0; i<K; i++) rec[i] = codeword[pos[i]];
}
tick = clock() - tick;
printf("%f s\n", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S*K*nb_bloc));
printf("%f MB/s\n", get_rate(tick, S*N*nb_bloc));
printf("\n");
// ****************************************
// ****************************************
printf("[decoding]\n");
tick = clock();
double syst=0;
compute_prod_fast(prod, pos, K, N);
for (n=0; n<nb_bloc; n++)
{
// current bloc
int *rec = received + n*K;
decode(codeword, rec, pos, K, N);
// put result back into received
for (i=0; i<K; i++) {
if (pos[i]<K) syst++;
rec[i]=codeword[i];
}
}
tick = clock() - tick;
printf("%f s\n", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S*K*nb_bloc));
printf("%f percent of systematic packets received\n", syst / (double)(K*nb_bloc));
printf("\n");
// ****************************************
// ****************************************
// verify that we recovered the message correctly
printf("[errors]\n");
int count=0;
for (i=0; i<K*nb_bloc; i++) {
if (message[i]!=received[i]) count++;
}
printf("%i\n",count);
// ****************************************
// ****************************************
// end;
return 0;
}

View File

@@ -0,0 +1,343 @@
// ************************************************
// ************************************************
// Sample program to use reed_solomon.c
// (c) 2009 Frederic Didier.
#include "reed_solomon.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
/************************************************/
/** Random number generator -> 32bits **/
/** Mersenne twister code **/
/************************************************/
/* A C-program for MT19937: Integer version */
/* genrand() generates one pseudorandom unsigned integer (32bit) */
/* which is uniformly distributed among 0 to 2^32-1 for each */
/* call. sgenrand(seed) set initial values to the working area */
/* of 624 words. Before genrand(), sgenrand(seed) must be */
/* called once. (seed is any 32-bit integer except for 0). */
/* Coded by Takuji Nishimura, considering the suggestions by */
/* Topher Cooper and Marc Rieffel in July-Aug. 1997. */
/* This library is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU Library General Public */
/* License as published by the Free Software Foundation; either */
/* version 2 of the License, or (at your option) any later */
/* version. */
/* This library is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */
/* See the GNU Library General Public License for more details. */
/* You should have received a copy of the GNU Library General */
/* Public License along with this library; if not, write to the */
/* Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA */
/* 02111-1307 USA */
/* Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. */
/* Any feedback is very welcome. For any question, comments, */
/* see http://www.math.keio.ac.jp/matumoto/emt.html or email */
/* matumoto@math.keio.ac.jp */
/* Period parameters */
#define MT_N 624
#define MT_M 397
#define MATRIX_A 0x9908b0df /* constant vector a */
#define UPPER_MASK 0x80000000 /* most significant w-r bits */
#define LOWER_MASK 0x7fffffff /* least significant r bits */
/* Tempering parameters */
#define TEMPERING_MASK_B 0x9d2c5680
#define TEMPERING_MASK_C 0xefc60000
#define TEMPERING_SHIFT_U(y) (y >> 11)
#define TEMPERING_SHIFT_S(y) (y << 7)
#define TEMPERING_SHIFT_T(y) (y << 15)
#define TEMPERING_SHIFT_L(y) (y >> 18)
static unsigned long mt[MT_N]; /* the table for the state vector */
static int mti=MT_N+1; /* mti==MT_N+1 means mt[MT_N] is not initialized */
/* initializing the table with a NONZERO seed */
void sgenrand(unsigned long seed)
{
/* setting initial seeds to mt[MT_N] using */
/* the generator Line 25 of Table 1 in */
/* [KNUTH 1981, The Art of Computer Programming */
/* Vol. 2 (2nd Ed.), pp102] */
mt[0]= seed & 0xffffffff;
for (mti=1; mti<MT_N; mti++)
mt[mti] = (69069 * mt[mti-1]) & 0xffffffff;
}
unsigned int genrand()
{
unsigned int y;
static unsigned long mag01[2]={0x0, MATRIX_A};
/* mag01[x] = x * MATRIX_A for x=0,1 */
if (mti >= MT_N) { /* generate MT_N words at one time */
int kk;
if (mti == MT_N+1) /* if sgenrand() has not been called, */
sgenrand(4357); /* a default initial seed is used */
for (kk=0;kk<MT_N-MT_M;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk] = mt[kk+MT_M] ^ (y >> 1) ^ mag01[y & 0x1];
}
for (;kk<MT_N-1;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk] = mt[kk+(MT_M-MT_N)] ^ (y >> 1) ^ mag01[y & 0x1];
}
y = (mt[MT_N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);
mt[MT_N-1] = mt[MT_M-1] ^ (y >> 1) ^ mag01[y & 0x1];
mti = 0;
}
y = mt[mti++];
y ^= TEMPERING_SHIFT_U(y);
y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B;
y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C;
y ^= TEMPERING_SHIFT_L(y);
return y;
}
double double_genrand() {
return genrand() * (1.0/4294967295.0);
}
// *******************************************************
// The Art of Computer programming - Knuth
// vol 2 - section 3.4.2 page 137
// Algorithm S (Selection sampling technique)
void generate_positions(int N, int K, int *pos)
{
int size=N;
int w=K;
do {
if (double_genrand()*size <= w) {
pos[K-w] = N-size;
w--;
}
size--;
} while (size);
}
void generate_message(byte *data, int size)
{
int *p = (int *)data;
size >>=2;
int i;
for (i=0; i<size; i++) {
*p++ = genrand();
}
}
int compare_message(byte *p, byte *q, int size)
{
int *pi = (int *)p;
int *qi = (int *)q;
size >>=2;
int res=0;
int i;
for (i=0; i<size; i++) {
if (pi[i]!=qi[i]) {
res++;
if (res<100) {
printf("%d ",i*4);
}
}
}
printf("\n");
return res;
}
// *******************************************************
double get_sec(clock_t diff)
{
return (double)diff / (double)CLOCKS_PER_SEC;
}
double get_rate(clock_t diff, int byte)
{
return (double)(byte)/((double)(1<<20) * get_sec(diff));
}
double get_KB(int byte)
{
return (double)byte/(double)(1<<10);
}
// *******************************************************
int main(int argc, char *argv[])
{
int i,j,n;
clock_t tick;
// get parameters
int n_field,K,N,S,m_size;
// default ones
n_field = 16;
m_size = 1<<26;
S = 1<<10;
// help message
if (argc<=2) {
printf("usage: %s K N S [message size in MB]\n",argv[0]);
return 0;
}
// read parameters
K = atoi(argv[1]);
N = atoi(argv[2]);
if (argc>3) S = atoi(argv[3]);
if (argc>4) m_size = atoi(argv[4]) << 20;
// number of field elements per packets.
int nb_elt = (S * 8) / n_field;
// compute number of blocs
int nb_bloc = m_size / (K*S);
if (nb_bloc==0) nb_bloc=1;
// power of two just greater than N
int n_walsh=1;
while ((1<<n_walsh) < N) n_walsh++;
// print parameters
printf("[parameters]\n");
printf("GF 2^%d\n", n_field);
printf("n = %d (n_walsh = %d)\n", N, n_walsh);
printf("k = %d\n", K);
printf("s = %d (bytes per packet)\n", S);
printf("field elements per packet = %d\n", nb_elt);
printf("number of bloc = %d\n", nb_bloc);
printf("bloc size = %f KB\n", get_KB(K*S));
printf("message size = %f KB\n", get_KB(K*S*nb_bloc));
printf("\n");
// code init
code_init(n_field, n_walsh);
// ****************************************
// ****************************************
printf("[initialisation (memory + randomness)]\n");
tick = clock();
// memory for the full message
int *positions = (int *)malloc(sizeof(int)*K*nb_bloc);
byte *message = (byte *)malloc(sizeof(byte)*S*K*nb_bloc);
byte *received = (byte *)malloc(sizeof(byte)*S*K*nb_bloc);
// memory for encoding/decoding one bloc
byte *codeword = (byte *)malloc(sizeof(byte)*S*N);
// init random number generator
sgenrand(time(NULL));
// sgenrand(123);
// sgenrand(321);
// Generate the random message
generate_message(message, S*K*nb_bloc);
// Generate the random positions
for (n=0; n<nb_bloc; n++) {
generate_positions(N, K, positions + n*K);
}
// end of initialisation
tick = clock() - tick;
printf("%f s\n", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S*K*nb_bloc));
printf("\n");
// ****************************************
// ****************************************
printf("[encoding message]\n");
tick = clock();
encode_init(K);
byte *dst=received;
for (n=0; n<nb_bloc; n++)
{
int *pos = positions + n*K;
byte *systematic = message + n*K*S;
fast_encode(N, K, S/2, (symbol *)systematic, (symbol *)codeword);
// simulate errors...
for (i=0; i<K; i++)
{
byte *src;
if (pos[i]<K) src = systematic + pos[i] * S;
else src = codeword + (pos[i]-K) * S;
__builtin_memcpy(dst, src, S);
dst += S;
}
}
tick = clock() - tick;
printf("%f s\n", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S*K*nb_bloc));
printf("%f MB/s\n", get_rate(tick, S*N*nb_bloc));
printf("\n");
// ****************************************
// ****************************************
printf("[decoding]\n");
tick = clock();
double syst=0;
for (n=0; n<nb_bloc; n++)
{
// current bloc
int *pos = positions + n*K;
byte *rec = received + n*S*K;
// stat for systematic packet
for (i=0; i<K; i++) {
if (pos[i]<K) syst++;
}
fast_decode(K, S/2, pos, (symbol *)rec, (symbol *)codeword);
// put result back into received
__builtin_memcpy(rec, codeword, S*K);
}
tick = clock() - tick;
printf("%f s\n", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S*K*nb_bloc));
printf("%f percent of systematic packets received\n", syst / (double)(K*nb_bloc));
printf("\n");
// ****************************************
// ****************************************
// verify that we recovered the message correctly
printf("[errors]\n");
printf("%d\n\n", compare_message(message, received, S*K*nb_bloc));
// ****************************************
// ****************************************
// clear code
code_clear();
// end;
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,49 @@
// Reed-Solomon encoding/erasure decoding
// Implementation of the algorithms described in
// Efficient erasure decoding of Reed-Solomon codes
// http://arxiv.org/abs/0901.1886v1
// (c) 2009 Frederic didier.
// Any feedback is very welcome. For any question, comments,
// see http://algo.epfl.ch/~didier/reed_solomon.html or email
// frederic.didier@epfl.ch
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials
// provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
// TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
// OF SUCH DAMAGE.
// type used to store one field symbol
// With short int, we can work up to GF(16)
// If one wants to work on bigger fied, replace this by int.
typedef unsigned short symbol;
typedef unsigned char byte;
// Common initialisation functions
extern void code_init(int n_field, int n_walsh);
extern void code_clear();
extern void encode_init(int K);
extern void fast_encode(int N, int K, int S, symbol *data, symbol *packets);
extern void fast_decode(int K, int S, int *positions, symbol *data, symbol *packets);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,72 @@
// Reed-Solomon encoding/erasure decoding
// Implementation of the algorithms described in
// Efficient erasure decoding of Reed-Solomon codes
// http://arxiv.org/abs/0901.1886v1
// (c) 2009 Frederic didier.
// Any feedback is very welcome. For any question, comments,
// see http://algo.epfl.ch/~didier/reed_solomon.html or email
// frederic.didier@epfl.ch
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials
// provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS
// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
// TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
// OF SUCH DAMAGE.
#include "stdlib.h"
#include "string.h"
#include "stdint.h"
#include "stdio.h"
// type used to store one field symbol
// With short int, we can work up to GF(16)
// and we can apply the fast algo up to N_walsh=15
// If one wants to work on bigger fied, replace this by int.
typedef uint16_t symbol;
typedef uint8_t byte;
// Common initialisation functions
extern void fill_table(int n_field);
extern void code_init(int n_walsh);
extern void code_clear();
// quadratic algo
extern void encode_init(int N, int K);
extern void (*process)(int, void *, void *, int);
extern void (*process_eq)(int, void *, void *, int);
extern void use_xor();
extern void use_xor2();
extern void use_table();
extern void use_direct();
extern void use_quadratic();
extern void use_incremental();
extern void use_karatsuba();
extern void use_special();
extern void (*RS_encode)(int N, int K, int S, void *info, void *output);
extern void (*RS_decode)(int N, int K, int S, int *pos, void *received, void *output);

View File

@@ -0,0 +1,302 @@
// ************************************************
// ************************************************
// Sample program to use reed_solomon.c
// (c) 2009 Frederic Didier.
#include "reed_solomon.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
/************************************************/
/** Random number generator -> 32bits **/
/** Mersenne twister code **/
/************************************************/
/* A C-program for MT19937: Integer version */
/* genrand() generates one pseudorandom unsigned integer (32bit) */
/* which is uniformly distributed among 0 to 2^32-1 for each */
/* call. sgenrand(seed) set initial values to the working area */
/* of 624 words. Before genrand(), sgenrand(seed) must be */
/* called once. (seed is any 32-bit integer except for 0). */
/* Coded by Takuji Nishimura, considering the suggestions by */
/* Topher Cooper and Marc Rieffel in July-Aug. 1997. */
/* This library is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU Library General Public */
/* License as published by the Free Software Foundation; either */
/* version 2 of the License, or (at your option) any later */
/* version. */
/* This library is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */
/* See the GNU Library General Public License for more details. */
/* You should have received a copy of the GNU Library General */
/* Public License along with this library; if not, write to the */
/* Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA */
/* 02111-1307 USA */
/* Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. */
/* Any feedback is very welcome. For any question, comments, */
/* see http://www.math.keio.ac.jp/matumoto/emt.html or email */
/* matumoto@math.keio.ac.jp */
/* Period parameters */
#define MT_N 624
#define MT_M 397
#define MATRIX_A 0x9908b0df /* constant vector a */
#define UPPER_MASK 0x80000000 /* most significant w-r bits */
#define LOWER_MASK 0x7fffffff /* least significant r bits */
/* Tempering parameters */
#define TEMPERING_MASK_B 0x9d2c5680
#define TEMPERING_MASK_C 0xefc60000
#define TEMPERING_SHIFT_U(y) (y >> 11)
#define TEMPERING_SHIFT_S(y) (y << 7)
#define TEMPERING_SHIFT_T(y) (y << 15)
#define TEMPERING_SHIFT_L(y) (y >> 18)
static unsigned long mt[MT_N]; /* the table for the state vector */
static int mti=MT_N+1; /* mti==MT_N+1 means mt[MT_N] is not initialized */
/* initializing the table with a NONZERO seed */
void sgenrand(unsigned long seed)
{
/* setting initial seeds to mt[MT_N] using */
/* the generator Line 25 of Table 1 in */
/* [KNUTH 1981, The Art of Computer Programming */
/* Vol. 2 (2nd Ed.), pp102] */
mt[0]= seed & 0xffffffff;
for (mti=1; mti<MT_N; mti++)
mt[mti] = (69069 * mt[mti-1]) & 0xffffffff;
}
unsigned int genrand()
{
unsigned int y;
static unsigned long mag01[2]={0x0, MATRIX_A};
/* mag01[x] = x * MATRIX_A for x=0,1 */
if (mti >= MT_N) { /* generate MT_N words at one time */
int kk;
if (mti == MT_N+1) /* if sgenrand() has not been called, */
sgenrand(4357); /* a default initial seed is used */
for (kk=0;kk<MT_N-MT_M;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk] = mt[kk+MT_M] ^ (y >> 1) ^ mag01[y & 0x1];
}
for (;kk<MT_N-1;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk] = mt[kk+(MT_M-MT_N)] ^ (y >> 1) ^ mag01[y & 0x1];
}
y = (mt[MT_N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);
mt[MT_N-1] = mt[MT_M-1] ^ (y >> 1) ^ mag01[y & 0x1];
mti = 0;
}
y = mt[mti++];
y ^= TEMPERING_SHIFT_U(y);
y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B;
y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C;
y ^= TEMPERING_SHIFT_L(y);
return y;
}
double double_genrand() {
return genrand() * (1.0/4294967295.0);
}
// *******************************************************
void generate_message(void *data, int size, int n_field)
{
if (n_field==8 || n_field==16) {
int *p = (int *)data;
size >>=2;
int i;
for (i=0; i<size; i++) {
*p++ = genrand();
}
} else {
unsigned short int *p = (unsigned short int *)data;
size>>=1;
int i;
for (i=0; i<size; i++) {
*p++ = genrand() & ((1<<n_field)-1);
}
}
}
int compare_message(void *p, void *q, int size)
{
int *pi = p;
int *qi = q;
size >>=2;
int res=0;
int i;
for (i=0; i<size; i++) {
if (pi[i]!=qi[i]) res++;
}
return res;
}
// *******************************************************
double get_sec(clock_t diff)
{
return (double)diff / (double)CLOCKS_PER_SEC;
}
double get_rate(clock_t diff, long long byte)
{
return (double)(byte)/((double)(1<<20) * get_sec(diff));
}
double get_KB(long long byte)
{
return (double)byte/(double)(1<<10);
}
// *******************************************************
int main(int argc, char *argv[])
{
int i,j,b;
clock_t tick;
// get parameters
long long S;
int n_field,nb_bloc,nb_time;
// default ones
S = 1<<10;
nb_bloc = 1<<14;
nb_time = 100;
// help message
if (argc<=1) {
printf("usage: %s n_field [S in Byte] [nb bloc] [nb time]\n", argv[0]);
return 0;
}
// read parameters
n_field = atoi(argv[1]);
if (argc>2) S = atoi(argv[2])*n_field*4;
if (argc>3) nb_bloc = atoi(argv[3]);
if (argc>4) nb_time = atoi(argv[4]);
// print parameters
printf("[parameters]\n");
printf("GF 2^%d\n", n_field);
printf("packet size = %d Byte\n", S);
printf("number of packets = %d (%f KB)\n", nb_bloc, get_KB(nb_bloc * S));
printf("number of time = %d\n", nb_time);
printf("\n");
// ****************************************
// ****************************************
printf("[initialisation (memory + randomness)]\n");
tick = clock();
// init field
fill_table(n_field);
// this is the memory for the packet and their positions
void *source;
void *destination;
int *coeff;
source = malloc(S*nb_bloc);
destination = malloc(S*nb_bloc);
coeff = malloc(nb_bloc*sizeof(int));
// init random number generator
// sgenrand(time(NULL));
sgenrand(123);
// Generate the random message
generate_message(source, S*nb_bloc, n_field);
for (i=0; i<nb_bloc; i++)
coeff[i]= genrand() & ((1<<n_field)-1);
// end of initialisation
tick = clock() - tick;
printf("%f s\n", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S*nb_bloc));
printf("\n");
// ****************************************
// ****************************************
printf("[builtin memcpy]\n");
tick = clock();
for (j=0; j<nb_time; j++)
for (i=0; i<nb_bloc; i++)
{
__builtin_memcpy(destination+i*S, source+i*S, S);
}
tick = clock() - tick;
printf("%f s\t", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S * nb_bloc * nb_time));
printf("\n");
// ****************************************
// ****************************************
printf("[my memxor]\n");
tick = clock();
for (j=0; j<nb_time; j++)
for (i=0; i<nb_bloc; i++)
{
memxor(destination+i*S, source+i*S, S);
}
tick = clock() - tick;
printf("%f s\t", get_sec(tick));
printf("%f MB/s\n", get_rate(tick, S * nb_bloc * nb_time));
printf("\n");
// ****************************************
// ****************************************
printf("[packet xor/mult]\n\n");
long long memory = S * nb_bloc * nb_time;
double multiplicator;
int test;
for (test=0; test<5; test++) {
switch (test) {
case 0 : use_xor();multiplicator=1;break;
case 1 : use_xor2();multiplicator=1;break;
case 2 : use_special();multiplicator=(double)n_field/16.0;break;
case 3 : use_table();multiplicator=(double)n_field/16.0;break;
case 4 : use_direct();multiplicator=(double)n_field/16.0;break;
}
if (n_field==8) multiplicator=1;
tick = clock();
for (j=0; j<nb_time; j++)
for (i=0; i<nb_bloc; i++)
{
process(coeff[i], destination+i*S, source+i*S, S);
}
tick = clock() - tick;
printf("%f s\t", get_sec(tick));
printf("%f MB/s\n", multiplicator * get_rate(tick, memory));
printf("\n");
}
// end
return 0;
}

View File

@@ -0,0 +1,247 @@
// ISO C9x compliant stdint.h for Microsoft Visual Studio
// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
//
// Copyright (c) 2006-2008 Alexander Chemeris
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. The name of the author may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _MSC_VER // [
#error "Use this header only with Microsoft Visual C++ compilers!"
#endif // _MSC_VER ]
#ifndef _MSC_STDINT_H_ // [
#define _MSC_STDINT_H_
#if _MSC_VER > 1000
#pragma once
#endif
#include <limits.h>
// For Visual Studio 6 in C++ mode and for many Visual Studio versions when
// compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
// or compiler give many errors like this:
// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
#ifdef __cplusplus
extern "C" {
#endif
# include <wchar.h>
#ifdef __cplusplus
}
#endif
// Define _W64 macros to mark types changing their size, like intptr_t.
#ifndef _W64
# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
# define _W64 __w64
# else
# define _W64
# endif
#endif
// 7.18.1 Integer types
// 7.18.1.1 Exact-width integer types
// Visual Studio 6 and Embedded Visual C++ 4 doesn't
// realize that, e.g. char has the same size as __int8
// so we give up on __intX for them.
#if (_MSC_VER < 1300)
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#else
typedef signed __int8 int8_t;
typedef signed __int16 int16_t;
typedef signed __int32 int32_t;
typedef unsigned __int8 uint8_t;
typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t;
#endif
typedef signed __int64 int64_t;
typedef unsigned __int64 uint64_t;
// 7.18.1.2 Minimum-width integer types
typedef int8_t int_least8_t;
typedef int16_t int_least16_t;
typedef int32_t int_least32_t;
typedef int64_t int_least64_t;
typedef uint8_t uint_least8_t;
typedef uint16_t uint_least16_t;
typedef uint32_t uint_least32_t;
typedef uint64_t uint_least64_t;
// 7.18.1.3 Fastest minimum-width integer types
typedef int8_t int_fast8_t;
typedef int16_t int_fast16_t;
typedef int32_t int_fast32_t;
typedef int64_t int_fast64_t;
typedef uint8_t uint_fast8_t;
typedef uint16_t uint_fast16_t;
typedef uint32_t uint_fast32_t;
typedef uint64_t uint_fast64_t;
// 7.18.1.4 Integer types capable of holding object pointers
#ifdef _WIN64 // [
typedef signed __int64 intptr_t;
typedef unsigned __int64 uintptr_t;
#else // _WIN64 ][
typedef _W64 signed int intptr_t;
typedef _W64 unsigned int uintptr_t;
#endif // _WIN64 ]
// 7.18.1.5 Greatest-width integer types
typedef int64_t intmax_t;
typedef uint64_t uintmax_t;
// 7.18.2 Limits of specified-width integer types
#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
// 7.18.2.1 Limits of exact-width integer types
#define INT8_MIN ((int8_t)_I8_MIN)
#define INT8_MAX _I8_MAX
#define INT16_MIN ((int16_t)_I16_MIN)
#define INT16_MAX _I16_MAX
#define INT32_MIN ((int32_t)_I32_MIN)
#define INT32_MAX _I32_MAX
#define INT64_MIN ((int64_t)_I64_MIN)
#define INT64_MAX _I64_MAX
#define UINT8_MAX _UI8_MAX
#define UINT16_MAX _UI16_MAX
#define UINT32_MAX _UI32_MAX
#define UINT64_MAX _UI64_MAX
// 7.18.2.2 Limits of minimum-width integer types
#define INT_LEAST8_MIN INT8_MIN
#define INT_LEAST8_MAX INT8_MAX
#define INT_LEAST16_MIN INT16_MIN
#define INT_LEAST16_MAX INT16_MAX
#define INT_LEAST32_MIN INT32_MIN
#define INT_LEAST32_MAX INT32_MAX
#define INT_LEAST64_MIN INT64_MIN
#define INT_LEAST64_MAX INT64_MAX
#define UINT_LEAST8_MAX UINT8_MAX
#define UINT_LEAST16_MAX UINT16_MAX
#define UINT_LEAST32_MAX UINT32_MAX
#define UINT_LEAST64_MAX UINT64_MAX
// 7.18.2.3 Limits of fastest minimum-width integer types
#define INT_FAST8_MIN INT8_MIN
#define INT_FAST8_MAX INT8_MAX
#define INT_FAST16_MIN INT16_MIN
#define INT_FAST16_MAX INT16_MAX
#define INT_FAST32_MIN INT32_MIN
#define INT_FAST32_MAX INT32_MAX
#define INT_FAST64_MIN INT64_MIN
#define INT_FAST64_MAX INT64_MAX
#define UINT_FAST8_MAX UINT8_MAX
#define UINT_FAST16_MAX UINT16_MAX
#define UINT_FAST32_MAX UINT32_MAX
#define UINT_FAST64_MAX UINT64_MAX
// 7.18.2.4 Limits of integer types capable of holding object pointers
#ifdef _WIN64 // [
# define INTPTR_MIN INT64_MIN
# define INTPTR_MAX INT64_MAX
# define UINTPTR_MAX UINT64_MAX
#else // _WIN64 ][
# define INTPTR_MIN INT32_MIN
# define INTPTR_MAX INT32_MAX
# define UINTPTR_MAX UINT32_MAX
#endif // _WIN64 ]
// 7.18.2.5 Limits of greatest-width integer types
#define INTMAX_MIN INT64_MIN
#define INTMAX_MAX INT64_MAX
#define UINTMAX_MAX UINT64_MAX
// 7.18.3 Limits of other integer types
#ifdef _WIN64 // [
# define PTRDIFF_MIN _I64_MIN
# define PTRDIFF_MAX _I64_MAX
#else // _WIN64 ][
# define PTRDIFF_MIN _I32_MIN
# define PTRDIFF_MAX _I32_MAX
#endif // _WIN64 ]
#define SIG_ATOMIC_MIN INT_MIN
#define SIG_ATOMIC_MAX INT_MAX
#ifndef SIZE_MAX // [
# ifdef _WIN64 // [
# define SIZE_MAX _UI64_MAX
# else // _WIN64 ][
# define SIZE_MAX _UI32_MAX
# endif // _WIN64 ]
#endif // SIZE_MAX ]
// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
#ifndef WCHAR_MIN // [
# define WCHAR_MIN 0
#endif // WCHAR_MIN ]
#ifndef WCHAR_MAX // [
# define WCHAR_MAX _UI16_MAX
#endif // WCHAR_MAX ]
#define WINT_MIN 0
#define WINT_MAX _UI16_MAX
#endif // __STDC_LIMIT_MACROS ]
// 7.18.4 Limits of other integer types
#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
// 7.18.4.1 Macros for minimum-width integer constants
#define INT8_C(val) val##i8
#define INT16_C(val) val##i16
#define INT32_C(val) val##i32
#define INT64_C(val) val##i64
#define UINT8_C(val) val##ui8
#define UINT16_C(val) val##ui16
#define UINT32_C(val) val##ui32
#define UINT64_C(val) val##ui64
// 7.18.4.2 Macros for greatest-width integer constants
#define INTMAX_C INT64_C
#define UINTMAX_C UINT64_C
#endif // __STDC_CONSTANT_MACROS ]
#endif // _MSC_STDINT_H_ ]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,105 @@
% Reed-Solomon Errors and Erasures Decoding
% Decoding is based on the Massey-Berlekamp decoder. Based on the notes of Adina Matache: http://www.ee.ucla.edu/~matache/rsc/slide.html
% This program was written by Jaco Versfeld. For any questions or remarks email Jaco at jaco.versfeld@gmail.com.
% This code is provided as is and Jaco Versfeld accepts no liability what so ever.
% Feel free to use and modify this code for whatever purpose.
clear
clc
%**************************
%*** RS code Parameters ***
%**************************
% Here we specify the parameters of the (n,k) Reed-Solomon code
m = 4 %Determine the Galois Field, GF(2^m)
n = 2^m - 1 %This is fixed for a Reed-Solomon, the length of the codeword
k = 3 %The number of data symbols, can be anything between 1 to n - 1
h = n-k
t = h/2
%**************************
%*** Generate the Galois Field and Generator polynomial ***
% This step is neccessary for Matlab. Here we create the Galois Field which is used for
% computations of the Reed-Solomon code
field = gftuple([-1:2^m-2]', m, 2);
%Generator Polynomial:
%Lin + Costello, p.171
%The Generator polynomial is one way of encoding Reed-Solomon codes
%Construct the generator polynomial
c = [1 0];
p(1) = c(1);
for i = 1:h-1
p(1) = gfmul(p(1),1,field);
p(2) = 0;
c = gfconv(c,p,field);
end
g = c;
%**************************
%*** RS Encode ***
%Generate Random Data
DATA_IN = randint(1,k,[-1 n-1]);
%RS encoding
parity = RS_ENC4(DATA_IN,n,k,g,field);
RS_CODE = [parity DATA_IN];
%********************************
%*** Channel ***
RECEIVED = RS_CODE
%I introduce the errors manually here, but any channel can be used here, like an AWGN.
% A maximum of 2*t + e <= (n-k) errors and erasures can be corrected, where t is the number of
% errors and e the number of erasures
%Introduce some errors
RECEIVED(3) = gfadd(RECEIVED(3),randint(1,1,[-1 n-1]),field);
RECEIVED(5) = gfadd(RECEIVED(3),randint(1,1,[-1 n-1]),field);
%Introduce some erasures
erasures = [1 7 9]; %This polynomial contains the positions of the erasures
RECEIVED(1) = -2
RECEIVED(7) = -2
RECEIVED(9) = -2
%****************
%*** Decoding ***
DECODED = RS_E_E_DEC(RECEIVED, erasures,n,k,t,h,g,field);
%****************
if all(DECODED == RS_CODE)
disp('Decoding Success')
else
disp('Decoding Failure')
end

View File

@@ -0,0 +1,51 @@
function R = RS_ENC4(code,n,k,g,field)
%R = RS_ENC4(code,n,k,g,field)
%R is the parity block that is included
% m is the number of bits of each symbol
% n = 2^m-1 => the number of symbols transmitted
% k = the number of code symbols that is going to be codes to a n symbol message
% t = the number of errors that can be found + corrected
%Tripple-error-correcting Reed-Solomon code with symbols from GF(2^4)
% Lin & Costello p.175 and article: Reed_Solomon Codes by Joel Sylvester
%generator polynomial
%field = gftuple([-1:2^m-2]', m, 2);
%p = 2; m = 4;
%primpoly = [0 0 -Inf -Inf 0];
%field = gftuple([-1:p^m-2]',primpoly,p);
%Lin + Costello, p.171
%Encoder (Article)
%shift codeword by X^(n-k)
for ii = 1:n-k
shiftpol(ii) = -Inf;
end
shiftpol(n-k+1) = 0;
shiftcode = gfconv(code,shiftpol,field);
%divide shifted codeword by g(x)
[Q, R] = GFDECONV(shiftcode, g, field);
while length(R) < n-k
R = [R -inf];
end
%for ii = 1:n-k
% CON(ii) = -Inf;
% if length(R) >= ii
% CON(ii) = gfadd(R(ii),CON(ii),field);
% end
%end
%%concatenate the parity to the data
%message = [CON code];

View File

@@ -0,0 +1,229 @@
%h = n - k = npar
%t = h / 2
function DECODED = RS_E_E_DEC(received, erasures,n,k,t,h,g,field);
%Check for decoding failures
%Previous decoder RS_E_E_DEC4
%****************
%*** Decoding ***
%****************
%syndrome calculation
S = [];
%Subtitute alpha^i in received polynomial - Lin + Costello p.152 eq. 6.13
for ii = 1:2*t
S(ii)= -Inf;
for cc = 1:n
S(ii) = gfadd(S(ii),gfmul(received(cc),gfpow(ii,cc-1,n),field),field); %Sum all the terms
end
end
%S
%Test if syndrome = 0, if syndrome equals 0, assume that no errors occured
for i = 1:2*t
test_pol(i) = -Inf;
end
if all (S == test_pol)
message = received;
for i = 1:n
if message(i) < 0
message(i) = -Inf;
end
end
else
%Compute the erasure locator polynomial:
erasures_pos = erasures - 1;
num_erasures = length(erasures);
%Compute the erasure-locator polynomial
erasure_loc_pol = 0;
for i = 1:length(erasures_pos)
erasure_loc_pol = gfconv(erasure_loc_pol, [0 erasures_pos(i)],field);
end
%Compute modified syndrome polynomial:
S_pol = [-inf S];
dividend = gfconv(erasure_loc_pol,gfadd(0,S_pol,field),field);
dividend = gfadd(dividend,0,field);
divisor = [];
for i = 1:2*t+2
divisor(i) = -Inf;
end
divisor(2*t+2) = 0;
[q,mod_syn] = gfdeconv(dividend,divisor,field);
while length(mod_syn) < h+1
mod_syn = [mod_syn -Inf];
end
S_M = [];
for i = 1:h - num_erasures
S_M(i) = mod_syn(i + num_erasures + 1);
end
flag = 0;
if isempty(S_M) == 1
flag = 0;
else
for i = 1:length(S_M)
if (S_M(i) ~= -Inf)
flag = 1; %Other errors occured in conjunction with erasures
end
end
end
%Find error-location polynomial sigma (Berlekamp's iterative algorithm -
%sigma = [0 7 4 6]
if (flag == 1)
%sigma = M_B2(n,k,length(S_M) - 1,S_M,field);
num_iter = t - num_erasures/2;
sigma = massey_berlekamp_M3(n,k,num_iter,S_M,field);
%Chien search
%step 3 from Lin + Costello p.175
%the error locating polynomial have a maximum of t entries
error_loc = [];
kk = 0;
for ii = 0:n-1
error_r = -Inf;
for cc = 1:length(sigma)
error_r = gfadd(error_r,gfmul(sigma(cc),gfpow(ii,cc-1,n),field),field); %Sum all the terms
end
if error_r == -Inf
kk = kk + 1;
error_loc(kk) = ii;
end
end
% Test if the roots are distinct
% Form a test polynomial by multiplying the roots of error_loc with each other
% Divide the error_loc pol by test pol
% if the degree of the quotient exceeds a constant, then the roots are
% not distinct
test_pol = 0;
for ii = 1:length(error_loc)
test_pol = gfconv(test_pol,[error_loc(ii) 0],field);
end
%test_pol
%error_loc
%sigma
[QQ,RR] = gfdeconv(sigma,test_pol,field);
if length(QQ) > 1
DECODED = received;
return
end
comp_error_locs = [];
%Take reciprocals of elements in error_loc - error location numbers
for ii = 1:length(error_loc)
comp_error_locs(ii) = gfdiv(0,error_loc(ii),field);
end
%error_loc_p %places where errors occur
else
sigma = 0;
comp_error_locs = [];
end
%Calculate error magnitudes - Forney algorithm?
%Step 4. Lin and Costello - This program uses another algorithm from:
% drake.ee.washington.edu/~adina/rsc/slide/node9.html
% http://www.ee.ucla.edu/~matache/rsc/slide.html
%Compute the error magnitude polynomial:
%1. Form the function [1 + S(x)]
SS(1) = 0;
for ii = 1: 2*t
SS(ii+1) = S(ii);
end
%SS
%2. form the product of SS and the KEY Equation
%OMEGA = gfconv(SS,sigma,field);
OMEGA = gfconv(sigma,gfadd(0,mod_syn,field),field);
%3. OMEGA = (SS * sigma)mod(x^(2t+1))
%3.1. Form a function := x^(2t+1)
for ii = 1: (2*t)
DIV(ii)= -Inf;
end
DIV(2*t+1) = 0;
%3.2. OMEGA = (SS * sigma)mod(x^(2t+1))
[DUMMY, OMEGA] = gfdeconv(OMEGA,DIV,field);
%OMEGA
%4. Differentiate the key equation with respect to x
%sigma_diff = gfdiff(sigma);
tsi = gfconv(sigma,erasure_loc_pol,field);
tsi_diff = gfdiff(tsi);
e_e_places = [erasures_pos comp_error_locs];
%Calculate the error magnitudes
%Substitute the inverse into sigma_diff
for ii = 1:length(e_e_places)
%error_loc_p(ii)
ERR_DEN = gfsubstitute(tsi_diff,gfdiv(0,e_e_places(ii),field),length(tsi_diff),n,field);
ERR_NUM = gfsubstitute(OMEGA,gfdiv(0,e_e_places(ii),field),length(OMEGA),n,field);
ERR_NUM = gfmul(ERR_NUM,e_e_places(ii),field);
ERR(ii) = gfmul(ERR_NUM,gfdiv(0,ERR_DEN,field),field);
end
%error_loc_p
%ERR
%Determine introduced error
for ii = 1:n
ERR_p(ii) = -Inf;
end
%Error - t must be substituted by amount of errors
for ii = 1:length(e_e_places)
pp = e_e_places(ii);
ERR_p(pp+1) = ERR(ii);
end
%ERR_p
message = gfadd(received,ERR_p,field);
end
DECODED = message;

View File

@@ -0,0 +1,14 @@
function diff = gfdiff(polynomial)
%use: diff = gfdiff(polynomial)
%Differentiate polynomial with respect to x
l = length(polynomial);
for cc = 2:l
%cc-1 represents the power of x
if mod(cc-1,2) == 0 %all the even powers are zero because of GF(2)
diff(cc-1) = -Inf;
else
diff(cc-1) = polynomial(cc);
end
end

View File

@@ -0,0 +1,4 @@
function a = gfpow(value,p,n)
%a = gfpow(alpha,p,n)
%alpha^value, (alpha^value)^p and n = 2^m- in Galois field
a = mod(value*p,n);

View File

@@ -0,0 +1,11 @@
function sum = gfsubstitute(polynomial,value,terms,n,field)
%use: gfsubstitute(polynomial,value,terms,n,field)
%Subtitute i^value in polynomial
%the number of terms in polynomial
%n = n of the decoder
sum = polynomial(1);
for cc = 2:terms
sum = gfadd(sum,gfmul(polynomial(cc),gfpow(value,cc-1,n),field),field); %Sum all the terms
end

View File

@@ -0,0 +1,106 @@
function sigma = massey_berlekamp_M2(n,k,t,S,field)
%http://www.ee.ucla.edu/~matache/rsc/node8.html#SECTION00051000000000000000
%Step 2: Initialize variables
kk = 0;
for i = 1:n
Kappa(1,i) = -Inf;
end
Kappa(1,1) = 0;
%Kappa
LAMBDA = 0;
Tau = [-inf 0];
done = 0;
%Step 3:
while (done ~= 1)
%disp('K');
kk = kk + 1;
%disp('S(kk)');
%S(kk)
%disp('LAMBDA')
%LAMBDA
sum = -Inf;
for i = 1:LAMBDA
%Kappa(kk,i+1)
%S(kk-i)
sum = gfadd(sum,gfmul(Kappa(kk,i+1),S(kk-i),field),field);
end
%disp('Delta - sum')
%sum
delta(kk) = gfadd(S(kk),sum,field);
%disp('delta');
%delta
%Step 4:
if (delta(kk) == -Inf)
for i = 1:n
Kappa(kk+1,i) = Kappa(kk,i);
end
end
if (delta(kk) ~= -Inf)
for i = 1:n
Kappa_i(i) = Kappa(kk-1+1,i);
end
Kappa_k = gfadd(Kappa_i,gfconv(delta(kk),Tau,field),field);
while length(Kappa_k) < n
Kappa_k = [Kappa_k -Inf];
end
for i = 1:length(Kappa_k)
Kappa(kk+1,i) = Kappa_k(i);
end
%Step 7:
if (2*LAMBDA < kk)
LAMBDA = kk - LAMBDA;
for i = 1:n
Kappa_k(i) = Kappa(kk+1-1,i);
end
Tau = gfconv(Kappa_k,gfdiv(0,delta(kk),field),field);
end
end
%Step 8:
Tau = gfconv([-Inf 0],Tau,field);
%step 9:
if kk >= 2*t
done = 1;
end
%Kappa
%LAMBDA
%Tau
end
for i = 1:n
sigma(i) = Kappa(kk+1,i);
end

199
CUETools.CLParity/parity.cl Normal file
View File

@@ -0,0 +1,199 @@
/**
* CUETools.CLParity: Reed-Solomon (32 bit) using OpenCL
* Copyright (c) 2010 Gregory S. Chudov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#define WARP_SIZE 32
int
galois_mul(int x, int y)
{
const int poly = 00020000007;
int prod = 0;
//#pragma unroll 0
for (int i = 0; i < 4; i++)
{
if (x & 1) prod ^= y;
y = (y << 1) ^ ((y >> 31) ? poly : 0);
if (x & 2) prod ^= y;
y = (y << 1) ^ ((y >> 31) ? poly : 0);
if (x & 4) prod ^= y;
y = (y << 1) ^ ((y >> 31) ? poly : 0);
if (x & 8) prod ^= y;
y = (y << 1) ^ ((y >> 31) ? poly : 0);
if (x & 16) prod ^= y;
y = (y << 1) ^ ((y >> 31) ? poly : 0);
if (x & 32) prod ^= y;
y = (y << 1) ^ ((y >> 31) ? poly : 0);
if (x & 64) prod ^= y;
y = (y << 1) ^ ((y >> 31) ? poly : 0);
if (x & 128) prod ^= y;
y = (y << 1) ^ ((y >> 31) ? poly : 0);
x >>= 8;
}
return prod;
}
__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
void reedSolomonInit(__global int *encodeGx0, __global int *encodeGx1, __global int *parity0, __global int *parity1, int npar)
{
int i = get_group_id(0) * GROUP_SIZE + get_local_id(0);
parity0[i] = parity1[i] = 0;
encodeGx0[i] = encodeGx1[i] = (i == npar - 1 ? 1 : 0);
if (i < GROUP_SIZE) encodeGx0[npar + i] = encodeGx1[npar + i] = 0;
if (i == 0) parity0[npar] = parity1[npar] = 0;
}
__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
void reedSolomonInitGx(__global int *exp, __global int *old_encodeGx, __global int *new_encodeGx, int npar, int step)
{
int tid = get_local_id(0);
int i = get_group_id(0) * (GROUP_SIZE / 2) + tid;
__local int gx[GROUP_SIZE];
__local int ex[GROUP_SIZE / 2];
gx[tid] = old_encodeGx[i];
if (tid < GROUP_SIZE / 2) ex[tid] = exp[step * (GROUP_SIZE / 2) + tid];
barrier(CLK_LOCAL_MEM_FENCE);
for (int s = 0; s < GROUP_SIZE / 2; s++)
{
int p = tid + s < (GROUP_SIZE - 1) ? galois_mul(gx[tid], ex[s]) ^ gx[tid + 1] : 0;
barrier(CLK_LOCAL_MEM_FENCE);
gx[tid] = p;
barrier(CLK_LOCAL_MEM_FENCE);
}
barrier(CLK_LOCAL_MEM_FENCE);
if (tid < GROUP_SIZE / 2) new_encodeGx[i] = gx[tid];
}
__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
void reedSolomonA(__global int* data, __global int*encodeGx, __global int*old_parity, int npar, int offset)
{
int tid = get_local_id(0);
__local int ib[GROUP_SIZE];
__local int gx[GROUP_SIZE];
ib[tid] = data[offset + tid] ^ old_parity[tid];
gx[tid] = encodeGx[tid];
barrier(CLK_LOCAL_MEM_FENCE);
for (int s = 0; s < GROUP_SIZE; s++)
{
if (tid > s)
ib[tid] ^= galois_mul(ib[s], gx[tid - 1 - s]);
barrier(CLK_LOCAL_MEM_FENCE);
}
data[offset + tid] = ib[tid];
}
__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
void reedSolomonB(__global int* data, __global int* encodeGx, __global int* parity, int npar, int offset)
{
__local int ib[GROUP_SIZE];
__local int gx[GROUP_SIZE * 2];
int tid = get_local_id(0);
int i = (get_group_id(0) * GROUP_SIZE) + get_local_id(0);
ib[tid] = data[offset + tid];
gx[tid] = encodeGx[i];
gx[tid + GROUP_SIZE] = i + GROUP_SIZE >= npar ? 0 : encodeGx[i + GROUP_SIZE];
barrier(CLK_LOCAL_MEM_FENCE);
int p = i + GROUP_SIZE >= npar ? 0 : parity[i + GROUP_SIZE];
for (int s = 0; s < GROUP_SIZE; s++)
p ^= galois_mul(ib[s], gx[tid + GROUP_SIZE - 1 - s]);
parity[i] = p;
}
__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
void reedSolomon(__global int*data, __global int*encodeGx, __global int*old_parity, __global int *new_parity, int npar, int offset)
{
int tid = get_local_id(0);
int i = (get_group_id(0) * GROUP_SIZE) + get_local_id(0);
__local int old[GROUP_SIZE];
__local int ib;
if (tid == 0)
ib = old_parity[0] ^ data[offset];
if (tid == 0)
old[GROUP_SIZE - 1] = old_parity[i + GROUP_SIZE];
else
old[tid - 1] = old_parity[i];
barrier(CLK_LOCAL_MEM_FENCE);
new_parity[i] = old[tid] ^ galois_mul(ib, encodeGx[i]);
//new_parity[i] = old_parity[i + 1] ^ galois_mul(ib, encodeGx[i]);
}
__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
void reedSolomonDecodeInit(__global int* data, int dataLen, __global int*expTbl, __global int*syn, int npar)
{
int i = (get_group_id(0) * GROUP_SIZE) + get_local_id(0);
syn[i] = 0;
}
__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
void reedSolomonDecode(__global int* data, int dataLen, __global int*expTbl, __global int*syn, int npar)
{
int tid = get_local_id(0);
int i = (get_group_id(0) * GROUP_SIZE) + get_local_id(0);
__local int ds[GROUP_SIZE];
ds[tid] = data[tid];
barrier(CLK_LOCAL_MEM_FENCE);
int wk = syn[i];
int ai = expTbl[i];
for (int s = 0; s < GROUP_SIZE; s++)
wk = ds[s] ^ galois_mul(wk, ai);
syn[i] = wk;
}
int galois_exp(int t, int n)
{
int e = 1;
for (int i = 0; i < 32; i++)
{
if ((n >> i) & 1) e = galois_mul(e, t);
t = galois_mul(t, t);
}
return e;
}
__kernel __attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
void chienSearch(__global int *wk_out, int pos, __global int *sigma, int jisu, int n)
{
const int poly = 00020000007;
const int oneByTwo = (poly >> 1) | (1 << 31);
int tid = get_local_id(0);
int i = (get_group_id(0) * GROUP_SIZE) + get_local_id(0);
int zexp = galois_exp(oneByTwo, i + pos);
int wk = 1;
int jzexp = 1;
__local int sj;
for (int j = 1; j <= jisu; j++)
{
jzexp = galois_mul(jzexp, zexp);
if (tid == 0) sj = sigma[j];
barrier(CLK_LOCAL_MEM_FENCE);
wk ^= galois_mul(sj, jzexp); // wk ^= sigma[j] / 2^(ij);
barrier(CLK_LOCAL_MEM_FENCE);
}
wk_out[i] = wk;
}

View File

@@ -1,73 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{F8C29953-A697-4462-82DC-DA7146654A64}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CUETools.CTDB.Converter</RootNamespace>
<TargetFrameworks>net40;net20;netcoreapp2.0</TargetFrameworks>
<Version>2.1.6.0</Version>
<AssemblyName>CUETools.CTDB.Converter</AssemblyName>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
<RootNamespace>CUETools.CTDB.Converter</RootNamespace>
<Product>CUETools</Product>
<OutputType>Exe</OutputType>
<Description>A tool for CTDB database files conversion.</Description>
<Copyright>Copyright (c) 2008-2018 Grigory Chudov</Copyright>
<Authors>Grigory Chudov</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputPath>..\bin\$(Configuration)\</OutputPath>
<RepositoryUrl>https://github.com/gchudov/cuetools.net</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisLogFile>bin\Debug\CUETools.CTDB.Converter.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>..\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisLogFile>bin\Release\CUETools.CTDB.Converter.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CUETools.Parity\CUETools.Parity.csproj">
<Project>{ECEB839C-171B-4535-958F-9899310A0342}</Project>
<Name>CUETools.Parity</Name>
<ItemDefinitionGroup>
<ProjectReference>
<Private>False</Private>
</ProjectReference>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectReference Include="..\CUETools.Parity\CUETools.Parity.csproj" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CUETools.CTDB.Converter")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CUETools.CTDB.Converter")]
[assembly: AssemblyCopyright("Copyright © 2011")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("b6155a69-7207-4214-ad24-7737b8b1868a")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -51,18 +51,6 @@
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="Interop.HelperFunctionsLib, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\Interop.HelperFunctionsLib.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="FormSubmitParity.cs">
<SubType>Form</SubType>
@@ -116,24 +104,6 @@
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CUETools.AccurateRip\CUETools.AccurateRip.csproj">
<Project>{5802C7E9-157E-4124-946D-70B5AE48A5A1}</Project>
<Name>CUETools.AccurateRip</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.CDImage\CUETools.CDImage.csproj">
<Project>{1DD41038-D885-46C5-8DDE-E0B82F066584}</Project>
<Name>CUETools.CDImage</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj">
<Project>{6458A13A-30EF-45A9-9D58-E5031B17BEE2}</Project>
<Name>CUETools.Codecs</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.CTDB\CUETools.CTDB.csproj">
<Project>{AA2A9A7E-45FB-4632-AD85-85B0E556F818}</Project>
<Name>CUETools.CTDB</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
@@ -163,6 +133,42 @@
<ItemGroup>
<None Include="Resources\document-save_12.png" />
</ItemGroup>
<ItemGroup>
<Reference Include="Interop.HelperFunctionsLib">
<HintPath>.\Interop.HelperFunctionsLib.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CUETools.AccurateRip\CUETools.AccurateRip.csproj">
<Project>{5802c7e9-157e-4124-946d-70b5ae48a5a1}</Project>
<Name>CUETools.AccurateRip</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.CDImage\CUETools.CDImage.csproj">
<Project>{1dd41038-d885-46c5-8dde-e0b82f066584}</Project>
<Name>CUETools.CDImage</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj">
<Project>{6458a13a-30ef-45a9-9d58-e5031b17bee2}</Project>
<Name>CUETools.Codecs</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.CTDB.Types\CUETools.CTDB.Types.csproj">
<Project>{c36efaa5-4f81-4a29-800d-ba866ff13bc8}</Project>
<Name>CUETools.CTDB.Types</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.CTDB\CUETools.CTDB.csproj">
<Project>{aa2a9a7e-45fb-4632-ad85-85b0e556f818}</Project>
<Name>CUETools.CTDB</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.Parity\CUETools.Parity.csproj">
<Project>{eceb839c-171b-4535-958f-9899310a0342}</Project>
<Name>CUETools.Parity</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.IO;
using System.Text;
using System.Windows.Forms;

View File

@@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net40;net20;netstandard2.0</TargetFrameworks>
<Version>2.1.6.0</Version>
<AssemblyName>CUETools.CTDB.Types</AssemblyName>
<RootNamespace>CUETools.CTDB</RootNamespace>
<Product>CUETools</Product>
<Description>A library containing serializable types for accessing CUETools Database.</Description>
<Copyright>Copyright (c) 2008-2018 Grigory Chudov</Copyright>
<Authors>Grigory Chudov</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputPath>..\bin\$(Configuration)\</OutputPath>
<RepositoryUrl>https://github.com/gchudov/cuetools.net</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company />
</PropertyGroup>
<ItemDefinitionGroup>
<ProjectReference>
<Private>False</Private>
</ProjectReference>
</ItemDefinitionGroup>
</Project>

View File

@@ -0,0 +1,41 @@
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.1 Tools\sgen.exe" C:\Users\Grigory\source\repos\cuetools.net\bin\Release\net20\CUETools.CTDB.Types.dll /keep
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net40;net20;netstandard2.0</TargetFrameworks>
<Version>2.1.6.0</Version>
<AssemblyName>CUETools.CTDB.Types</AssemblyName>
<RootNamespace>CUETools.CTDB</RootNamespace>
<Product>CUETools</Product>
<Description>A library containing serializable types for accessing CUETools Database.</Description>
<Copyright>Copyright (c) 2008-2018 Grigory Chudov</Copyright>
<Authors>Grigory Chudov</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputPath>..\bin\$(Configuration)\</OutputPath>
<RepositoryUrl>https://github.com/gchudov/cuetools.net</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company />
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)'=='netstandard2.0'">
<PackageReference Include="Microsoft.XmlSerializer.Generator" Version="1.0.0" />
<DotNetCliToolReference Include="Microsoft.XmlSerializer.Generator" Version="1.0.0" />
</ItemGroup>
<PropertyGroup Condition="'$(TargetFramework)'=='net20'">
<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
<SGenUseProxyTypes>false</SGenUseProxyTypes>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)'=='net40'">
<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
<SGenUseProxyTypes>false</SGenUseProxyTypes>
</PropertyGroup>
<ItemDefinitionGroup>
<ProjectReference>
<Private>False</Private>
</ProjectReference>
</ItemDefinitionGroup>
</Project>

View File

@@ -1,34 +0,0 @@
using System;
using System.Xml.Serialization;
namespace CUETools.CTDB
{
[Serializable]
[XmlRoot(ElementName = "ctdb", Namespace = "http://db.cuetools.net/ns/mmd-1.0#")]
public class CTDBSubmitResponse
{
[XmlIgnore]
public bool ParityNeeded
{
get
{
return this.status == "parity needed";
}
}
[XmlAttribute]
public string status { get; set; }
[XmlAttribute]
public string updateurl { get; set; }
[XmlAttribute]
public string updatemsg { get; set; }
[XmlAttribute]
public string message { get; set; }
[XmlAttribute]
public int npar { get; set; }
}
}

View File

@@ -1,129 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{AA2A9A7E-45FB-4632-AD85-85B0E556F818}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CUETools.CTDB</RootNamespace>
<TargetFrameworks>net40;net20;netstandard2.0</TargetFrameworks>
<Version>2.1.6.0</Version>
<AssemblyName>CUETools.CTDB</AssemblyName>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<UpgradeBackupLocation />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<SGenUseProxyTypes>false</SGenUseProxyTypes>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RootNamespace>CUETools.CTDB</RootNamespace>
<Product>CUETools</Product>
<Description>A library for accessing CUETools Database.</Description>
<Copyright>Copyright (c) 2008-2018 Grigory Chudov</Copyright>
<Authors>Grigory Chudov</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
<OutputPath>..\bin\$(Configuration)\</OutputPath>
<RepositoryUrl>https://github.com/gchudov/cuetools.net</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
</PropertyGroup>
<ItemGroup>
<Reference Include="CUETools.CTDB.XmlSerializers, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\bin\Release\interop\EAC\CUETools.CTDB.XmlSerializers.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<ItemDefinitionGroup>
<ProjectReference>
<Private>False</Private>
</ProjectReference>
</ItemDefinitionGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net20'">
<Reference Include="System.Management" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net40'">
<PackageReference Include="DeviceId" Version="4.0.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='netstandard2.0'">
<PackageReference Include="DeviceId" Version="4.0.0" />
</ItemGroup>
<ItemGroup>
<Compile Include="CTDBResponseMetaRelease.cs" />
<Compile Include="CTDBResponseMetaImage.cs" />
<Compile Include="CTDBMetadataSearch.cs" />
<Compile Include="CTDBResponse.cs" />
<Compile Include="CTDBResponseEntry.cs" />
<Compile Include="CTDBResponseMeta.cs" />
<Compile Include="CTDBResponseMetaLabel.cs" />
<Compile Include="CTDBResponseMetaTrack.cs" />
<Compile Include="CUEToolsDB.cs" />
<Compile Include="DBEntry.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="UploadHelper\HttpUploadHelper.cs" />
<Compile Include="UploadHelper\MimePart.cs" />
<Compile Include="UploadHelper\StreamMimePart.cs" />
<Compile Include="UploadHelper\StringMimePart.cs" />
<Compile Include="UploadHelper\UploadFile.cs" />
<ProjectReference Include="..\CUETools.AccurateRip\CUETools.AccurateRip.csproj" />
<ProjectReference Include="..\CUETools.CDImage\CUETools.CDImage.csproj" />
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj" />
<ProjectReference Include="..\CUETools.Parity\CUETools.Parity.csproj" />
<ProjectReference Include="..\CUETools.CTDB.Types\CUETools.CTDB.Types.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CUETools.AccurateRip\CUETools.AccurateRip.csproj">
<Project>{5802C7E9-157E-4124-946D-70B5AE48A5A1}</Project>
<Name>CUETools.AccurateRip</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.CDImage\CUETools.CDImage.csproj">
<Project>{1DD41038-D885-46C5-8DDE-E0B82F066584}</Project>
<Name>CUETools.CDImage</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj">
<Project>{6458A13A-30EF-45A9-9D58-E5031B17BEE2}</Project>
<Name>CUETools.Codecs</Name>
</ProjectReference>
<ProjectReference Include="..\CUETools.Parity\CUETools.Parity.csproj">
<Project>{ECEB839C-171B-4535-958F-9899310A0342}</Project>
<Name>CUETools.Parity</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,50 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net40;net20;netstandard2.0</TargetFrameworks>
<Version>2.1.6.0</Version>
<AssemblyName>CUETools.CTDB</AssemblyName>
<RootNamespace>CUETools.CTDB</RootNamespace>
<Product>CUETools</Product>
<Description>A library for accessing CUETools Database.</Description>
<Copyright>Copyright (c) 2008-2018 Grigory Chudov</Copyright>
<Authors>Grigory Chudov</Authors>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputPath>..\bin\$(Configuration)\</OutputPath>
<RepositoryUrl>https://github.com/gchudov/cuetools.net</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company />
</PropertyGroup>
<ItemDefinitionGroup>
<ProjectReference>
<Private>False</Private>
</ProjectReference>
</ItemDefinitionGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net20'">
<Reference Include="System.Management" />
<ProjectReference Include="..\CUETools.CTDB.Types\CUETools.CTDB.Types.csproj" />
<Reference Include="CUETools.CTDB.Types.XmlSerializers">
<HintPath>..\bin\Release\net20\CUETools.CTDB.Types.XmlSerializers.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='net40'">
<PackageReference Include="DeviceId" Version="4.0.0" />
<ProjectReference Include="..\CUETools.CTDB.Types\CUETools.CTDB.Types.csproj" />
<Reference Include="CUETools.CTDB.Types.XmlSerializers">
<HintPath>..\bin\Release\net40\CUETools.CTDB.Types.XmlSerializers.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='netstandard2.0'">
<PackageReference Include="DeviceId" Version="4.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CUETools.AccurateRip\CUETools.AccurateRip.csproj" />
<ProjectReference Include="..\CUETools.CDImage\CUETools.CDImage.csproj" />
<ProjectReference Include="..\CUETools.Codecs\CUETools.Codecs.csproj" />
<ProjectReference Include="..\CUETools.Parity\CUETools.Parity.csproj" />
</ItemGroup>
</Project>

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.IO;
using System.Management;
using System.Net;
using System.Security.Cryptography;
using System.Text;
@@ -11,6 +10,13 @@ using System.Xml.Serialization;
using CUETools.AccurateRip;
using CUETools.CDImage;
using CUETools.Parity;
#if NET20
using System.Management;
#else
using DeviceId;
using DeviceId.Encoders;
using DeviceId.Formatters;
#endif
using Krystalware.UploadHelper;
namespace CUETools.CTDB
@@ -98,8 +104,8 @@ namespace CUETools.CTDB
this.QueryExceptionMessage = resp.StatusDescription;
if (this.QueryResponseStatus == HttpStatusCode.OK)
{
//XmlSerializer serializer = new XmlSerializer(typeof(CTDBResponse));
XmlSerializer serializer = new Microsoft.Xml.Serialization.GeneratedAssembly.CTDBResponseSerializer();
//var serializer = new XmlSerializer(typeof(CTDBResponse));
var serializer = new Microsoft.Xml.Serialization.GeneratedAssembly.CTDBResponseSerializer();
this.total = 0;
using (Stream responseStream = resp.GetResponseStream())
{
@@ -277,6 +283,7 @@ namespace CUETools.CTDB
{
if (uuidInfo == null)
{
#if NET20
string id = "CTDB userid";
using (ManagementClass mc = new ManagementClass("Win32_ComputerSystemProduct"))
foreach (ManagementObject mo in mc.GetInstances())
@@ -286,6 +293,16 @@ namespace CUETools.CTDB
}
byte[] hashBytes = (new SHA1CryptoServiceProvider()).ComputeHash(Encoding.ASCII.GetBytes(id));
uuidInfo = Convert.ToBase64String(hashBytes).Replace('+', '.').Replace('/', '_').Replace('=', '-');
#else
uuidInfo = new DeviceIdBuilder()
.AddMachineName()
#if NET40
.AddProcessorId()
.AddMotherboardSerialNumber()
#endif
.UseFormatter(new HashDeviceIdFormatter(() => SHA256.Create(), new Base64UrlByteArrayEncoder()))
.ToString();
#endif
}
return uuidInfo;
}
@@ -391,7 +408,8 @@ namespace CUETools.CTDB
{
using (Stream s = resp.GetResponseStream())
{
var serializer = new XmlSerializer(typeof(CTDBResponse));
//var serializer = new XmlSerializer(typeof(CTDBResponse));
var serializer = new Microsoft.Xml.Serialization.GeneratedAssembly.CTDBResponseSerializer();
return serializer.Deserialize(s) as CTDBResponse;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,35 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("UploadHelper")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("UploadHelper")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("13eac2b4-c1d5-4317-a17a-5389ad4c6005")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Some files were not shown because too many files have changed in this diff Show More