EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Libraries", "_Libraries", "{EB910B0D-F27D-4B62-B67B-DE834C99AC5B}"
+ ProjectSection(SolutionItems) = preProject
+ libs\spandsp\src\msvc\make_modem_filter.2005.vcproj = libs\spandsp\src\msvc\make_modem_filter.2005.vcproj
+ EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdingaling", "libs\libdingaling\libdingaling.vcproj", "{1906D736-08BD-4EE1-924F-B536249B9A54}"
ProjectSection(ProjectDependencies) = postProject
{89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libvoipcodecs", "libs\voipcodecs\libvoipcodecs.vcproj", "{CF70F278-3364-4395-A2E1-23501C9B8AD2}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_voipcodecs", "src\mod\codecs\mod_voipcodecs\mod_voipcodecs.vcproj", "{9EED03C8-8315-4214-8D13-8FF5FA46D93C}"
ProjectSection(ProjectDependencies) = postProject
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5} = {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {CF70F278-3364-4395-A2E1-23501C9B8AD2} = {CF70F278-3364-4395-A2E1-23501C9B8AD2}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_curl", "src\mod\languages\mod_spidermonkey_curl\mod_spidermonkey_curl.vcproj", "{2CCED6DC-26FF-40F2-9585-E9E1049A4599}"
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtiff", "libs\spandsp\src\libtiff.2005.vcproj", "{401A40CD-5DB4-4E34-AC68-FA99E9FAC014}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspandsp", "libs\spandsp\src\libspandsp.2005.vcproj", "{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}"
+ ProjectSection(ProjectDependencies) = postProject
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838} = {329A6FA0-0FCC-4435-A950-E670AEFA9838}
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330} = {DEE932AB-5911-4700-9EEB-8C7090A0A330}
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_at_dictionary", "libs\spandsp\src\msvc\make_at_dictionary.2005.vcproj", "{DEE932AB-5911-4700-9EEB-8C7090A0A330}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_modem_filter", "libs\spandsp\src\msvc\make_modem_filter.2005.vcproj", "{329A6FA0-0FCC-4435-A950-E670AEFA9838}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ All|Win32 = All|Win32
+ All|x64 = All|x64
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|Win32.ActiveCfg = Release|Win32
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|Win32.Build.0 = Release|Win32
+ {1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.All|x64.ActiveCfg = Release|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Win32.ActiveCfg = Debug|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|Win32.Build.0 = Debug|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Debug|x64.ActiveCfg = Debug|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Win32.ActiveCfg = Release|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|Win32.Build.0 = Release|Win32
{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}.Release|x64.ActiveCfg = Release|Win32
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|Win32.ActiveCfg = Release|Win32
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|Win32.Build.0 = Release|Win32
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.All|x64.ActiveCfg = Release|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.ActiveCfg = Debug|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.Build.0 = Debug|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|x64.ActiveCfg = Debug|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.ActiveCfg = Release|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.Build.0 = Release|Win32
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|x64.ActiveCfg = Release|Win32
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|Win32.ActiveCfg = Release Passthrough|Win32
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|Win32.Build.0 = Release Passthrough|Win32
+ {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.All|x64.ActiveCfg = Release Passthrough|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.Build.0 = Debug Passthrough|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|x64.ActiveCfg = Debug|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.ActiveCfg = Release Passthrough|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.Build.0 = Release Passthrough|Win32
{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|x64.ActiveCfg = Release|Win32
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|Win32.ActiveCfg = Release|Win32
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|Win32.Build.0 = Release|Win32
+ {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.All|x64.ActiveCfg = Release|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.ActiveCfg = Debug|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.Build.0 = Debug|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|x64.ActiveCfg = Debug|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.ActiveCfg = Release|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.Build.0 = Release|Win32
{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|x64.ActiveCfg = Release|Win32
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.All|Win32.ActiveCfg = Release|Win32
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.All|Win32.Build.0 = Release|Win32
+ {3A5B9131-F20C-4A85-9447-6C1610941CEE}.All|x64.ActiveCfg = Release|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.ActiveCfg = Debug|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.Build.0 = Debug|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|x64.ActiveCfg = Debug|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.ActiveCfg = Release|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.Build.0 = Release|Win32
{3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|x64.ActiveCfg = Release|Win32
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|Win32.ActiveCfg = Release|Win32
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|Win32.Build.0 = Release|Win32
+ {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.All|x64.ActiveCfg = Release|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.ActiveCfg = Debug|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.Build.0 = Debug|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|x64.ActiveCfg = Debug|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.ActiveCfg = Release|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.Build.0 = Release|Win32
{5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|x64.ActiveCfg = Release|Win32
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|Win32.ActiveCfg = Release|Win32
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|Win32.Build.0 = Release|Win32
+ {5580D60E-0F77-4716-9CD4-B8E5986FA375}.All|x64.ActiveCfg = Release|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.ActiveCfg = Debug|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.Build.0 = Debug|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|x64.ActiveCfg = Debug|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.ActiveCfg = Release|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.Build.0 = Release|Win32
{5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|x64.ActiveCfg = Release|Win32
+ {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|Win32.ActiveCfg = Release|Win32
+ {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|Win32.Build.0 = Release|Win32
+ {1A1FF289-4FD6-4285-A422-D31DD67A4723}.All|x64.ActiveCfg = Release|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|Win32.ActiveCfg = Debug|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Debug|x64.ActiveCfg = Debug|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|Win32.ActiveCfg = Release|Win32
{1A1FF289-4FD6-4285-A422-D31DD67A4723}.Release|x64.ActiveCfg = Release|Win32
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|Win32.ActiveCfg = Release|Win32
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|Win32.Build.0 = Release|Win32
+ {07113B25-D3AF-4E04-BA77-4CD1171F022C}.All|x64.ActiveCfg = Release|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.ActiveCfg = Debug|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.Build.0 = Debug|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|x64.ActiveCfg = Debug|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.ActiveCfg = Release|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.Build.0 = Release|Win32
{07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|x64.ActiveCfg = Release|Win32
+ {B17FFBE6-A942-4056-8346-B624FB5D995B}.All|Win32.ActiveCfg = Release with MySql
+ {B17FFBE6-A942-4056-8346-B624FB5D995B}.All|Win32.Build.0 = Release with MySql
+ {B17FFBE6-A942-4056-8346-B624FB5D995B}.All|x64.ActiveCfg = Release with MySql
+ {B17FFBE6-A942-4056-8346-B624FB5D995B}.All|x64.Build.0 = Release with MySql
{B17FFBE6-A942-4056-8346-B624FB5D995B}.Debug|Win32.ActiveCfg = Debug
{B17FFBE6-A942-4056-8346-B624FB5D995B}.Debug|x64.ActiveCfg = Debug with MySql
{B17FFBE6-A942-4056-8346-B624FB5D995B}.Debug|x64.Build.0 = Debug with MySql
{B17FFBE6-A942-4056-8346-B624FB5D995B}.Release|Win32.ActiveCfg = Release
{B17FFBE6-A942-4056-8346-B624FB5D995B}.Release|x64.ActiveCfg = Release with MySql
{B17FFBE6-A942-4056-8346-B624FB5D995B}.Release|x64.Build.0 = Release with MySql
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|Win32.ActiveCfg = Release MS-LDAP|Win32
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|Win32.Build.0 = Release MS-LDAP|Win32
+ {EC3E5C7F-EE09-47E2-80FE-546363D14A98}.All|x64.ActiveCfg = Release MS-LDAP|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Win32.ActiveCfg = Debug MS-LDAP|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|Win32.Build.0 = Debug MS-LDAP|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Debug|x64.ActiveCfg = Debug|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Win32.ActiveCfg = Release MS-LDAP|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|Win32.Build.0 = Release MS-LDAP|Win32
{EC3E5C7F-EE09-47E2-80FE-546363D14A98}.Release|x64.ActiveCfg = Release|Win32
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|Win32.ActiveCfg = Release|Win32
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|Win32.Build.0 = Release|Win32
+ {A27CCA23-1541-4337-81A4-F0A6413078A0}.All|x64.ActiveCfg = Release|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Win32.ActiveCfg = Debug|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|Win32.Build.0 = Debug|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Debug|x64.ActiveCfg = Debug|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Win32.ActiveCfg = Release|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|Win32.Build.0 = Release|Win32
{A27CCA23-1541-4337-81A4-F0A6413078A0}.Release|x64.ActiveCfg = Release|Win32
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.All|Win32.ActiveCfg = Release|Win32
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.All|Win32.Build.0 = Release|Win32
+ {C7705DC4-2088-493E-AF8D-65BC6D65C125}.All|x64.ActiveCfg = Release|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.ActiveCfg = Debug|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|Win32.Build.0 = Debug|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Debug|x64.ActiveCfg = Debug|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.ActiveCfg = Release|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|Win32.Build.0 = Release|Win32
{C7705DC4-2088-493E-AF8D-65BC6D65C125}.Release|x64.ActiveCfg = Release|Win32
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.All|Win32.ActiveCfg = Release|Win32
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.All|Win32.Build.0 = Release|Win32
+ {784113EF-44D9-4949-835D-7065D3C7AD08}.All|x64.ActiveCfg = Release|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Win32.ActiveCfg = Debug|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|Win32.Build.0 = Debug|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Debug|x64.ActiveCfg = Debug|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Win32.ActiveCfg = Release|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Release|Win32.Build.0 = Release|Win32
{784113EF-44D9-4949-835D-7065D3C7AD08}.Release|x64.ActiveCfg = Release|Win32
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.All|Win32.ActiveCfg = Release|Win32
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.All|Win32.Build.0 = Release|Win32
+ {89385C74-5860-4174-9CAF-A39E7C48909C}.All|x64.ActiveCfg = Release|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.ActiveCfg = Debug|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.Build.0 = Debug|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|x64.ActiveCfg = Debug|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.ActiveCfg = Release|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.Build.0 = Release|Win32
{89385C74-5860-4174-9CAF-A39E7C48909C}.Release|x64.ActiveCfg = Release|Win32
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|Win32.ActiveCfg = Release|Win32
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|Win32.Build.0 = Release|Win32
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.All|x64.ActiveCfg = Release|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.ActiveCfg = Debug|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|Win32.Build.0 = Debug|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Debug|x64.ActiveCfg = Debug|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.ActiveCfg = Release|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|Win32.Build.0 = Release|Win32
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}.Release|x64.ActiveCfg = Release|Win32
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.All|Win32.ActiveCfg = Release|Win32
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.All|Win32.Build.0 = Release|Win32
+ {692F6330-4D87-4C82-81DF-40DB5892636E}.All|x64.ActiveCfg = Release|Win32
{692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Win32.ActiveCfg = Debug|Win32
{692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64.ActiveCfg = Debug|Win32
{692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Win32.ActiveCfg = Release|Win32
{692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|Win32
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|Win32.ActiveCfg = Release|Win32
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|Win32.Build.0 = Release|Win32
+ {D3EC0AFF-76FC-4210-A825-9A17410660A3}.All|x64.ActiveCfg = Release|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.ActiveCfg = Debug|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.Build.0 = Debug|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|x64.ActiveCfg = Debug|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.ActiveCfg = Release|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.Build.0 = Release|Win32
{D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|x64.ActiveCfg = Release|Win32
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|Win32.ActiveCfg = Release|Win32
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|Win32.Build.0 = Release|Win32
+ {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.All|x64.ActiveCfg = Release|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.ActiveCfg = Debug|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.Build.0 = Debug|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|x64.ActiveCfg = Debug|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.ActiveCfg = Release|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.Build.0 = Release|Win32
{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|x64.ActiveCfg = Release|Win32
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|Win32.ActiveCfg = Release|Win32
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|Win32.Build.0 = Release|Win32
+ {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.All|x64.ActiveCfg = Release|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.ActiveCfg = Debug|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.Build.0 = Debug|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|x64.ActiveCfg = Debug|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.ActiveCfg = Release|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.Build.0 = Release|Win32
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|x64.ActiveCfg = Release|Win32
+ {1C453396-D912-4213-89FD-9B489162B7B5}.All|Win32.ActiveCfg = Release|Win32
+ {1C453396-D912-4213-89FD-9B489162B7B5}.All|Win32.Build.0 = Release|Win32
+ {1C453396-D912-4213-89FD-9B489162B7B5}.All|x64.ActiveCfg = Release|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.ActiveCfg = Debug|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.Build.0 = Debug|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Debug|x64.ActiveCfg = Debug|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.ActiveCfg = Release|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.Build.0 = Release|Win32
{1C453396-D912-4213-89FD-9B489162B7B5}.Release|x64.ActiveCfg = Release|Win32
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|Win32.ActiveCfg = Release|Win32
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|Win32.Build.0 = Release|Win32
+ {CBEC7225-0C21-4DA8-978E-1F158F8AD950}.All|x64.ActiveCfg = Release|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.ActiveCfg = Debug|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|Win32.Build.0 = Debug|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Debug|x64.ActiveCfg = Debug|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.ActiveCfg = Release|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.Build.0 = Release|Win32
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.ActiveCfg = Release|Win32
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|Win32.ActiveCfg = Release|Win32
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|Win32.Build.0 = Release|Win32
+ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.ActiveCfg = Release|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.ActiveCfg = Debug|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.Build.0 = Debug|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.ActiveCfg = Debug|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.ActiveCfg = Release|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.Build.0 = Release|Win32
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.ActiveCfg = Release|Win32
+ {C24FB505-05D7-4319-8485-7540B44C8603}.All|Win32.ActiveCfg = Release|Win32
+ {C24FB505-05D7-4319-8485-7540B44C8603}.All|Win32.Build.0 = Release|Win32
+ {C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.ActiveCfg = Release|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.ActiveCfg = Debug|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.Build.0 = Debug|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Debug|x64.ActiveCfg = Debug|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.ActiveCfg = Release|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.Build.0 = Release|Win32
{C24FB505-05D7-4319-8485-7540B44C8603}.Release|x64.ActiveCfg = Release|Win32
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|Win32.ActiveCfg = Release|Win32
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|Win32.Build.0 = Release|Win32
+ {B5881A85-FE70-4F64-8607-2CAAE52669C6}.All|x64.ActiveCfg = Release|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.ActiveCfg = Debug|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.Build.0 = Debug|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|x64.ActiveCfg = Debug|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.ActiveCfg = Release|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.Build.0 = Release|Win32
{B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|x64.ActiveCfg = Release|Win32
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.All|Win32.ActiveCfg = Release|Win32
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.All|Win32.Build.0 = Release|Win32
+ {05515420-16DE-4E63-BE73-85BE85BA5142}.All|x64.ActiveCfg = Release|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Win32.ActiveCfg = Debug|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|Win32.Build.0 = Debug|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Debug|x64.ActiveCfg = Debug|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.ActiveCfg = Release|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Release|Win32.Build.0 = Release|Win32
{05515420-16DE-4E63-BE73-85BE85BA5142}.Release|x64.ActiveCfg = Release|Win32
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.All|Win32.ActiveCfg = Release DLL|Win32
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.All|Win32.Build.0 = Release DLL|Win32
+ {1906D736-08BD-4EE1-924F-B536249B9A54}.All|x64.ActiveCfg = Release DLL|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.ActiveCfg = Debug|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.Build.0 = Debug|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.ActiveCfg = Debug|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.ActiveCfg = Release|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.Build.0 = Release|Win32
{1906D736-08BD-4EE1-924F-B536249B9A54}.Release|x64.ActiveCfg = Release|Win32
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|Win32.ActiveCfg = Release Dll|Win32
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|Win32.Build.0 = Release Dll|Win32
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750}.All|x64.ActiveCfg = Release Dll|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.ActiveCfg = Debug|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.Build.0 = Debug|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|x64.ActiveCfg = Debug|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.ActiveCfg = Release|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.Build.0 = Release|Win32
{EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|x64.ActiveCfg = Release|Win32
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|Win32.ActiveCfg = Release DLL|Win32
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|Win32.Build.0 = Release DLL|Win32
+ {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.All|x64.ActiveCfg = Release DLL|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.ActiveCfg = Debug|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.Build.0 = Debug|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|x64.ActiveCfg = Debug|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.ActiveCfg = Release|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.Build.0 = Release|Win32
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|x64.ActiveCfg = Release|Win32
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|Win32.ActiveCfg = Release DLL|Win32
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|Win32.Build.0 = Release DLL|Win32
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9}.All|x64.ActiveCfg = Release DLL|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.ActiveCfg = Debug|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.Build.0 = Debug|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|x64.ActiveCfg = Debug|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.ActiveCfg = Release|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.Build.0 = Release|Win32
{8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|x64.ActiveCfg = Release|Win32
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|Win32.ActiveCfg = Release|Win32
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|Win32.Build.0 = Release|Win32
+ {1CED5987-A529-46DC-B30F-870D85FF9C94}.All|x64.ActiveCfg = Release|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.ActiveCfg = Debug|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.Build.0 = Debug|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|x64.ActiveCfg = Debug|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.ActiveCfg = Release|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.Build.0 = Release|Win32
{1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|x64.ActiveCfg = Release|Win32
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|Win32.ActiveCfg = Release|Win32
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|Win32.Build.0 = Release|Win32
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.All|x64.ActiveCfg = Release|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.ActiveCfg = Debug|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.Build.0 = Debug|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|x64.ActiveCfg = Debug|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.ActiveCfg = Release|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.Build.0 = Release|Win32
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.ActiveCfg = Release|Win32
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|Win32.ActiveCfg = Release|Win32
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|Win32.Build.0 = Release|Win32
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3}.All|x64.ActiveCfg = Release|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.ActiveCfg = Debug|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.Build.0 = Debug|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.ActiveCfg = Debug|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.ActiveCfg = Release|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.Build.0 = Release|Win32
{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|x64.ActiveCfg = Release|Win32
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|Win32.ActiveCfg = Release|Win32
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|Win32.Build.0 = Release|Win32
+ {E727E8F6-935D-46FE-8B0E-37834748A0E3}.All|x64.ActiveCfg = Release|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.ActiveCfg = Debug|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.Build.0 = Debug|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|x64.ActiveCfg = Debug|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.ActiveCfg = Release|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.Build.0 = Release|Win32
{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.ActiveCfg = Release|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.All|Win32.ActiveCfg = Release|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.All|Win32.Build.0 = Release|Win32
+ {5927104D-C14C-4AC8-925C-4AB681762E75}.All|x64.ActiveCfg = Release|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.ActiveCfg = Debug|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|Win32.Build.0 = Debug|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Debug|x64.ActiveCfg = Debug|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.ActiveCfg = Release|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Release|Win32.Build.0 = Release|Win32
{5927104D-C14C-4AC8-925C-4AB681762E75}.Release|x64.ActiveCfg = Release|Win32
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.All|Win32.ActiveCfg = Release|Win32
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.All|Win32.Build.0 = Release|Win32
+ {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.All|x64.ActiveCfg = Release|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.ActiveCfg = Debug|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|Win32.Build.0 = Debug|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Debug|x64.ActiveCfg = Debug|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.ActiveCfg = Release|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|Win32.Build.0 = Release|Win32
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE}.Release|x64.ActiveCfg = Release|Win32
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.All|Win32.ActiveCfg = Release|Win32
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.All|Win32.Build.0 = Release|Win32
+ {49C34584-B6DA-448F-83CF-27584DC9FC90}.All|x64.ActiveCfg = Release|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.ActiveCfg = Debug|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|Win32.Build.0 = Debug|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Debug|x64.ActiveCfg = Debug|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.ActiveCfg = Release|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|Win32.Build.0 = Release|Win32
{49C34584-B6DA-448F-83CF-27584DC9FC90}.Release|x64.ActiveCfg = Release|Win32
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|Win32.ActiveCfg = Release|Win32
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|Win32.Build.0 = Release|Win32
+ {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.ActiveCfg = Release|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.ActiveCfg = Debug|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.Build.0 = Debug|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.ActiveCfg = Debug|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.ActiveCfg = Release|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.Build.0 = Release|Win32
{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.ActiveCfg = Release|Win32
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|Win32.ActiveCfg = Debug|Win32
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|Win32.Build.0 = Debug|Win32
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588}.All|x64.ActiveCfg = Debug|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.ActiveCfg = Debug|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.Build.0 = Debug|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|x64.ActiveCfg = Debug|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.ActiveCfg = Release|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.Build.0 = Release|Win32
{87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|x64.ActiveCfg = Release|Win32
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|Win32.ActiveCfg = Debug|Win32
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|Win32.Build.0 = Debug|Win32
+ {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.ActiveCfg = Debug|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.ActiveCfg = Debug|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.Build.0 = Debug|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|x64.ActiveCfg = Debug|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.ActiveCfg = Release|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.Build.0 = Release|Win32
{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|x64.ActiveCfg = Release|Win32
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|Win32.ActiveCfg = Debug|Win32
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|Win32.Build.0 = Debug|Win32
+ {204FA0DE-305D-4414-AE2E-F195A23F390D}.All|x64.ActiveCfg = Debug|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Win32.ActiveCfg = Debug|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|Win32.Build.0 = Debug|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Debug|x64.ActiveCfg = Debug|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Win32.ActiveCfg = Release|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|Win32.Build.0 = Release|Win32
{204FA0DE-305D-4414-AE2E-F195A23F390D}.Release|x64.ActiveCfg = Release|Win32
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|Win32.ActiveCfg = Release|Win32
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|Win32.Build.0 = Release|Win32
+ {0DF3ABD0-DDC0-4265-B778-07C66780979B}.All|x64.ActiveCfg = Release|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Win32.ActiveCfg = Debug|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|Win32.Build.0 = Debug|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Debug|x64.ActiveCfg = Debug|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Win32.ActiveCfg = Release|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|Win32.Build.0 = Release|Win32
{0DF3ABD0-DDC0-4265-B778-07C66780979B}.Release|x64.ActiveCfg = Release|Win32
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|Win32.ActiveCfg = Release|Win32
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|Win32.Build.0 = Release|Win32
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.All|x64.ActiveCfg = Release|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Win32.ActiveCfg = Debug|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|Win32.Build.0 = Debug|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Debug|x64.ActiveCfg = Debug|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Win32.ActiveCfg = Release|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|Win32.Build.0 = Release|Win32
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}.Release|x64.ActiveCfg = Release|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|Win32.ActiveCfg = Release|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|Win32.Build.0 = Release|Win32
+ {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.All|x64.ActiveCfg = Release|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Win32.ActiveCfg = Debug|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|Win32.Build.0 = Debug|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Debug|x64.ActiveCfg = Debug|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Win32.ActiveCfg = Release|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|Win32.Build.0 = Release|Win32
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}.Release|x64.ActiveCfg = Release|Win32
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|Win32.ActiveCfg = Release DLL|Win32
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|Win32.Build.0 = Release DLL|Win32
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.All|x64.ActiveCfg = Release DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Win32.ActiveCfg = Debug DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|Win32.Build.0 = Debug DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Debug|x64.ActiveCfg = Debug DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Win32.ActiveCfg = Release DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|Win32.Build.0 = Release DLL|Win32
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}.Release|x64.ActiveCfg = Release|Win32
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|Win32.ActiveCfg = Release Passthrough|Win32
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|Win32.Build.0 = Release Passthrough|Win32
+ {FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.All|x64.ActiveCfg = Release Passthrough|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|Win32.Build.0 = Debug Passthrough|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Debug|x64.ActiveCfg = Debug|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Win32.ActiveCfg = Release Passthrough|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|Win32.Build.0 = Release Passthrough|Win32
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.ActiveCfg = Release|Win32
+ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|Win32.ActiveCfg = Release|Win32
+ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|Win32.Build.0 = Release|Win32
+ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x64.ActiveCfg = Release|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Win32.ActiveCfg = Debug|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|Win32.Build.0 = Debug|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Debug|x64.ActiveCfg = Debug|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Win32.ActiveCfg = Release|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|Win32.Build.0 = Release|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.Release|x64.ActiveCfg = Release|Win32
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|Win32.ActiveCfg = Release|Win32
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|Win32.Build.0 = Release|Win32
+ {ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.All|x64.ActiveCfg = Release|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.ActiveCfg = Debug|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|Win32.Build.0 = Debug|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Debug|x64.ActiveCfg = Debug|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.ActiveCfg = Release|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|Win32.Build.0 = Release|Win32
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}.Release|x64.ActiveCfg = Release|Win32
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|Win32.ActiveCfg = Release|Win32
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|Win32.Build.0 = Release|Win32
+ {8F992C49-6C51-412F-B2A3-34EAB708EB65}.All|x64.ActiveCfg = Release|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.ActiveCfg = Debug|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|Win32.Build.0 = Debug|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Debug|x64.ActiveCfg = Debug|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.ActiveCfg = Release|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|Win32.Build.0 = Release|Win32
{8F992C49-6C51-412F-B2A3-34EAB708EB65}.Release|x64.ActiveCfg = Release|Win32
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|Win32.ActiveCfg = Release|Win32
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|Win32.Build.0 = Release|Win32
+ {4043FC6A-9A30-4577-8AD5-9B233C9575D8}.All|x64.ActiveCfg = Release|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Win32.ActiveCfg = Debug|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|Win32.Build.0 = Debug|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Debug|x64.ActiveCfg = Debug|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Win32.ActiveCfg = Release|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|Win32.Build.0 = Release|Win32
{4043FC6A-9A30-4577-8AD5-9B233C9575D8}.Release|x64.ActiveCfg = Release|Win32
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|Win32.ActiveCfg = Release|Win32
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|Win32.Build.0 = Release|Win32
+ {71A967D5-0E99-4CEF-A587-98836EE6F2EF}.All|x64.ActiveCfg = Release|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Win32.ActiveCfg = Debug|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|Win32.Build.0 = Debug|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Debug|x64.ActiveCfg = Debug|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Win32.ActiveCfg = Release|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|Win32.Build.0 = Release|Win32
{71A967D5-0E99-4CEF-A587-98836EE6F2EF}.Release|x64.ActiveCfg = Release|Win32
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|Win32.ActiveCfg = Release|Win32
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|Win32.Build.0 = Release|Win32
+ {0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.All|x64.ActiveCfg = Release|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.ActiveCfg = Debug|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|Win32.Build.0 = Debug|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Debug|x64.ActiveCfg = Debug|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.ActiveCfg = Release|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|Win32.Build.0 = Release|Win32
{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}.Release|x64.ActiveCfg = Release|Win32
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|Win32.ActiveCfg = Release|Win32
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|Win32.Build.0 = Release|Win32
+ {AB91A099-7690-4ECF-8994-E458F4EA1ED4}.All|x64.ActiveCfg = Release|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Win32.ActiveCfg = Debug|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|Win32.Build.0 = Debug|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Debug|x64.ActiveCfg = Debug|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Win32.ActiveCfg = Release|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|Win32.Build.0 = Release|Win32
{AB91A099-7690-4ECF-8994-E458F4EA1ED4}.Release|x64.ActiveCfg = Release|Win32
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|Win32.ActiveCfg = Release|Win32
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|Win32.Build.0 = Release|Win32
+ {988CACF7-3FCB-4992-BE69-77872AE67DC8}.All|x64.ActiveCfg = Release|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Win32.ActiveCfg = Debug|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|Win32.Build.0 = Debug|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Debug|x64.ActiveCfg = Debug|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Win32.ActiveCfg = Release|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|Win32.Build.0 = Release|Win32
{988CACF7-3FCB-4992-BE69-77872AE67DC8}.Release|x64.ActiveCfg = Release|Win32
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|Win32.ActiveCfg = Release DirectSound|Win32
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|Win32.Build.0 = Release DirectSound|Win32
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99}.All|x64.ActiveCfg = Release DirectSound|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.Build.0 = Debug|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release|Win32
{0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|Win32
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|Win32.ActiveCfg = Release|Win32
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|Win32.Build.0 = Release|Win32
+ {08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.All|x64.ActiveCfg = Release|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Win32.ActiveCfg = Debug|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|Win32.Build.0 = Debug|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Debug|x64.ActiveCfg = Debug|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Win32.ActiveCfg = Release|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|Win32.Build.0 = Release|Win32
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}.Release|x64.ActiveCfg = Release|Win32
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|Win32.ActiveCfg = Release Passthrough|Win32
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|Win32.Build.0 = Release Passthrough|Win32
+ {8DEB383C-4091-4F42-A56F-C9E46D552D79}.All|x64.ActiveCfg = Release Passthrough|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|Win32.Build.0 = Debug Passthrough|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Debug|x64.ActiveCfg = Debug|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Win32.ActiveCfg = Release Passthrough|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|Win32.Build.0 = Release Passthrough|Win32
{8DEB383C-4091-4F42-A56F-C9E46D552D79}.Release|x64.ActiveCfg = Release|Win32
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|Win32.ActiveCfg = Release|Win32
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|Win32.Build.0 = Release|Win32
+ {2C3C2423-234B-4772-8899-D3B137E5CA35}.All|x64.ActiveCfg = Release|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Win32.ActiveCfg = Debug|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|Win32.Build.0 = Debug|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Debug|x64.ActiveCfg = Debug|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Win32.ActiveCfg = Release|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|Win32.Build.0 = Release|Win32
{2C3C2423-234B-4772-8899-D3B137E5CA35}.Release|x64.ActiveCfg = Release|Win32
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|Win32.ActiveCfg = Release|Win32
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|Win32.Build.0 = Release|Win32
+ {3850D93A-5F24-4922-BC1C-74D08C37C256}.All|x64.ActiveCfg = Release|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Win32.ActiveCfg = Debug|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|Win32.Build.0 = Debug|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Debug|x64.ActiveCfg = Debug|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Win32.ActiveCfg = Release|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|Win32.Build.0 = Release|Win32
{3850D93A-5F24-4922-BC1C-74D08C37C256}.Release|x64.ActiveCfg = Release|Win32
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|Win32.ActiveCfg = Release|Win32
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|Win32.Build.0 = Release|Win32
+ {2CA40887-1622-46A1-A7F9-17FD7E7E545B}.All|x64.ActiveCfg = Release|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Win32.ActiveCfg = Debug|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|Win32.Build.0 = Debug|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Debug|x64.ActiveCfg = Debug|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Win32.ActiveCfg = Release|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|Win32.Build.0 = Release|Win32
{2CA40887-1622-46A1-A7F9-17FD7E7E545B}.Release|x64.ActiveCfg = Release|Win32
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.All|Win32.ActiveCfg = Release|Win32
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.All|Win32.Build.0 = Release|Win32
+ {028C7278-05D7-4E18-82FE-BE231B844F41}.All|x64.ActiveCfg = Release|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.ActiveCfg = Debug|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|Win32.Build.0 = Debug|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Debug|x64.ActiveCfg = Debug|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.ActiveCfg = Release|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Release|Win32.Build.0 = Release|Win32
{028C7278-05D7-4E18-82FE-BE231B844F41}.Release|x64.ActiveCfg = Release|Win32
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|Win32.ActiveCfg = Release|Win32
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|Win32.Build.0 = Release|Win32
+ {D7F1E3F2-A3F4-474C-8555-15122571AF52}.All|x64.ActiveCfg = Release|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Win32.ActiveCfg = Debug|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|Win32.Build.0 = Debug|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Debug|x64.ActiveCfg = Debug|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Win32.ActiveCfg = Release|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|Win32.Build.0 = Release|Win32
{D7F1E3F2-A3F4-474C-8555-15122571AF52}.Release|x64.ActiveCfg = Release|Win32
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|Win32.ActiveCfg = Release|Win32
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|Win32.Build.0 = Release|Win32
+ {5BC072DB-3826-48EA-AF34-FE32AA01E83B}.All|x64.ActiveCfg = Release|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Win32.ActiveCfg = Debug|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|Win32.Build.0 = Debug|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Debug|x64.ActiveCfg = Debug|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Win32.ActiveCfg = Release|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|Win32.Build.0 = Release|Win32
{5BC072DB-3826-48EA-AF34-FE32AA01E83B}.Release|x64.ActiveCfg = Release|Win32
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|Win32.ActiveCfg = Release|Win32
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|Win32.Build.0 = Release|Win32
+ {FA429E98-8B03-45E6-A096-A4BC5E821DE4}.All|x64.ActiveCfg = Release|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Win32.ActiveCfg = Debug|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|Win32.Build.0 = Debug|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Debug|x64.ActiveCfg = Debug|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Win32.ActiveCfg = Release|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|Win32.Build.0 = Release|Win32
{FA429E98-8B03-45E6-A096-A4BC5E821DE4}.Release|x64.ActiveCfg = Release|Win32
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|Win32.ActiveCfg = Release|Win32
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|Win32.Build.0 = Release|Win32
+ {06E3A538-AB32-44F2-B477-755FF9CB5D37}.All|x64.ActiveCfg = Release|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Win32.ActiveCfg = Debug|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|Win32.Build.0 = Debug|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Debug|x64.ActiveCfg = Debug|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Win32.ActiveCfg = Release|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|Win32.Build.0 = Release|Win32
{06E3A538-AB32-44F2-B477-755FF9CB5D37}.Release|x64.ActiveCfg = Release|Win32
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|Win32.ActiveCfg = Release|Win32
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|Win32.Build.0 = Release|Win32
+ {6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.All|x64.ActiveCfg = Release|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Win32.ActiveCfg = Debug|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|Win32.Build.0 = Debug|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Debug|x64.ActiveCfg = Debug|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Win32.ActiveCfg = Release|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|Win32.Build.0 = Release|Win32
{6D1BEC70-4DCD-4FE9-ADBD-4A43A67E4D05}.Release|x64.ActiveCfg = Release|Win32
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|Win32.ActiveCfg = Release|Win32
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|Win32.Build.0 = Release|Win32
+ {A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.All|x64.ActiveCfg = Release|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Win32.ActiveCfg = Debug|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|Win32.Build.0 = Debug|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Debug|x64.ActiveCfg = Debug|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Win32.ActiveCfg = Release|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|Win32.Build.0 = Release|Win32
{A4B122CF-5196-476B-8C0E-D8BD59AC3C14}.Release|x64.ActiveCfg = Release|Win32
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|Win32.ActiveCfg = Release|Win32
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|Win32.Build.0 = Release|Win32
+ {75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.All|x64.ActiveCfg = Release|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Win32.ActiveCfg = Debug|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|Win32.Build.0 = Debug|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Debug|x64.ActiveCfg = Debug|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Win32.ActiveCfg = Release|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|Win32.Build.0 = Release|Win32
{75DF7F29-2FBF-47F7-B5AF-5B4952DC1ABD}.Release|x64.ActiveCfg = Release|Win32
+ {F6A33240-8F29-48BD-98F0-826995911799}.All|Win32.ActiveCfg = Release|Win32
+ {F6A33240-8F29-48BD-98F0-826995911799}.All|Win32.Build.0 = Release|Win32
+ {F6A33240-8F29-48BD-98F0-826995911799}.All|x64.ActiveCfg = Release|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Debug|Win32.ActiveCfg = Debug|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Debug|Win32.Build.0 = Debug|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Debug|x64.ActiveCfg = Debug|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Release|Win32.ActiveCfg = Release|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Release|Win32.Build.0 = Release|Win32
{F6A33240-8F29-48BD-98F0-826995911799}.Release|x64.ActiveCfg = Release|Win32
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|Win32.ActiveCfg = Release|Win32
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|Win32.Build.0 = Release|Win32
+ {65A6273D-FCAB-4C55-B09E-65100141A5D4}.All|x64.ActiveCfg = Release|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Win32.ActiveCfg = Debug|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|Win32.Build.0 = Debug|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Debug|x64.ActiveCfg = Debug|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Win32.ActiveCfg = Release|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|Win32.Build.0 = Release|Win32
{65A6273D-FCAB-4C55-B09E-65100141A5D4}.Release|x64.ActiveCfg = Release|Win32
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|Win32.ActiveCfg = Release|Win32
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|Win32.Build.0 = Release|Win32
+ {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.All|x64.ActiveCfg = Release|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Win32.ActiveCfg = Debug|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|Win32.Build.0 = Debug|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Debug|x64.ActiveCfg = Debug|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.ActiveCfg = Release|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.Build.0 = Release|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.ActiveCfg = Release|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|Win32.ActiveCfg = Release|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|Win32.Build.0 = Release|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.All|x64.ActiveCfg = Release|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.ActiveCfg = Debug|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.Build.0 = Debug|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.ActiveCfg = Debug|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.ActiveCfg = Release|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.Build.0 = Release|Win32
{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.ActiveCfg = Release|Win32
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|Win32.ActiveCfg = Release|Win32
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|Win32.Build.0 = Release|Win32
+ {44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.All|x64.ActiveCfg = Release|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Win32.ActiveCfg = Debug|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|Win32.Build.0 = Debug|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Debug|x64.ActiveCfg = Debug|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Win32.ActiveCfg = Release|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|Win32.Build.0 = Release|Win32
{44D7DEAF-FDA5-495E-8B9D-1439E4F4C21E}.Release|x64.ActiveCfg = Release|Win32
+ {1A789A98-71EF-4EBD-8007-FC9ED585D32E}.All|Win32.ActiveCfg = Release|Win32
+ {1A789A98-71EF-4EBD-8007-FC9ED585D32E}.All|Win32.Build.0 = Release|Win32
+ {1A789A98-71EF-4EBD-8007-FC9ED585D32E}.All|x64.ActiveCfg = Release|Win32
{1A789A98-71EF-4EBD-8007-FC9ED585D32E}.Debug|Win32.ActiveCfg = Debug|Win32
{1A789A98-71EF-4EBD-8007-FC9ED585D32E}.Debug|Win32.Build.0 = Debug|Win32
{1A789A98-71EF-4EBD-8007-FC9ED585D32E}.Debug|x64.ActiveCfg = Debug|Win32
{1A789A98-71EF-4EBD-8007-FC9ED585D32E}.Release|Win32.ActiveCfg = Release|Win32
{1A789A98-71EF-4EBD-8007-FC9ED585D32E}.Release|Win32.Build.0 = Release|Win32
{1A789A98-71EF-4EBD-8007-FC9ED585D32E}.Release|x64.ActiveCfg = Release|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.ActiveCfg = Debug|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.Build.0 = Debug|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|x64.ActiveCfg = Debug|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.ActiveCfg = Release|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.Build.0 = Release|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|x64.ActiveCfg = Release|Win32
+ {9EED03C8-8315-4214-8D13-8FF5FA46D93C}.All|Win32.ActiveCfg = Release|Win32
+ {9EED03C8-8315-4214-8D13-8FF5FA46D93C}.All|Win32.Build.0 = Release|Win32
+ {9EED03C8-8315-4214-8D13-8FF5FA46D93C}.All|x64.ActiveCfg = Release|Win32
{9EED03C8-8315-4214-8D13-8FF5FA46D93C}.Debug|Win32.ActiveCfg = Debug|Win32
{9EED03C8-8315-4214-8D13-8FF5FA46D93C}.Debug|Win32.Build.0 = Debug|Win32
{9EED03C8-8315-4214-8D13-8FF5FA46D93C}.Debug|x64.ActiveCfg = Debug|Win32
{9EED03C8-8315-4214-8D13-8FF5FA46D93C}.Release|Win32.ActiveCfg = Release|Win32
{9EED03C8-8315-4214-8D13-8FF5FA46D93C}.Release|Win32.Build.0 = Release|Win32
{9EED03C8-8315-4214-8D13-8FF5FA46D93C}.Release|x64.ActiveCfg = Release|Win32
+ {2CCED6DC-26FF-40F2-9585-E9E1049A4599}.All|Win32.ActiveCfg = Release|Win32
+ {2CCED6DC-26FF-40F2-9585-E9E1049A4599}.All|Win32.Build.0 = Release|Win32
+ {2CCED6DC-26FF-40F2-9585-E9E1049A4599}.All|x64.ActiveCfg = Release|Win32
{2CCED6DC-26FF-40F2-9585-E9E1049A4599}.Debug|Win32.ActiveCfg = Debug|Win32
{2CCED6DC-26FF-40F2-9585-E9E1049A4599}.Debug|Win32.Build.0 = Debug|Win32
{2CCED6DC-26FF-40F2-9585-E9E1049A4599}.Debug|x64.ActiveCfg = Debug|Win32
{2CCED6DC-26FF-40F2-9585-E9E1049A4599}.Release|Win32.ActiveCfg = Release|Win32
{2CCED6DC-26FF-40F2-9585-E9E1049A4599}.Release|Win32.Build.0 = Release|Win32
{2CCED6DC-26FF-40F2-9585-E9E1049A4599}.Release|x64.ActiveCfg = Release|Win32
+ {4AE157CF-F2DD-4B5D-A1EE-4AC173B4F9AC}.All|Win32.ActiveCfg = Release|Win32
+ {4AE157CF-F2DD-4B5D-A1EE-4AC173B4F9AC}.All|Win32.Build.0 = Release|Win32
+ {4AE157CF-F2DD-4B5D-A1EE-4AC173B4F9AC}.All|x64.ActiveCfg = Release|Win32
{4AE157CF-F2DD-4B5D-A1EE-4AC173B4F9AC}.Debug|Win32.ActiveCfg = Debug|Win32
{4AE157CF-F2DD-4B5D-A1EE-4AC173B4F9AC}.Debug|Win32.Build.0 = Debug|Win32
{4AE157CF-F2DD-4B5D-A1EE-4AC173B4F9AC}.Debug|x64.ActiveCfg = Debug|Win32
{4AE157CF-F2DD-4B5D-A1EE-4AC173B4F9AC}.Release|Win32.ActiveCfg = Release|Win32
{4AE157CF-F2DD-4B5D-A1EE-4AC173B4F9AC}.Release|Win32.Build.0 = Release|Win32
{4AE157CF-F2DD-4B5D-A1EE-4AC173B4F9AC}.Release|x64.ActiveCfg = Release|Win32
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|Win32.ActiveCfg = Release|Win32
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|Win32.Build.0 = Release|Win32
+ {7B077E7F-1BE7-4291-AB86-55E527B25CAC}.All|x64.ActiveCfg = Release|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Win32.ActiveCfg = Debug|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|Win32.Build.0 = Debug|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Debug|x64.ActiveCfg = Debug|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Win32.ActiveCfg = Release|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|Win32.Build.0 = Release|Win32
{7B077E7F-1BE7-4291-AB86-55E527B25CAC}.Release|x64.ActiveCfg = Release|Win32
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|Win32.ActiveCfg = Release|Win32
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|Win32.Build.0 = Release|Win32
+ {D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.All|x64.ActiveCfg = Release|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Win32.ActiveCfg = Debug|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|Win32.Build.0 = Debug|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Debug|x64.ActiveCfg = Debug|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Win32.ActiveCfg = Release|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|Win32.Build.0 = Release|Win32
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}.Release|x64.ActiveCfg = Release|Win32
+ {B535402E-38D2-4D54-8360-423ACBD17192}.All|Win32.ActiveCfg = Release|Win32
+ {B535402E-38D2-4D54-8360-423ACBD17192}.All|Win32.Build.0 = Release|Win32
+ {B535402E-38D2-4D54-8360-423ACBD17192}.All|x64.ActiveCfg = Release|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Win32.ActiveCfg = Debug|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Debug|Win32.Build.0 = Debug|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Debug|x64.ActiveCfg = Debug|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.ActiveCfg = Release|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.Build.0 = Release|Win32
{B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.ActiveCfg = Release|Win32
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|Win32.ActiveCfg = Release|Win32
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|Win32.Build.0 = Release|Win32
+ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.All|x64.ActiveCfg = Release|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Win32.ActiveCfg = Debug|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|Win32.Build.0 = Debug|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Debug|x64.ActiveCfg = Debug|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Win32.ActiveCfg = Release|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|Win32.Build.0 = Release|Win32
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA}.Release|x64.ActiveCfg = Release|Win32
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|Win32.ActiveCfg = Debug|Win32
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|Win32.Build.0 = Debug|Win32
+ {0D108721-EAE8-4BAF-8102-D8960EC93647}.All|x64.ActiveCfg = Debug|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Win32.ActiveCfg = Debug|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|Win32.Build.0 = Debug|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Debug|x64.ActiveCfg = Debug|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Win32.ActiveCfg = Release|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|Win32.Build.0 = Release|Win32
{0D108721-EAE8-4BAF-8102-D8960EC93647}.Release|x64.ActiveCfg = Release|Win32
+ {426B1369-FDB7-4B18-A7EF-9C6A9097A130}.All|Win32.ActiveCfg = Release|Win32
+ {426B1369-FDB7-4B18-A7EF-9C6A9097A130}.All|Win32.Build.0 = Release|Win32
+ {426B1369-FDB7-4B18-A7EF-9C6A9097A130}.All|x64.ActiveCfg = Release|Win32
{426B1369-FDB7-4B18-A7EF-9C6A9097A130}.Debug|Win32.ActiveCfg = Debug|Win32
{426B1369-FDB7-4B18-A7EF-9C6A9097A130}.Debug|Win32.Build.0 = Debug|Win32
{426B1369-FDB7-4B18-A7EF-9C6A9097A130}.Debug|x64.ActiveCfg = Debug|Win32
{426B1369-FDB7-4B18-A7EF-9C6A9097A130}.Release|Win32.ActiveCfg = Release|Win32
{426B1369-FDB7-4B18-A7EF-9C6A9097A130}.Release|Win32.Build.0 = Release|Win32
{426B1369-FDB7-4B18-A7EF-9C6A9097A130}.Release|x64.ActiveCfg = Release|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|Win32.ActiveCfg = Release_Dynamic_SSE|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|Win32.Build.0 = Release_Dynamic_SSE|Win32
+ {E972C52F-9E85-4D65-B19C-031E511E9DB4}.All|x64.ActiveCfg = Release_Dynamic_SSE|Win32
{E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.ActiveCfg = Debug|Win32
{E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|Win32.Build.0 = Debug|Win32
{E972C52F-9E85-4D65-B19C-031E511E9DB4}.Debug|x64.ActiveCfg = Debug|Win32
{E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.ActiveCfg = Release|Win32
{E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|Win32.Build.0 = Release|Win32
{E972C52F-9E85-4D65-B19C-031E511E9DB4}.Release|x64.ActiveCfg = Release|Win32
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197}.All|Win32.ActiveCfg = Release_Dynamic_SSE|Win32
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197}.All|Win32.Build.0 = Release_Dynamic_SSE|Win32
+ {E42FDC95-7243-4219-9EA4-ACCE4AB97197}.All|x64.ActiveCfg = Release_Dynamic_SSE|Win32
{E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Debug|Win32.ActiveCfg = Debug|Win32
{E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Debug|Win32.Build.0 = Debug|Win32
{E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Debug|x64.ActiveCfg = Debug|Win32
{E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Release|Win32.ActiveCfg = Release|Win32
{E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Release|Win32.Build.0 = Release|Win32
{E42FDC95-7243-4219-9EA4-ACCE4AB97197}.Release|x64.ActiveCfg = Release|Win32
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.All|Win32.ActiveCfg = Release|Win32
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.All|Win32.Build.0 = Release|Win32
+ {7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.All|x64.ActiveCfg = Release|Win32
{7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Debug|Win32.ActiveCfg = Debug|Win32
{7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Debug|Win32.Build.0 = Debug|Win32
{7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Debug|x64.ActiveCfg = Debug|Win32
{7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Release|Win32.ActiveCfg = Release|Win32
{7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Release|Win32.Build.0 = Release|Win32
{7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3}.Release|x64.ActiveCfg = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.All|Win32.ActiveCfg = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.All|Win32.Build.0 = Release|Win32
+ {D0B36172-CD76-454A-9B89-990025266C2A}.All|x64.ActiveCfg = Release|Win32
{D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.ActiveCfg = Debug|Win32
{D0B36172-CD76-454A-9B89-990025266C2A}.Debug|Win32.Build.0 = Debug|Win32
{D0B36172-CD76-454A-9B89-990025266C2A}.Debug|x64.ActiveCfg = Debug|Win32
{D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.ActiveCfg = Release|Win32
{D0B36172-CD76-454A-9B89-990025266C2A}.Release|Win32.Build.0 = Release|Win32
{D0B36172-CD76-454A-9B89-990025266C2A}.Release|x64.ActiveCfg = Release|Win32
+ {AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.All|Win32.ActiveCfg = Release|Win32
+ {AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.All|Win32.Build.0 = Release|Win32
+ {AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.All|x64.ActiveCfg = Release|Win32
{AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Debug|Win32.ActiveCfg = Debug|Win32
{AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Debug|Win32.Build.0 = Debug|Win32
{AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Debug|x64.ActiveCfg = Debug|Win32
{AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Release|Win32.ActiveCfg = Release|Win32
{AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Release|Win32.Build.0 = Release|Win32
{AEE5D1F8-3386-4CB2-A336-0125C4C7EAEE}.Release|x64.ActiveCfg = Release|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|Win32.ActiveCfg = Release|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|Win32.Build.0 = Release|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|x64.ActiveCfg = Release|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.ActiveCfg = Debug|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.Build.0 = Debug|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|x64.ActiveCfg = Debug|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.ActiveCfg = Release|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.Build.0 = Release|Win32
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|x64.ActiveCfg = Release|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|Win32.ActiveCfg = Release|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|Win32.Build.0 = Release|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|x64.ActiveCfg = Release|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.Build.0 = Debug|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|x64.ActiveCfg = Debug|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.ActiveCfg = Release|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.Build.0 = Release|Win32
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|x64.ActiveCfg = Release|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|x64.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|x64.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.ActiveCfg = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.Build.0 = All|Win32
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|x64.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|x64.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|x64.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.ActiveCfg = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.Build.0 = All|Win32
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|x64.ActiveCfg = All|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
{DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{4043FC6A-9A30-4577-8AD5-9B233C9575D8} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{0A18A071-125E-442F-AFF7-A3F68ABECF99} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
- {CF70F278-3364-4395-A2E1-23501C9B8AD2} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{B535402E-38D2-4D54-8360-423ACBD17192} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{E42FDC95-7243-4219-9EA4-ACCE4AB97197} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{7C43DBD8-6893-4CD2-B7C0-D2E51F8B1FD3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{D0B36172-CD76-454A-9B89-990025266C2A} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {DEE932AB-5911-4700-9EEB-8C7090A0A330} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
+ {329A6FA0-0FCC-4435-A950-E670AEFA9838} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {0C808854-54D1-4230-BFF5-77B5FD905000}
{ACFFF684-4D19-4D48-AF12-88EA1D778BDF} = {0C808854-54D1-4230-BFF5-77B5FD905000}
{8F992C49-6C51-412F-B2A3-34EAB708EB65} = {0C808854-54D1-4230-BFF5-77B5FD905000}
ProjectSection(ProjectDependencies) = postProject\r
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}\r
{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5} = {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}\r
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}\r
EndProjectSection\r
EndProject\r
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_fsv", "src\mod\applications\mod_fsv\mod_fsv.2008.vcproj", "{E3246D17-E29B-4AB5-962A-C69B0C5837BB}"\r
ProjectSection(ProjectDependencies) = postProject\r
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}\r
{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5} = {1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}\r
+ {401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}\r
EndProjectSection\r
EndProject\r
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_fsv", "src\mod\applications\mod_fsv\mod_fsv.2008.vcproj", "{E3246D17-E29B-4AB5-962A-C69B0C5837BB}"\r
BASEDIR=`pwd`;
LIBDIR=${BASEDIR}/libs;
-SUBDIRS="ilbc curl iksemel voipcodecs \
+SUBDIRS="ilbc curl iksemel \
js js/nsprpub libdingaling libedit libsndfile pcre sofia-sip \
speex sqlite srtp openzap spandsp libg722_1 portaudio unimrcp tiff-3.8.2";
AC_CONFIG_SUBDIRS(libs/pcre)
AC_CONFIG_SUBDIRS(libs/apr)
AC_CONFIG_SUBDIRS(libs/apr-util)
-AC_CONFIG_SUBDIRS(libs/voipcodecs)
AC_CONFIG_SUBDIRS(libs/ilbc)
AC_CONFIG_SUBDIRS(libs/curl)
AC_CONFIG_SUBDIRS(libs/iksemel)
+++ /dev/null
-Thu Feb 7 18:52:01 CST 2008
+++ /dev/null
-Steve Underwood <steveu@coppice.org>
+++ /dev/null
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-\f
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-\f
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+++ /dev/null
-08.02.08 - 0.0.1 - Steve Underwood <steveu@coppice.org>
- - The first version.
-
+++ /dev/null
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
-Software Foundation, Inc.
-
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
-These are generic installation instructions.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
- It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring. (Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.)
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
- The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'. You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
-Compilers and Options
-=====================
-
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about. Run `./configure --help' for
-details on some of the pertinent environment variables.
-
- You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment. Here
-is an example:
-
- ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
-
- *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
- If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory. After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
-
-Installation Names
-==================
-
-By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc. You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
-`--build=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
- CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
- OS KERNEL-OS
-
- See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
- If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
- If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-Variables not defined in a site shell script can be set in the
-environment passed to `configure'. However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost. In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'. For example:
-
- ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script). Here is a another example:
-
- /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
-configuration-related scripts to be executed by `/bin/bash'.
-
-`configure' Invocation
-======================
-
-`configure' recognizes the following options to control how it operates.
-
-`--help'
-`-h'
- Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`--cache-file=FILE'
- Enable the cache: use and save the results of the tests in FILE,
- traditionally `config.cache'. FILE defaults to `/dev/null' to
- disable caching.
-
-`--config-cache'
-`-C'
- Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
- messages will still be shown).
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options. Run
-`configure --help' for more details.
-
+++ /dev/null
-##
-## VoIPcodecs - a series of DSP components for telephony
-##
-## Makefile.am -- Process this file with automake to produce Makefile.in
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License version 2, as
-## published by the Free Software Foundation.
-##
-## 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-##
-## $Id: Makefile.am,v 1.29 2007/09/23 12:45:15 steveu Exp $
-
-AM_CFLAGS = $(COMP_VENDOR_CFLAGS)
-
-noinst_SCRIPTS = voipcodecs.spec
-
-MAINTAINERCLEANFILES = Makefile.in
-
-EXTRA_DIST = voipcodecs.spec \
- wrapper.xsl \
- libvoipcodecs.vcproj \
- doc/libvoipcodecs-doxygen \
- src/float_fudge.h \
- src/voipcodecs/version.h.in \
- src/libvoipcodecs.dsp \
- src/libvoipcodecs.sln \
- src/msvc/gettimeofday.c \
- src/msvc/inttypes.h \
- src/msvc/tgmath.h \
- src/msvc/unistd.h \
- src/msvc/sys/time.h \
- src/msvc/voipcodecs.def \
- src/msvc/msvcproj.head \
- src/msvc/msvcproj.foot \
- src/msvc/vc8proj.head \
- src/msvc/vc8proj.foot \
- debian/changelog \
- debian/compat \
- debian/control \
- debian/copyright \
- debian/libvoipcodecs.install \
- debian/libvoipcodecs-dev.install \
- debian/libvoipcodecs-doc.install \
- debian/rules \
- debian/watch
-
-if COND_DOC
- MAYBE_DOC=doc
-endif
-if COND_TESTS
- MAYBE_TESTS=tests
-endif
-if COND_ITUTESTS
- MAYBE_ITUTESTS=itutests
-endif
-SUBDIRS = src $(MAYBE_DOC) $(MAYBE_TESTS) $(MAYBE_ITUTESTS)
-
-DIST_SUBDIRS = src doc tests localtests etsitests itutests
-
-faq: faq.xml
- cd faq ; xsltproc ../wrapper.xsl ../faq.xml
-
-rpm: rpm-build
-
-rpm-build:
- $(MAKE) -$(MAKEFLAGS) bump.rpm.release
- $(MAKE) -$(MAKEFLAGS) dist
- rm -rf rpm/BUILD/*
- rm -f rpm/RPMS/*/*
- rm -f rpm/SOURCES/*
- rm -f rpm/SPECS/*
- rm -f rpm/SRPMS/*
- rpm -ta --sign @PACKAGE@-@VERSION@.tar.gz
-
-bump.rpm.release: voipcodecs.spec
- VERSION="x"; \
- test -f $(srcdir)/rpm.release && . $(srcdir)/rpm.release; \
- NEXT_RELEASE=0; \
- test "$$VERSION" = "@VERSION@" && NEXT_RELEASE="$$RELEASE"; \
- RELEASE=`expr $$NEXT_RELEASE + 1`; \
- echo "VERSION=@VERSION@" >$(srcdir)/rpm.release; \
- echo "RELEASE=$$RELEASE" >>$(srcdir)/rpm.release; \
- sed 's/^Release: .*/Release: '$$RELEASE'/' \
- <voipcodecs.spec >voipcodecs.spec.new; \
- mv voipcodecs.spec.new voipcodecs.spec
+++ /dev/null
-No news is good news!
\ No newline at end of file
+++ /dev/null
-VoIPcodecs 0.0.1 - A set of commonly used, unencumbered, codecs for VoIP
-------------------------------------------------------------------------
-
-Steve Underwood <steveu@coppice.org>
+++ /dev/null
-#
-# VoIPcodecs - a series of DSP components for telephony
-#
-# configure.ac -- Process this file with autoconf to produce configure
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2, as
-# published by the Free Software Foundation.
-#
-# 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-# $Id: configure.ac,v 1.38 2007/11/10 11:14:56 steveu Exp $
-
-# @start 1
-
-AC_INIT
-
-AC_DEFUN([AX_COMPILER_VENDOR],
-[
-AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
- [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
- # note: don't check for GCC first, since some other compilers define __GNUC__
- for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
- vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[
-#if !($vencpp)
- thisisanerror;
-#endif
-])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break])
- done
- ])
-])
-
-VOIPCODECS_MAJOR_VERSION=0
-VOIPCODECS_MINOR_VERSION=0
-VOIPCODECS_MICRO_VERSION=1
-
-VOIPCODECS_LT_CURRENT=0
-VOIPCODECS_LT_REVISION=2
-VOIPCODECS_LT_AGE=0
-
-VERSION=$VOIPCODECS_MAJOR_VERSION.$VOIPCODECS_MINOR_VERSION.$VOIPCODECS_MICRO_VERSION
-PACKAGE=voipcodecs
-
-AC_SUBST(VOIPCODECS_LT_CURRENT)
-AC_SUBST(VOIPCODECS_LT_REVISION)
-AC_SUBST(VOIPCODECS_LT_AGE)
-
-AC_CONFIG_SRCDIR([src/g711.c])
-AC_CONFIG_AUX_DIR(config)
-AC_CONFIG_HEADERS([src/config.h:config-h.in])
-AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
-
-AC_CANONICAL_HOST
-AC_CANONICAL_BUILD
-AC_PROG_CC
-AC_PROG_CXX
-AC_PROG_GCC_TRADITIONAL
-AC_PROG_LIBTOOL
-AC_LANG([C])
-
-AX_COMPILER_VENDOR
-
-if test "${build}" != "${host}"
-then
- # If we are doing a Canadian Cross, in which the host and build systems
- # are not the same, we set reasonable default values for the tools.
-
- CC=${CC-${host_alias}-gcc}
- CFLAGS=${CFLAGS-"-g -O2"}
- CXX=${CXX-${host_alias}-c++}
- CXXFLAGS=${CXXFLAGS-"-g -O2"}
- CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
-else
- # Set reasonable default values for some tools even if not Canadian.
- # Of course, these are different reasonable default values, originally
- # specified directly in the Makefile.
- # We don't export, so that autoconf can do its job.
- # Note that all these settings are above the fragment inclusion point
- # in Makefile.in, so can still be overridden by fragments.
- # This is all going to change when we autoconfiscate...
- CC_FOR_BUILD="\$(CC)"
- AC_PROG_CC
-
- # We must set the default linker to the linker used by gcc for the correct
- # operation of libtool. If LD is not defined and we are using gcc, try to
- # set the LD default to the ld used by gcc.
- if test -z "$LD"
- then
- if test "$GCC" = yes
- then
- case $build in
- *-*-mingw*)
- gcc_prog_ld=`$CC -print-prog-name=ld 2>&1 | tr -d '\015'` ;;
- *)
- gcc_prog_ld=`$CC -print-prog-name=ld 2>&1` ;;
- esac
- case $gcc_prog_ld in
- # Accept absolute paths.
- [[\\/]* | [A-Za-z]:[\\/]*)]
- LD="$gcc_prog_ld" ;;
- esac
- fi
- fi
-
- CXX=${CXX-"c++"}
- CFLAGS=${CFLAGS-"-g -O2"}
- CXXFLAGS=${CXXFLAGS-"-g -O2"}
-fi
-
-AC_C_CONST
-AC_C_INLINE
-AC_C_VOLATILE
-
-AC_CHECK_TYPES(long long)
-AC_CHECK_TYPES(long double)
-
-AC_TYPE_SIGNAL
-
-AC_ARG_ENABLE(doc, [ --enable-doc Build the documentation])
-AC_ARG_ENABLE(tests, [ --enable-tests Build the test programs])
-AC_ARG_ENABLE(itutests, [ --enable-itutests Build TIFF test files for some ITU test images])
-AC_ARG_ENABLE(mmx, [ --enable-mmx Enable MMX support])
-AC_ARG_ENABLE(sse, [ --enable-sse Enable SSE support])
-AC_ARG_ENABLE(fixed_point, [ --enable-fixed-point Enable fixed point support])
-
-AC_FUNC_ERROR_AT_LINE
-AC_FUNC_VPRINTF
-AC_FUNC_MALLOC
-AC_FUNC_MEMCMP
-AC_FUNC_REALLOC
-AC_FUNC_SELECT_ARGTYPES
-
-AC_CHECK_FUNCS([memmove])
-AC_CHECK_FUNCS([memset])
-AC_CHECK_FUNCS([select])
-AC_CHECK_FUNCS([strcasecmp])
-AC_CHECK_FUNCS([strchr])
-AC_CHECK_FUNCS([strdup])
-AC_CHECK_FUNCS([strerror])
-AC_CHECK_FUNCS([strstr])
-AC_CHECK_FUNCS([strtol])
-AC_CHECK_FUNCS([gettimeofday])
-
-AC_HEADER_STDC
-AC_HEADER_SYS_WAIT
-AC_HEADER_TIME
-
-# Check for header files.
-AC_CHECK_HEADERS([socket.h])
-AC_CHECK_HEADERS([inttypes.h], [INSERT_INTTYPES_HEADER="#include <inttypes.h>"])
-AC_CHECK_HEADERS([stdint.h], [INSERT_STDINT_HEADER="#include <stdint.h>"])
-AC_CHECK_HEADERS([unistd.h])
-AC_CHECK_HEADERS([stdlib.h])
-AC_CHECK_HEADERS([string.h])
-AC_CHECK_HEADERS([strings.h])
-AC_CHECK_HEADERS([malloc.h])
-AC_CHECK_HEADERS([tgmath.h], [INSERT_TGMATH_HEADER="#include <tgmath.h>"])
-AC_CHECK_HEADERS([math.h], [INSERT_MATH_HEADER="#include <math.h>"])
-AC_CHECK_HEADERS([float.h])
-AC_CHECK_HEADERS([fcntl.h])
-AC_CHECK_HEADERS([sys/time.h])
-AC_CHECK_HEADERS([sys/select.h])
-AC_CHECK_HEADERS([sys/ioctl.h])
-AC_CHECK_HEADERS([sys/fcntl.h])
-AC_CHECK_HEADERS([audiofile.h])
-AC_CHECK_HEADERS([fftw.h])
-AC_CHECK_HEADERS([fftw3.h])
-AC_CHECK_HEADERS([tiffio.h])
-AC_CHECK_HEADERS([pthread.h])
-AC_CHECK_HEADERS([unicall.h])
-if test "${build}" == "${host}"
-then
- AC_CHECK_HEADERS([X11/X.h])
-fi
-
-# Determine XML2 include path
-AC_MSG_CHECKING(for libxml/xmlmemory.h)
-
-# Can we include headers using system include dirs?
-AC_TRY_COMPILE([#include <libxml/xmlmemory.h>], [int a = 1;],
- XML2_INCLUDE=" ",
- XML2_INCLUDE=
-)
-
-# Hunt through several possible directories to find the includes for libxml2
-if test "x$XML2_INCLUDE" = "x"; then
- old_CPPFLAGS="$CPPFLAGS"
- for i in $xml2_include_dir /usr/include /usr/local/include /usr/include/libxml2 /usr/local/include/libxml2 ; do
- CPPFLAGS="$old_CPPFLAGS -I$i"
- AC_TRY_COMPILE([#include <libxml/xmlmemory.h>], [int a = 1;],
- XML2_INCLUDE="-I$i",
- XML2_INCLUDE=
- )
- if test "x$XML2_INCLUDE" != "x"; then
- break;
- fi
- done
- CPPFLAGS="$old_CPPFLAGS $XML2_INCLUDE"
-fi
-
-AC_CHECK_HEADERS([libxml/xmlmemory.h])
-AC_CHECK_HEADERS([libxml/parser.h])
-AC_CHECK_HEADERS([libxml/xinclude.h])
-
-AC_LANG([C++])
-AC_CHECK_HEADERS([FL/Fl.H])
-AC_CHECK_HEADERS([FL/Fl_Overlay_Window.H])
-AC_CHECK_HEADERS([FL/Fl_Light_Button.H])
-AC_CHECK_HEADERS([FL/fl_draw.H])
-AC_CHECK_HEADERS([FL/Fl_Cartesian.H], [], [], [],[[#include <FL/Fl.H>
-]])
-AC_CHECK_HEADERS([FL/Fl_Audio_Meter.H], [], [], [],[[#include <FL/Fl.H>
-]])
-
-if test "${build}" == "${host}"
-then
- case "${host}" in
- x86_64-*)
- AC_CHECK_FILE([${prefix}/lib64], libdir='$(exec_prefix)/lib64')
- ;;
- esac
-fi
-
-AC_LANG([C])
-
-if test "${build}" == "${host}"
-then
- case "${host}" in
- x86_64-*)
- # X86_64 Linux machines may have both 64 bit and 32 bit libraries. We need to choose the right set
- AC_CHECK_FILE([/usr/X11R6/lib64], [TESTLIBS="$TESTLIBS -L/usr/X11R6/lib64"], AC_CHECK_FILE([/usr/X11R6/lib], [TESTLIBS="$TESTLIBS -L/usr/X11R6/lib"]))
- ;;
- esac
-fi
-
-# Checks for libraries.
-AC_CHECK_LIB([m], [cos])
-AC_CHECK_LIB([m], [pow])
-AC_CHECK_LIB([m], [sqrt])
-if test -n "$enable_tests" ; then
- AC_LANG([C++])
- AC_CHECK_LIB([fltk], [main], TESTLIBS="$TESTLIBS -lfltk -lsupc++")
- AC_CHECK_LIB([fltk_cartesian], [main], TESTLIBS="-lfltk_cartesian $TESTLIBS")
- AC_CHECK_LIB([fltk_audio_meter], [main], TESTLIBS="-lfltk_audio_meter $TESTLIBS")
- AC_LANG([C])
- AC_CHECK_LIB([audiofile], [afOpenFile], TESTLIBS="$TESTLIBS -laudiofile", AC_MSG_ERROR("Can't make tests without libaudiofile (does your system require a libaudiofile-devel package?)"))
- AC_CHECK_LIB([fftw3], [fftw_plan_dft_1d], TESTLIBS="$TESTLIBS -lfftw3")
- AC_CHECK_LIB([fftw], [fftw_create_plan], TESTLIBS="$TESTLIBS -lfftw")
- AC_CHECK_LIB([pthread], [pthread_attr_init], TESTLIBS="$TESTLIBS -lpthread")
- AC_CHECK_LIB([dl], [dlopen], TESTLIBS="$TESTLIBS -ldl")
- AC_CHECK_LIB([unicall], [uc_start], TESTLIBS="$TESTLIBS -lunicall",, -ltiff -ldl)
- AC_CHECK_LIB([Xft], [XftFontOpen], TESTLIBS="$TESTLIBS -lXft",, $TESTLIBS)
- AC_CHECK_LIB([Xext], [XextCreateExtension], TESTLIBS="$TESTLIBS -lXext",, $TESTLIBS)
- AC_CHECK_LIB([X11], [XOpenDisplay], TESTLIBS="$TESTLIBS -lX11",, $TESTLIBS)
- AC_CHECK_LIB([xml2], [xmlParseFile], [AC_DEFINE([HAVE_LIBXML2], [1], [Define to 1 if you have the 'libxml2' library (-lxml2).]) TESTLIBS="$TESTLIBS -lxml2"])
-fi
-
-case "${ax_cv_c_compiler_vendor}" in
-gnu)
- COMP_VENDOR_CFLAGS="-std=gnu99 -ffast-math -Wall -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes"
- if test "$enable_sse" = "yes" ; then
- COMP_VENDOR_CFLAGS="-msse $COMP_VENDOR_CFLAGS"
- fi
- if test "$enable_mmx" = "yes" ; then
- COMP_VENDOR_CFLAGS="-mmmx $COMP_VENDOR_CFLAGS"
- fi
- ;;
-sun)
- COMP_VENDOR_CFLAGS="-xc99=all -mt -xCC -errwarn=%all -xvpara"
- if test "$enable_sse" = "yes" ; then
- COMP_VENDOR_CFLAGS="-native -fast $COMP_VENDOR_CFLAGS"
- fi
- if test "$enable_mmx" = "yes" ; then
- COMP_VENDOR_CFLAGS="-native -fast $COMP_VENDOR_CFLAGS"
- fi
- ;;
-*)
- COMP_VENDOR_CFLAGS="-std=c99 -Wall -Wunused-variable -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes"
- ;;
-esac
-
-COMP_VENDOR_CFLAGS="-DNDEBUG $COMP_VENDOR_CFLAGS"
-
-AM_CONDITIONAL([COND_DOC], [test "$enable_doc" = yes])
-AM_CONDITIONAL([COND_TESTS], [test "$enable_tests" = yes])
-AM_CONDITIONAL([COND_ITUTESTS], [test "$enable_itutests" = yes])
-AM_CONDITIONAL([COND_MMX], [test "$enable_mmx" = yes])
-AM_CONDITIONAL([COND_SSE], [test "$enable_sse" = yes])
-if test "$enable_fixed_point" = "yes" ; then
- AC_DEFINE([VOIPCODECS_USE_FIXED_POINT], [1], [Enable fixed point processing, where possible, instead of floating point])
- VOIPCODECS_USE_FIXED_POINT="#define VOIPCODECS_USE_FIXED_POINT 1"
-else
-#
-# So far we deal with the embedded ARM, Blackfin, MIPS, TI DSP and XScale processors as
-# things which lack fast hardware floating point.
-#
-# Other candidates would be the small embedded Power PCs.
-#
- case $basic_machine in
- arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] \
- | bfin \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | tic54x | c54x* | tic55x | c55x* | tic6x | c6x* \
- | xscale | xscalee[bl] \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | bfin-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | xscale-* | xscalee[bl]-* )
- AC_DEFINE([VOIPCODECS_USE_FIXED_POINT], [1], [Enable fixed point processing, where possible, instead of floating point])
- VOIPCODECS_USE_FIXED_POINT="#define VOIPCODECS_USE_FIXED_POINT 1"
- ;;
- *)
- VOIPCODECS_USE_FIXED_POINT="#undef VOIPCODECS_USE_FIXED_POINT"
- ;;
- esac
-fi
-
-AC_SUBST(CC_FOR_BUILD)
-AC_SUBST(COMP_VENDOR_CFLAGS)
-AC_SUBST(TESTLIBS)
-AC_SUBST(VOIPCODECS_USE_FIXED_POINT)
-AC_SUBST(INSERT_INTTYPES_HEADER)
-AC_SUBST(INSERT_STDINT_HEADER)
-AC_SUBST(INSERT_TGMATH_HEADER)
-AC_SUBST(INSERT_MATH_HEADER)
-
-AC_CONFIG_FILES([Makefile
- doc/Makefile
- etsitests/Makefile
- itutests/Makefile
- localtests/Makefile
- src/Makefile
- src/voipcodecs.h
- tests/Makefile
- voipcodecs.spec])
-
-AC_OUTPUT
-
-# @end 1
+++ /dev/null
-#! /bin/sh
-./configure "$@" --disable-shared --with-pic
+++ /dev/null
-voipcodecs (0.0.1) unstable; urgency=low
-
- [ Steve Underwood ]
- * Begun
-
- -- Steve Underwood <steveu@coppice.org> Thu, 7 Feb 2008 09:53:06 +0300
+++ /dev/null
-Source: voipcodecs
-Section: libs
-Priority: optional
-Maintainer: Debian VoIP Team <pkg-voip-maintainers@lists.alioth.debian.org>
-Uploaders: Jose Carlos Garcia Sogo <jsogo@debian.org>, Kilian Krause <kilian@debian.org>, Santiago Garcia Mantinan <manty@debian.org>, Mark Purcell <msp@debian.org>, Tzafrir Cohen <tzafrir.cohen@xorcom.com>, Santiago Ruano Rincón <santiago@debian.org>
-Build-Depends: debhelper (>= 4.0.0), libtiff4-dev, libjpeg62-dev, dpatch, doxygen, autotools-dev
-Standards-Version: 3.7.2
-XS-Vcs-Svn: svn://svn.debian.org/pkg-voip/
-XS-Vcs-Browser: http://svn.debian.org/wsvn/pkg-voip/
-
-Package: libvoipcodecs3
-Architecture: any
-Depends: ${shlibs:Depends}
-Conflicts: libvoipcodecs0, libvoipcodecs1, libvoipcodecs2
-Description: Telephony signal processing library
- This is a low-level signal processing library that modulate and demodulate
- signals commonly used in telephony, such as the "noise" generated by a
- fax modem or DTMF touchpad.
- .
- This package contains the shared library.
-
-Package: libvoipcodecs-dev
-Section: libdevel
-Architecture: any
-Depends: libvoipcodecs3 (= ${Source-Version}), libtiff4-dev, libjpeg62-dev
-Description: Telephony signal processing library
- This is a low-level signal processing library that modulate and demodulate
- signals commonly used in telephony, such as the "noise" generated by a
- fax modem or DTMF touchpad.
- .
- This package contains the static library and development headers.
- .
- Homepage: http://www.soft-switch.org/
-
-Package: libvoipcodecs-doc
-Section: doc
-Architecture: all
-Description: Documentation for the voipcodecs signal processing library
- This package contains the online API in HTML for the libvoipcodecs, a low
- level signal processing library that modulate and demodulate siignals
- commonly used in telephony, such as the "noise" generated by a fax
- modem or DTMF touchpad.
+++ /dev/null
-This package was debianized by Steve Underwood <steveu@coppice.org> on
-Thu, 7 Feb 2008 15:22:58 +0100.
-
-It was downloaded from http://soft-switch.org/downloads/voipcodecs/
-
-Copyright: Steve Underwood <steveu@coppice.org>
-
-License:
-
- This package 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; version 2 dated June, 1991.
-
- This package 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 package; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-
-
-On Debian systems, the complete text of the GNU General
-Public License can be found in `/usr/share/common-licenses/GPL'.
+++ /dev/null
-debian/tmp/usr/include
-debian/tmp/usr/lib/libvoipcodecs.so
-debian/tmp/usr/lib/libvoipcodecs.la
-debian/tmp/usr/lib/libvoipcodecs.a
+++ /dev/null
-doc/api/html usr/share/doc/libvoipcodecs-doc/api/
+++ /dev/null
-debian/tmp/usr/lib/libvoipcodecs.so.0.*
-debian/tmp/usr/lib/libvoipcodecs.so.0
+++ /dev/null
-#!/usr/bin/make -f
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
-DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
-
-DEBVERSION:=$(shell head -n 1 debian/changelog \
- | sed -e 's/^[^(]*(\([^)]*\)).*/\1/')
-ORIGTARVER:=$(shell echo $(DEBVERSION) | sed -e 's/^.*://' -e 's/-[0-9.]*$$//')# -e 's/.dfsg$$//' -e 's/~//')
-
-UPVERSION:=$(shell echo $(ORIGTARVER) | tr -d '~')
-
-FILENAME := voipcodecs_$(ORIGTARVER).orig.tar.gz
-FULLNAME := voipcodecs-$(UPVERSION)
-URL := http://soft-switch.org/downloads/voipcodecs/voipcodecs-$(UPVERSION).tgz
-
-CFLAGS = -Wall -g
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
- CFLAGS += -O0
-else
- CFLAGS += -O2
-endif
-
-include /usr/share/dpatch/dpatch.make
-
-
-autotools: patch-stamp
- ln -s /usr/share/misc/config.sub config.sub
- ln -s /usr/share/misc/config.guess config.guess
- touch autotools
-
-config.status: autotools configure
- dh_testdir
- CFLAGS="$(CFLAGS)" ./configure \
- --host=$(DEB_HOST_GNU_TYPE) \
- --build=$(DEB_BUILD_GNU_TYPE) \
- --prefix=/usr \
- --mandir=\$${prefix}/share/man \
- --infodir=\$${prefix}/share/info \
- --enable-doc
-
-build: build-stamp
-
-build-stamp: config.status
- dh_testdir
- $(MAKE)
- touch build-stamp
-
-clean: clean-patched unpatch
-clean-patched:
- dh_testdir
- dh_testroot
- rm -f build-stamp autotools
- -$(MAKE) distclean
-
- -$(RM) -f config.sub
- -$(RM) -f config.guess
-
- dh_clean
-
-install: build-stamp
- dh_testdir
- dh_testroot
- dh_clean -k
- $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
-
-binary-indep: build-stamp install
- dh_testdir -i
- dh_testroot -i
- dh_installchangelogs -i ChangeLog
- dh_installdocs -i DueDiligence
- dh_install -i
- dh_compress -i
- dh_fixperms -i
- dh_installdeb -i
- dh_gencontrol -i
- dh_md5sums -i
- dh_builddeb -i
-
-binary-arch: build-stamp install
- dh_testdir -a
- dh_testroot -a
- dh_installchangelogs -a ChangeLog
- dh_installdocs -a DueDiligence
- dh_install -a
- dh_strip -a
- dh_compress -a
- dh_fixperms -a
- dh_makeshlibs -a
- dh_installdeb -a
- dh_shlibdeps -a
- dh_gencontrol -a
- dh_md5sums -a
- dh_builddeb -a
-
-get-orig-source:
- -@@dh_testdir
- @@[ -d ../tarballs/. ]||mkdir -p ../tarballs
- @@echo Downloading $(FILENAME) from $(URL) ...
- @@wget -N -nv -T10 -t3 -O ../tarballs/$(FILENAME) $(URL)
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install patch unpatch
+++ /dev/null
-# See uscan(1) for format
-
-# Compulsory line, this is a version 3 file
-version=3
-
-# <Webpage URL> <string match>
-http://soft-switch.org/downloads/voipcodecs/ voipcodecs-(.*)\.tgz debian svn-upgrade
+++ /dev/null
-##
-## VoIPcodecs - a series of DSP components for telephony
-##
-## Makefile.am -- Process this file with automake to produce Makefile.in
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License version 2, as
-## published by the Free Software Foundation.
-##
-## 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-##
-## $Id: Makefile.am,v 1.7 2007/12/20 15:06:22 steveu Exp $
-
-MAINTAINERCLEANFILES = Makefile.in
-
-EXTRA_DIST = css.css \
- wrapper.xsl
-
-all: doxydocs
-
-doxydocs:
- doxygen libvoipcodecs-doxygen
+++ /dev/null
-body {
- background-image: url("../images/weave.jpg");
- font-family: Verdana, Arial, Helvetica, Sans-serif;
- color: black;
- margin-right: 20px;
- margin-left: 20px;
-}
-
-h1 {
- text-align: center;
-}
-
-h2 {
- font-family: Verdana, Arial, Helvetica, Sans-serif;
- border-color: #c00000;
- color : black;
- margin-top: 0.8em;
- border-style: solid;
- border-width: 0px 0px 3px 0.5em;
- line-height : 130%;
-}
-
-h3 {
- font-family: Verdana, Arial, Helvetica, Sans-serif;
- border-color: #f02020;
- color : black;
- border-width: 0px 0px 2px 0.5em;
- border-style: solid;
- margin-right: 20%;
- line-height : 130%;
-}
-caption {
- font-weight: bold
-}
-a.qindex {}
-a.qindexRef {}
-a.el {
- text-decoration: none;
- font-weight: bold
-}
-a.elRef {
- font-weight: bold
-}
-a.code {
- text-decoration: none;
- font-weight: normal;
- color: #4444ee
-}
-a.codeRef {
- font-weight: normal;
- color: #4444ee
-}
-a:hover {
- text-decoration: none;
- background-color: #f2f2ff
-}
-dl.el {
- margin-left: -1cm
-}
-div.fragment {
- width: 100%;
- border: none;
- background-color: #eeeeee
-}
-div.ah {
- background-color: black;
- font-weight: bold;
- color: #ffffff;
- margin-bottom: 3px;
- margin-top: 3px
-}
-
-td {
- font-family: Verdana, Arial, Helvetica, Sans-serif;
- font-weight: bold;
-}
-
-.navheader {
- font-family: Verdana, Arial, Helvetica, Sans-serif;
- background-color: #B2B2ff;
- font-weight: bold;
-}
-
-.navfooter {
- font-family: Verdana, Arial, Helvetica, Sans-serif;
- background-color: #B2B2ff;
- font-weight: bold;
-}
-
-table.menu {
- background-color: #000066;
- font-weight: bold;
- text-align: center;
- width: 100%;
-}
-
-tr.menu {
- background-color: #ccffff;
- font-weight: bold;
- text-align: center;
-}
-td.menu {
- background-color: #f2e0d0;
- font-weight: bold;
- text-align: center;
-}
-
-td.md {
- background-color: #f2f2ff;
- font-weight: bold;
-}
-td.mdname1 {
- background-color: #f2f2ff;
- font-weight: bold;
- color: #602020;
-}
-td.mdname {
- background-color: #f2f2ff;
- font-weight: bold;
- color: #602020;
- width: 600px;
-}
-div.groupHeader {
- margin-left: 16px;
- margin-top: 12px;
- margin-bottom: 6px;
- font-weight: bold
-}
-div.groupText {
- margin-left: 16px;
- font-style: italic;
- font-size: smaller
-}
-td.indexkey {
- font-family: Verdana, Arial, Helvetica, Sans-serif;
- background-color: #eeeeff;
- font-weight: bold;
- padding-right : 10px;
- padding-top : 2px;
- padding-left : 10px;
- padding-bottom : 2px;
- margin-left : 0px;
- margin-right : 0px;
- margin-top : 2px;
- margin-bottom : 2px
-}
-td.indexvalue {
- font-family: Verdana, Arial, Helvetica, Sans-serif;
- background-color: #eeeeff;
- font-style: italic;
- padding-right : 10px;
- padding-top : 2px;
- padding-left : 10px;
- padding-bottom : 2px;
- margin-left : 0px;
- margin-right : 0px;
- margin-top : 2px;
- margin-bottom : 2px
-}
-span.keyword {
- color: #008000
-}
-span.keywordtype {
- color: #604020
-}
-span.keywordflow {
- color: #e08000
-}
-span.comment {
- color: #800000
-}
-span.preprocessor {
- color: #806020
-}
-span.stringliteral {
- color: #002080
-}
-span.charliteral {
- color: #008080
-}
-em {
- color: #990000;
- background-color: transparent;
-}
-h1,h2,h3,h4,h5,h6,p,center,td,th,ul,dl,div {
- font-family: Geneva, Arial, Helvetica, sans-serif;
-}
-body,td {
- font-size: 90%;
-}
-h1 {
- text-align: center;
- font-size: 160%;
-}
-h2 {
- font-size: 120%;
-}
-h3 {
- font-size: 100%;
-}
-caption {
- font-weight: bold
-}
-div.qindex {
- width: 100%;
- background-color: #eeeeff;
- border: 1px solid #b0b0b0;
- text-align: center;
- margin: 2px;
- padding: 2px;
- line-height: 140%;
-}
-div.nav {
- width: 100%;
- background-color: #eeeeff;
- border: 1px solid #b0b0b0;
- text-align: center;
- margin: 2px;
- padding: 2px;
- line-height: 140%;
-}
-div.navtab {
- background-color: #eeeeff;
- border: 1px solid #b0b0b0;
- text-align: center;
- margin: 2px;
- margin-right: 15px;
- padding: 2px;
-}
-td.navtab {
- font-size: 70%;
-}
-a.qindex {
- text-decoration: none;
- font-weight: bold;
- color: #1a419d;
-}
-a.qindex:visited {
- text-decoration: none;
- font-weight: bold;
- color: #1a419d
-}
-a.qindex:hover {
- text-decoration: none;
- background-color: #ddddff;
-}
-a.qindexHL {
- text-decoration: none;
- font-weight: bold;
- background-color: #6666cc;
- color: #ffffff;
- border: 1px double #9295C2;
-}
-a.qindexHL:hover {
- text-decoration: none;
- background-color: #6666cc;
- color: #ffffff;
-}
-a.qindexHL:visited {
- text-decoration: none;
- background-color: #6666cc;
- color: #ffffff
-}
-a.el {
- text-decoration: none;
- font-weight: bold
-}
-a.elRef {
- font-weight: bold
-}
-a.code:link {
- text-decoration: none;
- font-weight: normal;
- color: #0000FF
-}
-a.code:visited {
- text-decoration: none;
- font-weight: normal;
- color: #0000FF
-}
-a.codeRef:link {
- font-weight: normal;
- color: #0000FF
-}
-a.codeRef:visited {
- font-weight: normal;
- color: #0000FF
-}
-a:hover {
- text-decoration: none;
- background-color: #f2f2ff
-}
-dl.el {
- margin-left: -1cm
-}
-.fragment {
- font-family: Fixed, monospace;
- font-size: 95%;
-}
-pre.fragment {
- border: 1px solid #CCCCCC;
- background-color: #f5f5f5;
- margin-top: 4px;
- margin-bottom: 4px;
- margin-left: 2px;
- margin-right: 8px;
- padding-left: 6px;
- padding-right: 6px;
- padding-top: 4px;
- padding-bottom: 4px;
-}
-div.ah {
- background-color: black;
- font-weight: bold;
- color: #ffffff;
- margin-bottom: 3px;
- margin-top: 3px
-}
-td.md {
- background-color: #F4F4FB;
- font-weight: bold;
-}
-td.mdPrefix {
- background-color: #F4F4FB;
- color: #606060;
- font-size: 80%;
-}
-td.mdname1 {
- background-color: #F4F4FB;
- font-weight: bold;
- color: #602020;
-}
-td.mdname {
- background-color: #F4F4FB;
- font-weight: bold;
- color: #602020;
- width: 600px;
-}
-div.groupHeader {
- margin-left: 16px;
- margin-top: 12px;
- margin-bottom: 6px;
- font-weight: bold;
-}
-div.groupText {
- margin-left: 16px;
- font-style: italic;
- font-size: 90%
-}
-td.indexkey {
- background-color: #eeeeff;
- font-weight: bold;
- padding-right : 10px;
- padding-top : 2px;
- padding-left : 10px;
- padding-bottom : 2px;
- margin-left : 0px;
- margin-right : 0px;
- margin-top : 2px;
- margin-bottom : 2px;
- border: 1px solid #CCCCCC;
-}
-td.indexvalue {
- background-color: #eeeeff;
- font-style: italic;
- padding-right : 10px;
- padding-top : 2px;
- padding-left : 10px;
- padding-bottom : 2px;
- margin-left : 0px;
- margin-right : 0px;
- margin-top : 2px;
- margin-bottom : 2px;
- border: 1px solid #CCCCCC;
-}
-tr.memlist {
- background-color: #f0f0f0;
-}
-p.formulaDsp {
- text-align: center;
-}
-img.formulaDsp {
-}
-img.formulaInl {
- vertical-align: middle;
-}
-span.keyword {
- color: #008000
-}
-span.keywordtype {
- color: #604020
-}
-span.keywordflow {
- color: #e08000
-}
-span.comment {
- color: #800000
-}
-span.preprocessor {
- color: #806020
-}
-span.stringliteral {
- color: #002080
-}
-span.charliteral {
- color: #008080
-}
-.mdTable {
- border: 1px solid #868686;
- background-color: #F4F4FB;
-}
-.mdRow {
- padding: 8px 10px;
-}
-.mdescLeft {
- padding: 0px 8px 4px 8px;
- font-size: 80%;
- font-style: italic;
- background-color: #FAFAFA;
- border-top: 1px none #E0E0E0;
- border-right: 1px none #E0E0E0;
- border-bottom: 1px none #E0E0E0;
- border-left: 1px none #E0E0E0;
- margin: 0px;
-}
-.mdescRight {
- padding: 0px 8px 4px 8px;
- font-size: 80%;
- font-style: italic;
- background-color: #FAFAFA;
- border-top: 1px none #E0E0E0;
- border-right: 1px none #E0E0E0;
- border-bottom: 1px none #E0E0E0;
- border-left: 1px none #E0E0E0;
- margin: 0px;
-}
-.memItemLeft {
- padding: 1px 0px 0px 8px;
- margin: 4px;
- border-top-width: 1px;
- border-right-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
- border-top-color: #E0E0E0;
- border-right-color: #E0E0E0;
- border-bottom-color: #E0E0E0;
- border-left-color: #E0E0E0;
- border-top-style: solid;
- border-right-style: none;
- border-bottom-style: none;
- border-left-style: none;
- background-color: #FAFAFA;
- font-size: 80%;
-}
-.memItemRight {
- padding: 1px 8px 0px 8px;
- margin: 4px;
- border-top-width: 1px;
- border-right-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
- border-top-color: #E0E0E0;
- border-right-color: #E0E0E0;
- border-bottom-color: #E0E0E0;
- border-left-color: #E0E0E0;
- border-top-style: solid;
- border-right-style: none;
- border-bottom-style: none;
- border-left-style: none;
- background-color: #FAFAFA;
- font-size: 80%;
-}
-.memTemplItemLeft {
- padding: 1px 0px 0px 8px;
- margin: 4px;
- border-top-width: 1px;
- border-right-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
- border-top-color: #E0E0E0;
- border-right-color: #E0E0E0;
- border-bottom-color: #E0E0E0;
- border-left-color: #E0E0E0;
- border-top-style: none;
- border-right-style: none;
- border-bottom-style: none;
- border-left-style: none;
- background-color: #FAFAFA;
- font-size: 80%;
-}
-.memTemplItemRight {
- padding: 1px 8px 0px 8px;
- margin: 4px;
- border-top-width: 1px;
- border-right-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
- border-top-color: #E0E0E0;
- border-right-color: #E0E0E0;
- border-bottom-color: #E0E0E0;
- border-left-color: #E0E0E0;
- border-top-style: none;
- border-right-style: none;
- border-bottom-style: none;
- border-left-style: none;
- background-color: #FAFAFA;
- font-size: 80%;
-}
-.memTemplParams {
- padding: 1px 0px 0px 8px;
- margin: 4px;
- border-top-width: 1px;
- border-right-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
- border-top-color: #E0E0E0;
- border-right-color: #E0E0E0;
- border-bottom-color: #E0E0E0;
- border-left-color: #E0E0E0;
- border-top-style: solid;
- border-right-style: none;
- border-bottom-style: none;
- border-left-style: none;
- color: #606060;
- background-color: #FAFAFA;
- font-size: 80%;
-}
-.search {
- color: #003399;
- font-weight: bold;
-}
-form.search {
- margin-bottom: 0px;
- margin-top: 0px;
-}
-input.search {
- font-size: 75%;
- color: #000080;
- font-weight: normal;
- background-color: #eeeeff;
-}
-td.tiny {
- font-size: 75%;
-}
-a {
- color: #252e78;
-}
-a:visited {
- color: #3d2185;
-}
-.dirtab {
- padding: 4px;
- border-collapse: collapse;
- border: 1px solid #b0b0b0;
-}
-th.dirtab {
- background: #eeeeff;
- font-weight: bold;
-}
-hr {
- height: 1px;
- border: none;
- border-top: 1px solid black;
-}
+++ /dev/null
-# Doxyfile 1.4.4
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-# TAG = value [value, ...]
-# For lists items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
-
-PROJECT_NAME = libvoipcodecs
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER = 0.0.1
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY = api
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish,
-# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
-# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian,
-# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
-# Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE = English
-
-# This tag can be used to specify the encoding used in the generated output.
-# The encoding is not always determined by the language that is chosen,
-# but also whether or not the output is meant for Windows or non-Windows users.
-# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
-# forces the Windows encoding (this is the default for the Windows binary),
-# whereas setting the tag to NO uses a Unix-style encoding (the default for
-# all platforms other than Windows).
-
-USE_WINDOWS_ENCODING = YES
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
-STRIP_FROM_PATH =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explicit @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
-DETAILS_AT_TOP = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
-INHERIT_DOCS = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE = 8
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
-# only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
-SUBGROUPING = YES
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
-SORT_BRIEF_DOCS = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES = YES
-
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is YES.
-
-SHOW_DIRECTORIES = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from the
-# version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the progam writes to standard output
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER =
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
-
-WARN_NO_PARAMDOC = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT =
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT = ..
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
-
-FILE_PATTERNS = *.c \
- *.h
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE =
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
-# from the input.
-
-EXCLUDE_SYMLINKS = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output. If FILTER_PATTERNS is specified, this tag will be
-# ignored.
-
-INPUT_FILTER =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
-
-FILTER_PATTERNS =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS = NO
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
-
-USE_HTAGS = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX = 2
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX =
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT =
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
-HTML_HEADER =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET = css.css
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW = YES
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT =
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX = NO
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT =
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT =
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION =
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
-GENERATE_XML = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_PERLMOD = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader. This is useful
-# if you want to understand what is going on. On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_PREDEFINED tags.
-
-EXPAND_ONLY_PREDEF = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-PREDEFINED =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
-
-SKIP_FUNCTION_MACROS = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
-EXTERNAL_GROUPS = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
-# powerful graphs.
-
-CLASS_DIAGRAMS = YES
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
-UML_LOOK = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH = YES
-
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-
-CALL_GRAPH = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS =
-
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
-
-MAX_DOT_GRAPH_WIDTH = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
-
-MAX_DOT_GRAPH_HEIGHT = 1024
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that a graph may be further truncated if the graph's
-# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH
-# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default),
-# the graph is not depth-constrained.
-
-MAX_DOT_GRAPH_DEPTH = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, which results in a white background.
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-
-DOT_TRANSPARENT = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE = NO
+++ /dev/null
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- version='1.0'>
- <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"/>
- <xsl:param name="html.stylesheet">css.css</xsl:param>
-</xsl:stylesheet>
\ No newline at end of file
+++ /dev/null
-##
-## VoIPcodecs - a series of DSP components for telephony
-##
-## Makefile.am -- Process this file with automake to produce Makefile.in
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License version 2, as
-## published by the Free Software Foundation.
-##
-## 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-##
-## $Id: Makefile.am,v 1.1 2008/02/07 10:49:02 steveu Exp $
-
-SUBDIRS =
-
-DIST_SUBDIRS =
-
-all:
-
-clean:
+++ /dev/null
-##
-## SpanDSP - a series of DSP components for telephony
-##
-## Makefile.am -- Process this file with automake to produce Makefile.in
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License version 2, as
-## published by the Free Software Foundation.
-##
-## 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-##
-## $Id: Makefile.am,v 1.5 2007/02/10 11:54:57 steveu Exp $
-
-SUBDIRS =
-
-DIST_SUBDIRS =
-
-all:
-
-clean:
-
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>\r
-<VisualStudioProject\r
- ProjectType="Visual C++"\r
- Version="9.00"\r
- Name="libvoipcodecs"\r
- ProjectGUID="{CF70F278-3364-4395-A2E1-23501C9B8AD2}"\r
- RootNamespace="libvoipcodecs"\r
- Keyword="Win32Proj"\r
- TargetFrameworkVersion="131072"\r
- >\r
- <Platforms>\r
- <Platform\r
- Name="Win32"\r
- />\r
- <Platform\r
- Name="x64"\r
- />\r
- </Platforms>\r
- <ToolFiles>\r
- </ToolFiles>\r
- <Configurations>\r
- <Configuration\r
- Name="Debug|Win32"\r
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
- IntermediateDirectory="$(ConfigurationName)"\r
- ConfigurationType="4"\r
- CharacterSet="1"\r
- >\r
- <Tool\r
- Name="VCPreBuildEventTool"\r
- />\r
- <Tool\r
- Name="VCCustomBuildTool"\r
- />\r
- <Tool\r
- Name="VCXMLDataGeneratorTool"\r
- />\r
- <Tool\r
- Name="VCWebServiceProxyGeneratorTool"\r
- />\r
- <Tool\r
- Name="VCMIDLTool"\r
- />\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- Optimization="0"\r
- AdditionalIncludeDirectories="src; src\voipcodecs; src\msvc"\r
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBvoipcodecs_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_MATH_H"\r
- MinimalRebuild="true"\r
- BasicRuntimeChecks="3"\r
- RuntimeLibrary="3"\r
- UsePrecompiledHeader="0"\r
- WarningLevel="4"\r
- DebugInformationFormat="3"\r
- EnablePREfast="true"\r
- />\r
- <Tool\r
- Name="VCManagedResourceCompilerTool"\r
- />\r
- <Tool\r
- Name="VCResourceCompilerTool"\r
- />\r
- <Tool\r
- Name="VCPreLinkEventTool"\r
- />\r
- <Tool\r
- Name="VCLibrarianTool"\r
- />\r
- <Tool\r
- Name="VCALinkTool"\r
- />\r
- <Tool\r
- Name="VCXDCMakeTool"\r
- />\r
- <Tool\r
- Name="VCBscMakeTool"\r
- />\r
- <Tool\r
- Name="VCFxCopTool"\r
- />\r
- <Tool\r
- Name="VCPostBuildEventTool"\r
- />\r
- </Configuration>\r
- <Configuration\r
- Name="Debug|x64"\r
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"\r
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
- ConfigurationType="4"\r
- CharacterSet="1"\r
- >\r
- <Tool\r
- Name="VCPreBuildEventTool"\r
- />\r
- <Tool\r
- Name="VCCustomBuildTool"\r
- />\r
- <Tool\r
- Name="VCXMLDataGeneratorTool"\r
- />\r
- <Tool\r
- Name="VCWebServiceProxyGeneratorTool"\r
- />\r
- <Tool\r
- Name="VCMIDLTool"\r
- TargetEnvironment="3"\r
- />\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- Optimization="0"\r
- AdditionalIncludeDirectories="src; src\voipcodecs; src\msvc"\r
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBvoipcodecs_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_MATH_H"\r
- MinimalRebuild="true"\r
- BasicRuntimeChecks="3"\r
- RuntimeLibrary="3"\r
- UsePrecompiledHeader="0"\r
- WarningLevel="4"\r
- DebugInformationFormat="3"\r
- EnablePREfast="true"\r
- />\r
- <Tool\r
- Name="VCManagedResourceCompilerTool"\r
- />\r
- <Tool\r
- Name="VCResourceCompilerTool"\r
- />\r
- <Tool\r
- Name="VCPreLinkEventTool"\r
- />\r
- <Tool\r
- Name="VCLibrarianTool"\r
- />\r
- <Tool\r
- Name="VCALinkTool"\r
- />\r
- <Tool\r
- Name="VCXDCMakeTool"\r
- />\r
- <Tool\r
- Name="VCBscMakeTool"\r
- />\r
- <Tool\r
- Name="VCFxCopTool"\r
- />\r
- <Tool\r
- Name="VCPostBuildEventTool"\r
- />\r
- </Configuration>\r
- <Configuration\r
- Name="Release|Win32"\r
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
- IntermediateDirectory="$(ConfigurationName)"\r
- ConfigurationType="4"\r
- CharacterSet="1"\r
- WholeProgramOptimization="1"\r
- >\r
- <Tool\r
- Name="VCPreBuildEventTool"\r
- />\r
- <Tool\r
- Name="VCCustomBuildTool"\r
- />\r
- <Tool\r
- Name="VCXMLDataGeneratorTool"\r
- />\r
- <Tool\r
- Name="VCWebServiceProxyGeneratorTool"\r
- />\r
- <Tool\r
- Name="VCMIDLTool"\r
- />\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories="src; src\voipcodecs; src\msvc"\r
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBvoipcodecs_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_MATH_H"\r
- RuntimeLibrary="2"\r
- UsePrecompiledHeader="0"\r
- WarningLevel="4"\r
- DebugInformationFormat="3"\r
- EnablePREfast="true"\r
- />\r
- <Tool\r
- Name="VCManagedResourceCompilerTool"\r
- />\r
- <Tool\r
- Name="VCResourceCompilerTool"\r
- />\r
- <Tool\r
- Name="VCPreLinkEventTool"\r
- />\r
- <Tool\r
- Name="VCLibrarianTool"\r
- />\r
- <Tool\r
- Name="VCALinkTool"\r
- />\r
- <Tool\r
- Name="VCXDCMakeTool"\r
- />\r
- <Tool\r
- Name="VCBscMakeTool"\r
- />\r
- <Tool\r
- Name="VCFxCopTool"\r
- />\r
- <Tool\r
- Name="VCPostBuildEventTool"\r
- />\r
- </Configuration>\r
- <Configuration\r
- Name="Release|x64"\r
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"\r
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
- ConfigurationType="4"\r
- CharacterSet="1"\r
- WholeProgramOptimization="1"\r
- >\r
- <Tool\r
- Name="VCPreBuildEventTool"\r
- />\r
- <Tool\r
- Name="VCCustomBuildTool"\r
- />\r
- <Tool\r
- Name="VCXMLDataGeneratorTool"\r
- />\r
- <Tool\r
- Name="VCWebServiceProxyGeneratorTool"\r
- />\r
- <Tool\r
- Name="VCMIDLTool"\r
- TargetEnvironment="3"\r
- />\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories="src; src\voipcodecs; src\msvc"\r
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBvoipcodecs_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_MATH_H"\r
- RuntimeLibrary="2"\r
- UsePrecompiledHeader="0"\r
- WarningLevel="4"\r
- DebugInformationFormat="3"\r
- EnablePREfast="true"\r
- />\r
- <Tool\r
- Name="VCManagedResourceCompilerTool"\r
- />\r
- <Tool\r
- Name="VCResourceCompilerTool"\r
- />\r
- <Tool\r
- Name="VCPreLinkEventTool"\r
- />\r
- <Tool\r
- Name="VCLibrarianTool"\r
- />\r
- <Tool\r
- Name="VCALinkTool"\r
- />\r
- <Tool\r
- Name="VCXDCMakeTool"\r
- />\r
- <Tool\r
- Name="VCBscMakeTool"\r
- />\r
- <Tool\r
- Name="VCFxCopTool"\r
- />\r
- <Tool\r
- Name="VCPostBuildEventTool"\r
- />\r
- </Configuration>\r
- </Configurations>\r
- <References>\r
- </References>\r
- <Files>\r
- <Filter\r
- Name="Source Files"\r
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
- >\r
- <File\r
- RelativePath=".\src\bitstream.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\g711.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\g722_decode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\g722_encode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\g726.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_decode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_encode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_long_term.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_lpc.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_preprocess.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_rpe.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_short_term.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\ima_adpcm.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_analyse.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_decode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_encode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_placev.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_voicing.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\oki_adpcm.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\vector_int.c"\r
- >\r
- </File>\r
- </Filter>\r
- <Filter\r
- Name="Header Files"\r
- Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
- >\r
- <File\r
- RelativePath=".\src\voipcodecs\bit_operations.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\bitstream.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\dc_restore.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\float_fudge.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\g711.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\g722.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\g726.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\gsm0610.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_local.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\ima_adpcm.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\lpc10.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_encdecs.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\oki_adpcm.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\telephony.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\vector_int.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\version.h"\r
- >\r
- </File>\r
- </Filter>\r
- </Files>\r
- <Globals>\r
- </Globals>\r
-</VisualStudioProject>\r
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>\r
-<VisualStudioProject\r
- ProjectType="Visual C++"\r
- Version="8.00"\r
- Name="libvoipcodecs"\r
- ProjectGUID="{CF70F278-3364-4395-A2E1-23501C9B8AD2}"\r
- RootNamespace="libvoipcodecs"\r
- Keyword="Win32Proj"\r
- TargetFrameworkVersion="131072"\r
- >\r
- <Platforms>\r
- <Platform\r
- Name="Win32"\r
- />\r
- </Platforms>\r
- <ToolFiles>\r
- </ToolFiles>\r
- <Configurations>\r
- <Configuration\r
- Name="Debug|Win32"\r
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
- IntermediateDirectory="$(ConfigurationName)"\r
- ConfigurationType="4"\r
- CharacterSet="1"\r
- >\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- Optimization="0"\r
- AdditionalIncludeDirectories="src; src\voipcodecs; src\msvc"\r
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBvoipcodecs_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_MATH_H"\r
- MinimalRebuild="true"\r
- BasicRuntimeChecks="3"\r
- RuntimeLibrary="3"\r
- UsePrecompiledHeader="0"\r
- WarningLevel="4"\r
- DebugInformationFormat="4"\r
- />\r
- </Configuration>\r
- <Configuration\r
- Name="Release|Win32"\r
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
- IntermediateDirectory="$(ConfigurationName)"\r
- ConfigurationType="4"\r
- CharacterSet="1"\r
- WholeProgramOptimization="1"\r
- >\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories="src; src\voipcodecs; src\msvc"\r
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBvoipcodecs_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_MATH_H"\r
- RuntimeLibrary="2"\r
- UsePrecompiledHeader="0"\r
- WarningLevel="4"\r
- DebugInformationFormat="3"\r
- />\r
- </Configuration>\r
- </Configurations>\r
- <References>\r
- </References>\r
- <Files>\r
- <Filter\r
- Name="Source Files"\r
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
- >\r
- <File\r
- RelativePath=".\src\bitstream.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\g711.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\g722_decode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\g722_encode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\g726.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_decode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_encode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_long_term.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_lpc.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_preprocess.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_rpe.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_short_term.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\ima_adpcm.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_analyse.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_decode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_encode.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_placev.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_voicing.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\oki_adpcm.c"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\vector_int.c"\r
- >\r
- </File>\r
- </Filter>\r
- <Filter\r
- Name="Header Files"\r
- Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
- >\r
- <File\r
- RelativePath=".\src\voipcodecs\bit_operations.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\bitstream.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\dc_restore.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\float_fudge.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\g711.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\g722.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\g726.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\gsm0610.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\gsm0610_local.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\ima_adpcm.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\lpc10.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\lpc10_encdecs.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\oki_adpcm.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\telephony.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\vector_int.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath=".\src\voipcodecs\version.h"\r
- >\r
- </File>\r
- </Filter>\r
- </Files>\r
- <Globals>\r
- </Globals>\r
-</VisualStudioProject>\r
+++ /dev/null
-##
-## VoIPcodecs - a series of DSP components for telephony
-##
-## Makefile.am -- Process this file with automake to produce Makefile.in
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License version 2, as
-## published by the Free Software Foundation.
-##
-## 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-##
-## $Id: Makefile.am,v 1.1 2008/02/07 10:49:02 steveu Exp $
-
-SUBDIRS =
-
-DIST_SUBDIRS =
-
-EXTRA_DIST = dam9_lpc55.wav \
- dam9.wav \
- short_nb_voice.wav \
- short_wb_voice.wav
-
-all:
-
-clean:
+++ /dev/null
-##
-## VoIPcodecs - a series of DSP components for telephony
-##
-## Makefile.am -- Process this file with automake to produce Makefile.in
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License version 2, as
-## published by the Free Software Foundation.
-##
-## 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-##
-## $Id: Makefile.am,v 1.85 2008/02/06 09:23:26 steveu Exp $
-
-AM_CFLAGS = $(COMP_VENDOR_CFLAGS)
-
-MAINTAINERCLEANFILES = Makefile.in
-
-INCLUDES = -I$(top_builddir)
-
-lib_LTLIBRARIES = libvoipcodecs.la
-
-libvoipcodecs_la_SOURCES = bitstream.c \
- bit_operations.c \
- g711.c \
- g722_encode.c \
- g722_decode.c \
- g726.c \
- gsm0610_decode.c \
- gsm0610_encode.c \
- gsm0610_long_term.c \
- gsm0610_lpc.c \
- gsm0610_preprocess.c \
- gsm0610_rpe.c \
- gsm0610_short_term.c \
- ima_adpcm.c \
- lpc10_analyse.c \
- lpc10_decode.c \
- lpc10_encode.c \
- lpc10_placev.c \
- lpc10_voicing.c \
- oki_adpcm.c \
- vector_int.c
-
-libvoipcodecs_la_LDFLAGS = -version-info @VOIPCODECS_LT_CURRENT@:@VOIPCODECS_LT_REVISION@:@VOIPCODECS_LT_AGE@
-
-nobase_include_HEADERS = voipcodecs/bit_operations.h \
- voipcodecs/bitstream.h \
- voipcodecs/dc_restore.h \
- voipcodecs/g711.h \
- voipcodecs/g722.h \
- voipcodecs/g726.h \
- voipcodecs/gsm0610.h \
- voipcodecs/ima_adpcm.h \
- voipcodecs/lpc10.h \
- voipcodecs/oki_adpcm.h \
- voipcodecs/telephony.h \
- voipcodecs/vector_int.h \
- voipcodecs/version.h
-
-nodist_include_HEADERS = voipcodecs.h
-
-noinst_HEADERS = gsm0610_local.h \
- lpc10_encdecs.h
-
-# We need to run at_dictionary_gen, so it generates the
-# at_interpreter_dictionary.h file
-
-DSP = libvoipcodecs.dsp
-VCPROJ = libvoipcodecs.vcproj
-
-WIN32SOURCES = $(libvoipcodecs_la_SOURCES) msvc/gettimeofday.c
-WIN32HEADERS = $(nobase_include_HEADERS) voipcodecs.h
-
-DSPOUT = | awk '{printf("%s\r\n", $$0)}' >> $(DSP)
-VCPROJOUT = | awk '{printf("%s\r\n", $$0)}' >> $(VCPROJ)
-
-$(DSP): msvc/msvcproj.head msvc/msvcproj.foot Makefile.am
- echo "creating $(DSP)"
- @(cp $(srcdir)/msvc/msvcproj.head $(DSP); \
- echo "# Begin Group \"Source Files\"" $(DSPOUT); \
- for file in $(WIN32SOURCES); do \
- echo "# Begin Source File" $(DSPOUT); \
- echo "" $(DSPOUT); \
- echo "SOURCE=.\\"$$file $(DSPOUT); \
- echo "# End Source File" $(DSPOUT); \
- done; \
- echo "# End Group" $(DSPOUT); \
- echo "# Begin Group \"Header Files\"" $(DSPOUT); \
- for file in $(WIN32HEADERS); do \
- echo "# Begin Source File" $(DSPOUT); \
- echo "" $(DSPOUT); \
- echo "SOURCE=.\\"$$file $(DSPOUT); \
- echo "# End Source File" $(DSPOUT); \
- done; \
- echo "# End Group" $(DSPOUT); \
- cat $(srcdir)/msvc/msvcproj.foot $(DSPOUT) )
-
-$(VCPROJ): msvc/vc8proj.head msvc/vc8proj.foot Makefile.am
- echo "creating $(VCPROJ)"
- @(cp $(srcdir)/msvc/vc8proj.head $(VCPROJ); \
- for file in $(WIN32SOURCES); do \
- echo "<File RelativePath=\""$$file"\"></File>" $(VCPROJOUT); \
- done; \
- echo "</Filter><Filter Name=\"Header Files\">" $(VCPROJOUT); \
- for file in $(WIN32HEADERS); do \
- echo "<File RelativePath=\""$$file"\"></File>" $(VCPROJOUT); \
- done; \
- cat $(srcdir)/msvc/vc8proj.foot $(VCPROJOUT) )
-
-voipcodecs/version.h:
- NOWDATE=`date --utc +"%Y%m%d"` ; \
- NOWTIME=`date --utc +"%H%M%S"` ; \
- sed 's/$$VOIPCODECS_RELEASE_DATE/'$$NOWDATE'/;s/$$VOIPCODECS_RELEASE_TIME/'$$NOWTIME'/' \
- <voipcodecs/version.h.in >voipcodecs/version.h
-
-dist-hook:
- NOWDATE=`date --utc +"%Y%m%d"` ; \
- NOWTIME=`date --utc +"%H%M%S"` ; \
- sed 's/$$VOIPCODECS_RELEASE_DATE/'$$NOWDATE'/;s/$$VOIPCODECS_RELEASE_TIME/'$$NOWTIME'/' \
- <voipcodecs/version.h.in >voipcodecs/version.h
+++ /dev/null
-/*
- * SpanDSP - a series of DSP components for telephony
- *
- * bit_operations.c - Various bit level operations, such as bit reversal
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1,
- * as published by the Free Software Foundation.
- *
- * 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 Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: bit_operations.c,v 1.13 2008/04/17 14:26:56 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <inttypes.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-#include <assert.h>
-#include <memory.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/bit_operations.h"
-
-uint16_t bit_reverse16(uint16_t x)
-{
- x = (x >> 8) | (x << 8);
- x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);
- x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);
- return ((x & 0xAAAA) >> 1) | ((x & 0x5555) << 1);
-}
-/*- End of function --------------------------------------------------------*/
-
-uint32_t bit_reverse32(uint32_t x)
-{
- x = (x >> 16) | (x << 16);
- x = ((x & 0xFF00FF00) >> 8) | ((x & 0x00FF00FF) << 8);
- x = ((x & 0xF0F0F0F0) >> 4) | ((x & 0x0F0F0F0F) << 4);
- x = ((x & 0xCCCCCCCC) >> 2) | ((x & 0x33333333) << 2);
- return ((x & 0xAAAAAAAA) >> 1) | ((x & 0x55555555) << 1);
-}
-/*- End of function --------------------------------------------------------*/
-
-uint32_t bit_reverse_4bytes(uint32_t x)
-{
- x = ((x & 0xF0F0F0F0) >> 4) | ((x & 0x0F0F0F0F) << 4);
- x = ((x & 0xCCCCCCCC) >> 2) | ((x & 0x33333333) << 2);
- return ((x & 0xAAAAAAAA) >> 1) | ((x & 0x55555555) << 1);
-}
-/*- End of function --------------------------------------------------------*/
-
-#if defined(__x86_64__)
-uint64_t bit_reverse_8bytes(uint64_t x)
-{
- x = ((x & 0xF0F0F0F0F0F0F0F0LLU) >> 4) | ((x & 0x0F0F0F0F0F0F0F0FLLU) << 4);
- x = ((x & 0xCCCCCCCCCCCCCCCCLLU) >> 2) | ((x & 0x3333333333333333LLU) << 2);
- return ((x & 0xAAAAAAAAAAAAAAAALLU) >> 1) | ((x & 0x5555555555555555LLU) << 1);
-}
-/*- End of function --------------------------------------------------------*/
-#endif
-
-void bit_reverse(uint8_t to[], const uint8_t from[], int len)
-{
-#if defined(__sparc__) || defined(__sparc)
- int i;
-#else
- const uint8_t *y1;
- uint8_t *z1;
- const uint32_t *y4;
- uint32_t *z4;
- uint32_t x4;
-#if defined(__x86_64__)
- const uint64_t *y8;
- uint64_t *z8;
- uint64_t x8;
-#endif
-#endif
-
-#if defined(__sparc__) || defined(__sparc)
- /* This code work 8 bits at a time, so it works on machines where misalignment
- is either desperately slow or fails */
- for (i = 0; i < len; i++)
- to[i] = bit_reverse8(from[i]);
-#else
- /* This code is this is based on the woolly assumption that the start of the buffers
- is memory aligned. If it isn't, the routine will be less efficient on some machines,
- but might not work at all on others. */
-#if defined(__x86_64__)
- y8 = (const uint64_t *) from;
- z8 = (uint64_t *) to;
- while (len >= sizeof(uint64_t))
- {
- x8 = *y8++;
- x8 = ((x8 & 0xF0F0F0F0F0F0F0F0LLU) >> 4) | ((x8 & 0x0F0F0F0F0F0F0F0FLLU) << 4);
- x8 = ((x8 & 0xCCCCCCCCCCCCCCCCLLU) >> 2) | ((x8 & 0x3333333333333333LLU) << 2);
- *z8++ = ((x8 & 0xAAAAAAAAAAAAAAAALLU) >> 1) | ((x8 & 0x5555555555555555LLU) << 1);
- len -= sizeof(uint64_t);
- }
- y4 = (const uint32_t *) y8;
- z4 = (uint32_t *) z8;
-#else
- y4 = (const uint32_t *) from;
- z4 = (uint32_t *) to;
-#endif
- while (len >= sizeof(uint32_t))
- {
- x4 = *y4++;
- x4 = ((x4 & 0xF0F0F0F0) >> 4) | ((x4 & 0x0F0F0F0F) << 4);
- x4 = ((x4 & 0xCCCCCCCC) >> 2) | ((x4 & 0x33333333) << 2);
- *z4++ = ((x4 & 0xAAAAAAAA) >> 1) | ((x4 & 0x55555555) << 1);
- len -= sizeof(uint32_t);
- }
- y1 = (const uint8_t *) y4;
- z1 = (uint8_t *) z4;
- while (len-- > 0)
- *z1++ = bit_reverse8(*y1++);
-#endif
-}
-/*- End of function --------------------------------------------------------*/
-
-int one_bits32(uint32_t x)
-{
- x = x - ((x >> 1) & 0x55555555);
- /* We now have 16 2-bit counts */
- x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
- /* We now have 8 4-bit counts */
- x = (x + (x >> 4)) & 0x0F0F0F0F;
- /* We now have 4 8-bit counts */
-#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__powerpc__)
- /* If multiply is fast */
- return (x*0x01010101) >> 24;
-#else
- /* If multiply is slow */
- x += (x >> 8);
- x += (x >> 16);
- return (x & 0x0000003F);
-#endif
-}
-/*- End of function --------------------------------------------------------*/
-
-uint32_t make_mask32(uint32_t x)
-{
- x |= (x >> 1);
- x |= (x >> 2);
- x |= (x >> 4);
- x |= (x >> 8);
- x |= (x >> 16);
- return x;
-}
-/*- End of function --------------------------------------------------------*/
-
-uint16_t make_mask16(uint16_t x)
-{
- x |= (x >> 1);
- x |= (x >> 2);
- x |= (x >> 4);
- x |= (x >> 8);
- return x;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * bitstream.c - Bitstream composition and decomposition routines.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the Lesser Lesser GNU General Public License version 2.1.1, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: bitstream.c,v 1.8 2007/08/20 15:22:21 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/bitstream.h"
-
-void bitstream_put(bitstream_state_t *s, uint8_t **c, unsigned int value, int bits)
-{
- value &= ((1 << bits) - 1);
- if (s->residue + bits <= 32)
- {
- s->bitstream |= (value << s->residue);
- s->residue += bits;
- }
- while (s->residue >= 8)
- {
- s->residue -= 8;
- *(*c)++ = (uint8_t) (s->bitstream & 0xFF);
- s->bitstream >>= 8;
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-void bitstream_put2(bitstream_state_t *s, uint8_t **c, unsigned int value, int bits)
-{
- value &= ((1 << bits) - 1);
- if (s->residue + bits <= 32)
- {
- s->bitstream = (s->bitstream << bits) | value;
- s->residue += bits;
- }
- while (s->residue >= 8)
- {
- s->residue -= 8;
- *(*c)++ = (uint8_t) ((s->bitstream >> s->residue) & 0xFF);
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-unsigned int bitstream_get(bitstream_state_t *s, const uint8_t **c, int bits)
-{
- unsigned int x;
-
- while (s->residue < (unsigned int) bits)
- {
- x = (unsigned int) *(*c)++;
- s->bitstream |= (x << s->residue);
- s->residue += 8;
- }
- s->residue -= bits;
- x = s->bitstream & ((1 << bits) - 1);
- s->bitstream >>= bits;
- return x;
-}
-/*- End of function --------------------------------------------------------*/
-
-unsigned int bitstream_get2(bitstream_state_t *s, const uint8_t **c, int bits)
-{
- unsigned int x;
-
- while (s->residue < (unsigned int) bits)
- {
- x = (unsigned int) *(*c)++;
- s->bitstream = (s->bitstream << 8) | x;
- s->residue += 8;
- }
- s->residue -= bits;
- x = (s->bitstream >> s->residue) & ((1 << bits) - 1);
- return x;
-}
-/*- End of function --------------------------------------------------------*/
-
-void bitstream_flush(bitstream_state_t *s, uint8_t **c)
-{
- if (s->residue > 0)
- {
- *(*c)++ = (uint8_t) ((s->bitstream << (8 - s->residue)) & 0xFF);
- s->residue = 0;
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-void bitstream_flush2(bitstream_state_t *s, uint8_t **c)
-{
- if (s->residue > 0)
- {
- *(*c)++ = (uint8_t) ((s->bitstream << (8 - s->residue)) & 0xFF);
- s->residue = 0;
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-bitstream_state_t *bitstream_init(bitstream_state_t *s)
-{
- if (s == NULL)
- return NULL;
- s->bitstream = 0;
- s->residue = 0;
- return s;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * SpanDSP - a series of DSP components for telephony
- *
- * float_fudge.h - A bunch of shims, to use double maths
- * functions on platforms which lack the
- * float versions with an 'f' at the end.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2004 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: float_fudge.h,v 1.2 2007/08/13 11:35:32 steveu Exp $
- */
-
-#if !defined(_FLOAT_FUDGE_H_)
-#define _FLOAT_FUDGE_H_
-
-#if defined(__USE_DOUBLE_MATH__)
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-static __inline__ float sinf(float x)
-{
- return (float) sin((double) x);
-}
-
-static __inline__ float cosf(float x)
-{
- return (float) cos((double) x);
-}
-
-static __inline__ float tanf(float x)
-{
- return (float) tan((double) x);
-}
-
-static __inline__ float asinf(float x)
-{
- return (float) asin((double) x);
-}
-
-static __inline__ float acosf(float x)
-{
- return (float) acos((double) x);
-}
-
-static __inline__ float atanf(float x)
-{
- return (float) atan((double) x);
-}
-
-static __inline__ float atan2f(float y, float x)
-{
- return (float) atan2((double) y, (double) x);
-}
-
-static __inline__ float ceilf(float x)
-{
- return (float) ceil((double) x);
-}
-
-static __inline__ float floorf(float x)
-{
- return (float) floor((double) x);
-}
-
-static __inline__ float expf(float x)
-{
- return (float) expf((double) x);
-}
-
-static __inline__ float logf(float x)
-{
- return (float) logf((double) x);
-}
-
-static __inline__ float log10f(float x)
-{
- return (float) log10((double) x);
-}
-
-static __inline__ float powf(float x, float y)
-{
- return (float) pow((double) x, (double) y);
-}
-
-static __inline__ int rintf(float x)
-{
- return (int) rint((double) x);
-}
-
-static __inline__ long int lrintf(float x)
-{
- return (long int) lrint((double) x);
-}
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-
-#endif
-
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * g711.c - A-law and u-law transcoding routines
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: g711.c,v 1.6 2008/02/09 15:32:56 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdlib.h>
-#include <string.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-#include <assert.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/bit_operations.h"
-#include "voipcodecs/g711.h"
-
-/* Copied from the CCITT G.711 specification */
-static const uint8_t ulaw_to_alaw_table[256] =
-{
- 42, 43, 40, 41, 46, 47, 44, 45, 34, 35, 32, 33, 38, 39, 36, 37,
- 58, 59, 56, 57, 62, 63, 60, 61, 50, 51, 48, 49, 54, 55, 52, 53,
- 10, 11, 8, 9, 14, 15, 12, 13, 2, 3, 0, 1, 6, 7, 4, 26,
- 27, 24, 25, 30, 31, 28, 29, 18, 19, 16, 17, 22, 23, 20, 21, 106,
- 104, 105, 110, 111, 108, 109, 98, 99, 96, 97, 102, 103, 100, 101, 122, 120,
- 126, 127, 124, 125, 114, 115, 112, 113, 118, 119, 116, 117, 75, 73, 79, 77,
- 66, 67, 64, 65, 70, 71, 68, 69, 90, 91, 88, 89, 94, 95, 92, 93,
- 82, 82, 83, 83, 80, 80, 81, 81, 86, 86, 87, 87, 84, 84, 85, 85,
- 170, 171, 168, 169, 174, 175, 172, 173, 162, 163, 160, 161, 166, 167, 164, 165,
- 186, 187, 184, 185, 190, 191, 188, 189, 178, 179, 176, 177, 182, 183, 180, 181,
- 138, 139, 136, 137, 142, 143, 140, 141, 130, 131, 128, 129, 134, 135, 132, 154,
- 155, 152, 153, 158, 159, 156, 157, 146, 147, 144, 145, 150, 151, 148, 149, 234,
- 232, 233, 238, 239, 236, 237, 226, 227, 224, 225, 230, 231, 228, 229, 250, 248,
- 254, 255, 252, 253, 242, 243, 240, 241, 246, 247, 244, 245, 203, 201, 207, 205,
- 194, 195, 192, 193, 198, 199, 196, 197, 218, 219, 216, 217, 222, 223, 220, 221,
- 210, 210, 211, 211, 208, 208, 209, 209, 214, 214, 215, 215, 212, 212, 213, 213
-};
-
-/* These transcoding tables are copied from the CCITT G.711 specification. To achieve
- optimal results, do not change them. */
-
-static const uint8_t alaw_to_ulaw_table[256] =
-{
- 42, 43, 40, 41, 46, 47, 44, 45, 34, 35, 32, 33, 38, 39, 36, 37,
- 57, 58, 55, 56, 61, 62, 59, 60, 49, 50, 47, 48, 53, 54, 51, 52,
- 10, 11, 8, 9, 14, 15, 12, 13, 2, 3, 0, 1, 6, 7, 4, 5,
- 26, 27, 24, 25, 30, 31, 28, 29, 18, 19, 16, 17, 22, 23, 20, 21,
- 98, 99, 96, 97, 102, 103, 100, 101, 93, 93, 92, 92, 95, 95, 94, 94,
- 116, 118, 112, 114, 124, 126, 120, 122, 106, 107, 104, 105, 110, 111, 108, 109,
- 72, 73, 70, 71, 76, 77, 74, 75, 64, 65, 63, 63, 68, 69, 66, 67,
- 86, 87, 84, 85, 90, 91, 88, 89, 79, 79, 78, 78, 82, 83, 80, 81,
- 170, 171, 168, 169, 174, 175, 172, 173, 162, 163, 160, 161, 166, 167, 164, 165,
- 185, 186, 183, 184, 189, 190, 187, 188, 177, 178, 175, 176, 181, 182, 179, 180,
- 138, 139, 136, 137, 142, 143, 140, 141, 130, 131, 128, 129, 134, 135, 132, 133,
- 154, 155, 152, 153, 158, 159, 156, 157, 146, 147, 144, 145, 150, 151, 148, 149,
- 226, 227, 224, 225, 230, 231, 228, 229, 221, 221, 220, 220, 223, 223, 222, 222,
- 244, 246, 240, 242, 252, 254, 248, 250, 234, 235, 232, 233, 238, 239, 236, 237,
- 200, 201, 198, 199, 204, 205, 202, 203, 192, 193, 191, 191, 196, 197, 194, 195,
- 214, 215, 212, 213, 218, 219, 216, 217, 207, 207, 206, 206, 210, 211, 208, 209
-};
-
-uint8_t alaw_to_ulaw(uint8_t alaw)
-{
- return alaw_to_ulaw_table[alaw];
-}
-/*- End of function --------------------------------------------------------*/
-
-uint8_t ulaw_to_alaw(uint8_t ulaw)
-{
- return ulaw_to_alaw_table[ulaw];
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * g722_decode.c - The ITU G.722 codec, decode part.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2005 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Based in part on a single channel G.722 codec which is:
- *
- * Copyright (c) CMU 1993
- * Computer Science, Speech Group
- * Chengxiang Lu and Alex Hauptmann
- *
- * $Id: g722_decode.c,v 1.20 2008/02/09 15:32:56 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <memory.h>
-#include <stdlib.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/g722.h"
-
-static void block4(g722_decode_state_t *s, int band, int d);
-
-static void block4(g722_decode_state_t *s, int band, int d)
-{
- int wd1;
- int wd2;
- int wd3;
- int i;
-
- /* Block 4, RECONS */
- s->band[band].d[0] = d;
- s->band[band].r[0] = saturate(s->band[band].s + d);
-
- /* Block 4, PARREC */
- s->band[band].p[0] = saturate(s->band[band].sz + d);
-
- /* Block 4, UPPOL2 */
- for (i = 0; i < 3; i++)
- s->band[band].sg[i] = s->band[band].p[i] >> 15;
- wd1 = saturate(s->band[band].a[1] << 2);
-
- wd2 = (s->band[band].sg[0] == s->band[band].sg[1]) ? -wd1 : wd1;
- if (wd2 > 32767)
- wd2 = 32767;
- wd3 = (s->band[band].sg[0] == s->band[band].sg[2]) ? 128 : -128;
- wd3 += (wd2 >> 7);
- wd3 += (s->band[band].a[2]*32512) >> 15;
- if (wd3 > 12288)
- wd3 = 12288;
- else if (wd3 < -12288)
- wd3 = -12288;
- s->band[band].ap[2] = wd3;
-
- /* Block 4, UPPOL1 */
- s->band[band].sg[0] = s->band[band].p[0] >> 15;
- s->band[band].sg[1] = s->band[band].p[1] >> 15;
- wd1 = (s->band[band].sg[0] == s->band[band].sg[1]) ? 192 : -192;
- wd2 = (s->band[band].a[1]*32640) >> 15;
-
- s->band[band].ap[1] = saturate(wd1 + wd2);
- wd3 = saturate(15360 - s->band[band].ap[2]);
- if (s->band[band].ap[1] > wd3)
- s->band[band].ap[1] = wd3;
- else if (s->band[band].ap[1] < -wd3)
- s->band[band].ap[1] = -wd3;
-
- /* Block 4, UPZERO */
- wd1 = (d == 0) ? 0 : 128;
- s->band[band].sg[0] = d >> 15;
- for (i = 1; i < 7; i++)
- {
- s->band[band].sg[i] = s->band[band].d[i] >> 15;
- wd2 = (s->band[band].sg[i] == s->band[band].sg[0]) ? wd1 : -wd1;
- wd3 = (s->band[band].b[i]*32640) >> 15;
- s->band[band].bp[i] = saturate(wd2 + wd3);
- }
-
- /* Block 4, DELAYA */
- for (i = 6; i > 0; i--)
- {
- s->band[band].d[i] = s->band[band].d[i - 1];
- s->band[band].b[i] = s->band[band].bp[i];
- }
-
- for (i = 2; i > 0; i--)
- {
- s->band[band].r[i] = s->band[band].r[i - 1];
- s->band[band].p[i] = s->band[band].p[i - 1];
- s->band[band].a[i] = s->band[band].ap[i];
- }
-
- /* Block 4, FILTEP */
- wd1 = saturate(s->band[band].r[1] + s->band[band].r[1]);
- wd1 = (s->band[band].a[1]*wd1) >> 15;
- wd2 = saturate(s->band[band].r[2] + s->band[band].r[2]);
- wd2 = (s->band[band].a[2]*wd2) >> 15;
- s->band[band].sp = saturate(wd1 + wd2);
-
- /* Block 4, FILTEZ */
- s->band[band].sz = 0;
- for (i = 6; i > 0; i--)
- {
- wd1 = saturate(s->band[band].d[i] + s->band[band].d[i]);
- s->band[band].sz += (s->band[band].b[i]*wd1) >> 15;
- }
- s->band[band].sz = saturate(s->band[band].sz);
-
- /* Block 4, PREDIC */
- s->band[band].s = saturate(s->band[band].sp + s->band[band].sz);
-}
-/*- End of function --------------------------------------------------------*/
-
-g722_decode_state_t *g722_decode_init(g722_decode_state_t *s, int rate, int options)
-{
- if (s == NULL)
- {
- if ((s = (g722_decode_state_t *) malloc(sizeof(*s))) == NULL)
- return NULL;
- }
- memset(s, 0, sizeof(*s));
- if (rate == 48000)
- s->bits_per_sample = 6;
- else if (rate == 56000)
- s->bits_per_sample = 7;
- else
- s->bits_per_sample = 8;
- if ((options & G722_SAMPLE_RATE_8000))
- s->eight_k = TRUE;
- if ((options & G722_PACKED) && s->bits_per_sample != 8)
- s->packed = TRUE;
- else
- s->packed = FALSE;
- s->band[0].det = 32;
- s->band[1].det = 8;
- return s;
-}
-/*- End of function --------------------------------------------------------*/
-
-int g722_decode_release(g722_decode_state_t *s)
-{
- free(s);
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-int g722_decode(g722_decode_state_t *s, int16_t amp[], const uint8_t g722_data[], int len)
-{
- static const int wl[8] =
- {
- -60, -30, 58, 172, 334, 538, 1198, 3042
- };
- static const int rl42[16] =
- {
- 0, 7, 6, 5, 4, 3, 2, 1, 7, 6, 5, 4, 3, 2, 1, 0
- };
- static const int ilb[32] =
- {
- 2048, 2093, 2139, 2186, 2233, 2282, 2332,
- 2383, 2435, 2489, 2543, 2599, 2656, 2714,
- 2774, 2834, 2896, 2960, 3025, 3091, 3158,
- 3228, 3298, 3371, 3444, 3520, 3597, 3676,
- 3756, 3838, 3922, 4008
- };
- static const int wh[3] =
- {
- 0, -214, 798
- };
- static const int rh2[4] =
- {
- 2, 1, 2, 1
- };
- static const int qm2[4] =
- {
- -7408, -1616, 7408, 1616
- };
- static const int qm4[16] =
- {
- 0, -20456, -12896, -8968,
- -6288, -4240, -2584, -1200,
- 20456, 12896, 8968, 6288,
- 4240, 2584, 1200, 0
- };
- static const int qm5[32] =
- {
- -280, -280, -23352, -17560,
- -14120, -11664, -9752, -8184,
- -6864, -5712, -4696, -3784,
- -2960, -2208, -1520, -880,
- 23352, 17560, 14120, 11664,
- 9752, 8184, 6864, 5712,
- 4696, 3784, 2960, 2208,
- 1520, 880, 280, -280
- };
- static const int qm6[64] =
- {
- -136, -136, -136, -136,
- -24808, -21904, -19008, -16704,
- -14984, -13512, -12280, -11192,
- -10232, -9360, -8576, -7856,
- -7192, -6576, -6000, -5456,
- -4944, -4464, -4008, -3576,
- -3168, -2776, -2400, -2032,
- -1688, -1360, -1040, -728,
- 24808, 21904, 19008, 16704,
- 14984, 13512, 12280, 11192,
- 10232, 9360, 8576, 7856,
- 7192, 6576, 6000, 5456,
- 4944, 4464, 4008, 3576,
- 3168, 2776, 2400, 2032,
- 1688, 1360, 1040, 728,
- 432, 136, -432, -136
- };
- static const int qmf_coeffs[12] =
- {
- 3, -11, 12, 32, -210, 951, 3876, -805, 362, -156, 53, -11,
- };
- int dlowt;
- int rlow;
- int ihigh;
- int dhigh;
- int rhigh;
- int xout1;
- int xout2;
- int wd1;
- int wd2;
- int wd3;
- int code;
- int outlen;
- int i;
- int j;
-
- outlen = 0;
- rhigh = 0;
- for (j = 0; j < len; )
- {
- if (s->packed)
- {
- /* Unpack the code bits */
- if (s->in_bits < s->bits_per_sample)
- {
- s->in_buffer |= (g722_data[j++] << s->in_bits);
- s->in_bits += 8;
- }
- code = s->in_buffer & ((1 << s->bits_per_sample) - 1);
- s->in_buffer >>= s->bits_per_sample;
- s->in_bits -= s->bits_per_sample;
- }
- else
- {
- code = g722_data[j++];
- }
-
- switch (s->bits_per_sample)
- {
- default:
- case 8:
- wd1 = code & 0x3F;
- ihigh = (code >> 6) & 0x03;
- wd2 = qm6[wd1];
- wd1 >>= 2;
- break;
- case 7:
- wd1 = code & 0x1F;
- ihigh = (code >> 5) & 0x03;
- wd2 = qm5[wd1];
- wd1 >>= 1;
- break;
- case 6:
- wd1 = code & 0x0F;
- ihigh = (code >> 4) & 0x03;
- wd2 = qm4[wd1];
- break;
- }
- /* Block 5L, LOW BAND INVQBL */
- wd2 = (s->band[0].det*wd2) >> 15;
- /* Block 5L, RECONS */
- rlow = s->band[0].s + wd2;
- /* Block 6L, LIMIT */
- if (rlow > 16383)
- rlow = 16383;
- else if (rlow < -16384)
- rlow = -16384;
-
- /* Block 2L, INVQAL */
- wd2 = qm4[wd1];
- dlowt = (s->band[0].det*wd2) >> 15;
-
- /* Block 3L, LOGSCL */
- wd2 = rl42[wd1];
- wd1 = (s->band[0].nb*127) >> 7;
- wd1 += wl[wd2];
- if (wd1 < 0)
- wd1 = 0;
- else if (wd1 > 18432)
- wd1 = 18432;
- s->band[0].nb = wd1;
-
- /* Block 3L, SCALEL */
- wd1 = (s->band[0].nb >> 6) & 31;
- wd2 = 8 - (s->band[0].nb >> 11);
- wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2);
- s->band[0].det = wd3 << 2;
-
- block4(s, 0, dlowt);
-
- if (!s->eight_k)
- {
- /* Block 2H, INVQAH */
- wd2 = qm2[ihigh];
- dhigh = (s->band[1].det*wd2) >> 15;
- /* Block 5H, RECONS */
- rhigh = dhigh + s->band[1].s;
- /* Block 6H, LIMIT */
- if (rhigh > 16383)
- rhigh = 16383;
- else if (rhigh < -16384)
- rhigh = -16384;
-
- /* Block 2H, INVQAH */
- wd2 = rh2[ihigh];
- wd1 = (s->band[1].nb*127) >> 7;
- wd1 += wh[wd2];
- if (wd1 < 0)
- wd1 = 0;
- else if (wd1 > 22528)
- wd1 = 22528;
- s->band[1].nb = wd1;
-
- /* Block 3H, SCALEH */
- wd1 = (s->band[1].nb >> 6) & 31;
- wd2 = 10 - (s->band[1].nb >> 11);
- wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2);
- s->band[1].det = wd3 << 2;
-
- block4(s, 1, dhigh);
- }
-
- if (s->itu_test_mode)
- {
- amp[outlen++] = (int16_t) (rlow << 1);
- amp[outlen++] = (int16_t) (rhigh << 1);
- }
- else
- {
- if (s->eight_k)
- {
- amp[outlen++] = (int16_t) rlow;
- }
- else
- {
- /* Apply the receive QMF */
- memcpy(s->x, &s->x[2], 22*sizeof(s->x[0]));
- s->x[22] = rlow + rhigh;
- s->x[23] = rlow - rhigh;
-
- xout1 = 0;
- xout2 = 0;
- for (i = 0; i < 12; i++)
- {
- xout2 += s->x[2*i]*qmf_coeffs[i];
- xout1 += s->x[2*i + 1]*qmf_coeffs[11 - i];
- }
- amp[outlen++] = (int16_t) (xout1 >> 12);
- amp[outlen++] = (int16_t) (xout2 >> 12);
- }
- }
- }
- return outlen;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * g722_encode.c - The ITU G.722 codec, encode part.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2005 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Based on a single channel 64kbps only G.722 codec which is:
- *
- ***** Copyright (c) CMU 1993 *****
- * Computer Science, Speech Group
- * Chengxiang Lu and Alex Hauptmann
- *
- * $Id: g722_encode.c,v 1.18 2008/02/09 15:32:56 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <memory.h>
-#include <stdlib.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/g722.h"
-
-static void block4(g722_encode_state_t *s, int band, int d)
-{
- int wd1;
- int wd2;
- int wd3;
- int i;
-
- /* Block 4, RECONS */
- s->band[band].d[0] = d;
- s->band[band].r[0] = saturate(s->band[band].s + d);
-
- /* Block 4, PARREC */
- s->band[band].p[0] = saturate(s->band[band].sz + d);
-
- /* Block 4, UPPOL2 */
- for (i = 0; i < 3; i++)
- s->band[band].sg[i] = s->band[band].p[i] >> 15;
- wd1 = saturate(s->band[band].a[1] << 2);
-
- wd2 = (s->band[band].sg[0] == s->band[band].sg[1]) ? -wd1 : wd1;
- if (wd2 > 32767)
- wd2 = 32767;
- wd3 = (wd2 >> 7) + ((s->band[band].sg[0] == s->band[band].sg[2]) ? 128 : -128);
- wd3 += (s->band[band].a[2]*32512) >> 15;
- if (wd3 > 12288)
- wd3 = 12288;
- else if (wd3 < -12288)
- wd3 = -12288;
- s->band[band].ap[2] = wd3;
-
- /* Block 4, UPPOL1 */
- s->band[band].sg[0] = s->band[band].p[0] >> 15;
- s->band[band].sg[1] = s->band[band].p[1] >> 15;
- wd1 = (s->band[band].sg[0] == s->band[band].sg[1]) ? 192 : -192;
- wd2 = (s->band[band].a[1]*32640) >> 15;
-
- s->band[band].ap[1] = saturate(wd1 + wd2);
- wd3 = saturate(15360 - s->band[band].ap[2]);
- if (s->band[band].ap[1] > wd3)
- s->band[band].ap[1] = wd3;
- else if (s->band[band].ap[1] < -wd3)
- s->band[band].ap[1] = -wd3;
-
- /* Block 4, UPZERO */
- wd1 = (d == 0) ? 0 : 128;
- s->band[band].sg[0] = d >> 15;
- for (i = 1; i < 7; i++)
- {
- s->band[band].sg[i] = s->band[band].d[i] >> 15;
- wd2 = (s->band[band].sg[i] == s->band[band].sg[0]) ? wd1 : -wd1;
- wd3 = (s->band[band].b[i]*32640) >> 15;
- s->band[band].bp[i] = saturate(wd2 + wd3);
- }
-
- /* Block 4, DELAYA */
- for (i = 6; i > 0; i--)
- {
- s->band[band].d[i] = s->band[band].d[i - 1];
- s->band[band].b[i] = s->band[band].bp[i];
- }
-
- for (i = 2; i > 0; i--)
- {
- s->band[band].r[i] = s->band[band].r[i - 1];
- s->band[band].p[i] = s->band[band].p[i - 1];
- s->band[band].a[i] = s->band[band].ap[i];
- }
-
- /* Block 4, FILTEP */
- wd1 = saturate(s->band[band].r[1] + s->band[band].r[1]);
- wd1 = (s->band[band].a[1]*wd1) >> 15;
- wd2 = saturate(s->band[band].r[2] + s->band[band].r[2]);
- wd2 = (s->band[band].a[2]*wd2) >> 15;
- s->band[band].sp = saturate(wd1 + wd2);
-
- /* Block 4, FILTEZ */
- s->band[band].sz = 0;
- for (i = 6; i > 0; i--)
- {
- wd1 = saturate(s->band[band].d[i] + s->band[band].d[i]);
- s->band[band].sz += (s->band[band].b[i]*wd1) >> 15;
- }
- s->band[band].sz = saturate(s->band[band].sz);
-
- /* Block 4, PREDIC */
- s->band[band].s = saturate(s->band[band].sp + s->band[band].sz);
-}
-/*- End of function --------------------------------------------------------*/
-
-g722_encode_state_t *g722_encode_init(g722_encode_state_t *s, int rate, int options)
-{
- if (s == NULL)
- {
- if ((s = (g722_encode_state_t *) malloc(sizeof(*s))) == NULL)
- return NULL;
- }
- memset(s, 0, sizeof(*s));
- if (rate == 48000)
- s->bits_per_sample = 6;
- else if (rate == 56000)
- s->bits_per_sample = 7;
- else
- s->bits_per_sample = 8;
- if ((options & G722_SAMPLE_RATE_8000))
- s->eight_k = TRUE;
- if ((options & G722_PACKED) && s->bits_per_sample != 8)
- s->packed = TRUE;
- else
- s->packed = FALSE;
- s->band[0].det = 32;
- s->band[1].det = 8;
- return s;
-}
-/*- End of function --------------------------------------------------------*/
-
-int g722_encode_release(g722_encode_state_t *s)
-{
- free(s);
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-int g722_encode(g722_encode_state_t *s, uint8_t g722_data[], const int16_t amp[], int len)
-{
- static const int q6[32] =
- {
- 0, 35, 72, 110, 150, 190, 233, 276,
- 323, 370, 422, 473, 530, 587, 650, 714,
- 786, 858, 940, 1023, 1121, 1219, 1339, 1458,
- 1612, 1765, 1980, 2195, 2557, 2919, 0, 0
- };
- static const int iln[32] =
- {
- 0, 63, 62, 31, 30, 29, 28, 27,
- 26, 25, 24, 23, 22, 21, 20, 19,
- 18, 17, 16, 15, 14, 13, 12, 11,
- 10, 9, 8, 7, 6, 5, 4, 0
- };
- static const int ilp[32] =
- {
- 0, 61, 60, 59, 58, 57, 56, 55,
- 54, 53, 52, 51, 50, 49, 48, 47,
- 46, 45, 44, 43, 42, 41, 40, 39,
- 38, 37, 36, 35, 34, 33, 32, 0
- };
- static const int wl[8] =
- {
- -60, -30, 58, 172, 334, 538, 1198, 3042
- };
- static const int rl42[16] =
- {
- 0, 7, 6, 5, 4, 3, 2, 1, 7, 6, 5, 4, 3, 2, 1, 0
- };
- static const int ilb[32] =
- {
- 2048, 2093, 2139, 2186, 2233, 2282, 2332,
- 2383, 2435, 2489, 2543, 2599, 2656, 2714,
- 2774, 2834, 2896, 2960, 3025, 3091, 3158,
- 3228, 3298, 3371, 3444, 3520, 3597, 3676,
- 3756, 3838, 3922, 4008
- };
- static const int qm4[16] =
- {
- 0, -20456, -12896, -8968,
- -6288, -4240, -2584, -1200,
- 20456, 12896, 8968, 6288,
- 4240, 2584, 1200, 0
- };
- static const int qm2[4] =
- {
- -7408, -1616, 7408, 1616
- };
- static const int qmf_coeffs[12] =
- {
- 3, -11, 12, 32, -210, 951, 3876, -805, 362, -156, 53, -11,
- };
- static const int ihn[3] = {0, 1, 0};
- static const int ihp[3] = {0, 3, 2};
- static const int wh[3] = {0, -214, 798};
- static const int rh2[4] = {2, 1, 2, 1};
-
- int dlow;
- int dhigh;
- int el;
- int wd;
- int wd1;
- int ril;
- int wd2;
- int il4;
- int ih2;
- int wd3;
- int eh;
- int mih;
- int i;
- int j;
- /* Low and high band PCM from the QMF */
- int xlow;
- int xhigh;
- int g722_bytes;
- /* Even and odd tap accumulators */
- int sumeven;
- int sumodd;
- int ihigh;
- int ilow;
- int code;
-
- g722_bytes = 0;
- xhigh = 0;
- for (j = 0; j < len; )
- {
- if (s->itu_test_mode)
- {
- xlow =
- xhigh = amp[j++] >> 1;
- }
- else
- {
- if (s->eight_k)
- {
- xlow = amp[j++];
- }
- else
- {
- /* Apply the transmit QMF */
- /* Shuffle the buffer down */
- memcpy(s->x, &s->x[2], 22*sizeof(s->x[0]));
- s->x[22] = amp[j++];
- s->x[23] = amp[j++];
-
- /* Discard every other QMF output */
- sumeven = 0;
- sumodd = 0;
- for (i = 0; i < 12; i++)
- {
- sumodd += s->x[2*i]*qmf_coeffs[i];
- sumeven += s->x[2*i + 1]*qmf_coeffs[11 - i];
- }
- xlow = (sumeven + sumodd) >> 13;
- xhigh = (sumeven - sumodd) >> 13;
- }
- }
- /* Block 1L, SUBTRA */
- el = saturate(xlow - s->band[0].s);
-
- /* Block 1L, QUANTL */
- wd = (el >= 0) ? el : -(el + 1);
-
- for (i = 1; i < 30; i++)
- {
- wd1 = (q6[i]*s->band[0].det) >> 12;
- if (wd < wd1)
- break;
- }
- ilow = (el < 0) ? iln[i] : ilp[i];
-
- /* Block 2L, INVQAL */
- ril = ilow >> 2;
- wd2 = qm4[ril];
- dlow = (s->band[0].det*wd2) >> 15;
-
- /* Block 3L, LOGSCL */
- il4 = rl42[ril];
- wd = (s->band[0].nb*127) >> 7;
- s->band[0].nb = wd + wl[il4];
- if (s->band[0].nb < 0)
- s->band[0].nb = 0;
- else if (s->band[0].nb > 18432)
- s->band[0].nb = 18432;
-
- /* Block 3L, SCALEL */
- wd1 = (s->band[0].nb >> 6) & 31;
- wd2 = 8 - (s->band[0].nb >> 11);
- wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2);
- s->band[0].det = wd3 << 2;
-
- block4(s, 0, dlow);
-
- if (s->eight_k)
- {
- /* Just leave the high bits as zero */
- code = (0xC0 | ilow) >> (8 - s->bits_per_sample);
- }
- else
- {
- /* Block 1H, SUBTRA */
- eh = saturate(xhigh - s->band[1].s);
-
- /* Block 1H, QUANTH */
- wd = (eh >= 0) ? eh : -(eh + 1);
- wd1 = (564*s->band[1].det) >> 12;
- mih = (wd >= wd1) ? 2 : 1;
- ihigh = (eh < 0) ? ihn[mih] : ihp[mih];
-
- /* Block 2H, INVQAH */
- wd2 = qm2[ihigh];
- dhigh = (s->band[1].det*wd2) >> 15;
-
- /* Block 3H, LOGSCH */
- ih2 = rh2[ihigh];
- wd = (s->band[1].nb*127) >> 7;
- s->band[1].nb = wd + wh[ih2];
- if (s->band[1].nb < 0)
- s->band[1].nb = 0;
- else if (s->band[1].nb > 22528)
- s->band[1].nb = 22528;
-
- /* Block 3H, SCALEH */
- wd1 = (s->band[1].nb >> 6) & 31;
- wd2 = 10 - (s->band[1].nb >> 11);
- wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2);
- s->band[1].det = wd3 << 2;
-
- block4(s, 1, dhigh);
- code = ((ihigh << 6) | ilow) >> (8 - s->bits_per_sample);
- }
-
- if (s->packed)
- {
- /* Pack the code bits */
- s->out_buffer |= (code << s->out_bits);
- s->out_bits += s->bits_per_sample;
- if (s->out_bits >= 8)
- {
- g722_data[g722_bytes++] = (uint8_t) (s->out_buffer & 0xFF);
- s->out_bits -= 8;
- s->out_buffer >>= 8;
- }
- }
- else
- {
- g722_data[g722_bytes++] = (uint8_t) code;
- }
- }
- return g722_bytes;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * g726.c - The ITU G.726 codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Based on G.721/G.723 code which is:
- *
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use. Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- *
- * $Id: g726.c,v 1.18 2008/02/09 15:32:56 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <memory.h>
-#include <stdlib.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/bitstream.h"
-#include "voipcodecs/bit_operations.h"
-#include "voipcodecs/g711.h"
-#include "voipcodecs/g726.h"
-
-/*
- * Maps G.726_16 code word to reconstructed scale factor normalized log
- * magnitude values.
- */
-static const int g726_16_dqlntab[4] =
-{
- 116, 365, 365, 116
-};
-
-/* Maps G.726_16 code word to log of scale factor multiplier. */
-static const int g726_16_witab[4] =
-{
- -704, 14048, 14048, -704
-};
-
-/*
- * Maps G.726_16 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-static const int g726_16_fitab[4] =
-{
- 0x000, 0xE00, 0xE00, 0x000
-};
-
-static const int qtab_726_16[1] =
-{
- 261
-};
-
-/*
- * Maps G.726_24 code word to reconstructed scale factor normalized log
- * magnitude values.
- */
-static const int g726_24_dqlntab[8] =
-{
- -2048, 135, 273, 373, 373, 273, 135, -2048
-};
-
-/* Maps G.726_24 code word to log of scale factor multiplier. */
-static const int g726_24_witab[8] =
-{
- -128, 960, 4384, 18624, 18624, 4384, 960, -128
-};
-
-/*
- * Maps G.726_24 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-static const int g726_24_fitab[8] =
-{
- 0x000, 0x200, 0x400, 0xE00, 0xE00, 0x400, 0x200, 0x000
-};
-
-static const int qtab_726_24[3] =
-{
- 8, 218, 331
-};
-
-/*
- * Maps G.726_32 code word to reconstructed scale factor normalized log
- * magnitude values.
- */
-static const int g726_32_dqlntab[16] =
-{
- -2048, 4, 135, 213, 273, 323, 373, 425,
- 425, 373, 323, 273, 213, 135, 4, -2048
-};
-
-/* Maps G.726_32 code word to log of scale factor multiplier. */
-static const int g726_32_witab[16] =
-{
- -384, 576, 1312, 2048, 3584, 6336, 11360, 35904,
- 35904, 11360, 6336, 3584, 2048, 1312, 576, -384
-};
-
-/*
- * Maps G.726_32 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-static const int g726_32_fitab[16] =
-{
- 0x000, 0x000, 0x000, 0x200, 0x200, 0x200, 0x600, 0xE00,
- 0xE00, 0x600, 0x200, 0x200, 0x200, 0x000, 0x000, 0x000
-};
-
-static const int qtab_726_32[7] =
-{
- -124, 80, 178, 246, 300, 349, 400
-};
-
-/*
- * Maps G.726_40 code word to ructeconstructed scale factor normalized log
- * magnitude values.
- */
-static const int g726_40_dqlntab[32] =
-{
- -2048, -66, 28, 104, 169, 224, 274, 318,
- 358, 395, 429, 459, 488, 514, 539, 566,
- 566, 539, 514, 488, 459, 429, 395, 358,
- 318, 274, 224, 169, 104, 28, -66, -2048
-};
-
-/* Maps G.726_40 code word to log of scale factor multiplier. */
-static const int g726_40_witab[32] =
-{
- 448, 448, 768, 1248, 1280, 1312, 1856, 3200,
- 4512, 5728, 7008, 8960, 11456, 14080, 16928, 22272,
- 22272, 16928, 14080, 11456, 8960, 7008, 5728, 4512,
- 3200, 1856, 1312, 1280, 1248, 768, 448, 448
-};
-
-/*
- * Maps G.726_40 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-static const int g726_40_fitab[32] =
-{
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x200, 0x200,
- 0x200, 0x200, 0x400, 0x600, 0x800, 0xA00, 0xC00, 0xC00,
- 0xC00, 0xC00, 0xA00, 0x800, 0x600, 0x400, 0x200, 0x200,
- 0x200, 0x200, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000
-};
-
-static const int qtab_726_40[15] =
-{
- -122, -16, 68, 139, 198, 250, 298, 339,
- 378, 413, 445, 475, 502, 528, 553
-};
-
-/*
- * returns the integer product of the 14-bit integer "an" and
- * "floating point" representation (4-bit exponent, 6-bit mantessa) "srn".
- */
-static int16_t fmult(int16_t an, int16_t srn)
-{
- int16_t anmag;
- int16_t anexp;
- int16_t anmant;
- int16_t wanexp;
- int16_t wanmant;
- int16_t retval;
-
- anmag = (an > 0) ? an : ((-an) & 0x1FFF);
- anexp = (int16_t) (top_bit(anmag) - 5);
- anmant = (anmag == 0) ? 32 : (anexp >= 0) ? (anmag >> anexp) : (anmag << -anexp);
- wanexp = anexp + ((srn >> 6) & 0xF) - 13;
-
- wanmant = (anmant*(srn & 0x3F) + 0x30) >> 4;
- retval = (wanexp >= 0) ? ((wanmant << wanexp) & 0x7FFF) : (wanmant >> -wanexp);
-
- return (((an ^ srn) < 0) ? -retval : retval);
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Compute the estimated signal from the 6-zero predictor.
- */
-static __inline__ int16_t predictor_zero(g726_state_t *s)
-{
- int i;
- int sezi;
-
- sezi = fmult(s->b[0] >> 2, s->dq[0]);
- /* ACCUM */
- for (i = 1; i < 6; i++)
- sezi += fmult(s->b[i] >> 2, s->dq[i]);
- return (int16_t) sezi;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Computes the estimated signal from the 2-pole predictor.
- */
-static __inline__ int16_t predictor_pole(g726_state_t *s)
-{
- return (fmult(s->a[1] >> 2, s->sr[1]) + fmult(s->a[0] >> 2, s->sr[0]));
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Computes the quantization step size of the adaptive quantizer.
- */
-static int step_size(g726_state_t *s)
-{
- int y;
- int dif;
- int al;
-
- if (s->ap >= 256)
- return s->yu;
- y = s->yl >> 6;
- dif = s->yu - y;
- al = s->ap >> 2;
- if (dif > 0)
- y += (dif*al) >> 6;
- else if (dif < 0)
- y += (dif*al + 0x3F) >> 6;
- return y;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Given a raw sample, 'd', of the difference signal and a
- * quantization step size scale factor, 'y', this routine returns the
- * ADPCM codeword to which that sample gets quantized. The step
- * size scale factor division operation is done in the log base 2 domain
- * as a subtraction.
- */
-static int16_t quantize(int d, /* Raw difference signal sample */
- int y, /* Step size multiplier */
- const int table[], /* quantization table */
- int quantizer_states) /* table size of int16_t integers */
-{
- int16_t dqm; /* Magnitude of 'd' */
- int16_t exp; /* Integer part of base 2 log of 'd' */
- int16_t mant; /* Fractional part of base 2 log */
- int16_t dl; /* Log of magnitude of 'd' */
- int16_t dln; /* Step size scale factor normalized log */
- int i;
- int size;
-
- /*
- * LOG
- *
- * Compute base 2 log of 'd', and store in 'dl'.
- */
- dqm = (int16_t) abs(d);
- exp = (int16_t) (top_bit(dqm >> 1) + 1);
- /* Fractional portion. */
- mant = ((dqm << 7) >> exp) & 0x7F;
- dl = (exp << 7) + mant;
-
- /*
- * SUBTB
- *
- * "Divide" by step size multiplier.
- */
- dln = dl - (int16_t) (y >> 2);
-
- /*
- * QUAN
- *
- * Search for codword i for 'dln'.
- */
- size = (quantizer_states - 1) >> 1;
- for (i = 0; i < size; i++)
- {
- if (dln < table[i])
- break;
- }
- if (d < 0)
- {
- /* Take 1's complement of i */
- return (int16_t) ((size << 1) + 1 - i);
- }
- if (i == 0 && (quantizer_states & 1))
- {
- /* Zero is only valid if there are an even number of states, so
- take the 1's complement if the code is zero. */
- return (int16_t) quantizer_states;
- }
- return (int16_t) i;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Returns reconstructed difference signal 'dq' obtained from
- * codeword 'i' and quantization step size scale factor 'y'.
- * Multiplication is performed in log base 2 domain as addition.
- */
-static int16_t reconstruct(int sign, /* 0 for non-negative value */
- int dqln, /* G.72x codeword */
- int y) /* Step size multiplier */
-{
- int16_t dql; /* Log of 'dq' magnitude */
- int16_t dex; /* Integer part of log */
- int16_t dqt;
- int16_t dq; /* Reconstructed difference signal sample */
-
- dql = (int16_t) (dqln + (y >> 2)); /* ADDA */
-
- if (dql < 0)
- return ((sign) ? -0x8000 : 0);
- /* ANTILOG */
- dex = (dql >> 7) & 15;
- dqt = 128 + (dql & 127);
- dq = (dqt << 7) >> (14 - dex);
- return ((sign) ? (dq - 0x8000) : dq);
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * updates the state variables for each output code
- */
-static void update(g726_state_t *s,
- int y, /* quantizer step size */
- int wi, /* scale factor multiplier */
- int fi, /* for long/short term energies */
- int dq, /* quantized prediction difference */
- int sr, /* reconstructed signal */
- int dqsez) /* difference from 2-pole predictor */
-{
- int16_t mag;
- int16_t exp;
- int16_t a2p; /* LIMC */
- int16_t a1ul; /* UPA1 */
- int16_t pks1; /* UPA2 */
- int16_t fa1;
- int16_t ylint;
- int16_t dqthr;
- int16_t ylfrac;
- int16_t thr;
- int16_t pk0;
- int i;
- int tr;
-
- a2p = 0;
- /* Needed in updating predictor poles */
- pk0 = (dqsez < 0) ? 1 : 0;
-
- /* prediction difference magnitude */
- mag = (int16_t) (dq & 0x7FFF);
- /* TRANS */
- ylint = (int16_t) (s->yl >> 15); /* exponent part of yl */
- ylfrac = (int16_t) ((s->yl >> 10) & 0x1F); /* fractional part of yl */
- /* Limit threshold to 31 << 10 */
- thr = (ylint > 9) ? (31 << 10) : ((32 + ylfrac) << ylint);
- dqthr = (thr + (thr >> 1)) >> 1; /* dqthr = 0.75 * thr */
- if (!s->td) /* signal supposed voice */
- tr = FALSE;
- else if (mag <= dqthr) /* supposed data, but small mag */
- tr = FALSE; /* treated as voice */
- else /* signal is data (modem) */
- tr = TRUE;
-
- /*
- * Quantizer scale factor adaptation.
- */
-
- /* FUNCTW & FILTD & DELAY */
- /* update non-steady state step size multiplier */
- s->yu = (int16_t) (y + ((wi - y) >> 5));
-
- /* LIMB */
- if (s->yu < 544)
- s->yu = 544;
- else if (s->yu > 5120)
- s->yu = 5120;
-
- /* FILTE & DELAY */
- /* update steady state step size multiplier */
- s->yl += s->yu + ((-s->yl) >> 6);
-
- /*
- * Adaptive predictor coefficients.
- */
- if (tr)
- {
- /* Reset the a's and b's for a modem signal */
- s->a[0] = 0;
- s->a[1] = 0;
- s->b[0] = 0;
- s->b[1] = 0;
- s->b[2] = 0;
- s->b[3] = 0;
- s->b[4] = 0;
- s->b[5] = 0;
- }
- else
- {
- /* Update the a's and b's */
- /* UPA2 */
- pks1 = pk0 ^ s->pk[0];
-
- /* Update predictor pole a[1] */
- a2p = s->a[1] - (s->a[1] >> 7);
- if (dqsez != 0)
- {
- fa1 = (pks1) ? s->a[0] : -s->a[0];
- /* a2p = function of fa1 */
- if (fa1 < -8191)
- a2p -= 0x100;
- else if (fa1 > 8191)
- a2p += 0xFF;
- else
- a2p += fa1 >> 5;
-
- if (pk0 ^ s->pk[1])
- {
- /* LIMC */
- if (a2p <= -12160)
- a2p = -12288;
- else if (a2p >= 12416)
- a2p = 12288;
- else
- a2p -= 0x80;
- }
- else if (a2p <= -12416)
- a2p = -12288;
- else if (a2p >= 12160)
- a2p = 12288;
- else
- a2p += 0x80;
- }
-
- /* TRIGB & DELAY */
- s->a[1] = a2p;
-
- /* UPA1 */
- /* Update predictor pole a[0] */
- s->a[0] -= s->a[0] >> 8;
- if (dqsez != 0)
- {
- if (pks1 == 0)
- s->a[0] += 192;
- else
- s->a[0] -= 192;
- }
- /* LIMD */
- a1ul = 15360 - a2p;
- if (s->a[0] < -a1ul)
- s->a[0] = -a1ul;
- else if (s->a[0] > a1ul)
- s->a[0] = a1ul;
-
- /* UPB : update predictor zeros b[6] */
- for (i = 0; i < 6; i++)
- {
- /* Distinguish 40Kbps mode from the others */
- s->b[i] -= s->b[i] >> ((s->bits_per_sample == 5) ? 9 : 8);
- if (dq & 0x7FFF)
- {
- /* XOR */
- if ((dq ^ s->dq[i]) >= 0)
- s->b[i] += 128;
- else
- s->b[i] -= 128;
- }
- }
- }
-
- for (i = 5; i > 0; i--)
- s->dq[i] = s->dq[i - 1];
- /* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */
- if (mag == 0)
- {
- s->dq[0] = (dq >= 0) ? 0x20 : 0xFC20;
- }
- else
- {
- exp = (int16_t) (top_bit(mag) + 1);
- s->dq[0] = (dq >= 0)
- ? ((exp << 6) + ((mag << 6) >> exp))
- : ((exp << 6) + ((mag << 6) >> exp) - 0x400);
- }
-
- s->sr[1] = s->sr[0];
- /* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */
- if (sr == 0)
- {
- s->sr[0] = 0x20;
- }
- else if (sr > 0)
- {
- exp = (int16_t) (top_bit(sr) + 1);
- s->sr[0] = (int16_t) ((exp << 6) + ((sr << 6) >> exp));
- }
- else if (sr > -32768)
- {
- mag = (int16_t) -sr;
- exp = (int16_t) (top_bit(mag) + 1);
- s->sr[0] = (exp << 6) + ((mag << 6) >> exp) - 0x400;
- }
- else
- {
- s->sr[0] = (uint16_t) 0xFC20;
- }
-
- /* DELAY A */
- s->pk[1] = s->pk[0];
- s->pk[0] = pk0;
-
- /* TONE */
- if (tr) /* this sample has been treated as data */
- s->td = FALSE; /* next one will be treated as voice */
- else if (a2p < -11776) /* small sample-to-sample correlation */
- s->td = TRUE; /* signal may be data */
- else /* signal is voice */
- s->td = FALSE;
-
- /* Adaptation speed control. */
- /* FILTA */
- s->dms += ((int16_t) fi - s->dms) >> 5;
- /* FILTB */
- s->dml += (((int16_t) (fi << 2) - s->dml) >> 7);
-
- if (tr)
- s->ap = 256;
- else if (y < 1536) /* SUBTC */
- s->ap += (0x200 - s->ap) >> 4;
- else if (s->td)
- s->ap += (0x200 - s->ap) >> 4;
- else if (abs((s->dms << 2) - s->dml) >= (s->dml >> 3))
- s->ap += (0x200 - s->ap) >> 4;
- else
- s->ap += (-s->ap) >> 4;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int16_t tandem_adjust_alaw(int16_t sr, /* decoder output linear PCM sample */
- int se, /* predictor estimate sample */
- int y, /* quantizer step size */
- int i, /* decoder input code */
- int sign,
- const int qtab[],
- int quantizer_states)
-{
- uint8_t sp; /* A-law compressed 8-bit code */
- int16_t dx; /* prediction error */
- int id; /* quantized prediction error */
- int sd; /* adjusted A-law decoded sample value */
-
- if (sr <= -32768)
- sr = -1;
- sp = linear_to_alaw((sr >> 1) << 3);
- /* 16-bit prediction error */
- dx = (int16_t) ((alaw_to_linear(sp) >> 2) - se);
- id = quantize(dx, y, qtab, quantizer_states);
- if (id == i)
- {
- /* No adjustment of sp required */
- return (int16_t) sp;
- }
- /* sp adjustment needed */
- /* ADPCM codes : 8, 9, ... F, 0, 1, ... , 6, 7 */
- /* 2's complement to biased unsigned */
- if ((id ^ sign) > (i ^ sign))
- {
- /* sp adjusted to next lower value */
- if (sp & 0x80)
- sd = (sp == 0xD5) ? 0x55 : (((sp ^ 0x55) - 1) ^ 0x55);
- else
- sd = (sp == 0x2A) ? 0x2A : (((sp ^ 0x55) + 1) ^ 0x55);
- }
- else
- {
- /* sp adjusted to next higher value */
- if (sp & 0x80)
- sd = (sp == 0xAA) ? 0xAA : (((sp ^ 0x55) + 1) ^ 0x55);
- else
- sd = (sp == 0x55) ? 0xD5 : (((sp ^ 0x55) - 1) ^ 0x55);
- }
- return (int16_t) sd;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int16_t tandem_adjust_ulaw(int16_t sr, /* decoder output linear PCM sample */
- int se, /* predictor estimate sample */
- int y, /* quantizer step size */
- int i, /* decoder input code */
- int sign,
- const int qtab[],
- int quantizer_states)
-{
- uint8_t sp; /* u-law compressed 8-bit code */
- int16_t dx; /* prediction error */
- int id; /* quantized prediction error */
- int sd; /* adjusted u-law decoded sample value */
-
- if (sr <= -32768)
- sr = 0;
- sp = linear_to_ulaw(sr << 2);
- /* 16-bit prediction error */
- dx = (int16_t) ((ulaw_to_linear(sp) >> 2) - se);
- id = quantize(dx, y, qtab, quantizer_states);
- if (id == i)
- {
- /* No adjustment of sp required. */
- return (int16_t) sp;
- }
- /* ADPCM codes : 8, 9, ... F, 0, 1, ... , 6, 7 */
- /* 2's complement to biased unsigned */
- if ((id ^ sign) > (i ^ sign))
- {
- /* sp adjusted to next lower value */
- if (sp & 0x80)
- sd = (sp == 0xFF) ? 0x7E : (sp + 1);
- else
- sd = (sp == 0x00) ? 0x00 : (sp - 1);
- }
- else
- {
- /* sp adjusted to next higher value */
- if (sp & 0x80)
- sd = (sp == 0x80) ? 0x80 : (sp - 1);
- else
- sd = (sp == 0x7F) ? 0xFE : (sp + 1);
- }
- return (int16_t) sd;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Encodes a linear PCM, A-law or u-law input sample and returns its 3-bit code.
- */
-static uint8_t g726_16_encoder(g726_state_t *s, int16_t amp)
-{
- int y;
- int16_t sei;
- int16_t sezi;
- int16_t se;
- int16_t d;
- int16_t sr;
- int16_t dqsez;
- int16_t dq;
- int16_t i;
-
- sezi = predictor_zero(s);
- sei = sezi + predictor_pole(s);
- se = sei >> 1;
- d = amp - se;
-
- /* Quantize prediction difference */
- y = step_size(s);
- i = quantize(d, y, qtab_726_16, 4);
- dq = reconstruct(i & 2, g726_16_dqlntab[i], y);
-
- /* Reconstruct the signal */
- sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq);
-
- /* Pole prediction difference */
- dqsez = sr + (sezi >> 1) - se;
-
- update(s, y, g726_16_witab[i], g726_16_fitab[i], dq, sr, dqsez);
- return (uint8_t) i;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Decodes a 2-bit CCITT G.726_16 ADPCM code and returns
- * the resulting 16-bit linear PCM, A-law or u-law sample value.
- */
-static int16_t g726_16_decoder(g726_state_t *s, uint8_t code)
-{
- int16_t sezi;
- int16_t sei;
- int16_t se;
- int16_t sr;
- int16_t dq;
- int16_t dqsez;
- int y;
-
- /* Mask to get proper bits */
- code &= 0x03;
- sezi = predictor_zero(s);
- sei = sezi + predictor_pole(s);
-
- y = step_size(s);
- dq = reconstruct(code & 2, g726_16_dqlntab[code], y);
-
- /* Reconstruct the signal */
- se = sei >> 1;
- sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq);
-
- /* Pole prediction difference */
- dqsez = sr + (sezi >> 1) - se;
-
- update(s, y, g726_16_witab[code], g726_16_fitab[code], dq, sr, dqsez);
-
- switch (s->ext_coding)
- {
- case G726_ENCODING_ALAW:
- return tandem_adjust_alaw(sr, se, y, code, 2, qtab_726_16, 4);
- case G726_ENCODING_ULAW:
- return tandem_adjust_ulaw(sr, se, y, code, 2, qtab_726_16, 4);
- }
- return (sr << 2);
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Encodes a linear PCM, A-law or u-law input sample and returns its 3-bit code.
- */
-static uint8_t g726_24_encoder(g726_state_t *s, int16_t amp)
-{
- int16_t sei;
- int16_t sezi;
- int16_t se;
- int16_t d;
- int16_t sr;
- int16_t dqsez;
- int16_t dq;
- int16_t i;
- int y;
-
- sezi = predictor_zero(s);
- sei = sezi + predictor_pole(s);
- se = sei >> 1;
- d = amp - se;
-
- /* Quantize prediction difference */
- y = step_size(s);
- i = quantize(d, y, qtab_726_24, 7);
- dq = reconstruct(i & 4, g726_24_dqlntab[i], y);
-
- /* Reconstruct the signal */
- sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq);
-
- /* Pole prediction difference */
- dqsez = sr + (sezi >> 1) - se;
-
- update(s, y, g726_24_witab[i], g726_24_fitab[i], dq, sr, dqsez);
- return (uint8_t) i;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Decodes a 3-bit CCITT G.726_24 ADPCM code and returns
- * the resulting 16-bit linear PCM, A-law or u-law sample value.
- */
-static int16_t g726_24_decoder(g726_state_t *s, uint8_t code)
-{
- int16_t sezi;
- int16_t sei;
- int16_t se;
- int16_t sr;
- int16_t dq;
- int16_t dqsez;
- int y;
-
- /* Mask to get proper bits */
- code &= 0x07;
- sezi = predictor_zero(s);
- sei = sezi + predictor_pole(s);
-
- y = step_size(s);
- dq = reconstruct(code & 4, g726_24_dqlntab[code], y);
-
- /* Reconstruct the signal */
- se = sei >> 1;
- sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq);
-
- /* Pole prediction difference */
- dqsez = sr + (sezi >> 1) - se;
-
- update(s, y, g726_24_witab[code], g726_24_fitab[code], dq, sr, dqsez);
-
- switch (s->ext_coding)
- {
- case G726_ENCODING_ALAW:
- return tandem_adjust_alaw(sr, se, y, code, 4, qtab_726_24, 7);
- case G726_ENCODING_ULAW:
- return tandem_adjust_ulaw(sr, se, y, code, 4, qtab_726_24, 7);
- }
- return (sr << 2);
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Encodes a linear input sample and returns its 4-bit code.
- */
-static uint8_t g726_32_encoder(g726_state_t *s, int16_t amp)
-{
- int16_t sei;
- int16_t sezi;
- int16_t se;
- int16_t d;
- int16_t sr;
- int16_t dqsez;
- int16_t dq;
- int16_t i;
- int y;
-
- sezi = predictor_zero(s);
- sei = sezi + predictor_pole(s);
- se = sei >> 1;
- d = amp - se;
-
- /* Quantize the prediction difference */
- y = step_size(s);
- i = quantize(d, y, qtab_726_32, 15);
- dq = reconstruct(i & 8, g726_32_dqlntab[i], y);
-
- /* Reconstruct the signal */
- sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq);
-
- /* Pole prediction difference */
- dqsez = sr + (sezi >> 1) - se;
-
- update(s, y, g726_32_witab[i], g726_32_fitab[i], dq, sr, dqsez);
- return (uint8_t) i;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Decodes a 4-bit CCITT G.726_32 ADPCM code and returns
- * the resulting 16-bit linear PCM, A-law or u-law sample value.
- */
-static int16_t g726_32_decoder(g726_state_t *s, uint8_t code)
-{
- int16_t sezi;
- int16_t sei;
- int16_t se;
- int16_t sr;
- int16_t dq;
- int16_t dqsez;
- int y;
-
- /* Mask to get proper bits */
- code &= 0x0F;
- sezi = predictor_zero(s);
- sei = sezi + predictor_pole(s);
-
- y = step_size(s);
- dq = reconstruct(code & 8, g726_32_dqlntab[code], y);
-
- /* Reconstruct the signal */
- se = sei >> 1;
- sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq);
-
- /* Pole prediction difference */
- dqsez = sr + (sezi >> 1) - se;
-
- update(s, y, g726_32_witab[code], g726_32_fitab[code], dq, sr, dqsez);
-
- switch (s->ext_coding)
- {
- case G726_ENCODING_ALAW:
- return tandem_adjust_alaw(sr, se, y, code, 8, qtab_726_32, 15);
- case G726_ENCODING_ULAW:
- return tandem_adjust_ulaw(sr, se, y, code, 8, qtab_726_32, 15);
- }
- return (sr << 2);
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Encodes a 16-bit linear PCM, A-law or u-law input sample and retuens
- * the resulting 5-bit CCITT G.726 40Kbps code.
- */
-static uint8_t g726_40_encoder(g726_state_t *s, int16_t amp)
-{
- int16_t sei;
- int16_t sezi;
- int16_t se;
- int16_t d;
- int16_t sr;
- int16_t dqsez;
- int16_t dq;
- int16_t i;
- int y;
-
- sezi = predictor_zero(s);
- sei = sezi + predictor_pole(s);
- se = sei >> 1;
- d = amp - se;
-
- /* Quantize prediction difference */
- y = step_size(s);
- i = quantize(d, y, qtab_726_40, 31);
- dq = reconstruct(i & 0x10, g726_40_dqlntab[i], y);
-
- /* Reconstruct the signal */
- sr = (dq < 0) ? (se - (dq & 0x7FFF)) : (se + dq);
-
- /* Pole prediction difference */
- dqsez = sr + (sezi >> 1) - se;
-
- update(s, y, g726_40_witab[i], g726_40_fitab[i], dq, sr, dqsez);
- return (uint8_t) i;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * Decodes a 5-bit CCITT G.726 40Kbps code and returns
- * the resulting 16-bit linear PCM, A-law or u-law sample value.
- */
-static int16_t g726_40_decoder(g726_state_t *s, uint8_t code)
-{
- int16_t sezi;
- int16_t sei;
- int16_t se;
- int16_t sr;
- int16_t dq;
- int16_t dqsez;
- int y;
-
- /* Mask to get proper bits */
- code &= 0x1F;
- sezi = predictor_zero(s);
- sei = sezi + predictor_pole(s);
-
- y = step_size(s);
- dq = reconstruct(code & 0x10, g726_40_dqlntab[code], y);
-
- /* Reconstruct the signal */
- se = sei >> 1;
- sr = (dq < 0) ? (se - (dq & 0x7FFF)) : (se + dq);
-
- /* Pole prediction difference */
- dqsez = sr + (sezi >> 1) - se;
-
- update(s, y, g726_40_witab[code], g726_40_fitab[code], dq, sr, dqsez);
-
- switch (s->ext_coding)
- {
- case G726_ENCODING_ALAW:
- return tandem_adjust_alaw(sr, se, y, code, 0x10, qtab_726_40, 31);
- case G726_ENCODING_ULAW:
- return tandem_adjust_ulaw(sr, se, y, code, 0x10, qtab_726_40, 31);
- }
- return (sr << 2);
-}
-/*- End of function --------------------------------------------------------*/
-
-g726_state_t *g726_init(g726_state_t *s, int bit_rate, int ext_coding, int packing)
-{
- int i;
-
- if (bit_rate != 16000 && bit_rate != 24000 && bit_rate != 32000 && bit_rate != 40000)
- return NULL;
- if (s == NULL)
- {
- if ((s = (g726_state_t *) malloc(sizeof(*s))) == NULL)
- return NULL;
- }
- s->yl = 34816;
- s->yu = 544;
- s->dms = 0;
- s->dml = 0;
- s->ap = 0;
- s->rate = bit_rate;
- s->ext_coding = ext_coding;
- s->packing = packing;
- for (i = 0; i < 2; i++)
- {
- s->a[i] = 0;
- s->pk[i] = 0;
- s->sr[i] = 32;
- }
- for (i = 0; i < 6; i++)
- {
- s->b[i] = 0;
- s->dq[i] = 32;
- }
- s->td = FALSE;
- switch (bit_rate)
- {
- case 16000:
- s->enc_func = g726_16_encoder;
- s->dec_func = g726_16_decoder;
- s->bits_per_sample = 2;
- break;
- case 24000:
- s->enc_func = g726_24_encoder;
- s->dec_func = g726_24_decoder;
- s->bits_per_sample = 3;
- break;
- case 32000:
- default:
- s->enc_func = g726_32_encoder;
- s->dec_func = g726_32_decoder;
- s->bits_per_sample = 4;
- break;
- case 40000:
- s->enc_func = g726_40_encoder;
- s->dec_func = g726_40_decoder;
- s->bits_per_sample = 5;
- break;
- }
- bitstream_init(&s->bs);
- return s;
-}
-/*- End of function --------------------------------------------------------*/
-
-int g726_release(g726_state_t *s)
-{
- free(s);
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-int g726_decode(g726_state_t *s,
- int16_t amp[],
- const uint8_t g726_data[],
- int g726_bytes)
-{
- int i;
- int samples;
- uint8_t code;
- int sl;
-
- for (samples = i = 0; ; )
- {
- if (s->packing != G726_PACKING_NONE)
- {
- /* Unpack the code bits */
- if (s->packing != G726_PACKING_LEFT)
- {
- if (s->bs.residue < s->bits_per_sample)
- {
- if (i >= g726_bytes)
- break;
- s->bs.bitstream |= (g726_data[i++] << s->bs.residue);
- s->bs.residue += 8;
- }
- code = (uint8_t) (s->bs.bitstream & ((1 << s->bits_per_sample) - 1));
- s->bs.bitstream >>= s->bits_per_sample;
- }
- else
- {
- if (s->bs.residue < s->bits_per_sample)
- {
- if (i >= g726_bytes)
- break;
- s->bs.bitstream = (s->bs.bitstream << 8) | g726_data[i++];
- s->bs.residue += 8;
- }
- code = (uint8_t) ((s->bs.bitstream >> (s->bs.residue - s->bits_per_sample)) & ((1 << s->bits_per_sample) - 1));
- }
- s->bs.residue -= s->bits_per_sample;
- }
- else
- {
- if (i >= g726_bytes)
- break;
- code = g726_data[i++];
- }
- sl = s->dec_func(s, code);
- if (s->ext_coding != G726_ENCODING_LINEAR)
- ((uint8_t *) amp)[samples++] = (uint8_t) sl;
- else
- amp[samples++] = (int16_t) sl;
- }
- return samples;
-}
-/*- End of function --------------------------------------------------------*/
-
-int g726_encode(g726_state_t *s,
- uint8_t g726_data[],
- const int16_t amp[],
- int len)
-{
- int i;
- int g726_bytes;
- int16_t sl;
- uint8_t code;
-
- for (g726_bytes = i = 0; i < len; i++)
- {
- /* Linearize the input sample to 14-bit PCM */
- switch (s->ext_coding)
- {
- case G726_ENCODING_ALAW:
- sl = alaw_to_linear(((const uint8_t *) amp)[i]) >> 2;
- break;
- case G726_ENCODING_ULAW:
- sl = ulaw_to_linear(((const uint8_t *) amp)[i]) >> 2;
- break;
- default:
- sl = amp[i] >> 2;
- break;
- }
- code = s->enc_func(s, sl);
- if (s->packing != G726_PACKING_NONE)
- {
- /* Pack the code bits */
- if (s->packing != G726_PACKING_LEFT)
- {
- s->bs.bitstream |= (code << s->bs.residue);
- s->bs.residue += s->bits_per_sample;
- if (s->bs.residue >= 8)
- {
- g726_data[g726_bytes++] = (uint8_t) (s->bs.bitstream & 0xFF);
- s->bs.bitstream >>= 8;
- s->bs.residue -= 8;
- }
- }
- else
- {
- s->bs.bitstream = (s->bs.bitstream << s->bits_per_sample) | code;
- s->bs.residue += s->bits_per_sample;
- if (s->bs.residue >= 8)
- {
- g726_data[g726_bytes++] = (uint8_t) ((s->bs.bitstream >> (s->bs.residue - 8)) & 0xFF);
- s->bs.residue -= 8;
- }
- }
- }
- else
- {
- g726_data[g726_bytes++] = (uint8_t) code;
- }
- }
- return g726_bytes;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * gsm0610_decode.c - GSM 06.10 full rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the widely used GSM 06.10 code available from
- * http://kbs.cs.tu-berlin.de/~jutta/toast.html
- *
- * $Id: gsm0610_decode.c,v 1.16 2008/02/12 12:27:48 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <assert.h>
-#include <inttypes.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-#include <stdlib.h>
-#include <memory.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/bitstream.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/gsm0610.h"
-
-#include "gsm0610_local.h"
-
-/* 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER */
-
-static void postprocessing(gsm0610_state_t *s, int16_t amp[])
-{
- int k;
- int16_t msr;
- int16_t tmp;
-
- msr = s->msr;
- for (k = 0; k < GSM0610_FRAME_LEN; k++)
- {
- tmp = gsm_mult_r(msr, 28180);
- /* De-emphasis */
- msr = gsm_add(amp[k], tmp);
- /* Truncation & upscaling */
- amp[k] = (int16_t) (gsm_add(msr, msr) & 0xFFF8);
- }
- /*endfor*/
- s->msr = msr;
-}
-/*- End of function --------------------------------------------------------*/
-
-static void decode_a_frame(gsm0610_state_t *s,
- int16_t amp[GSM0610_FRAME_LEN],
- gsm0610_frame_t *f)
-{
- int j;
- int k;
- int16_t erp[40];
- int16_t wt[GSM0610_FRAME_LEN];
- int16_t *drp;
-
- drp = s->dp0 + 120;
- for (j = 0; j < 4; j++)
- {
- gsm0610_rpe_decoding(s, f->xmaxc[j], f->Mc[j], f->xMc[j], erp);
- gsm0610_long_term_synthesis_filtering(s, f->Nc[j], f->bc[j], erp, drp);
- for (k = 0; k < 40; k++)
- wt[j*40 + k] = drp[k];
- /*endfor*/
- }
- /*endfor*/
-
- gsm0610_short_term_synthesis_filter(s, f->LARc, wt, amp);
- postprocessing(s, amp);
-}
-/*- End of function --------------------------------------------------------*/
-
-int gsm0610_unpack_none(gsm0610_frame_t *s, const uint8_t c[])
-{
- int i;
- int j;
- int k;
-
- i = 0;
- for (j = 0; j < 8; j++)
- s->LARc[j] = c[i++];
- for (j = 0; j < 4; j++)
- {
- s->Nc[j] = c[i++];
- s->bc[j] = c[i++];
- s->Mc[j] = c[i++];
- s->xmaxc[j] = c[i++];
- for (k = 0; k < 13; k++)
- s->xMc[j][k] = c[i++];
- }
- return 76;
-}
-/*- End of function --------------------------------------------------------*/
-
-int gsm0610_unpack_wav49(gsm0610_frame_t *s, const uint8_t c[])
-{
- uint16_t sr;
- int i;
-
- sr = *c++;
- s->LARc[0] = sr & 0x3F;
- sr >>= 6;
- sr |= (uint16_t) *c++ << 2;
- s->LARc[1] = sr & 0x3F;
- sr >>= 6;
- sr |= (uint16_t) *c++ << 4;
- s->LARc[2] = sr & 0x1F;
- sr >>= 5;
- s->LARc[3] = sr & 0x1F;
- sr >>= 5;
- sr |= (uint16_t) *c++ << 2;
- s->LARc[4] = sr & 0xF;
- sr >>= 4;
- s->LARc[5] = sr & 0xF;
- sr >>= 4;
- sr |= (uint16_t) *c++ << 2;
- s->LARc[6] = sr & 0x7;
- sr >>= 3;
- s->LARc[7] = sr & 0x7;
- sr >>= 3;
-
- for (i = 0; i < 4; i++)
- {
- sr |= (uint16_t) *c++ << 4;
- s->Nc[i] = sr & 0x7F;
- sr >>= 7;
- s->bc[i] = sr & 0x3;
- sr >>= 2;
- s->Mc[i] = sr & 0x3;
- sr >>= 2;
- sr |= (uint16_t) *c++ << 1;
- s->xmaxc[i] = sr & 0x3F;
- sr >>= 6;
- s->xMc[i][0] = sr & 0x7;
- sr >>= 3;
- sr = *c++;
- s->xMc[i][1] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][2] = sr & 0x7;
- sr >>= 3;
- sr |= (uint16_t) *c++ << 2;
- s->xMc[i][3] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][4] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][5] = sr & 0x7;
- sr >>= 3;
- sr |= (uint16_t) *c++ << 1;
- s->xMc[i][6] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][7] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][8] = sr & 0x7;
- sr >>= 3;
- sr = *c++;
- s->xMc[i][9] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][10] = sr & 0x7;
- sr >>= 3;
- sr |= (uint16_t) *c++ << 2;
- s->xMc[i][11] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][12] = sr & 0x7;
- sr >>= 3;
- }
-
- s++;
- sr |= (uint16_t) *c++ << 4;
- s->LARc[0] = sr & 0x3F;
- sr >>= 6;
- s->LARc[1] = sr & 0x3F;
- sr >>= 6;
- sr = *c++;
- s->LARc[2] = sr & 0x1F;
- sr >>= 5;
- sr |= (uint16_t) *c++ << 3;
- s->LARc[3] = sr & 0x1F;
- sr >>= 5;
- s->LARc[4] = sr & 0xF;
- sr >>= 4;
- sr |= (uint16_t) *c++ << 2;
- s->LARc[5] = sr & 0xF;
- sr >>= 4;
- s->LARc[6] = sr & 0x7;
- sr >>= 3;
- s->LARc[7] = sr & 0x7;
- sr >>= 3;
-
- for (i = 0; i < 4; i++)
- {
- sr = *c++;
- s->Nc[i] = sr & 0x7F;
- sr >>= 7;
- sr |= (uint16_t) *c++ << 1;
- s->bc[i] = sr & 0x3;
- sr >>= 2;
- s->Mc[i] = sr & 0x3;
- sr >>= 2;
- sr |= (uint16_t) *c++ << 5;
- s->xmaxc[i] = sr & 0x3F;
- sr >>= 6;
- s->xMc[i][0] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][1] = sr & 0x7;
- sr >>= 3;
- sr |= (uint16_t) *c++ << 1;
- s->xMc[i][2] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][3] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][4] = sr & 0x7;
- sr >>= 3;
- sr = *c++;
- s->xMc[i][5] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][6] = sr & 0x7;
- sr >>= 3;
- sr |= (uint16_t) *c++ << 2;
- s->xMc[i][7] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][8] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][9] = sr & 0x7;
- sr >>= 3;
- sr |= (uint16_t) *c++ << 1;
- s->xMc[i][10] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][11] = sr & 0x7;
- sr >>= 3;
- s->xMc[i][12] = sr & 0x7;
- sr >>= 3;
- }
- return 65;
-}
-/*- End of function --------------------------------------------------------*/
-
-int gsm0610_unpack_voip(gsm0610_frame_t *s, const uint8_t c[33])
-{
- int i;
-
- s->LARc[0] = (*c++ & 0xF) << 2;
- s->LARc[0] |= (*c >> 6) & 0x3;
- s->LARc[1] = *c++ & 0x3F;
- s->LARc[2] = (*c >> 3) & 0x1F;
- s->LARc[3] = (*c++ & 0x7) << 2;
- s->LARc[3] |= (*c >> 6) & 0x3;
- s->LARc[4] = (*c >> 2) & 0xF;
- s->LARc[5] = (*c++ & 0x3) << 2;
- s->LARc[5] |= (*c >> 6) & 0x3;
- s->LARc[6] = (*c >> 3) & 0x7;
- s->LARc[7] = *c++ & 0x7;
-
- for (i = 0; i < 4; i++)
- {
- s->Nc[i] = (*c >> 1) & 0x7F;
- s->bc[i] = (*c++ & 0x1) << 1;
- s->bc[i] |= (*c >> 7) & 0x1;
- s->Mc[i] = (*c >> 5) & 0x3;
- s->xmaxc[i] = (*c++ & 0x1F) << 1;
- s->xmaxc[i] |= (*c >> 7) & 0x1;
- s->xMc[i][0] = (*c >> 4) & 0x7;
- s->xMc[i][1] = (*c >> 1) & 0x7;
- s->xMc[i][2] = (*c++ & 0x1) << 2;
- s->xMc[i][2] |= (*c >> 6) & 0x3;
- s->xMc[i][3] = (*c >> 3) & 0x7;
- s->xMc[i][4] = *c++ & 0x7;
- s->xMc[i][5] = (*c >> 5) & 0x7;
- s->xMc[i][6] = (*c >> 2) & 0x7;
- s->xMc[i][7] = (*c++ & 0x3) << 1;
- s->xMc[i][7] |= (*c >> 7) & 0x1;
- s->xMc[i][8] = (*c >> 4) & 0x7;
- s->xMc[i][9] = (*c >> 1) & 0x7;
- s->xMc[i][10] = (*c++ & 0x1) << 2;
- s->xMc[i][10] |= (*c >> 6) & 0x3;
- s->xMc[i][11] = (*c >> 3) & 0x7;
- s->xMc[i][12] = *c++ & 0x7;
- }
- return 33;
-}
-/*- End of function --------------------------------------------------------*/
-
-int gsm0610_decode(gsm0610_state_t *s, int16_t amp[], const uint8_t code[], int len)
-{
- gsm0610_frame_t frame[2];
- int bytes;
- int samples;
- int i;
-
- samples = 0;
- for (i = 0; i < len; i += bytes)
- {
- switch (s->packing)
- {
- default:
- case GSM0610_PACKING_NONE:
- if ((bytes = gsm0610_unpack_none(frame, &code[i])) >= 0)
- {
- decode_a_frame(s, &[samples], frame);
- samples += GSM0610_FRAME_LEN;
- }
- break;
- case GSM0610_PACKING_WAV49:
- if ((bytes = gsm0610_unpack_wav49(frame, &code[i])) >= 0)
- {
- decode_a_frame(s, &[samples], frame);
- samples += GSM0610_FRAME_LEN;
- decode_a_frame(s, &[samples], frame + 1);
- samples += GSM0610_FRAME_LEN;
- }
- break;
- case GSM0610_PACKING_VOIP:
- if ((bytes = gsm0610_unpack_voip(frame, &code[i])) >= 0)
- {
- decode_a_frame(s, &[samples], frame);
- samples += GSM0610_FRAME_LEN;
- }
- break;
- }
- /*endswitch*/
- if (bytes < 0)
- return 0;
- }
- /*endfor*/
- return samples;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * gsm0610_encode.c - GSM 06.10 full rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the widely used GSM 06.10 code available from
- * http://kbs.cs.tu-berlin.de/~jutta/toast.html
- *
- * $Id: gsm0610_encode.c,v 1.19 2008/02/12 12:27:48 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <assert.h>
-#include <inttypes.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-#include <stdlib.h>
-#include <memory.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/bitstream.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/gsm0610.h"
-
-#include "gsm0610_local.h"
-
-/* 4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER */
-
-/* The RPE-LTD coder works on a frame by frame basis. The length of
- the frame is equal to 160 samples. Some computations are done
- once per frame to produce at the output of the coder the
- LARc[1..8] parameters which are the coded LAR coefficients and
- also to realize the inverse filtering operation for the entire
- frame (160 samples of signal d[0..159]). These parts produce at
- the output of the coder:
-
- Procedure 4.2.11 to 4.2.18 are to be executed four times per
- frame. That means once for each sub-segment RPE-LTP analysis of
- 40 samples. These parts produce at the output of the coder.
-*/
-static void encode_a_frame(gsm0610_state_t *s, gsm0610_frame_t *f, const int16_t amp[])
-{
- int k;
- int16_t *dp;
- int16_t *dpp;
- int16_t so[GSM0610_FRAME_LEN];
- int i;
-
- dp = s->dp0 + 120;
- dpp = dp;
- gsm0610_preprocess(s, amp, so);
- gsm0610_lpc_analysis(s, so, f->LARc);
- gsm0610_short_term_analysis_filter(s, f->LARc, so);
-
- for (k = 0; k < 4; k++)
- {
- gsm0610_long_term_predictor(s,
- so + k*40,
- dp,
- s->e + 5,
- dpp,
- &f->Nc[k],
- &f->bc[k]);
- gsm0610_rpe_encoding(s, s->e + 5, &f->xmaxc[k], &f->Mc[k], f->xMc[k]);
-
- for (i = 0; i < 40; i++)
- dp[i] = gsm_add(s->e[5 + i], dpp[i]);
- /*endfor*/
- dp += 40;
- dpp += 40;
- }
- /*endfor*/
- memcpy((char *) s->dp0,
- (char *) (s->dp0 + GSM0610_FRAME_LEN),
- 120*sizeof(*s->dp0));
-}
-/*- End of function --------------------------------------------------------*/
-
-gsm0610_state_t *gsm0610_init(gsm0610_state_t *s, int packing)
-{
- if (s == NULL)
- {
- s = (gsm0610_state_t *) malloc(sizeof (*s));
- if (s == NULL)
- return NULL;
- /*endif*/
- }
- /*endif*/
- memset((char *) s, '\0', sizeof (gsm0610_state_t));
- s->nrp = 40;
- s->packing = packing;
- return s;
-}
-/*- End of function --------------------------------------------------------*/
-
-int gsm0610_set_packing(gsm0610_state_t *s, int packing)
-{
- s->packing = packing;
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-int gsm0610_release(gsm0610_state_t *s)
-{
- if (s)
- free(s);
- /*endif*/
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-int gsm0610_pack_none(uint8_t c[], const gsm0610_frame_t *s)
-{
- int i;
- int j;
- int k;
-
- i = 0;
- for (j = 0; j < 8; j++)
- c[i++] = (uint8_t) s->LARc[j];
- for (j = 0; j < 4; j++)
- {
- c[i++] = (uint8_t) s->Nc[j];
- c[i++] = (uint8_t) s->bc[j];
- c[i++] = (uint8_t) s->Mc[j];
- c[i++] = (uint8_t) s->xmaxc[j];
- for (k = 0; k < 13; k++)
- c[i++] = (uint8_t) s->xMc[j][k];
- }
- /*endfor*/
- return 76;
-}
-/*- End of function --------------------------------------------------------*/
-
-int gsm0610_pack_wav49(uint8_t c[], const gsm0610_frame_t *s)
-{
- uint16_t sr;
- int i;
-
- sr = 0;
- sr = (sr >> 6) | (s->LARc[0] << 10);
- sr = (sr >> 6) | (s->LARc[1] << 10);
- *c++ = (uint8_t)(sr >> 4);
- sr = (sr >> 5) | (s->LARc[2] << 11);
- *c++ = (uint8_t)(sr >> 7);
- sr = (sr >> 5) | (s->LARc[3] << 11);
- sr = (sr >> 4) | (s->LARc[4] << 12);
- *c++ = (uint8_t)(sr >> 6);
- sr = (sr >> 4) | (s->LARc[5] << 12);
- sr = (sr >> 3) | (s->LARc[6] << 13);
- *c++ = (uint8_t)(sr >> 7);
- sr = (sr >> 3) | (s->LARc[7] << 13);
-
- for (i = 0; i < 4; i++)
- {
- sr = (sr >> 7) | (s->Nc[i] << 9);
- *c++ = (uint8_t)(sr >> 5);
- sr = (sr >> 2) | (s->bc[i] << 14);
- sr = (sr >> 2) | (s->Mc[i] << 14);
- sr = (sr >> 6) | (s->xmaxc[i] << 10);
- *c++ = (uint8_t)(sr >> 3);
- sr = (sr >> 3) | (s->xMc[i][0] << 13);
- *c++ = (uint8_t)(sr >> 8);
- sr = (sr >> 3) | (s->xMc[i][1] << 13);
- sr = (sr >> 3) | (s->xMc[i][2] << 13);
- sr = (sr >> 3) | (s->xMc[i][3] << 13);
- *c++ = (uint8_t)(sr >> 7);
- sr = (sr >> 3) | (s->xMc[i][4] << 13);
- sr = (sr >> 3) | (s->xMc[i][5] << 13);
- sr = (sr >> 3) | (s->xMc[i][6] << 13);
- *c++ = (uint8_t)(sr >> 6);
- sr = (sr >> 3) | (s->xMc[i][7] << 13);
- sr = (sr >> 3) | (s->xMc[i][8] << 13);
- *c++ = (uint8_t)(sr >> 8);
- sr = (sr >> 3) | (s->xMc[i][9] << 13);
- sr = (sr >> 3) | (s->xMc[i][10] << 13);
- sr = (sr >> 3) | (s->xMc[i][11] << 13);
- *c++ = (uint8_t)(sr >> 7);
- sr = (sr >> 3) | (s->xMc[i][12] << 13);
- }
- /*endfor*/
-
- s++;
- sr = (sr >> 6) | (s->LARc[0] << 10);
- *c++ = (uint8_t)(sr >> 6);
- sr = (sr >> 6) | (s->LARc[1] << 10);
- *c++ = (uint8_t)(sr >> 8);
- sr = (sr >> 5) | (s->LARc[2] << 11);
- sr = (sr >> 5) | (s->LARc[3] << 11);
- *c++ = (uint8_t)(sr >> 6);
- sr = (sr >> 4) | (s->LARc[4] << 12);
- sr = (sr >> 4) | (s->LARc[5] << 12);
- *c++ = (uint8_t)(sr >> 6);
- sr = (sr >> 3) | (s->LARc[6] << 13);
- sr = (sr >> 3) | (s->LARc[7] << 13);
- *c++ = (uint8_t)(sr >> 8);
-
- for (i = 0; i < 4; i++)
- {
- sr = (sr >> 7) | (s->Nc[i] << 9);
- sr = (sr >> 2) | (s->bc[i] << 14);
- *c++ = (uint8_t)(sr >> 7);
- sr = (sr >> 2) | (s->Mc[i] << 14);
- sr = (sr >> 6) | (s->xmaxc[i] << 10);
- *c++ = (uint8_t)(sr >> 7);
- sr = (sr >> 3) | (s->xMc[i][0] << 13);
- sr = (sr >> 3) | (s->xMc[i][1] << 13);
- sr = (sr >> 3) | (s->xMc[i][2] << 13);
- *c++ = (uint8_t)(sr >> 6);
- sr = (sr >> 3) | (s->xMc[i][3] << 13);
- sr = (sr >> 3) | (s->xMc[i][4] << 13);
- *c++ = (uint8_t)(sr >> 8);
- sr = (sr >> 3) | (s->xMc[i][5] << 13);
- sr = (sr >> 3) | (s->xMc[i][6] << 13);
- sr = (sr >> 3) | (s->xMc[i][7] << 13);
- *c++ = (uint8_t)(sr >> 7);
- sr = (sr >> 3) | (s->xMc[i][8] << 13);
- sr = (sr >> 3) | (s->xMc[i][9] << 13);
- sr = (sr >> 3) | (s->xMc[i][10] << 13);
- *c++ = (uint8_t)(sr >> 6);
- sr = (sr >> 3) | (s->xMc[i][11] << 13);
- sr = (sr >> 3) | (s->xMc[i][12] << 13);
- *c++ = (uint8_t)(sr >> 8);
- }
- /*endfor*/
- return 65;
-}
-/*- End of function --------------------------------------------------------*/
-
-int gsm0610_pack_voip(uint8_t c[33], const gsm0610_frame_t *s)
-{
- int i;
-
- *c++ = (uint8_t)(((GSM0610_MAGIC & 0xF) << 4)
- | ((s->LARc[0] >> 2) & 0xF));
- *c++ = (uint8_t)(((s->LARc[0] & 0x3) << 6)
- | (s->LARc[1] & 0x3F));
- *c++ = (uint8_t)(((s->LARc[2] & 0x1F) << 3)
- | ((s->LARc[3] >> 2) & 0x7));
- *c++ = (uint8_t)(((s->LARc[3] & 0x3) << 6)
- | ((s->LARc[4] & 0xF) << 2)
- | ((s->LARc[5] >> 2) & 0x3));
- *c++ = (uint8_t)(((s->LARc[5] & 0x3) << 6)
- | ((s->LARc[6] & 0x7) << 3)
- | (s->LARc[7] & 0x7));
-
- for (i = 0; i < 4; i++)
- {
- *c++ = (uint8_t)(((s->Nc[i] & 0x7F) << 1)
- | ((s->bc[i] >> 1) & 0x1));
- *c++ = (uint8_t)(((s->bc[i] & 0x1) << 7)
- | ((s->Mc[i] & 0x3) << 5)
- | ((s->xmaxc[i] >> 1) & 0x1F));
- *c++ = (uint8_t)(((s->xmaxc[i] & 0x1) << 7)
- | ((s->xMc[i][0] & 0x7) << 4)
- | ((s->xMc[i][1] & 0x7) << 1)
- | ((s->xMc[i][2] >> 2) & 0x1));
- *c++ = (uint8_t)(((s->xMc[i][2] & 0x3) << 6)
- | ((s->xMc[i][3] & 0x7) << 3)
- | (s->xMc[i][4] & 0x7));
- *c++ = (uint8_t)(((s->xMc[i][5] & 0x7) << 5)
- | ((s->xMc[i][6] & 0x7) << 2)
- | ((s->xMc[i][7] >> 1) & 0x3));
- *c++ = (uint8_t)(((s->xMc[i][7] & 0x1) << 7)
- | ((s->xMc[i][8] & 0x7) << 4)
- | ((s->xMc[i][9] & 0x7) << 1)
- | ((s->xMc[i][10] >> 2) & 0x1));
- *c++ = (uint8_t)(((s->xMc[i][10] & 0x3) << 6)
- | ((s->xMc[i][11] & 0x7) << 3)
- | (s->xMc[i][12] & 0x7));
- }
- /*endfor*/
- return 33;
-}
-/*- End of function --------------------------------------------------------*/
-
-int gsm0610_encode(gsm0610_state_t *s, uint8_t code[], const int16_t amp[], int len)
-{
- gsm0610_frame_t frame[2];
- int bytes;
- int i;
-
- bytes = 0;
- for (i = 0; i < len; i += GSM0610_FRAME_LEN)
- {
- encode_a_frame(s, frame, &[i]);
- switch (s->packing)
- {
- case GSM0610_PACKING_WAV49:
- i += GSM0610_FRAME_LEN;
- encode_a_frame(s, frame + 1, &[i]);
- bytes += gsm0610_pack_wav49(&code[bytes], frame);
- break;
- case GSM0610_PACKING_VOIP:
- bytes += gsm0610_pack_voip(&code[bytes], frame);
- break;
- default:
- bytes += gsm0610_pack_none(&code[bytes], frame);
- break;
- }
- /*endswitch*/
- }
- /*endfor*/
- return bytes;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * gsm0610_local.h - GSM 06.10 full rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the widely used GSM 06.10 code available from
- * http://kbs.cs.tu-berlin.de/~jutta/toast.html
- *
- * $Id: gsm0610_local.h,v 1.7 2007/01/03 14:15:35 steveu Exp $
- */
-
-#if !defined(_GSM0610_LOCAL_H_)
-#define _GSM0610_LOCAL_H_
-
-#define GSM0610_FRAME_LEN 160
-
-#define GSM0610_MAGIC 0xD
-
-static __inline__ int16_t gsm_add(int16_t a, int16_t b)
-{
-#if defined(__GNUC__) && defined(__i386__)
- __asm__ __volatile__(
- " addw %2,%0;\n"
- " jno 0f;\n"
- " movw $0x7fff,%0;\n"
- " adcw $0,%0;\n"
- "0:"
- : "=r" (a)
- : "0" (a), "ir" (b)
- : "cc"
- );
- return a;
-#else
- int32_t sum;
-
- sum = (int32_t) a + (int32_t) b;
- return saturate(sum);
-#endif
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int32_t gsm_l_add(int32_t a, int32_t b)
-{
-#if defined(__i386__)
- __asm__ __volatile__(
- " addl %2,%0;\n"
- " jno 0f;\n"
- " movl $0x7fffffff,%0;\n"
- " adcl $0,%0;\n"
- "0:"
- : "=r" (a)
- : "0" (a), "ir" (b)
- : "cc"
- );
- return a;
-#else
- uint32_t A;
-
- if (a < 0)
- {
- if (b >= 0)
- return a + b;
- /*endif*/
- A = (uint32_t) -(a + 1) + (uint32_t) -(b + 1);
- return (A >= INT32_MAX) ? INT32_MIN : -(int32_t) A - 2;
- }
- /*endif*/
- if (b <= 0)
- return a + b;
- /*endif*/
- A = (uint32_t) a + (uint32_t) b;
- return (A > INT32_MAX) ? INT32_MAX : A;
-#endif
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int16_t gsm_sub(int16_t a, int16_t b)
-{
- int32_t diff;
-
- diff = (int32_t) a - (int32_t) b;
- return saturate(diff);
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int16_t gsm_mult(int16_t a, int16_t b)
-{
- if (a == INT16_MIN && b == INT16_MIN)
- return INT16_MAX;
- /*endif*/
- return (int16_t) (((int32_t) a * (int32_t) b) >> 15);
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int32_t gsm_l_mult(int16_t a, int16_t b)
-{
- assert (a != INT16_MIN || b != INT16_MIN);
- return ((int32_t) a * (int32_t) b) << 1;
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int16_t gsm_mult_r(int16_t a, int16_t b)
-{
- int32_t prod;
-
- if (b == INT16_MIN && a == INT16_MIN)
- return INT16_MAX;
- /*endif*/
- prod = (int32_t) a * (int32_t) b + 16384;
- prod >>= 15;
- return (int16_t) (prod & 0xFFFF);
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int16_t gsm_abs(int16_t a)
-{
- return (a == INT16_MIN) ? INT16_MAX : (int16_t) abs(a);
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int16_t gsm_asr(int16_t a, int n)
-{
- if (n >= 16)
- return (int16_t)(-(a < 0));
- /*endif*/
- if (n <= -16)
- return 0;
- /*endif*/
- if (n < 0)
- return (int16_t)(a << -n);
- /*endif*/
- return (int16_t)(a >> n);
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int16_t gsm_asl(int16_t a, int n)
-{
- if (n >= 16)
- return 0;
- /*endif*/
- if (n <= -16)
- return (int16_t)(-(a < 0));
- /*endif*/
- if (n < 0)
- return gsm_asr(a, -n);
- /*endif*/
- return (int16_t)(a << n);
-}
-/*- End of function --------------------------------------------------------*/
-
-extern void gsm0610_long_term_predictor(gsm0610_state_t *s,
- int16_t d[40],
- int16_t *dp, /* [-120..-1] d' IN */
- int16_t e[40],
- int16_t dpp[40],
- int16_t *Nc,
- int16_t *bc);
-
-extern void gsm0610_lpc_analysis(gsm0610_state_t *s,
- int16_t amp[160],
- int16_t LARc[8]);
-
-extern void gsm0610_preprocess(gsm0610_state_t *s,
- const int16_t amp[],
- int16_t so[]);
-
-extern void gsm0610_short_term_analysis_filter(gsm0610_state_t *s,
- int16_t LARc[8],
- int16_t amp[160]);
-
-extern void gsm0610_long_term_synthesis_filtering(gsm0610_state_t *s,
- int16_t Ncr,
- int16_t bcr,
- int16_t erp[40],
- int16_t *drp); /* [-120..-1] IN, [0..40] OUT */
-
-extern void gsm0610_rpe_decoding(gsm0610_state_t *s,
- int16_t xmaxcr,
- int16_t Mcr,
- int16_t *xMcr, /* [0..12], 3 bits IN */
- int16_t erp[40]);
-
-extern void gsm0610_rpe_encoding(gsm0610_state_t *s,
- int16_t *e, /* [-5..-1][0..39][40..44] IN/OUT */
- int16_t *xmaxc,
- int16_t *Mc,
- int16_t xMc[13]);
-
-extern void gsm0610_short_term_synthesis_filter(gsm0610_state_t *s,
- int16_t LARcr[8],
- int16_t drp[40],
- int16_t amp[160]);
-
-extern int16_t gsm0610_norm(int32_t a);
-
-#if defined(__GNUC__) && defined(__i386__)
-
-void gsm0610_vec_vsraw(const int16_t *p, int n, int bits);
-
-int32_t gsm0610_vec_iprod(const int16_t *p, const int16_t *q, int n);
-
-int32_t gsm0610_vec_maxmin(const int16_t *p, int n, int16_t *out);
-
-int32_t gsm0610_max_cross_corr(const int16_t *wt, const int16_t *dp, int16_t *Nc_out);
-
-#endif
-
-#endif
-
-/*- End of include ---------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * gsm0610_long_term.c - GSM 06.10 full rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the widely used GSM 06.10 code available from
- * http://kbs.cs.tu-berlin.de/~jutta/toast.html
- *
- * $Id: gsm0610_long_term.c,v 1.11 2008/02/09 15:31:36 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <assert.h>
-#include <inttypes.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-#include <stdlib.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/bitstream.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/gsm0610.h"
-
-#include "gsm0610_local.h"
-
-/* Table 4.3a Decision level of the LTP gain quantizer */
-static const int16_t gsm_DLB[4] =
-{
- 6554, 16384, 26214, 32767
-};
-
-/* Table 4.3b Quantization levels of the LTP gain quantizer */
-static const int16_t gsm_QLB[4] =
-{
- 3277, 11469, 21299, 32767
-};
-
-/* 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION */
-
-#if defined(__GNUC__) && defined(__i386__)
-int32_t gsm0610_max_cross_corr(const int16_t *wt, const int16_t *dp, int16_t *Nc_out)
-{
- int32_t lmax;
- int32_t out;
-
- __asm__ __volatile__(
- " emms;\n"
- " pushl %%ebx;\n"
- " movl $0,%%edx;\n" /* Will be maximum inner-product */
- " movl $40,%%ebx;\n"
- " movl %%ebx,%%ecx;\n" /* Will be index of max inner-product */
- " subl $80,%%esi;\n"
- " .p2align 2;\n"
- "1:\n"
- " movq (%%edi),%%mm0;\n"
- " movq (%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm0;\n"
- " movq 8(%%edi),%%mm1;\n"
- " movq 8(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 16(%%edi),%%mm1;\n"
- " movq 16(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 24(%%edi),%%mm1;\n"
- " movq 24(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 32(%%edi),%%mm1;\n"
- " movq 32(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 40(%%edi),%%mm1;\n"
- " movq 40(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 48(%%edi),%%mm1;\n"
- " movq 48(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 56(%%edi),%%mm1;\n"
- " movq 56(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 64(%%edi),%%mm1;\n"
- " movq 64(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 72(%%edi),%%mm1;\n"
- " movq 72(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq %%mm0,%%mm1;\n"
- " punpckhdq %%mm0,%%mm1;\n" /* mm1 has high int32 of mm0 dup'd */
- " paddd %%mm1,%%mm0;\n"
- " movd %%mm0,%%eax;\n" /* eax has result */
- " cmpl %%edx,%%eax;\n"
- " jle 2f;\n"
- " movl %%eax,%%edx;\n"
- " movl %%ebx,%%ecx;\n"
- " .p2align 2;\n"
- "2:\n"
- " subl $2,%%esi;\n"
- " incl %%ebx;\n"
- " cmpl $120,%%ebx;\n"
- " jle 1b;\n"
- " popl %%ebx;\n"
- " emms;\n"
- : "=d" (lmax), "=c" (out)
- : "D" (wt), "S" (dp)
- : "eax"
- );
- *Nc_out = out;
- return lmax;
-}
-/*- End of function --------------------------------------------------------*/
-#endif
-
-/* This procedure computes the LTP gain (bc) and the LTP lag (Nc)
- for the long term analysis filter. This is done by calculating a
- maximum of the cross-correlation function between the current
- sub-segment short term residual signal d[0..39] (output of
- the short term analysis filter; for simplification the index
- of this array begins at 0 and ends at 39 for each sub-segment of the
- RPE-LTP analysis) and the previous reconstructed short term
- residual signal dp[ -120 .. -1 ]. A dynamic scaling must be
- performed to avoid overflow. */
-
-/* This procedure exists in three versions. First, the integer
- version; then, the two floating point versions (as another
- function), with or without scaling. */
-
-static int16_t evaluate_ltp_parameters(int16_t d[40],
- int16_t *dp, // [-120..-1] IN
- int16_t *Nc_out)
-{
- int k;
- int16_t Nc;
- int16_t bc;
- int16_t wt[40];
- int32_t L_max;
- int32_t L_power;
- int16_t R;
- int16_t S;
- int16_t dmax;
- int16_t scale;
- int16_t temp;
- int32_t L_temp;
-#if !(defined(__GNUC__) && defined(__i386__))
- int16_t lambda;
-#endif
-
- /* Search of the optimum scaling of d[0..39]. */
- dmax = 0;
- for (k = 0; k < 40; k++)
- {
- temp = d[k];
- temp = gsm_abs(temp);
- if (temp > dmax)
- dmax = temp;
- /*endif*/
- }
- /*endfor*/
-
- if (dmax == 0)
- {
- temp = 0;
- }
- else
- {
- assert(dmax > 0);
- temp = gsm0610_norm((int32_t) dmax << 16);
- }
- /*endif*/
-
- if (temp > 6)
- scale = 0;
- else
- scale = (int16_t) (6 - temp);
- /*endif*/
- assert(scale >= 0);
-
- /* Initialization of a working array wt */
- for (k = 0; k < 40; k++)
- wt[k] = d[k] >> scale;
- /*endfor*/
-
- /* Search for the maximum cross-correlation and coding of the LTP lag */
-#if defined(__GNUC__) && defined(__i386__)
- L_max = gsm0610_max_cross_corr(wt, dp, &Nc);
-#else
- L_max = 0;
- Nc = 40; /* index for the maximum cross-correlation */
-
- for (lambda = 40; lambda <= 120; lambda++)
- {
- int32_t L_result;
-
- L_result = (wt[0]*dp[0 - lambda])
- + (wt[1]*dp[1 - lambda])
- + (wt[2]*dp[2 - lambda])
- + (wt[3]*dp[3 - lambda])
- + (wt[4]*dp[4 - lambda])
- + (wt[5]*dp[5 - lambda])
- + (wt[6]*dp[6 - lambda])
- + (wt[7]*dp[7 - lambda])
- + (wt[8]*dp[8 - lambda])
- + (wt[9]*dp[9 - lambda])
- + (wt[10]*dp[10 - lambda])
- + (wt[11]*dp[11 - lambda])
- + (wt[12]*dp[12 - lambda])
- + (wt[13]*dp[13 - lambda])
- + (wt[14]*dp[14 - lambda])
- + (wt[15]*dp[15 - lambda])
- + (wt[16]*dp[16 - lambda])
- + (wt[17]*dp[17 - lambda])
- + (wt[18]*dp[18 - lambda])
- + (wt[19]*dp[19 - lambda])
- + (wt[20]*dp[20 - lambda])
- + (wt[21]*dp[21 - lambda])
- + (wt[22]*dp[22 - lambda])
- + (wt[23]*dp[23 - lambda])
- + (wt[24]*dp[24 - lambda])
- + (wt[25]*dp[25 - lambda])
- + (wt[26]*dp[26 - lambda])
- + (wt[27]*dp[27 - lambda])
- + (wt[28]*dp[28 - lambda])
- + (wt[29]*dp[29 - lambda])
- + (wt[30]*dp[30 - lambda])
- + (wt[31]*dp[31 - lambda])
- + (wt[32]*dp[32 - lambda])
- + (wt[33]*dp[33 - lambda])
- + (wt[34]*dp[34 - lambda])
- + (wt[35]*dp[35 - lambda])
- + (wt[36]*dp[36 - lambda])
- + (wt[37]*dp[37 - lambda])
- + (wt[38]*dp[38 - lambda])
- + (wt[39]*dp[39 - lambda]);
-
- if (L_result > L_max)
- {
- Nc = lambda;
- L_max = L_result;
- }
- /*endif*/
- }
- /*endfor*/
-#endif
- *Nc_out = Nc;
-
- L_max <<= 1;
-
- /* Rescaling of L_max */
- assert(scale <= 100 && scale >= -100);
- L_max = L_max >> (6 - scale);
-
- assert(Nc <= 120 && Nc >= 40);
-
- /* Compute the power of the reconstructed short term residual signal dp[..] */
- L_power = 0;
- for (k = 0; k < 40; k++)
- {
- L_temp = dp[k - Nc] >> 3;
- L_power += L_temp*L_temp;
- }
- /*endfor*/
- L_power <<= 1; /* from L_MULT */
-
- /* Normalization of L_max and L_power */
- if (L_max <= 0)
- return 0;
- /*endif*/
- if (L_max >= L_power)
- return 3;
- /*endif*/
- temp = gsm0610_norm(L_power);
-
- R = (int16_t) ((L_max << temp) >> 16);
- S = (int16_t) ((L_power << temp) >> 16);
-
- /* Coding of the LTP gain */
-
- /* Table 4.3a must be used to obtain the level DLB[i] for the
- quantization of the LTP gain b to get the coded version bc. */
- for (bc = 0; bc <= 2; bc++)
- {
- if (R <= gsm_mult(S, gsm_DLB[bc]))
- break;
- /*endif*/
- }
- /*endfor*/
- return bc;
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.2.12 */
-static void long_term_analysis_filtering(int16_t bc,
- int16_t Nc,
- int16_t *dp, // previous d [-120..-1] IN
- int16_t d[40],
- int16_t dpp[40],
- int16_t e[40])
-{
- int k;
-
- /* In this part, we have to decode the bc parameter to compute
- the samples of the estimate dpp[0..39]. The decoding of bc needs the
- use of table 4.3b. The long term residual signal e[0..39]
- is then calculated to be fed to the RPE encoding section. */
- for (k = 0; k < 40; k++)
- {
- dpp[k] = gsm_mult_r(gsm_QLB[bc], dp[k - Nc]);
- e[k] = gsm_sub(d[k], dpp[k]);
- }
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4x for 160 samples */
-void gsm0610_long_term_predictor(gsm0610_state_t *s,
- int16_t d[40],
- int16_t *dp, // [-120..-1] d' IN
- int16_t e[40],
- int16_t dpp[40],
- int16_t *Nc,
- int16_t *bc)
-{
- vc_assert(d);
- vc_assert(dp);
- vc_assert(e);
- vc_assert(dpp);
- vc_assert(Nc);
- vc_assert(bc);
-
- *bc = evaluate_ltp_parameters(d, dp, Nc);
- long_term_analysis_filtering(*bc, *Nc, dp, d, dpp, e);
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.3.2 */
-void gsm0610_long_term_synthesis_filtering(gsm0610_state_t *s,
- int16_t Ncr,
- int16_t bcr,
- int16_t erp[40],
- int16_t *drp) // [-120..-1] IN, [0..40] OUT
-{
- int k;
- int16_t brp;
- int16_t drpp;
- int16_t Nr;
-
- /* This procedure uses the bcr and Ncr parameter to realize the
- long term synthesis filter. The decoding of bcr needs
- table 4.3b. */
-
- /* Check the limits of Nr. */
- Nr = (Ncr < 40 || Ncr > 120) ? s->nrp : Ncr;
- s->nrp = Nr;
- assert (Nr >= 40 && Nr <= 120);
-
- /* Decode the LTP gain, bcr */
- brp = gsm_QLB[bcr];
-
- /* Compute the reconstructed short term residual signal, drp[0..39] */
- assert(brp != INT16_MIN);
- for (k = 0; k < 40; k++)
- {
- drpp = gsm_mult_r(brp, drp[k - Nr]);
- drp[k] = gsm_add(erp[k], drpp);
- }
- /*endfor*/
-
- /* Update the reconstructed short term residual signal, drp[-1..-120] */
- for (k = 0; k < 120; k++)
- drp[k - 120] = drp[k - 80];
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * gsm0610_lpc.c - GSM 06.10 full rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the widely used GSM 06.10 code available from
- * http://kbs.cs.tu-berlin.de/~jutta/toast.html
- *
- * $Id: gsm0610_lpc.c,v 1.16 2008/02/09 15:31:36 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <assert.h>
-#include <inttypes.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-#include <stdlib.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/bitstream.h"
-#include "voipcodecs/bit_operations.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/vector_int.h"
-#include "voipcodecs/gsm0610.h"
-
-#include "gsm0610_local.h"
-
-/* 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION */
-
-/* The number of left shifts needed to normalize the 32 bit
- variable x for positive values on the interval
- with minimum of
- minimum of 1073741824 (01000000000000000000000000000000) and
- maximum of 2147483647 (01111111111111111111111111111111)
- and for negative values on the interval with
- minimum of -2147483648 (-10000000000000000000000000000000) and
- maximum of -1073741824 ( -1000000000000000000000000000000).
-
- In order to normalize the result, the following
- operation must be done: norm_var1 = x << gsm0610_norm(x);
-
- (That's 'ffs', only from the left, not the right..)
-*/
-
-int16_t gsm0610_norm(int32_t x)
-{
- assert(x != 0);
-
- if (x < 0)
- {
- if (x <= -1073741824)
- return 0;
- /*endif*/
- x = ~x;
- }
- /*endif*/
- return (int16_t) (30 - top_bit(x));
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- (From p. 46, end of section 4.2.5)
-
- NOTE: The following lines gives [sic] one correct implementation
- of the div(num, denum) arithmetic operation. Compute div
- which is the integer division of num by denom: with
- denom >= num > 0
-*/
-static int16_t gsm_div(int16_t num, int16_t denom)
-{
- int32_t num32;
- int32_t denom32;
- int16_t div;
- int k;
-
- /* The parameter num sometimes becomes zero.
- Although this is explicitly guarded against in 4.2.5,
- we assume that the result should then be zero as well. */
-
- assert(num >= 0 && denom >= num);
- if (num == 0)
- return 0;
- /*endif*/
- num32 = num;
- denom32 = denom;
- div = 0;
- k = 15;
- while (k--)
- {
- div <<= 1;
- num32 <<= 1;
-
- if (num32 >= denom32)
- {
- num32 -= denom32;
- div++;
- }
- /*endif*/
- }
- /*endwhile*/
-
- return div;
-}
-/*- End of function --------------------------------------------------------*/
-
-#if defined(__GNUC__) && defined(__i386__)
-void gsm0610_vec_vsraw(const int16_t *p, int n, int bits)
-{
- static const int64_t ones = 0x0001000100010001LL;
-
- if (n == 0)
- return;
- /*endif*/
- __asm__ __volatile__(
- " leal -16(%%esi,%%eax,2),%%edx;\n" /* edx = top - 16 */
- " emms;\n"
- " movd %%ecx,%%mm3;\n"
- " movq %[ones],%%mm2;\n"
- " psllw %%mm3,%%mm2;\n"
- " psrlw $1,%%mm2;\n"
- " cmpl %%edx,%%esi;"
- " ja 4f;\n"
-
- " .p2align 2;\n"
- /* 8 words per iteration */
- "6:\n"
- " movq (%%esi),%%mm0;\n"
- " movq 8(%%esi),%%mm1;\n"
- " paddsw %%mm2,%%mm0;\n"
- " psraw %%mm3,%%mm0;\n"
- " paddsw %%mm2,%%mm1;\n"
- " psraw %%mm3,%%mm1;\n"
- " movq %%mm0,(%%esi);\n"
- " movq %%mm1,8(%%esi);\n"
- " addl $16,%%esi;\n"
- " cmpl %%edx,%%esi;\n"
- " jbe 6b;\n"
-
- " .p2align 2;\n"
- "4:\n"
- " addl $12,%%edx;\n" /* now edx = top-4 */
- " cmpl %%edx,%%esi;\n"
- " ja 3f;\n"
-
- " .p2align 2;\n"
- /* do up to 6 words, two per iteration */
- "5:\n"
- " movd (%%esi),%%mm0;\n"
- " paddsw %%mm2,%%mm0;\n"
- " psraw %%mm3,%%mm0;\n"
- " movd %%mm0,(%%esi);\n"
- " addl $4,%%esi;\n"
- " cmpl %%edx,%%esi;\n"
- " jbe 5b;\n"
-
- " .p2align 2;\n"
- "3:\n"
- " addl $2,%%edx;\n" /* now edx = top-2 */
- " cmpl %%edx,%%esi;\n"
- " ja 2f;\n"
-
- " movzwl (%%esi),%%eax;\n"
- " movd %%eax,%%mm0;\n"
- " paddsw %%mm2,%%mm0;\n"
- " psraw %%mm3,%%mm0;\n"
- " movd %%mm0,%%eax;\n"
- " movw %%ax,(%%esi);\n"
-
- " .p2align 2;\n"
- "2:\n"
- " emms;\n"
- :
- : "S" (p), "a" (n), "c" (bits), [ones] "m" (ones)
- : "edx"
- );
-}
-/*- End of function --------------------------------------------------------*/
-#endif
-
-/* 4.2.4 */
-static void autocorrelation(int16_t amp[GSM0610_FRAME_LEN], int32_t L_ACF[9])
-{
- int k;
- int16_t smax;
- int16_t scalauto;
-#if !(defined(__GNUC__) && defined(__i386__))
- int i;
- int temp;
- int16_t *sp;
- int16_t sl;
-#endif
-
- /* The goal is to compute the array L_ACF[k]. The signal s[i] must
- be scaled in order to avoid an overflow situation. */
-
- /* Dynamic scaling of the array s[0..159] */
- /* Search for the maximum. */
-#if defined(__GNUC__) && defined(__i386__)
- smax = saturate(vec_min_maxi16(amp, GSM0610_FRAME_LEN, NULL));
-#else
- for (smax = 0, k = 0; k < GSM0610_FRAME_LEN; k++)
- {
- temp = gsm_abs(amp[k]);
- if (temp > smax)
- smax = (int16_t) temp;
- /*endif*/
- }
- /*endfor*/
-#endif
-
- /* Computation of the scaling factor. */
- if (smax == 0)
- {
- scalauto = 0;
- }
- else
- {
- assert(smax > 0);
- scalauto = (int16_t) (4 - gsm0610_norm((int32_t) smax << 16));
- }
- /*endif*/
-
- /* Scaling of the array s[0...159] */
-#if defined(__GNUC__) && defined(__i386__)
- if (scalauto > 0)
- gsm0610_vec_vsraw(amp, GSM0610_FRAME_LEN, scalauto);
- /*endif*/
-#else
- if (scalauto > 0)
- {
- for (k = 0; k < GSM0610_FRAME_LEN; k++)
- amp[k] = gsm_mult_r(amp[k], 16384 >> (scalauto - 1));
- /*endfor*/
- }
- /*endif*/
-#endif
-
- /* Compute the L_ACF[..]. */
-#if defined(__GNUC__) && defined(__i386__)
- for (k = 0; k < 9; k++)
- L_ACF[k] = vec_dot_prodi16(amp, amp + k, GSM0610_FRAME_LEN - k) << 1;
- /*endfor*/
-#else
- sp = amp;
- sl = *sp;
- L_ACF[0] = ((int32_t) sl*sp[0]);
- sl = *++sp;
- L_ACF[0] += ((int32_t) sl*sp[0]);
- L_ACF[1] = ((int32_t) sl*sp[-1]);
- sl = *++sp;
- L_ACF[0] += ((int32_t) sl*sp[0]);
- L_ACF[1] += ((int32_t) sl*sp[-1]);
- L_ACF[2] = ((int32_t) sl*sp[-2]);
- sl = *++sp;
- L_ACF[0] += ((int32_t) sl*sp[0]);
- L_ACF[1] += ((int32_t) sl*sp[-1]);
- L_ACF[2] += ((int32_t) sl*sp[-2]);
- L_ACF[3] = ((int32_t) sl*sp[-3]);
- sl = *++sp;
- L_ACF[0] += ((int32_t) sl*sp[0]);
- L_ACF[1] += ((int32_t) sl*sp[-1]);
- L_ACF[2] += ((int32_t) sl*sp[-2]);
- L_ACF[3] += ((int32_t) sl*sp[-3]);
- L_ACF[4] = ((int32_t) sl*sp[-4]);
- sl = *++sp;
- L_ACF[0] += ((int32_t) sl*sp[0]);
- L_ACF[1] += ((int32_t) sl*sp[-1]);
- L_ACF[2] += ((int32_t) sl*sp[-2]);
- L_ACF[3] += ((int32_t) sl*sp[-3]);
- L_ACF[4] += ((int32_t) sl*sp[-4]);
- L_ACF[5] = ((int32_t) sl*sp[-5]);
- sl = *++sp;
- L_ACF[0] += ((int32_t) sl*sp[0]);
- L_ACF[1] += ((int32_t) sl*sp[-1]);
- L_ACF[2] += ((int32_t) sl*sp[-2]);
- L_ACF[3] += ((int32_t) sl*sp[-3]);
- L_ACF[4] += ((int32_t) sl*sp[-4]);
- L_ACF[5] += ((int32_t) sl*sp[-5]);
- L_ACF[6] = ((int32_t) sl*sp[-6]);
- sl = *++sp;
- L_ACF[0] += ((int32_t) sl*sp[0]);
- L_ACF[1] += ((int32_t) sl*sp[-1]);
- L_ACF[2] += ((int32_t) sl*sp[-2]);
- L_ACF[3] += ((int32_t) sl*sp[-3]);
- L_ACF[4] += ((int32_t) sl*sp[-4]);
- L_ACF[5] += ((int32_t) sl*sp[-5]);
- L_ACF[6] += ((int32_t) sl*sp[-6]);
- L_ACF[7] = ((int32_t) sl*sp[-7]);
- sl = *++sp;
- L_ACF[0] += ((int32_t) sl*sp[0]);
- L_ACF[1] += ((int32_t) sl*sp[-1]);
- L_ACF[2] += ((int32_t) sl*sp[-2]);
- L_ACF[3] += ((int32_t) sl*sp[-3]);
- L_ACF[4] += ((int32_t) sl*sp[-4]);
- L_ACF[5] += ((int32_t) sl*sp[-5]);
- L_ACF[6] += ((int32_t) sl*sp[-6]);
- L_ACF[7] += ((int32_t) sl*sp[-7]);
- L_ACF[8] = ((int32_t) sl*sp[-8]);
- for (i = 9; i < GSM0610_FRAME_LEN; i++)
- {
- sl = *++sp;
- L_ACF[0] += ((int32_t) sl*sp[0]);
- L_ACF[1] += ((int32_t) sl*sp[-1]);
- L_ACF[2] += ((int32_t) sl*sp[-2]);
- L_ACF[3] += ((int32_t) sl*sp[-3]);
- L_ACF[4] += ((int32_t) sl*sp[-4]);
- L_ACF[5] += ((int32_t) sl*sp[-5]);
- L_ACF[6] += ((int32_t) sl*sp[-6]);
- L_ACF[7] += ((int32_t) sl*sp[-7]);
- L_ACF[8] += ((int32_t) sl*sp[-8]);
- }
- /*endfor*/
- for (k = 0; k < 9; k++)
- L_ACF[k] <<= 1;
- /*endfor*/
-#endif
- /* Rescaling of the array s[0..159] */
- if (scalauto > 0)
- {
- assert(scalauto <= 4);
- for (k = 0; k < GSM0610_FRAME_LEN; k++)
- amp[k] <<= scalauto;
- /*endfor*/
- }
- /*endif*/
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.2.5 */
-static void reflection_coefficients(int32_t L_ACF[9], int16_t r[8])
-{
- int i;
- int m;
- int n;
- int16_t temp;
- int16_t ACF[9];
- int16_t P[9];
- int16_t K[9];
-
- /* Schur recursion with 16 bits arithmetic. */
- if (L_ACF[0] == 0)
- {
- for (i = 8; i--; *r++ = 0)
- ;
- /*endfor*/
- return;
- }
- /*endif*/
-
- assert(L_ACF[0] != 0);
- temp = gsm0610_norm(L_ACF[0]);
-
- assert(temp >= 0 && temp < 32);
-
- /* ? overflow ? */
- for (i = 0; i <= 8; i++)
- ACF[i] = (int16_t) ((L_ACF[i] << temp) >> 16);
- /*endfor*/
-
- /* Initialize array P[..] and K[..] for the recursion. */
- for (i = 1; i <= 7; i++)
- K[i] = ACF[i];
- /*endfor*/
- for (i = 0; i <= 8; i++)
- P[i] = ACF[i];
- /*endfor*/
- /* Compute reflection coefficients */
- for (n = 1; n <= 8; n++, r++)
- {
- temp = P[1];
- temp = gsm_abs (temp);
- if (P[0] < temp)
- {
- for (i = n; i <= 8; i++)
- *r++ = 0;
- /*endfor*/
- return;
- }
- /*endif*/
-
- *r = gsm_div(temp, P[0]);
-
- assert(*r >= 0);
- if (P[1] > 0)
- *r = -*r; /* r[n] = sub(0, r[n]) */
- /*endif*/
- assert(*r != INT16_MIN);
- if (n == 8)
- return;
- /*endif*/
-
- /* Schur recursion */
- temp = gsm_mult_r(P[1], *r);
- P[0] = gsm_add(P[0], temp);
-
- for (m = 1; m <= 8 - n; m++)
- {
- temp = gsm_mult_r(K[m], *r);
- P[m] = gsm_add(P[m + 1], temp);
-
- temp = gsm_mult_r(P[m + 1], *r);
- K[m] = gsm_add(K[m], temp);
- }
- /*endfor*/
- }
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.2.6 */
-static void transform_to_log_area_ratios(int16_t r[8])
-{
- int16_t temp;
- int i;
-
- /* The following scaling for r[..] and LAR[..] has been used:
-
- r[..] = integer (real_r[..]*32768.); -1 <= real_r < 1.
- LAR[..] = integer (real_LAR[..] * 16384);
- with -1.625 <= real_LAR <= 1.625
- */
-
- /* Computation of the LAR[0..7] from the r[0..7] */
- for (i = 1; i <= 8; i++, r++)
- {
- temp = *r;
- temp = gsm_abs(temp);
- assert(temp >= 0);
-
- if (temp < 22118)
- {
- temp >>= 1;
- }
- else if (temp < 31130)
- {
- assert(temp >= 11059);
- temp -= 11059;
- }
- else
- {
- assert(temp >= 26112);
- temp -= 26112;
- temp <<= 2;
- }
- /*endif*/
-
- *r = (*r < 0) ? -temp : temp;
- assert(*r != INT16_MIN);
- }
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.2.7 */
-static void quantization_and_coding(int16_t LAR[8])
-{
- int16_t temp;
-
- /* This procedure needs four tables; the following equations
- give the optimum scaling for the constants:
-
- A[0..7] = integer(real_A[0..7] * 1024)
- B[0..7] = integer(real_B[0..7] * 512)
- MAC[0..7] = maximum of the LARc[0..7]
- MIC[0..7] = minimum of the LARc[0..7] */
-
-#undef STEP
-#define STEP(A,B,MAC,MIC) \
- temp = gsm_mult(A, *LAR); \
- temp = gsm_add(temp, B); \
- temp = gsm_add(temp, 256); \
- temp >>= 9; \
- *LAR = (int16_t) ((temp > MAC) \
- ? \
- MAC - MIC \
- : \
- ((temp < MIC) ? 0 : temp - MIC)); \
- LAR++;
-
- STEP(20480, 0, 31, -32);
- STEP(20480, 0, 31, -32);
- STEP(20480, 2048, 15, -16);
- STEP(20480, -2560, 15, -16);
-
- STEP(13964, 94, 7, -8);
- STEP(15360, -1792, 7, -8);
- STEP( 8534, -341, 3, -4);
- STEP( 9036, -1144, 3, -4);
-#undef STEP
-}
-/*- End of function --------------------------------------------------------*/
-
-void gsm0610_lpc_analysis(gsm0610_state_t *s,
- int16_t amp[GSM0610_FRAME_LEN],
- int16_t LARc[8])
-{
- int32_t L_ACF[9];
-
- autocorrelation(amp, L_ACF);
- reflection_coefficients(L_ACF, LARc);
- transform_to_log_area_ratios(LARc);
- quantization_and_coding(LARc);
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * gsm0610_preprocess.c - GSM 06.10 full rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the widely used GSM 06.10 code available from
- * http://kbs.cs.tu-berlin.de/~jutta/toast.html
- *
- * $Id: gsm0610_preprocess.c,v 1.9 2008/02/09 15:31:36 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <assert.h>
-#include <inttypes.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-#include <stdlib.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/bitstream.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/gsm0610.h"
-
-#include "gsm0610_local.h"
-
-/*
- 4.2.0 .. 4.2.3 PREPROCESSING SECTION
-
- After A-law to linear conversion (or directly from the
- A to D converter) the following scaling is assumed for
- input to the RPE-LTP algorithm:
-
- in: 0.1.....................12
- S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.*
-
- Where S is the sign bit, v a valid bit, and * a "don't care" bit.
- The original signal is called sop[..]
-
- out: 0.1................... 12
- S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0
-*/
-
-void gsm0610_preprocess(gsm0610_state_t *s, const int16_t amp[GSM0610_FRAME_LEN], int16_t so[GSM0610_FRAME_LEN])
-{
- int16_t z1;
- int16_t mp;
- int16_t s1;
- int16_t msp;
- int16_t SO;
- int32_t L_z2;
- int32_t L_s2;
- int32_t L_temp;
-#if !defined(__GNUC__)
- int16_t lsp;
-#endif
- int k;
-
- z1 = s->z1;
- L_z2 = s->L_z2;
- mp = s->mp;
- for (k = 0; k < GSM0610_FRAME_LEN; k++)
- {
- /* 4.2.1 Downscaling of the input signal */
- SO = (amp[k] >> 1) & ~3;
-
- assert(SO >= -0x4000); // downscaled by
- assert(SO <= 0x3FFC); // previous routine.
-
- /* 4.2.2 Offset compensation */
-
- /* This part implements a high-pass filter and requires extended
- arithmetic precision for the recursive part of this filter.
- The input of this procedure is the array so[0...159] and the
- output the array sof[ 0...159 ].
- */
- /* Compute the non-recursive part */
- s1 = SO - z1;
- z1 = SO;
-
- assert(s1 != INT16_MIN);
-
- /* Compute the recursive part */
- L_s2 = s1;
- L_s2 <<= 15;
-
- /* Perform a 31 by 16 bits multiplication */
-#if defined(__GNUC__)
- L_z2 = ((int64_t) L_z2*32735 + 0x4000) >> 15;
- /* Alternate (ANSI) version of below line does slightly different rounding:
- * L_temp = L_z2 >> 9;
- * L_temp += L_temp >> 5;
- * L_temp = (++L_temp) >> 1;
- * L_z2 = L_z2 - L_temp;
- */
- L_z2 = gsm_l_add(L_z2, L_s2);
-#else
- /* This does L_z2 = L_z2 * 0x7FD5/0x8000 + L_s2 */
- msp = (int16_t) (L_z2 >> 15);
- lsp = (int16_t) (L_z2 - ((int32_t) msp << 15));
-
- L_s2 += gsm_mult_r(lsp, 32735);
- L_temp = (int32_t) msp*32735;
- L_z2 = gsm_l_add(L_temp, L_s2);
-#endif
-
- /* Compute sof[k] with rounding */
- L_temp = gsm_l_add(L_z2, 16384);
-
- /* 4.2.3 Preemphasis */
- msp = gsm_mult_r(mp, -28180);
- mp = (int16_t) (L_temp >> 15);
- so[k] = gsm_add(mp, msp);
- }
- /*endfor*/
-
- s->z1 = z1;
- s->L_z2 = L_z2;
- s->mp = mp;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * gsm0610_rpe.c - GSM 06.10 full rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the widely used GSM 06.10 code available from
- * http://kbs.cs.tu-berlin.de/~jutta/toast.html
- *
- * $Id: gsm0610_rpe.c,v 1.15 2008/02/09 15:31:36 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <assert.h>
-#include <inttypes.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-#include <stdlib.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/bitstream.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/gsm0610.h"
-
-#include "gsm0610_local.h"
-
-/* 4.2.13 .. 4.2.17 RPE ENCODING SECTION */
-
-/* 4.2.13 */
-static void weighting_filter(const int16_t *e, // signal [-5..0.39.44] IN
- int16_t x[40])
-{
-#if defined(__GNUC__) && defined(__i386__)
- /* Table 4.4 Coefficients of the weighting filter */
- /* This must be padded to a multiple of 4 for MMX to work */
- static const int16_t gsm_H[12] =
- {
- -134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134, 0
- };
-
- __asm__ __volatile__(
- " emms;\n"
- " addl $-10,%%ecx;\n"
- " movl $0x1000,%%eax;\n"
- " movd %%eax,%%mm5;\n" /* for rounding */
- " movq %[gsm_H],%%mm1;\n"
- " movq %[gsm_H8],%%mm2;\n"
- " movq %[gsm_H16],%%mm3;\n"
- " xorl %%esi,%%esi;\n"
- " .p2align 2;\n"
- "1:;\n"
- " movq (%%ecx,%%esi,2),%%mm0;\n"
- " pmaddwd %%mm1,%%mm0;\n"
-
- " movq 8(%%ecx,%%esi,2),%%mm4;\n"
- " pmaddwd %%mm2,%%mm4;\n"
- " paddd %%mm4,%%mm0;\n"
-
- " movq 16(%%ecx,%%esi,2),%%mm4;\n"
- " pmaddwd %%mm3,%%mm4;\n"
- " paddd %%mm4,%%mm0;\n"
-
- " movq %%mm0,%%mm4;\n"
- " punpckhdq %%mm0,%%mm4;\n" /* mm4 has high int32 of mm0 dup'd */
- " paddd %%mm4,%%mm0;\n"
-
- " paddd %%mm5,%%mm0;\n" /* Add for roundoff */
- " psrad $13,%%mm0;\n"
- " packssdw %%mm0,%%mm0;\n"
- " movd %%mm0,%%eax;\n" /* eax has result */
- " movw %%ax,(%%edi,%%esi,2);\n"
- " incl %%esi;\n"
- " cmpl $39,%%esi;\n"
- " jle 1b;\n"
- " emms;\n"
- :
- : "c" (e), "D" (x), [gsm_H] "X" (*((int64_t *) gsm_H)), [gsm_H8] "X" (*((int64_t *) (gsm_H + 4))), [gsm_H16] "X" (*((int64_t *) (gsm_H + 8)))
- : "eax", "edx", "esi"
- );
-#else
- int32_t L_result;
- int k;
-
- /* The coefficients of the weighting filter are stored in a table
- (see table 4.4). The following scaling is used:
-
- H[0..10] = integer(real_H[0..10] * 8192);
- */
- /* Initialization of a temporary working array wt[0...49] */
-
- /* for (k = 0; k <= 4; k++) wt[k] = 0;
- * for (k = 5; k <= 44; k++) wt[k] = *e++;
- * for (k = 45; k <= 49; k++) wt[k] = 0;
- *
- * (e[-5..-1] and e[40..44] are allocated by the caller,
- * are initially zero and are not written anywhere.)
- */
- e -= 5;
-
- /* Compute the signal x[0..39] */
- for (k = 0; k < 40; k++)
- {
- L_result = 8192 >> 1;
-
- /* for (i = 0; i <= 10; i++)
- * {
- * L_temp = gsm_l_mult(wt[k + i], gsm_H[i]);
- * L_result = gsm_l_add(L_result, L_temp);
- * }
- */
-
-#undef STEP
-#define STEP(i,H) (e[k + i] * (int32_t) H)
-
- /* Every one of these multiplications is done twice,
- but I don't see an elegant way to optimize this.
- Do you?
- */
- L_result += STEP( 0, -134);
- L_result += STEP( 1, -374);
- // += STEP( 2, 0 );
- L_result += STEP( 3, 2054);
- L_result += STEP( 4, 5741);
- L_result += STEP( 5, 8192);
- L_result += STEP( 6, 5741);
- L_result += STEP( 7, 2054);
- // += STEP( 8, 0 );
- L_result += STEP( 9, -374);
- L_result += STEP(10, -134);
-
- /* 2 adds vs. >> 16 => 14, minus one shift to compensate for
- those we lost when replacing L_MULT by '*'. */
- L_result >>= 13;
- x[k] = saturate(L_result);
- }
- /*endfor*/
-#endif
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.2.14 */
-static void rpe_grid_selection(int16_t x[40], int16_t xM[13], int16_t *Mc_out)
-{
- int i;
- int32_t L_result;
- int32_t L_temp;
- int32_t EM; /* xxx should be L_EM? */
- int16_t Mc;
- int32_t L_common_0_3;
-
- /* The signal x[0..39] is used to select the RPE grid which is
- represented by Mc. */
-
- EM = 0;
- Mc = 0;
-
-#undef STEP
-#define STEP(m,i) \
- L_temp = x[m + 3*i] >> 2; \
- L_result += L_temp*L_temp;
-
- /* Common part of 0 and 3 */
- L_result = 0;
- STEP(0, 1);
- STEP(0, 2);
- STEP(0, 3);
- STEP(0, 4);
- STEP(0, 5);
- STEP(0, 6);
- STEP(0, 7);
- STEP(0, 8);
- STEP(0, 9);
- STEP(0, 10);
- STEP(0, 11);
- STEP(0, 12);
- L_common_0_3 = L_result;
-
- /* i = 0 */
-
- STEP(0, 0);
- L_result <<= 1; /* implicit in L_MULT */
- EM = L_result;
-
- /* i = 1 */
-
- L_result = 0;
- STEP(1, 0);
- STEP(1, 1);
- STEP(1, 2);
- STEP(1, 3);
- STEP(1, 4);
- STEP(1, 5);
- STEP(1, 6);
- STEP(1, 7);
- STEP(1, 8);
- STEP(1, 9);
- STEP(1, 10);
- STEP(1, 11);
- STEP(1, 12);
- L_result <<= 1;
- if (L_result > EM)
- {
- Mc = 1;
- EM = L_result;
- }
- /*endif*/
-
- /* i = 2 */
-
- L_result = 0;
- STEP(2, 0);
- STEP(2, 1);
- STEP(2, 2);
- STEP(2, 3);
- STEP(2, 4);
- STEP(2, 5);
- STEP(2, 6);
- STEP(2, 7);
- STEP(2, 8);
- STEP(2, 9);
- STEP(2, 10);
- STEP(2, 11);
- STEP(2, 12);
- L_result <<= 1;
- if (L_result > EM)
- {
- Mc = 2;
- EM = L_result;
- }
- /*endif*/
-
- /* i = 3 */
-
- L_result = L_common_0_3;
- STEP(3, 12);
- L_result <<= 1;
- if (L_result > EM)
- {
- Mc = 3;
- EM = L_result;
- }
- /*endif*/
-
- /* Down-sampling by a factor 3 to get the selected xM[0..12]
- RPE sequence. */
- for (i = 0; i < 13; i++)
- xM[i] = x[Mc + 3*i];
- /*endfor*/
- *Mc_out = Mc;
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.12.15 */
-static void apcm_quantization_xmaxc_to_exp_mant(int16_t xmaxc,
- int16_t *exp_out,
- int16_t *mant_out)
-{
- int16_t exp;
- int16_t mant;
-
- /* Compute exponent and mantissa of the decoded version of xmaxc */
- exp = 0;
- if (xmaxc > 15)
- exp = (int16_t) ((xmaxc >> 3) - 1);
- /*endif*/
- mant = xmaxc - (exp << 3);
-
- if (mant == 0)
- {
- exp = -4;
- mant = 7;
- }
- else
- {
- while (mant <= 7)
- {
- mant = (int16_t) (mant << 1 | 1);
- exp--;
- }
- /*endwhile*/
- mant -= 8;
- }
- /*endif*/
-
- assert(exp >= -4 && exp <= 6);
- assert(mant >= 0 && mant <= 7);
-
- *exp_out = exp;
- *mant_out = mant;
-}
-/*- End of function --------------------------------------------------------*/
-
-static void apcm_quantization(int16_t xM[13],
- int16_t xMc[13],
- int16_t *mant_out,
- int16_t *exp_out,
- int16_t *xmaxc_out)
-{
- /* Table 4.5 Normalized inverse mantissa used to compute xM/xmax */
- static const int16_t gsm_NRFAC[8] =
- {
- 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384
- };
- int i;
- int itest;
- int16_t xmax;
- int16_t xmaxc;
- int16_t temp;
- int16_t temp1;
- int16_t temp2;
- int16_t exp;
- int16_t mant;
-
- /* Find the maximum absolute value xmax of xM[0..12]. */
- xmax = 0;
- for (i = 0; i < 13; i++)
- {
- temp = xM[i];
- temp = gsm_abs(temp);
- if (temp > xmax)
- xmax = temp;
- /*endif*/
- }
- /*endfor*/
-
- /* Quantizing and coding of xmax to get xmaxc. */
- exp = 0;
- temp = xmax >> 9;
- itest = 0;
-
- for (i = 0; i <= 5; i++)
- {
- itest |= (temp <= 0);
- temp >>= 1;
-
- assert(exp <= 5);
- if (itest == 0)
- exp++;
- /*endif*/
- }
- /*endfor*/
-
- assert(exp <= 6 && exp >= 0);
- temp = (int16_t) (exp + 5);
-
- assert(temp <= 11 && temp >= 0);
- xmaxc = gsm_add((xmax >> temp), exp << 3);
-
- /* Quantizing and coding of the xM[0..12] RPE sequence
- to get the xMc[0..12] */
- apcm_quantization_xmaxc_to_exp_mant(xmaxc, &exp, &mant);
-
- /* This computation uses the fact that the decoded version of xmaxc
- can be calculated by using the exponent and the mantissa part of
- xmaxc (logarithmic table).
- So, this method avoids any division and uses only a scaling
- of the RPE samples by a function of the exponent. A direct
- multiplication by the inverse of the mantissa (NRFAC[0..7]
- found in table 4.5) gives the 3 bit coded version xMc[0..12]
- of the RPE samples.
- */
- /* Direct computation of xMc[0..12] using table 4.5 */
- assert(exp <= 4096 && exp >= -4096);
- assert(mant >= 0 && mant <= 7);
-
- temp1 = (int16_t) (6 - exp); /* Normalization by the exponent */
- temp2 = gsm_NRFAC[mant]; /* Inverse mantissa */
-
- for (i = 0; i < 13; i++)
- {
- assert(temp1 >= 0 && temp1 < 16);
-
- temp = xM[i] << temp1;
- temp = gsm_mult(temp, temp2);
- temp >>= 12;
- xMc[i] = (int16_t) (temp + 4); /* See note below */
- }
- /*endfor*/
-
- /* NOTE: This equation is used to make all the xMc[i] positive. */
- *mant_out = mant;
- *exp_out = exp;
- *xmaxc_out = xmaxc;
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.2.16 */
-static void apcm_inverse_quantization(int16_t xMc[13],
- int16_t mant,
- int16_t exp,
- int16_t xMp[13])
-{
- /* Table 4.6 Normalized direct mantissa used to compute xM/xmax */
- static const int16_t gsm_FAC[8] =
- {
- 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767
- };
- int i;
- int16_t temp;
- int16_t temp1;
- int16_t temp2;
- int16_t temp3;
-
- /* This part is for decoding the RPE sequence of coded xMc[0..12]
- samples to obtain the xMp[0..12] array. Table 4.6 is used to get
- the mantissa of xmaxc (FAC[0..7]).
- */
- vc_assert(mant >= 0 && mant <= 7);
-
- temp1 = gsm_FAC[mant]; /* See 4.2-15 for mant */
- temp2 = gsm_sub(6, exp); /* See 4.2-15 for exp */
- temp3 = gsm_asl(1, gsm_sub (temp2, 1));
-
- for (i = 0; i < 13; i++)
- {
- assert(xMc[i] >= 0 && xMc[i] <= 7); /* 3 bit unsigned */
-
- temp = (int16_t) ((xMc[i] << 1) - 7); /* Restore sign */
- assert(temp <= 7 && temp >= -7); /* 4 bit signed */
-
- temp <<= 12; /* 16 bit signed */
- temp = gsm_mult_r(temp1, temp);
- temp = gsm_add(temp, temp3);
- xMp[i] = gsm_asr(temp, temp2);
- }
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.2.17 */
-static void rpe_grid_positioning(int16_t Mc,
- int16_t xMp[13],
- int16_t ep[40])
-{
- int i = 13;
-
- /* This procedure computes the reconstructed long term residual signal
- ep[0..39] for the LTP analysis filter. The inputs are the Mc
- which is the grid position selection and the xMp[0..12] decoded
- RPE samples which are upsampled by a factor of 3 by inserting zero
- values.
- */
- assert(0 <= Mc && Mc <= 3);
-
- switch (Mc)
- {
- case 3:
- *ep++ = 0;
- case 2:
- do
- {
- *ep++ = 0;
- case 1:
- *ep++ = 0;
- case 0:
- *ep++ = *xMp++;
- }
- while (--i);
- }
- /*endswitch*/
- while (++Mc < 4)
- *ep++ = 0;
- /*endwhile*/
-}
-/*- End of function --------------------------------------------------------*/
-
-void gsm0610_rpe_encoding(gsm0610_state_t *s,
- int16_t *e, // [-5..-1][0..39][40..44]
- int16_t *xmaxc,
- int16_t *Mc,
- int16_t xMc[13])
-{
- int16_t x[40];
- int16_t xM[13];
- int16_t xMp[13];
- int16_t mant;
- int16_t exp;
-
- weighting_filter(e, x);
- rpe_grid_selection(x, xM, Mc);
-
- apcm_quantization(xM, xMc, &mant, &exp, xmaxc);
- apcm_inverse_quantization(xMc, mant, exp, xMp);
-
- rpe_grid_positioning(*Mc, xMp, e);
-}
-/*- End of function --------------------------------------------------------*/
-
-void gsm0610_rpe_decoding(gsm0610_state_t *s,
- int16_t xmaxc,
- int16_t Mcr,
- int16_t xMcr[13],
- int16_t erp[40])
-{
- int16_t exp;
- int16_t mant;
- int16_t xMp[13];
-
- apcm_quantization_xmaxc_to_exp_mant(xmaxc, &exp, &mant);
- apcm_inverse_quantization(xMcr, mant, exp, xMp);
- rpe_grid_positioning(Mcr, xMp, erp);
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * gsm0610_short_term.c - GSM 06.10 full rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the widely used GSM 06.10 code available from
- * http://kbs.cs.tu-berlin.de/~jutta/toast.html
- *
- * $Id: gsm0610_short_term.c,v 1.11 2008/02/09 15:31:36 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <assert.h>
-#include <inttypes.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-#include <stdlib.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/bitstream.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/gsm0610.h"
-
-#include "gsm0610_local.h"
-
-/* SHORT TERM ANALYSIS FILTERING SECTION */
-
-/* 4.2.8 */
-static void decode_log_area_ratios(int16_t LARc[8], int16_t *LARpp)
-{
- int16_t temp1;
-
- /* This procedure requires for efficient implementation
- two tables.
- INVA[1..8] = integer((32768*8)/real_A[1..8])
- MIC[1..8] = minimum value of the LARc[1..8]
- */
-
- /* Compute the LARpp[1..8] */
-
-#undef STEP
-#define STEP(B,MIC,INVA) \
- temp1 = gsm_add(*LARc++, MIC) << 10; \
- temp1 = gsm_sub(temp1, B << 1); \
- temp1 = gsm_mult_r (INVA, temp1); \
- *LARpp++ = gsm_add(temp1, temp1);
-
- STEP( 0, -32, 13107);
- STEP( 0, -32, 13107);
- STEP( 2048, -16, 13107);
- STEP(-2560, -16, 13107);
-
- STEP( 94, -8, 19223);
- STEP(-1792, -8, 17476);
- STEP( -341, -4, 31454);
- STEP(-1144, -4, 29708);
-
- /* NOTE: the addition of *MIC is used to restore the sign of *LARc. */
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.2.9 */
-
-/* Computation of the quantized reflection coefficients */
-
-/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8] */
-
-/* Within each frame of 160 analyzed speech samples the short term
- analysis and synthesis filters operate with four different sets of
- coefficients, derived from the previous set of decoded LARs(LARpp(j - 1))
- and the actual set of decoded LARs (LARpp(j))
-
- (Initial value: LARpp(j - 1)[1..8] = 0.)
-*/
-
-static void coefficients_0_12(int16_t *LARpp_j_1,
- int16_t *LARpp_j,
- int16_t *LARp)
-{
- int i;
-
- for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++)
- {
- *LARp = gsm_add(*LARpp_j_1 >> 2, *LARpp_j >> 2);
- *LARp = gsm_add(*LARp, *LARpp_j_1 >> 1);
- }
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-
-static void coefficients_13_26(int16_t *LARpp_j_1,
- int16_t *LARpp_j,
- int16_t *LARp)
-{
- int i;
-
- for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++)
- *LARp = gsm_add(*LARpp_j_1 >> 1, *LARpp_j >> 1);
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-
-static void coefficients_27_39(int16_t *LARpp_j_1,
- int16_t *LARpp_j,
- int16_t *LARp)
-{
- int i;
-
- for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++)
- {
- *LARp = gsm_add(*LARpp_j_1 >> 2, *LARpp_j >> 2);
- *LARp = gsm_add(*LARp, *LARpp_j >> 1);
- }
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-
-static void coefficients_40_159(int16_t *LARpp_j, int16_t *LARp)
-{
- int i;
-
- for (i = 1; i <= 8; i++)
- *LARp++ = *LARpp_j++;
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.2.9.2 */
-static void larp_to_rp(int16_t LARp[8])
-{
- int i;
- int16_t *LARpx;
- int16_t temp;
-
- /* The input to this procedure is the interpolated LARp[0..7] array.
- The reflection coefficients, rp[i], are used in the analysis
- filter and in the synthesis filter.
- */
-
- LARpx = LARp;
- for (i = 1; i <= 8; i++, LARpx++)
- {
- temp = *LARpx;
- if (temp < 0)
- {
- if (temp == INT16_MIN)
- temp = INT16_MAX;
- else
- temp = -temp;
- /*endif*/
- if (temp < 11059)
- temp <<= 1;
- else if (temp < 20070)
- temp += 11059;
- else
- temp = gsm_add(temp >> 2, 26112);
- /*endif*/
- *LARpx = -temp;
- }
- else
- {
- if (temp < 11059)
- temp <<= 1;
- else if (temp < 20070)
- temp += 11059;
- else
- temp = gsm_add(temp >> 2, 26112);
- /*endif*/
- *LARpx = temp;
- }
- /*endif*/
- }
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 4.2.10 */
-static void short_term_analysis_filtering(gsm0610_state_t *s,
- int16_t rp[8],
- int k_n, // k_end - k_start
- int16_t amp[]) // [0..n-1] IN/OUT
-{
- /* This procedure computes the short term residual signal d[..] to be fed
- to the RPE-LTP loop from the s[..] signal and from the local rp[..]
- array (quantized reflection coefficients). As the call of this
- procedure can be done in many ways (see the interpolation of the LAR
- coefficient), it is assumed that the computation begins with index
- k_start (for arrays d[..] and s[..]) and stops with index k_end
- (k_start and k_end are defined in 4.2.9.1). This procedure also
- needs to keep the array u[0..7] in memory for each call.
- */
- int16_t *u0;
- int16_t *u_top;
- int i;
- int16_t *u;
- int16_t *rpx;
- int32_t di;
- int32_t u_out;
-
- u0 = s->u;
- u_top = u0 + 8;
-
- for (i = 0; i < k_n; i++)
- {
- di =
- u_out = amp[i];
- for (rpx = rp, u = u0; u < u_top; )
- {
- int32_t ui;
- int32_t rpi;
-
- ui = *u;
- *u++ = (int16_t) u_out;
- rpi = *rpx++;
- u_out = ui + (((rpi*di) + 0x4000) >> 15);
- di = di + (((rpi*ui) + 0x4000) >> 15);
- u_out = saturate(u_out);
- di = saturate(di);
- }
- /*endfor*/
- amp[i] = (int16_t) di;
- }
- /*endfor*/
-}
-/*- End of function --------------------------------------------------------*/
-
-static void short_term_synthesis_filtering(gsm0610_state_t *s,
- int16_t rrp[8],
- int k, // k_end - k_start
- int16_t *wt, // [0..k - 1]
- int16_t *sr) // [0..k - 1]
-{
- int16_t *v;
- int i;
- int16_t sri;
- int16_t tmp1;
- int16_t tmp2;
-
- v = s->v;
- while (k--)
- {
- sri = *wt++;
- for (i = 8; i--; )
- {
- tmp1 = rrp[i];
- tmp2 = v[i];
- tmp2 = ((tmp1 == INT16_MIN && tmp2 == INT16_MIN)
- ?
- INT16_MAX
- :
- (int16_t) (((int32_t) tmp1*(int32_t) tmp2 + 16384) >> 15) & 0xFFFF);
-
- sri = gsm_sub(sri, tmp2);
-
- tmp1 = ((tmp1 == INT16_MIN && sri == INT16_MIN)
- ?
- INT16_MAX
- :
- (int16_t) (((int32_t) tmp1*(int32_t) sri + 16384) >> 15) & 0xFFFF);
-
- v[i + 1] = gsm_add(v[i], tmp1);
- }
- /*endfor*/
- *sr++ =
- v[0] = sri;
- }
- /*endwhile*/
-}
-/*- End of function --------------------------------------------------------*/
-
-void gsm0610_short_term_analysis_filter(gsm0610_state_t *s,
- int16_t LARc[8],
- int16_t amp[GSM0610_FRAME_LEN])
-{
- int16_t *LARpp_j;
- int16_t *LARpp_j_1;
- int16_t LARp[8];
-
- LARpp_j = s->LARpp[s->j];
- LARpp_j_1 = s->LARpp[s->j ^= 1];
-
- decode_log_area_ratios(LARc, LARpp_j);
-
- coefficients_0_12(LARpp_j_1, LARpp_j, LARp);
- larp_to_rp(LARp);
- short_term_analysis_filtering(s, LARp, 13, amp);
-
- coefficients_13_26(LARpp_j_1, LARpp_j, LARp);
- larp_to_rp(LARp);
- short_term_analysis_filtering(s, LARp, 14, amp + 13);
-
- coefficients_27_39(LARpp_j_1, LARpp_j, LARp);
- larp_to_rp(LARp);
- short_term_analysis_filtering(s, LARp, 13, amp + 27);
-
- coefficients_40_159(LARpp_j, LARp);
- larp_to_rp(LARp);
- short_term_analysis_filtering(s, LARp, 120, amp + 40);
-}
-/*- End of function --------------------------------------------------------*/
-
-void gsm0610_short_term_synthesis_filter(gsm0610_state_t *s,
- int16_t LARcr[8],
- int16_t wt[GSM0610_FRAME_LEN],
- int16_t amp[GSM0610_FRAME_LEN])
-{
- int16_t *LARpp_j;
- int16_t *LARpp_j_1;
- int16_t LARp[8];
-
- LARpp_j = s->LARpp[s->j];
- LARpp_j_1 = s->LARpp[s->j ^= 1];
-
- decode_log_area_ratios(LARcr, LARpp_j);
-
- coefficients_0_12(LARpp_j_1, LARpp_j, LARp);
- larp_to_rp(LARp);
- short_term_synthesis_filtering(s, LARp, 13, wt, amp);
-
- coefficients_13_26(LARpp_j_1, LARpp_j, LARp);
- larp_to_rp(LARp);
- short_term_synthesis_filtering(s, LARp, 14, wt + 13, amp + 13);
-
- coefficients_27_39(LARpp_j_1, LARpp_j, LARp);
- larp_to_rp(LARp);
- short_term_synthesis_filtering(s, LARp, 13, wt + 27, amp + 27);
-
- coefficients_40_159(LARpp_j, LARp);
- larp_to_rp(LARp);
- short_term_synthesis_filtering(s, LARp, 120, wt + 40, amp + 40);
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * ima_adpcm.c - Conversion routines between linear 16 bit PCM data and
- * IMA/DVI/Intel ADPCM format.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2001, 2004 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: ima_adpcm.c,v 1.21 2008/02/09 15:33:40 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <inttypes.h>
-#include <string.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/ima_adpcm.h"
-
-/*
- * Intel/DVI ADPCM coder/decoder.
- *
- * The algorithm for this coder was taken from the IMA Compatability Project
- * proceedings, Vol 2, Number 2; May 1992.
- *
- * The RTP payload specs. reference a variant of DVI, called VDVI. This attempts to
- * further compresses, in a variable bit rate manner, by expressing the 4 bit codes
- * from the DVI codec as:
- *
- * 0 00
- * 1 010
- * 2 1100
- * 3 11100
- * 4 111100
- * 5 1111100
- * 6 11111100
- * 7 11111110
- * 8 10
- * 9 011
- * 10 1101
- * 11 11101
- * 12 111101
- * 13 1111101
- * 14 11111101
- * 15 11111111
- *
- * Any left over bits in the last octet of an encoded burst are set to one.
- */
-
-/*
- DVI4 uses an adaptive delta pulse code modulation (ADPCM) encoding
- scheme that was specified by the Interactive Multimedia Association
- (IMA) as the "IMA ADPCM wave type". However, the encoding defined
- here as DVI4 differs in three respects from the IMA specification:
-
- o The RTP DVI4 header contains the predicted value rather than the
- first sample value contained the IMA ADPCM block header.
-
- o IMA ADPCM blocks contain an odd number of samples, since the first
- sample of a block is contained just in the header (uncompressed),
- followed by an even number of compressed samples. DVI4 has an
- even number of compressed samples only, using the `predict' word
- from the header to decode the first sample.
-
- o For DVI4, the 4-bit samples are packed with the first sample in
- the four most significant bits and the second sample in the four
- least significant bits. In the IMA ADPCM codec, the samples are
- packed in the opposite order.
-
- Each packet contains a single DVI block. This profile only defines
- the 4-bit-per-sample version, while IMA also specified a 3-bit-per-
- sample encoding.
-
- The "header" word for each channel has the following structure:
-
- int16 predict; // predicted value of first sample
- // from the previous block (L16 format)
- u_int8 index; // current index into stepsize table
- u_int8 reserved; // set to zero by sender, ignored by receiver
-
- Each octet following the header contains two 4-bit samples, thus the
- number of samples per packet MUST be even because there is no means
- to indicate a partially filled last octet.
-*/
-
-#define STEP_MAX 88
-
-/* Intel ADPCM step variation table */
-static const int step_size[STEP_MAX + 1] =
-{
- 7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
- 19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
- 50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
- 130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
- 337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
- 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,
- 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
- 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
- 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
-};
-
-static const int step_adjustment[8] =
-{
- -1, -1, -1, -1, 2, 4, 6, 8
-};
-
-static const struct
-{
- uint8_t code;
- uint8_t bits;
-} vdvi_encode[] =
-{
- {0x00, 2},
- {0x02, 3},
- {0x0C, 4},
- {0x1C, 5},
- {0x3C, 6},
- {0x7C, 7},
- {0xFC, 8},
- {0xFE, 8},
- {0x02, 2},
- {0x03, 3},
- {0x0D, 4},
- {0x1D, 5},
- {0x3D, 6},
- {0x7D, 7},
- {0xFD, 8},
- {0xFF, 8}
-};
-
-static const struct
-{
- uint16_t code;
- uint16_t mask;
- uint8_t bits;
-} vdvi_decode[] =
-{
- {0x0000, 0xC000, 2},
- {0x4000, 0xE000, 3},
- {0xC000, 0xF000, 4},
- {0xE000, 0xF800, 5},
- {0xF000, 0xFC00, 6},
- {0xF800, 0xFE00, 7},
- {0xFC00, 0xFF00, 8},
- {0xFE00, 0xFF00, 8},
- {0x8000, 0xC000, 2},
- {0x6000, 0xE000, 3},
- {0xD000, 0xF000, 4},
- {0xE800, 0xF800, 5},
- {0xF400, 0xFC00, 6},
- {0xFA00, 0xFE00, 7},
- {0xFD00, 0xFF00, 8},
- {0xFF00, 0xFF00, 8}
-};
-
-static int16_t decode(ima_adpcm_state_t *s, uint8_t adpcm)
-{
- int e;
- int ss;
- int16_t linear;
-
- /* e = (adpcm+0.5)*step/4 */
- ss = step_size[s->step_index];
- e = ss >> 3;
- if (adpcm & 0x01)
- e += (ss >> 2);
- /*endif*/
- if (adpcm & 0x02)
- e += (ss >> 1);
- /*endif*/
- if (adpcm & 0x04)
- e += ss;
- /*endif*/
- if (adpcm & 0x08)
- e = -e;
- /*endif*/
- linear = saturate(s->last + e);
- s->last = linear;
- s->step_index += step_adjustment[adpcm & 0x07];
- if (s->step_index < 0)
- s->step_index = 0;
- else if (s->step_index > STEP_MAX)
- s->step_index = STEP_MAX;
- /*endif*/
- return linear;
-}
-/*- End of function --------------------------------------------------------*/
-
-static uint8_t encode(ima_adpcm_state_t *s, int16_t linear)
-{
- int e;
- int ss;
- int adpcm;
- int diff;
- int initial_e;
-
- ss = step_size[s->step_index];
- initial_e =
- e = linear - s->last;
- diff = ss >> 3;
- adpcm = (uint8_t) 0x00;
- if (e < 0)
- {
- adpcm = (uint8_t) 0x08;
- e = -e;
- }
- /*endif*/
- if (e >= ss)
- {
- adpcm |= (uint8_t) 0x04;
- e -= ss;
- }
- /*endif*/
- ss >>= 1;
- if (e >= ss)
- {
- adpcm |= (uint8_t) 0x02;
- e -= ss;
- }
- /*endif*/
- ss >>= 1;
- if (e >= ss)
- {
- adpcm |= (uint8_t) 0x01;
- e -= ss;
- }
- /*endif*/
-
- if (initial_e < 0)
- diff = -(diff - initial_e - e);
- else
- diff = diff + initial_e - e;
- /*endif*/
- s->last = saturate(diff + s->last);
- s->step_index += step_adjustment[adpcm & 0x07];
- if (s->step_index < 0)
- s->step_index = 0;
- else if (s->step_index > STEP_MAX)
- s->step_index = STEP_MAX;
- /*endif*/
- return (uint8_t) adpcm;
-}
-/*- End of function --------------------------------------------------------*/
-
-ima_adpcm_state_t *ima_adpcm_init(ima_adpcm_state_t *s, int variant, int chunk_size)
-{
- if (s == NULL)
- {
- if ((s = (ima_adpcm_state_t *) malloc(sizeof(*s))) == NULL)
- return NULL;
- }
- /*endif*/
- memset(s, 0, sizeof(*s));
- s->variant = variant;
- s->chunk_size = chunk_size;
- return s;
-}
-/*- End of function --------------------------------------------------------*/
-
-int ima_adpcm_release(ima_adpcm_state_t *s)
-{
- free(s);
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-int ima_adpcm_decode(ima_adpcm_state_t *s,
- int16_t amp[],
- const uint8_t ima_data[],
- int ima_bytes)
-{
- int i;
- int j;
- int samples;
- uint16_t code;
-
- samples = 0;
- switch (s->variant)
- {
- case IMA_ADPCM_IMA4:
- i = 0;
- if (s->chunk_size == 0)
- {
- amp[samples++] = (ima_data[1] << 8) | ima_data[0];
- s->step_index = ima_data[2];
- s->last = amp[0];
- i = 4;
- }
- for ( ; i < ima_bytes; i++)
- {
- amp[samples++] = decode(s, ima_data[i] & 0xF);
- amp[samples++] = decode(s, (ima_data[i] >> 4) & 0xF);
- }
- /*endfor*/
- break;
- case IMA_ADPCM_DVI4:
- i = 0;
- if (s->chunk_size == 0)
- {
- s->last = (int16_t) ((ima_data[0] << 8) | ima_data[1]);
- s->step_index = ima_data[2];
- i = 4;
- }
- for ( ; i < ima_bytes; i++)
- {
- amp[samples++] = decode(s, (ima_data[i] >> 4) & 0xF);
- amp[samples++] = decode(s, ima_data[i] & 0xF);
- }
- /*endfor*/
- break;
- case IMA_ADPCM_VDVI:
- i = 0;
- if (s->chunk_size == 0)
- {
- s->last = (int16_t) ((ima_data[0] << 8) | ima_data[1]);
- s->step_index = ima_data[2];
- i = 4;
- }
- code = 0;
- s->bits = 0;
- for (;;)
- {
- if (s->bits <= 8)
- {
- if (i >= ima_bytes)
- break;
- /*endif*/
- code |= ((uint16_t) ima_data[i++] << (8 - s->bits));
- s->bits += 8;
- }
- /*endif*/
- for (j = 0; j < 8; j++)
- {
- if ((vdvi_decode[j].mask & code) == vdvi_decode[j].code)
- break;
- if ((vdvi_decode[j + 8].mask & code) == vdvi_decode[j + 8].code)
- {
- j += 8;
- break;
- }
- /*endif*/
- }
- /*endfor*/
- amp[samples++] = decode(s, (uint8_t) j);
- code <<= vdvi_decode[j].bits;
- s->bits -= vdvi_decode[j].bits;
- }
- /*endfor*/
- /* Use up the remanents of the last octet */
- while (s->bits > 0)
- {
- for (j = 0; j < 8; j++)
- {
- if ((vdvi_decode[j].mask & code) == vdvi_decode[j].code)
- break;
- /*endif*/
- if ((vdvi_decode[j + 8].mask & code) == vdvi_decode[j + 8].code)
- {
- j += 8;
- break;
- }
- /*endif*/
- }
- /*endfor*/
- if (vdvi_decode[j].bits > s->bits)
- break;
- /*endif*/
- amp[samples++] = decode(s, (uint8_t) j);
- code <<= vdvi_decode[j].bits;
- s->bits -= vdvi_decode[j].bits;
- }
- /*endwhile*/
- break;
- }
- /*endswitch*/
- return samples;
-}
-/*- End of function --------------------------------------------------------*/
-
-int ima_adpcm_encode(ima_adpcm_state_t *s,
- uint8_t ima_data[],
- const int16_t amp[],
- int len)
-{
- int i;
- int bytes;
- uint8_t code;
-
- bytes = 0;
- switch (s->variant)
- {
- case IMA_ADPCM_IMA4:
- i = 0;
- if (s->chunk_size == 0)
- {
- ima_data[bytes++] = (uint8_t)amp[1];
- ima_data[bytes++] = (uint8_t)(amp[1] >> 8);
- ima_data[bytes++] = (uint8_t)s->step_index;
- ima_data[bytes++] = 0;
- s->last = amp[1];
- s->bits = 0;
- i = 1;
- }
- for ( ; i < len; i++)
- {
- s->ima_byte = (uint8_t) ((s->ima_byte >> 4) | (encode(s, amp[i]) << 4));
- if ((s->bits++ & 1))
- ima_data[bytes++] = (uint8_t) s->ima_byte;
- /*endif*/
- }
- /*endfor*/
- break;
- case IMA_ADPCM_DVI4:
- if (s->chunk_size == 0)
- {
- ima_data[bytes++] = (uint8_t) (s->last >> 8);
- ima_data[bytes++] = (uint8_t) s->last;
- ima_data[bytes++] = (uint8_t) s->step_index;
- ima_data[bytes++] = 0;
- }
- for (i = 0; i < len; i++)
- {
- s->ima_byte = (uint8_t) ((s->ima_byte << 4) | encode(s, amp[i]));
- if ((s->bits++ & 1))
- ima_data[bytes++] = (uint8_t) s->ima_byte;
- /*endif*/
- }
- /*endfor*/
- break;
- case IMA_ADPCM_VDVI:
- if (s->chunk_size == 0)
- {
- ima_data[bytes++] = (uint8_t) (s->last >> 8);
- ima_data[bytes++] = (uint8_t) s->last;
- ima_data[bytes++] = (uint8_t) s->step_index;
- ima_data[bytes++] = 0;
- }
- s->bits = 0;
- for (i = 0; i < len; i++)
- {
- code = encode(s, amp[i]);
- s->ima_byte = (s->ima_byte << vdvi_encode[code].bits) | vdvi_encode[code].code;
- s->bits += vdvi_encode[code].bits;
- if (s->bits >= 8)
- {
- s->bits -= 8;
- ima_data[bytes++] = (uint8_t) (s->ima_byte >> s->bits);
- }
- /*endif*/
- }
- /*endfor*/
- if (s->bits)
- ima_data[bytes++] = (uint8_t) (((s->ima_byte << 8) | 0xFF) >> s->bits);
- /*endif*/
- break;
- }
- /*endswitch*/
- return bytes;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-# Microsoft Developer Studio Project File - Name="voipcodecs" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=voipcodecs - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "voipcodecs.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "voipcodecs.mak" CFG="voipcodecs - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "voipcodecs - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "voipcodecs - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "voipcodecs - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D HAVE_TGMATH_H /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /Zi /O2 /I "." /I "..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D HAVE_TGMATH_H /D "_WINDLL" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib ws2_32.lib winmm.lib /nologo /dll /map /debug /machine:I386 /out:"Release/libvoipcodecs.dll"
-
-!ELSEIF "$(CFG)" == "voipcodecs - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D HAVE_TGMATH_H /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "." /I "..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D HAVE_TGMATH_H /FR /FD /GZ /c
-# SUBTRACT CPP /WX /YX
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib ws2_32.lib winmm.lib /nologo /dll /incremental:no /map /debug /machine:I386 /out:"Debug/libvoipcodecs.dll" /pdbtype:sept
-# SUBTRACT LINK32 /nodefaultlib
-
-!ENDIF
-
-# Begin Target
-
-# Name "voipcodecs - Win32 Release"
-# Name "voipcodecs - Win32 Debug"
-# Begin Group "Source Files"\r
-# Begin Source File\r
-\r
-SOURCE=.\bit_operations.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\bitstream.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\g711.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\g722_encode.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\g722_decode.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\g726.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\gsm0610_decode.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\gsm0610_encode.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\gsm0610_long_term.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\gsm0610_lpc.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\gsm0610_preprocess.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\gsm0610_rpe.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\gsm0610_short_term.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\ima_adpcm.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\lpc10_analyse.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\lpc10_decode.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\lpc10_encode.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\lpc10_placev.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\lpc10_voicing.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\oki_adpcm.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\vector_int.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/bit_operations.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/bitstream.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/dc_restore.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/g711.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/g722.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/g726.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/gsm0610.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/ima_adpcm.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/lpc10.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/oki_adpcm.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/telephony.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs/vector_int.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\voipcodecs.h\r
-# End Source File\r
-# End Group\r
-\r
-# Begin Group "Resource Files"\r
-\r
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
-# End Group\r
-# End Target\r
-# End Project\r
+++ /dev/null
-
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libvoipcodecs", "libvoipcodecs.vcproj", "{CF70F278-3364-4395-A2E1-23501C9B8AD2}"
- ProjectSection(ProjectDependencies) = postProject
- {1CED5987-A529-46DC-B30F-870D85FF9C94} = {1CED5987-A529-46DC-B30F-870D85FF9C94}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "at_dictionary_gen", "src\msvc\at_dictionary_gen.vcproj", "{1CED5987-A529-46DC-B30F-870D85FF9C94}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.ActiveCfg = Debug|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Debug|Win32.Build.0 = Debug|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.ActiveCfg = Release|Win32
- {CF70F278-3364-4395-A2E1-23501C9B8AD2}.Release|Win32.Build.0 = Release|Win32
- {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.ActiveCfg = Debug|Win32
- {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.Build.0 = Debug|Win32
- {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.ActiveCfg = Release|Win32
- {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * lpc10_analyse.c - LPC10 low bit rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the U.S. Department of Defense reference
- * implementation of the LPC-10 2400 bps Voice Coder. They do not
- * exert copyright claims on their code, and it may be freely used.
- *
- * $Id: lpc10_analyse.c,v 1.15 2008/02/09 15:31:36 steveu Exp $
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <inttypes.h>
-#include <memory.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/lpc10.h"
-
-#include "lpc10_encdecs.h"
-
-static __inline__ float energyf(float amp[], int len)
-{
- int i;
- float rms;
-
- rms = 0.0f;
- for (i = 0; i < len; i++)
- rms += amp[i]*amp[i];
- rms = sqrtf(rms/len);
- return rms;
-}
-/*- End of function --------------------------------------------------------*/
-
-static void remove_dc_bias(float speech[], int len, float sigout[])
-{
- float bias;
- int i;
-
- bias = 0.0f;
- for (i = 0; i < len; i++)
- bias += speech[i];
- bias /= len;
- for (i = 0; i < len; i++)
- sigout[i] = speech[i] - bias;
-}
-/*- End of function --------------------------------------------------------*/
-
-static void eval_amdf(float speech[],
- int32_t lpita,
- const int32_t tau[],
- int32_t ltau,
- int32_t maxlag,
- float amdf[],
- int32_t *minptr,
- int32_t *maxptr)
-{
- float sum;
- int i;
- int j;
- int n1;
- int n2;
-
- *minptr = 0;
- *maxptr = 0;
- for (i = 0; i < ltau; i++)
- {
- n1 = (maxlag - tau[i])/2 + 1;
- n2 = n1 + lpita - 1;
- sum = 0.0f;
- for (j = n1; j <= n2; j += 4)
- sum += fabsf(speech[j - 1] - speech[j + tau[i] - 1]);
- amdf[i] = sum;
- if (amdf[i] < amdf[*minptr])
- *minptr = i;
- if (amdf[i] > amdf[*maxptr])
- *maxptr = i;
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-static void eval_highres_amdf(float speech[],
- int32_t lpita,
- const int32_t tau[],
- int32_t ltau,
- float amdf[],
- int32_t *minptr,
- int32_t *maxptr,
- int32_t *mintau)
-{
- float amdf2[6];
- int32_t tau2[6];
- int32_t minp2;
- int32_t ltau2;
- int32_t maxp2;
- int32_t minamd;
- int i;
- int i2;
- int ptr;
-
- /* Compute full AMDF using log spaced lags, find coarse minimum */
- eval_amdf(speech, lpita, tau, ltau, tau[ltau - 1], amdf, minptr, maxptr);
- *mintau = tau[*minptr];
- minamd = (int32_t) amdf[*minptr];
-
- /* Build table containing all lags within +/- 3 of the AMDF minimum,
- excluding all that have already been computed */
- ltau2 = 0;
- ptr = *minptr - 2;
- i2 = min(*mintau + 4, tau[ltau - 1]);
- for (i = max(*mintau - 3, 41); i < i2; i++)
- {
- while (tau[ptr] < i)
- ptr++;
- if (tau[ptr] != i)
- tau2[ltau2++] = i;
- }
- /* Compute AMDF of the new lags, if there are any, and choose one
- if it is better than the coarse minimum */
- if (ltau2 > 0)
- {
- eval_amdf(speech, lpita, tau2, ltau2, tau[ltau - 1], amdf2, &minp2, &maxp2);
- if (amdf2[minp2] < (float) minamd)
- {
- *mintau = tau2[minp2];
- minamd = (int32_t) amdf2[minp2];
- }
- }
- /* Check one octave up, if there are any lags not yet computed */
- if (*mintau >= 80)
- {
- i = *mintau/2;
- if ((i & 1) == 0)
- {
- ltau2 = 2;
- tau2[0] = i - 1;
- tau2[1] = i + 1;
- }
- else
- {
- ltau2 = 1;
- tau2[0] = i;
- }
- eval_amdf(speech, lpita, tau2, ltau2, tau[ltau - 1], amdf2, &minp2, &maxp2);
- if (amdf2[minp2] < (float) minamd)
- {
- *mintau = tau2[minp2];
- minamd = (int32_t) amdf2[minp2];
- *minptr -= 20;
- }
- }
- /* Force minimum of the AMDF array to the high resolution minimum */
- amdf[*minptr] = (float) minamd;
- /* Find maximum of AMDF within 1/2 octave of minimum */
- *maxptr = max(*minptr - 5, 0);
- i2 = min(*minptr + 6, ltau);
- for (i = *maxptr; i < i2; i++)
- {
- if (amdf[i] > amdf[*maxptr])
- *maxptr = i;
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-static void dynamic_pitch_tracking(lpc10_encode_state_t *s,
- float amdf[],
- int32_t ltau,
- int32_t *minptr,
- int32_t voice,
- int32_t *pitch,
- int32_t *midx)
-{
- int32_t pbar;
- float sbar;
- int32_t path[2];
- int32_t i;
- int32_t j;
- float alpha;
- float minsc;
- float maxsc;
-
- /* Calculate the confidence factor ALPHA, used as a threshold slope in */
- /* SEESAW. If unvoiced, set high slope so that every point in P array */
- /*is marked as a potential pitch frequency. A scaled up version (ALPHAX )*/
- /* is used to maintain arithmetic precision. */
- if (voice == 1)
- s->alphax = s->alphax*0.75f + amdf[*minptr - 1]*0.5f;
- else
- s->alphax *= 0.984375f;
- alpha = s->alphax/16;
- if (voice == 0 && s->alphax < 128.0f)
- alpha = 8.0f;
- /* SEESAW: Construct a pitch pointer array and intermediate winner function */
- /* Left to right pass: */
- s->p[s->ipoint][0] = 1;
- pbar = 1;
- sbar = s->s[0];
- for (i = 0; i < ltau; i++)
- {
- sbar += alpha;
- if (sbar < s->s[i])
- {
- s->s[i] = sbar;
- }
- else
- {
- pbar = i + 1;
- sbar = s->s[i];
- }
- s->p[s->ipoint][i] = pbar;
- }
- /* Right to left pass: */
- sbar = s->s[pbar - 1];
- for (i = pbar - 2; i >= 0; i--)
- {
- sbar += alpha;
- if (sbar < s->s[i])
- {
- s->s[i] = sbar;
- s->p[s->ipoint][i] = pbar;
- }
- else
- {
- pbar = s->p[s->ipoint][i];
- i = pbar - 1;
- sbar = s->s[i];
- }
- }
- /* Update S using AMDF */
- /* Find maximum, minimum, and location of minimum */
- s->s[0] += amdf[0]/2;
- minsc = s->s[0];
- maxsc = minsc;
- *midx = 1;
- for (i = 1; i < ltau; i++)
- {
- s->s[i] += amdf[i]/2;
- if (s->s[i] > maxsc)
- maxsc = s->s[i];
- if (s->s[i] < minsc)
- {
- *midx = i + 1;
- minsc = s->s[i];
- }
- }
- /* Subtract MINSC from S to prevent overflow */
- for (i = 0; i < ltau; i++)
- s->s[i] -= minsc;
- maxsc -= minsc;
- /* Use higher octave pitch if significant null there */
- j = 0;
- for (i = 20; i <= 40; i += 10)
- {
- if (*midx > i)
- {
- if (s->s[*midx - i - 1] < maxsc / 4)
- j = i;
- }
- }
- *midx -= j;
- /* TRACE: look back two frames to find minimum cost pitch estimate */
- *pitch = *midx;
- for (i = 0, j = s->ipoint; i < 2; i++, j++)
- {
- *pitch = s->p[j & 1][*pitch - 1];
- path[i] = *pitch;
- }
-
- /* The following statement subtracts one from IPOINT, mod DEPTH. I */
- /* think the author chose to add DEPTH-1, instead of subtracting 1, */
- /* because then it will work even if MOD doesn't work as desired on */
- /* negative arguments. */
- s->ipoint = (s->ipoint + 1) & 1;
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Detection of onsets in (or slightly preceding) the futuremost frame of speech. */
-static void onset(lpc10_encode_state_t *s,
- float *pebuf,
- int32_t osbuf[],
- int32_t *osptr,
- int32_t oslen,
- int32_t sbufl,
- int32_t sbufh,
- int32_t lframe)
-{
- int32_t i;
- float r1;
- float l2sum2;
-
- pebuf -= sbufl;
-
- if (s->hyst)
- s->lasti -= lframe;
- for (i = sbufh - lframe + 1; i <= sbufh; i++)
- {
- /* Compute FPC; Use old FPC on divide by zero; Clamp FPC to +/- 1. */
- s->n = (pebuf[i]*pebuf[i - 1] + s->n*63.0f)/64.0f;
- /* Computing 2nd power */
- r1 = pebuf[i - 1];
- s->d__ = (r1*r1 + s->d__*63.0f)/64.0f;
- if (s->d__ != 0.0f)
- {
- if (fabsf(s->n) > s->d__)
- s->fpc = r_sign(1.0f, s->n);
- else
- s->fpc = s->n/s->d__;
- }
- /* Filter FPC */
- l2sum2 = s->l2buf[s->l2ptr1 - 1];
- s->l2sum1 = s->l2sum1 - s->l2buf[s->l2ptr2 - 1] + s->fpc;
- s->l2buf[s->l2ptr2 - 1] = s->l2sum1;
- s->l2buf[s->l2ptr1 - 1] = s->fpc;
- s->l2ptr1 = (s->l2ptr1 & 0xF) + 1;
- s->l2ptr2 = (s->l2ptr2 & 0xF) + 1;
- if (fabsf(s->l2sum1 - l2sum2) > 1.7f)
- {
- if (!s->hyst)
- {
- /* Ignore if buffer full */
- if (*osptr <= oslen)
- {
- osbuf[*osptr - 1] = i - 9;
- (*osptr)++;
- }
- s->hyst = TRUE;
- }
- s->lasti = i;
- /* After one onset detection, at least OSHYST sample times must go */
- /* by before another is allowed to occur. */
- }
- else if (s->hyst && i - s->lasti >= 10)
- {
- s->hyst = FALSE;
- }
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Load a covariance matrix. */
-static void mload(int32_t order, int32_t awins, int32_t awinf, float speech[], float phi[], float psi[])
-{
- int32_t start;
- int i;
- int r;
-
- start = awins + order;
- for (r = 1; r <= order; r++)
- {
- phi[r - 1] = 0.0f;
- for (i = start; i <= awinf; i++)
- phi[r - 1] += speech[i - 2]*speech[i - r - 1];
- }
-
- /* Load last element of vector PSI */
- psi[order - 1] = 0.0f;
- for (i = start - 1; i < awinf; i++)
- psi[order - 1] += speech[i]*speech[i - order];
- /* End correct to get additional columns of phi */
- for (r = 1; r < order; r++)
- {
- for (i = 1; i <= r; i++)
- {
- phi[i*order + r] = phi[(i - 1)*order + r - 1]
- - speech[awinf - (r + 1)]*speech[awinf - (i + 1)]
- + speech[start - (r + 2)]*speech[start - (i + 2)];
- }
- }
- /* End correct to get additional elements of PSI */
- for (i = 0; i < order - 1; i++)
- {
- psi[i] = phi[i + 1]
- - speech[start - 2]*speech[start - i - 3]
- + speech[awinf - 1]*speech[awinf - i - 2];
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Preemphasize speech with a single-zero filter. */
-/* (When coef = .9375, preemphasis is as in LPC43.) */
-static float preemp(float inbuf[], float pebuf[], int nsamp, float coeff, float z)
-{
- float temp;
- int i;
-
- for (i = 0; i < nsamp; i++)
- {
- temp = inbuf[i] - coeff*z;
- z = inbuf[i];
- pebuf[i] = temp;
- }
- return z;
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Invert a covariance matrix using Choleski decomposition method. */
-static void invert(int32_t order, float phi[], float psi[], float rc[])
-{
- float r1;
- int32_t i;
- int32_t j;
- int32_t k;
- float v[10][10];
-
- for (j = 0; j < order; j++)
- {
- for (i = j; i < order; i++)
- v[j][i] = phi[i + j*order];
- for (k = 0; k < j; k++)
- {
- r1 = v[k][j]*v[k][k];
- for (i = j; i <= order; i++)
- v[j][i] -= v[k][i]*r1;
- }
- /* Compute intermediate results, which are similar to RC's */
- if (fabsf(v[j][j]) < 1.0e-10f)
- {
- for (i = j; i < order; i++)
- rc[i] = 0.0f;
- return;
- }
- rc[j] = psi[j];
- for (k = 0; k < j; k++)
- rc[j] -= rc[k]*v[k][j];
- v[j][j] = 1.0f/v[j][j];
- rc[j] *= v[j][j];
- r1 = min(rc[j], 0.999f);
- rc[j] = max(r1, -0.999f);
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Check RC's, repeat previous frame's RC's if unstable */
-static int rcchk(int order, float rc1f[], float rc2f[])
-{
- int i;
-
- for (i = 0; i < order; i++)
- {
- if (fabsf(rc2f[i]) > 0.99f)
- {
- for (i = 0; i < order; i++)
- rc2f[i] = rc1f[i];
- break;
- }
- }
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-static void lpfilt(float inbuf[], float lpbuf[], int32_t len, int32_t nsamp)
-{
- int32_t j;
- float t;
-
- /* 31 point equiripple FIR LPF */
- /* Linear phase, delay = 15 samples */
- /* Passband: ripple = 0.25 dB, cutoff = 800 Hz */
- /* Stopband: atten. = 40. dB, cutoff = 1240 Hz */
-
- for (j = len - nsamp; j < len; j++)
- {
- t = (inbuf[j] + inbuf[j - 30]) * -0.0097201988f;
- t += (inbuf[j - 1] + inbuf[j - 29]) * -0.0105179986f;
- t += (inbuf[j - 2] + inbuf[j - 28]) * -0.0083479648f;
- t += (inbuf[j - 3] + inbuf[j - 27]) * 5.860774e-4f;
- t += (inbuf[j - 4] + inbuf[j - 26]) * 0.0130892089f;
- t += (inbuf[j - 5] + inbuf[j - 25]) * 0.0217052232f;
- t += (inbuf[j - 6] + inbuf[j - 24]) * 0.0184161253f;
- t += (inbuf[j - 7] + inbuf[j - 23]) * 3.39723e-4f;
- t += (inbuf[j - 8] + inbuf[j - 22]) * -0.0260797087f;
- t += (inbuf[j - 9] + inbuf[j - 21]) * -0.0455563702f;
- t += (inbuf[j - 10] + inbuf[j - 20]) * -0.040306855f;
- t += (inbuf[j - 11] + inbuf[j - 19]) * 5.029835e-4f;
- t += (inbuf[j - 12] + inbuf[j - 18]) * 0.0729262903f;
- t += (inbuf[j - 13] + inbuf[j - 17]) * 0.1572008878f;
- t += (inbuf[j - 14] + inbuf[j - 16]) * 0.2247288674f;
- t += inbuf[j - 15] * 0.250535965f;
- lpbuf[j] = t;
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-/* 2nd order inverse filter, speech is decimated 4:1 */
-static void ivfilt(float lpbuf[], float ivbuf[], int32_t len, int32_t nsamp, float ivrc[])
-{
- int32_t i;
- int32_t j;
- int32_t k;
- float r[3];
- float pc1;
- float pc2;
-
- /* Calculate autocorrelations */
- for (i = 1; i <= 3; i++)
- {
- r[i - 1] = 0.0f;
- k = (i - 1) << 2;
- for (j = (i << 2) + len - nsamp; j <= len; j += 2)
- r[i - 1] += lpbuf[j - 1]*lpbuf[j - k - 1];
- }
- /* Calculate predictor coefficients */
- pc1 = 0.0f;
- pc2 = 0.0f;
- ivrc[0] = 0.0f;
- ivrc[1] = 0.0f;
- if (r[0] > 1.0e-10f)
- {
- ivrc[0] = r[1]/r[0];
- ivrc[1] = (r[2] - ivrc[0]*r[1])/(r[0] - ivrc[0]*r[1]);
- pc1 = ivrc[0] - ivrc[0]*ivrc[1];
- pc2 = ivrc[1];
- }
- /* Inverse filter LPBUF into IVBUF */
- for (i = len - nsamp; i < len; i++)
- ivbuf[i] = lpbuf[i] - pc1*lpbuf[i - 4] - pc2*lpbuf[i - 8];
-}
-/*- End of function --------------------------------------------------------*/
-
-void lpc10_analyse(lpc10_encode_state_t *s, float speech[], int32_t voice[], int32_t *pitch, float *rms, float rc[])
-{
- static const int32_t tau[60] =
- {
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
- 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 84, 88, 92, 96,
- 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144,
- 148, 152, 156
- };
- static const int32_t buflim[4] =
- {
- 181, 720, 25, 720
- };
- static const float precoef = 0.9375f;
-
- float amdf[60];
- float abuf[156];
- float ivrc[2];
- float temp;
- float phi[100] /* was [10][10] */;
- float psi[10];
- int32_t half;
- int32_t midx;
- int32_t ewin[3][2];
- int32_t i;
- int32_t j;
- int32_t lanal;
- int32_t ipitch;
- int32_t mintau;
- int32_t minptr;
- int32_t maxptr;
-
- /* Calculations are done on future frame due to requirements
- of the pitch tracker. Delay RMS and RC's 2 frames to give
- current frame parameters on return. */
-
- for (i = 0; i <= 720 - LPC10_SAMPLES_PER_FRAME - 181; i++)
- {
- s->inbuf[i] = s->inbuf[LPC10_SAMPLES_PER_FRAME + i];
- s->pebuf[i] = s->pebuf[LPC10_SAMPLES_PER_FRAME + i];
- }
- for (i = 0; i <= 540 - LPC10_SAMPLES_PER_FRAME - 229; i++)
- s->ivbuf[i] = s->ivbuf[LPC10_SAMPLES_PER_FRAME + i];
- for (i = 0; i <= 720 - LPC10_SAMPLES_PER_FRAME - 25; i++)
- s->lpbuf[i] = s->lpbuf[LPC10_SAMPLES_PER_FRAME + i];
- for (i = 0, j = 0; i < s->osptr - 1; i++)
- {
- if (s->osbuf[i] > LPC10_SAMPLES_PER_FRAME)
- s->osbuf[j++] = s->osbuf[i] - LPC10_SAMPLES_PER_FRAME;
- }
- s->osptr = j + 1;
- s->voibuf[0][0] = s->voibuf[1][0];
- s->voibuf[0][1] = s->voibuf[1][1];
- for (i = 0; i < 2; i++)
- {
- s->vwin[i][0] = s->vwin[i + 1][0] - LPC10_SAMPLES_PER_FRAME;
- s->vwin[i][1] = s->vwin[i + 1][1] - LPC10_SAMPLES_PER_FRAME;
- s->awin[i][0] = s->awin[i + 1][0] - LPC10_SAMPLES_PER_FRAME;
- s->awin[i][1] = s->awin[i + 1][1] - LPC10_SAMPLES_PER_FRAME;
- s->obound[i] = s->obound[i + 1];
- s->voibuf[i + 1][0] = s->voibuf[i + 2][0];
- s->voibuf[i + 1][1] = s->voibuf[i + 2][1];
- s->rmsbuf[i] = s->rmsbuf[i + 1];
- for (j = 0; j < LPC10_ORDER; j++)
- s->rcbuf[i][j] = s->rcbuf[i + 1][j];
- }
- /* If the average value in the frame was over 1/4096 (after current
- BIAS correction), then subtract that much more from samples in the
- next frame. If the average value in the frame was under
- -1/4096, add 1/4096 more to samples in next frame. In all other
- cases, keep BIAS the same. */
- temp = 0.0f;
- for (i = 0; i < LPC10_SAMPLES_PER_FRAME; i++)
- {
- s->inbuf[720 - 2*LPC10_SAMPLES_PER_FRAME + i] = speech[i]*4096.0f - s->bias;
- temp += s->inbuf[720 - 2*LPC10_SAMPLES_PER_FRAME + i];
- }
- if (temp > (float) LPC10_SAMPLES_PER_FRAME)
- s->bias++;
- else if (temp < (float) (-LPC10_SAMPLES_PER_FRAME))
- s->bias--;
- /* Place voicing window */
- i = 721 - LPC10_SAMPLES_PER_FRAME;
- s->zpre = preemp(&s->inbuf[i - 181], &s->pebuf[i - 181], LPC10_SAMPLES_PER_FRAME, precoef, s->zpre);
- onset(s, s->pebuf, s->osbuf, &s->osptr, 10, 181, 720, LPC10_SAMPLES_PER_FRAME);
-
- lpc10_placev(s->osbuf, &s->osptr, 10, &s->obound[2], s->vwin, 3, LPC10_SAMPLES_PER_FRAME, 90, 156, 307, 462);
- /* The Pitch Extraction algorithm estimates the pitch for a frame
- of speech by locating the minimum of the average magnitude difference
- function (AMDF). The AMDF operates on low-pass, inverse filtered
- speech. (The low-pass filter is an 800 Hz, 19 tap, equiripple, FIR
- filter and the inverse filter is a 2nd-order LPC filter.) The pitch
- estimate is later refined by dynamic tracking. However, since some
- of the tracking parameters are a function of the voicing decisions,
- a voicing decision must precede the final pitch estimation. */
- /* See subroutines LPFILT, IVFILT, and eval_highres_amdf. */
- /* LPFILT reads indices LBUFH-LFRAME-29 = 511 through LBUFH = 720
- of INBUF, and writes indices LBUFH+1-LFRAME = 541 through LBUFH
- = 720 of LPBUF. */
- lpfilt(&s->inbuf[228], &s->lpbuf[384], 312, LPC10_SAMPLES_PER_FRAME);
- /* IVFILT reads indices (PWINH-LFRAME-7) = 353 through PWINH = 540
- of LPBUF, and writes indices (PWINH-LFRAME+1) = 361 through
- PWINH = 540 of IVBUF. */
- ivfilt(&s->lpbuf[204], s->ivbuf, 312, LPC10_SAMPLES_PER_FRAME, ivrc);
- /* eval_highres_amdf reads indices PWINL = 229 through
- (PWINL-1)+MAXWIN+(TAU(LTAU)-TAU(1))/2 = 452 of IVBUF, and writes
- indices 1 through LTAU = 60 of AMDF. */
- eval_highres_amdf(s->ivbuf, 156, tau, 60, amdf, &minptr, &maxptr, &mintau);
- /* Voicing decisions are made for each half frame of input speech.
- An initial voicing classification is made for each half of the
- analysis frame, and the voicing decisions for the present frame
- are finalized. See subroutine VOICIN. */
- /* The voicing detector (VOICIN) classifies the input signal as
- unvoiced (including silence) or voiced using the AMDF windowed
- maximum-to-minimum ratio, the zero crossing rate, energy measures,
- reflection coefficients, and prediction gains. */
- /* The pitch and voicing rules apply smoothing and isolated
- corrections to the pitch and voicing estimates and, in the process,
- introduce two frames of delay into the corrected pitch estimates and
- voicing decisions. */
- for (half = 0; half < 2; half++)
- {
- lpc10_voicing(s,
- &s->vwin[2][0],
- s->inbuf,
- s->lpbuf,
- buflim,
- half,
- &amdf[minptr],
- &amdf[maxptr],
- &mintau,
- ivrc,
- s->obound);
- }
- /* Find the minimum cost pitch decision over several frames,
- given the current voicing decision and the AMDF array */
- minptr++;
- dynamic_pitch_tracking(s, amdf, 60, &minptr, s->voibuf[3][1], pitch, &midx);
- ipitch = tau[midx - 1];
- /* Place spectrum analysis and energy windows */
- lpc10_placea(&ipitch, s->voibuf, &s->obound[2], 3, s->vwin, s->awin, ewin, LPC10_SAMPLES_PER_FRAME, 156);
- /* Remove short term DC bias over the analysis window. */
- lanal = s->awin[2][1] + 1 - s->awin[2][0];
- remove_dc_bias(&s->pebuf[s->awin[2][0] - 181], lanal, abuf);
- /* Compute RMS over integer number of pitch periods within the analysis window. */
- /* Note that in a hardware implementation this computation may be
- simplified by using diagonal elements of phi computed by mload(). */
- s->rmsbuf[2] = energyf(&abuf[ewin[2][0] - s->awin[2][0]], ewin[2][1] - ewin[2][0] + 1);
- /* Matrix load and invert, check RC's for stability */
- mload(LPC10_ORDER, 1, lanal, abuf, phi, psi);
- invert(LPC10_ORDER, phi, psi, &s->rcbuf[2][0]);
- rcchk(LPC10_ORDER, &s->rcbuf[1][0], &s->rcbuf[2][0]);
- /* Set return parameters */
- voice[0] = s->voibuf[1][0];
- voice[1] = s->voibuf[1][1];
- *rms = s->rmsbuf[0];
- for (i = 0; i < LPC10_ORDER; i++)
- rc[i] = s->rcbuf[0][i];
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * lpc10_decode.c - LPC10 low bit rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the U.S. Department of Defense reference
- * implementation of the LPC-10 2400 bps Voice Coder. They do not
- * exert copyright claims on their code, and it may be freely used.
- *
- * $Id: lpc10_decode.c,v 1.18 2008/02/09 15:31:36 steveu Exp $
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <inttypes.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-#if (_MSC_VER == 1400) /* fix for broken header files with msvc 2005*/
-#if !defined (_M_IA64) && !defined (_M_AMD64)
-#undef logf
-#define logf(x) ((float)log((double)(x)))
-#endif // !defined (_M_IA64) && !defined (_M_AMD64)
-#endif
-
-#include <memory.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/lpc10.h"
-
-#define LPC10_ORDER 10
-
-#if !defined(min)
-#define min(a,b) ((a) <= (b) ? (a) : (b))
-#endif
-#if !defined(max)
-#define max(a,b) ((a) >= (b) ? (a) : (b))
-#endif
-
-/* Pseudo random number generator based on Knuth, Vol 2, p. 27. */
-/* lpc10_random - int32_t variable, uniformly distributed over -32768 to 32767 */
-static int32_t lpc10_random(lpc10_decode_state_t *s)
-{
- int32_t ret_val;
-
- /* The following is a 16 bit 2's complement addition,
- with overflow checking disabled */
- s->y[s->k] = (int16_t)(s->y[s->k] + s->y[s->j]);
- ret_val = s->y[s->k];
- if (--s->k < 0)
- s->k = 4;
- if (--s->j < 0)
- s->j = 4;
- return ret_val;
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int32_t pow_ii(int32_t x, int32_t n)
-{
- int32_t pow;
- uint32_t u;
-
- if (n <= 0)
- {
- if (n == 0 || x == 1)
- return 1;
- if (x != -1)
- return (x == 0) ? 1/x : 0;
- n = -n;
- }
- u = n;
- for (pow = 1; ; )
- {
- if ((u & 1))
- pow *= x;
- if ((u >>= 1) == 0)
- break;
- x *= x;
- }
- return pow;
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Synthesize one pitch epoch */
-static void bsynz(lpc10_decode_state_t *s,
- float coef[],
- int32_t ip,
- int32_t *iv,
- float sout[],
- float rms,
- float ratio,
- float g2pass)
-{
- static const int32_t kexc[25] =
- {
- 8, -16, 26, -48, 86, -162, 294, -502, 718, -728, 184,
- 672, -610, -672, 184, 728, 718, 502, 294, 162, 86, 48, 26, 16, 8
- };
- int32_t i;
- int32_t j;
- int32_t k;
- int32_t px;
- float noise[166];
- float pulse;
- float r1;
- float gain;
- float xssq;
- float sscale;
- float xy;
- float sum;
- float ssq;
- float lpi0;
- float hpi0;
-
- /* MAXPIT + MAXORD = 166 */
- /* Calculate history scale factor XY and scale filter state */
- /* Computing MIN */
- r1 = s->rmso_bsynz/(rms + 1.0e-6f);
- xy = min(r1, 8.0f);
- s->rmso_bsynz = rms;
- for (i = 0; i < LPC10_ORDER; i++)
- s->exc2[i] = s->exc2[s->ipo + i]*xy;
- s->ipo = ip;
- if (*iv == 0)
- {
- /* Generate white noise for unvoiced */
- for (i = 0; i < ip; i++)
- s->exc[LPC10_ORDER + i] = (float) (lpc10_random(s)/64);
- /* Impulse double excitation for plosives */
- px = (lpc10_random(s) + 32768)*(ip - 1)/65536 + LPC10_ORDER + 1;
- r1 = ratio/4.0f;
- pulse = r1*342;
- if (pulse > 2.0e3f)
- pulse = 2.0e3f;
- s->exc[px - 1] += pulse;
- s->exc[px] -= pulse;
- }
- else
- {
- sscale = sqrtf((float) ip)/6.928f;
- for (i = 0; i < ip; i++)
- {
- s->exc[LPC10_ORDER + i] = 0.0f;
- if (i < 25)
- s->exc[LPC10_ORDER + i] = sscale*kexc[i];
- lpi0 = s->exc[LPC10_ORDER + i];
- s->exc[LPC10_ORDER + i] = s->exc[LPC10_ORDER + i]*0.125f + s->lpi[0]*0.75f + s->lpi[1]*0.125f;
- s->lpi[1] = s->lpi[0];
- s->lpi[0] = lpi0;
- }
- for (i = 0; i < ip; i++)
- {
- noise[LPC10_ORDER + i] = lpc10_random(s)/64.0f;
- hpi0 = noise[LPC10_ORDER + i];
- noise[LPC10_ORDER + i] = noise[LPC10_ORDER + i]*-0.125f + s->hpi[0]*0.25f + s->hpi[1]*-0.125f;
- s->hpi[1] = s->hpi[0];
- s->hpi[0] = hpi0;
- }
- for (i = 0; i < ip; i++)
- s->exc[LPC10_ORDER + i] += noise[LPC10_ORDER + i];
- }
- /* Synthesis filters: */
- /* Modify the excitation with all-zero filter 1 + G*SUM */
- xssq = 0.0f;
- for (i = 0; i < ip; i++)
- {
- k = LPC10_ORDER + i;
- sum = 0.0f;
- for (j = 0; j < LPC10_ORDER; j++)
- sum += coef[j]*s->exc[k - j - 1];
- sum *= g2pass;
- s->exc2[k] = sum + s->exc[k];
- }
- /* Synthesize using the all pole filter 1/(1 - SUM) */
- for (i = 0; i < ip; i++)
- {
- k = LPC10_ORDER + i;
- sum = 0.0f;
- for (j = 0; j < LPC10_ORDER; j++)
- sum += coef[j]*s->exc2[k - j - 1];
- s->exc2[k] = sum + s->exc2[k];
- xssq += s->exc2[k]*s->exc2[k];
- }
- /* Save filter history for next epoch */
- for (i = 0; i < LPC10_ORDER; i++)
- {
- s->exc[i] = s->exc[ip + i];
- s->exc2[i] = s->exc2[ip + i];
- }
- /* Apply gain to match RMS */
- ssq = rms*rms*ip;
- gain = sqrtf(ssq/xssq);
- for (i = 0; i < ip; i++)
- sout[i] = gain*s->exc2[LPC10_ORDER + i];
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Synthesize a single pitch epoch */
-static int pitsyn(lpc10_decode_state_t *s,
- int voice[],
- int32_t *pitch,
- float *rms,
- float *rc,
- int32_t ivuv[],
- int32_t ipiti[],
- float *rmsi,
- float *rci,
- int32_t *nout,
- float *ratio)
-{
- int32_t rci_dim1;
- int32_t rci_offset;
- int32_t i1;
- int32_t i;
- int32_t j;
- int32_t vflag;
- int32_t jused;
- int32_t lsamp;
- int32_t ip;
- int32_t nl;
- int32_t ivoice;
- int32_t istart;
- float r1;
- float alrn;
- float alro;
- float yarc[10];
- float prop;
- float slope;
- float uvpit;
- float xxy;
-
- rci_dim1 = LPC10_ORDER;
- rci_offset = rci_dim1 + 1;
- rci -= rci_offset;
-
- if (*rms < 1.0f)
- *rms = 1.0f;
- if (s->rmso < 1.0f)
- s->rmso = 1.0f;
- uvpit = 0.0f;
- *ratio = *rms/(s->rmso + 8.0f);
- if (s->first_pitsyn)
- {
- lsamp = 0;
- ivoice = voice[1];
- if (ivoice == 0)
- *pitch = LPC10_SAMPLES_PER_FRAME/4;
- *nout = LPC10_SAMPLES_PER_FRAME / *pitch;
- s->jsamp = LPC10_SAMPLES_PER_FRAME - *nout * *pitch;
-
- i1 = *nout;
- for (i = 0; i < i1; i++)
- {
- for (j = 0; j < LPC10_ORDER; j++)
- rci[j + (i + 1)*rci_dim1 + 1] = rc[j];
- ivuv[i] = ivoice;
- ipiti[i] = *pitch;
- rmsi[i] = *rms;
- }
- s->first_pitsyn = FALSE;
- }
- else
- {
- vflag = 0;
- lsamp = LPC10_SAMPLES_PER_FRAME + s->jsamp;
- slope = (*pitch - s->ipito)/(float) lsamp;
- *nout = 0;
- jused = 0;
- istart = 1;
- if (voice[0] == s->ivoico && voice[1] == voice[0])
- {
- if (voice[1] == 0)
- {
- /* SSUV - - 0 , 0 , 0 */
- *pitch = LPC10_SAMPLES_PER_FRAME/4;
- s->ipito = *pitch;
- if (*ratio > 8.0f)
- s->rmso = *rms;
- }
- /* SSVC - - 1 , 1 , 1 */
- slope = (*pitch - s->ipito)/(float) lsamp;
- ivoice = voice[1];
- }
- else
- {
- if (s->ivoico != 1)
- {
- if (s->ivoico == voice[0])
- {
- /* UV2VC2 - - 0 , 0 , 1 */
- nl = lsamp - LPC10_SAMPLES_PER_FRAME/4;
- }
- else
- {
- /* UV2VC1 - - 0 , 1 , 1 */
- nl = lsamp - LPC10_SAMPLES_PER_FRAME*3/4;
- }
- ipiti[0] = nl/2;
- ipiti[1] = nl - ipiti[0];
- ivuv[0] = 0;
- ivuv[1] = 0;
- rmsi[0] = s->rmso;
- rmsi[1] = s->rmso;
- for (i = 0; i < LPC10_ORDER; i++)
- {
- rci[i + rci_dim1 + 1] = s->rco[i];
- rci[i + (rci_dim1 << 1) + 1] = s->rco[i];
- s->rco[i] = rc[i];
- }
- slope = 0.0f;
- *nout = 2;
- s->ipito = *pitch;
- jused = nl;
- istart = nl + 1;
- ivoice = 1;
- }
- else
- {
- if (s->ivoico != voice[0])
- {
- /* VC2UV1 - - 1 , 0 , 0 */
- lsamp = LPC10_SAMPLES_PER_FRAME/4 + s->jsamp;
- }
- else
- {
- /* VC2UV2 - - 1 , 1 , 0 */
- lsamp = LPC10_SAMPLES_PER_FRAME*3/4 + s->jsamp;
- }
- for (i = 0; i < LPC10_ORDER; i++)
- {
- yarc[i] = rc[i];
- rc[i] = s->rco[i];
- }
- ivoice = 1;
- slope = 0.0f;
- vflag = 1;
- }
- }
- /* Here is the value of most variables that are used below, depending on */
- /* the values of IVOICO, VOICE(1), and VOICE(2). VOICE(1) and VOICE(2) */
- /* are input arguments, and IVOICO is the value of VOICE(2) on the */
- /* previous call (see notes for the IF (NOUT .NE. 0) statement near the */
- /* end). Each of these three values is either 0 or 1. These three */
- /* values below are given as 3-bit long strings, in the order IVOICO, */
- /* VOICE(1), and VOICE(2). It appears that the code above assumes that */
- /* the bit sequences 010 and 101 never occur, but I wonder whether a */
- /* large enough number of bit errors in the channel could cause such a */
- /* thing to happen, and if so, could that cause NOUT to ever go over 11? */
-
- /* Note that all of the 180 values in the table are floatly LFRAME, but */
- /* 180 has fewer characters, and it makes the table a little more */
- /* concrete. If LFRAME is ever changed, keep this in mind. Similarly, */
- /* 135's are 3*LFRAME/4, and 45's are LFRAME/4. If LFRAME is not a */
- /* multiple of 4, then the 135 for NL-JSAMP is actually LFRAME-LFRAME/4, */
- /* and the 45 for NL-JSAMP is actually LFRAME-3*LFRAME/4. */
-
- /* Note that LSAMP-JSAMP is given as the variable. This was just for */
- /* brevity, to avoid adding "+JSAMP" to all of the column entries. */
- /* Similarly for NL-JSAMP. */
-
- /* Variable | 000 001 011,010 111 110 100,101 */
- /* ------------+-------------------------------------------------- */
- /* ISTART | 1 NL+1 NL+1 1 1 1 */
- /* LSAMP-JSAMP | 180 180 180 180 135 45 */
- /* IPITO | 45 PITCH PITCH oldPITCH oldPITCH oldPITCH */
- /* SLOPE | 0 0 0 seebelow 0 0 */
- /* JUSED | 0 NL NL 0 0 0 */
- /* PITCH | 45 PITCH PITCH PITCH PITCH PITCH */
- /* NL-JSAMP | -- 135 45 -- -- -- */
- /* VFLAG | 0 0 0 0 1 1 */
- /* NOUT | 0 2 2 0 0 0 */
- /* IVOICE | 0 1 1 1 1 1 */
-
- /* while_loop | once once once once twice twice */
-
- /* ISTART | -- -- -- -- JUSED+1 JUSED+1 */
- /* LSAMP-JSAMP | -- -- -- -- 180 180 */
- /* IPITO | -- -- -- -- oldPITCH oldPITCH */
- /* SLOPE | -- -- -- -- 0 0 */
- /* JUSED | -- -- -- -- ?? ?? */
- /* PITCH | -- -- -- -- PITCH PITCH */
- /* NL-JSAMP | -- -- -- -- -- -- */
- /* VFLAG | -- -- -- -- 0 0 */
- /* NOUT | -- -- -- -- ?? ?? */
- /* IVOICE | -- -- -- -- 0 0 */
-
- /* UVPIT is always 0.0 on the first pass through the DO WHILE (TRUE)
- loop below. */
-
- /* The only possible non-0 value of SLOPE (in column 111) is
- (PITCH-IPITO)/FLOAT(LSAMP) */
-
- /* Column 101 is identical to 100. Any good properties we can prove
- for 100 will also hold for 101. Similarly for 010 and 011. */
-
- /* synths() calls this subroutine with PITCH restricted to the range 20 to
- 156. IPITO is similarly restricted to this range, after the first
- call. IP below is also restricted to this range, given the
- definitions of IPITO, SLOPE, UVPIT, and that I is in the range ISTART
- to LSAMP. */
-
- for (;;)
- {
- for (i = istart; i <= lsamp; i++)
- {
- r1 = s->ipito + slope*i;
- ip = (int32_t) (r1 + 0.5f);
- if (uvpit != 0.0f)
- ip = (int32_t) uvpit;
- if (ip <= i - jused)
- {
- float f;
- ++(*nout);
- ipiti[*nout - 1] = ip;
- *pitch = ip;
- ivuv[*nout - 1] = ivoice;
- jused += ip;
- prop = (jused - ip/2)/(float) lsamp;
- for (j = 0; j < LPC10_ORDER; j++)
- {
- alro = logf((s->rco[j] + 1)/(1 - s->rco[j]));
- alrn = logf((rc[j] + 1)/(1 - rc[j]));
- xxy = alro + prop*(alrn - alro);
- xxy = expf(xxy);
- rci[j + *nout*rci_dim1 + 1] = (xxy - 1.0f)/(xxy + 1.0f);
- }
- f = ((logf(*rms)) - (logf(s->rmso)));
- rmsi[*nout - 1] = logf(s->rmso) + (prop * f);
- rmsi[*nout - 1] = expf(rmsi[*nout - 1]);
- }
- }
- if (vflag != 1)
- break;
-
- vflag = 0;
- istart = jused + 1;
- lsamp = LPC10_SAMPLES_PER_FRAME + s->jsamp;
- slope = 0.0f;
- ivoice = 0;
- uvpit = (float) ((lsamp - istart)/2);
- if (uvpit > 90.0f)
- uvpit /= 2;
- s->rmso = *rms;
- for (i = 0; i < LPC10_ORDER; i++)
- {
- rc[i] = yarc[i];
- s->rco[i] = yarc[i];
- }
- }
- s->jsamp = lsamp - jused;
- }
- if (*nout != 0)
- {
- s->ivoico = voice[1];
- s->ipito = *pitch;
- s->rmso = *rms;
- for (i = 0; i < LPC10_ORDER; i++)
- s->rco[i] = rc[i];
- }
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-static void deemp(lpc10_decode_state_t *s, float x[], int len)
-{
- int i;
- float r1;
- float dei0;
-
- for (i = 0; i < len; i++)
- {
- dei0 = x[i];
- r1 = x[i] - s->dei[0]*1.9998f + s->dei[1];
- x[i] = r1 + s->deo[0]*2.5f - s->deo[1]*2.0925f + s->deo[2]*0.585f;
- s->dei[1] = s->dei[0];
- s->dei[0] = dei0;
- s->deo[2] = s->deo[1];
- s->deo[1] = s->deo[0];
- s->deo[0] = x[i];
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Convert reflection coefficients to predictor coefficients */
-static float reflection_coeffs_to_predictor_coeffs(float rc[], float pc[], float gprime)
-{
- float temp[10];
- float g2pass;
- int i;
- int j;
-
- g2pass = 1.0f;
- for (i = 0; i < LPC10_ORDER; i++)
- g2pass *= 1.0f - rc[i]*rc[i];
- g2pass = gprime*sqrtf(g2pass);
- pc[0] = rc[0];
- for (i = 1; i < LPC10_ORDER; i++)
- {
- for (j = 0; j < i; j++)
- temp[j] = pc[j] - rc[i]*pc[i - j - 1];
- for (j = 0; j < i; j++)
- pc[j] = temp[j];
- pc[i] = rc[i];
- }
- return g2pass;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int synths(lpc10_decode_state_t *s,
- int voice[],
- int32_t *pitch,
- float *rms,
- float *rc,
- float speech[])
-{
- int32_t i1;
- int32_t ivuv[16];
- int32_t ipiti[16];
- int32_t nout;
- int32_t i;
- int32_t j;
- float rmsi[16];
- float ratio;
- float g2pass;
- float pc[10];
- float rci[160];
-
- i1 = min(*pitch, 156);
- *pitch = max(i1, 20);
- for (i = 0; i < LPC10_ORDER; i++)
- rc[i] = max(min(rc[i], 0.99f), -0.99f);
- pitsyn(s, voice, pitch, rms, rc, ivuv, ipiti, rmsi, rci, &nout, &ratio);
- if (nout > 0)
- {
- for (j = 0; j < nout; j++)
- {
- /* Add synthesized speech for pitch period J to the end of s->buf. */
- g2pass = reflection_coeffs_to_predictor_coeffs(&rci[j*10], pc, 0.7f);
- bsynz(s, pc, ipiti[j], &ivuv[j], &s->buf[s->buflen], rmsi[j], ratio, g2pass);
- deemp(s, &s->buf[s->buflen], ipiti[j]);
- s->buflen += ipiti[j];
- }
- /* Copy first MAXFRM samples from BUF to output array speech (scaling them),
- and then remove them from the beginning of s->buf. */
-
- for (i = 0; i < LPC10_SAMPLES_PER_FRAME; i++)
- speech[i] = s->buf[i]/4096.0f;
- s->buflen -= LPC10_SAMPLES_PER_FRAME;
- for (i = 0; i < s->buflen; i++)
- s->buf[i] = s->buf[i + LPC10_SAMPLES_PER_FRAME];
- }
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-static void lpc10_unpack(lpc10_frame_t *t, const uint8_t ibits[])
-{
- static const int bit[10] =
- {
- 2, 4, 8, 8, 8, 8, 16, 16, 16, 16
- };
- static const int iblist[53] =
- {
- 13, 12, 11, 1, 2, 13, 12, 11, 1, 2,
- 13, 10, 11, 2, 1, 10, 13, 12, 11, 10,
- 2, 13, 12, 11, 10, 2, 1, 12, 7, 6,
- 1, 10, 9, 8, 7, 4, 6, 9, 8, 7,
- 5, 1, 9, 8, 4, 6, 1, 5, 9, 8,
- 7, 5, 6
- };
- int32_t itab[13];
- int x;
- int i;
-
- /* ibits is 54 bits of LPC data ordered as follows: */
- /* R1-0, R2-0, R3-0, P-0, A-0, */
- /* R1-1, R2-1, R3-1, P-1, A-1, */
- /* R1-2, R4-0, R3-2, A-2, P-2, R4-1, */
- /* R1-3, R2-2, R3-3, R4-2, A-3, */
- /* R1-4, R2-3, R3-4, R4-3, A-4, */
- /* P-3, R2-4, R7-0, R8-0, P-4, R4-4, */
- /* R5-0, R6-0, R7-1,R10-0, R8-1, */
- /* R5-1, R6-1, R7-2, R9-0, P-5, */
- /* R5-2, R6-2,R10-1, R8-2, P-6, R9-1, */
- /* R5-3, R6-3, R7-3, R9-2, R8-3, SYNC */
-
- /* Reconstruct ITAB */
- for (i = 0; i < 13; i++)
- itab[i] = 0;
- for (i = 0; i < 53; i++)
- {
- x = 52 - i;
- x = (ibits[x >> 3] >> (7 - (x & 7))) & 1;
- itab[iblist[52 - i] - 1] = (itab[iblist[52 - i] - 1] << 1) | x;
- }
- /* Sign extend the RC's */
- for (i = 0; i < LPC10_ORDER; i++)
- {
- if ((itab[i + 3] & bit[i]))
- itab[i + 3] -= (bit[i] << 1);
- }
- /* Restore variables */
- t->ipitch = itab[0];
- t->irms = itab[1];
- for (i = 0; i < LPC10_ORDER; i++)
- t->irc[i] = itab[LPC10_ORDER - 1 - i + 3];
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Hamming 8, 4 decoder - can correct 1 out of seven bits
- and can detect up to two errors. */
-
-/* This subroutine is entered with an eight bit word in INPUT. The 8th */
-/* bit is parity and is stripped off. The remaining 7 bits address the */
-/* hamming 8, 4 table and the output OUTPUT from the table gives the 4 */
-/* bits of corrected data. If bit 4 is set, no error was detected. */
-/* ERRCNT is the number of errors counted. */
-
-static int32_t hamming_84_decode(int32_t input, int *errcnt)
-{
- static const uint8_t dactab[128] =
- {
- 16, 0, 0, 3, 0, 5, 14, 7, 0, 9, 14, 11, 14, 13, 30, 14,
- 0, 9, 2, 7, 4, 7, 7, 23, 9, 25, 10, 9, 12, 9, 14, 7,
- 0, 5, 2, 11, 5, 21, 6, 5, 8, 11, 11, 27, 12, 5, 14, 11,
- 2, 1, 18, 2, 12, 5, 2, 7, 12, 9, 2, 11, 28, 12, 12, 15,
- 0, 3, 3, 19, 4, 13, 6, 3, 8, 13, 10, 3, 13, 29, 14, 13,
- 4, 1, 10, 3, 20, 4, 4, 7, 10, 9, 26, 10, 4, 13, 10, 15,
- 8, 1, 6, 3, 6, 5, 22, 6, 24, 8, 8, 11, 8, 13, 6, 15,
- 1, 17 , 2, 1, 4, 1, 6, 15, 8, 1, 10, 15, 12, 15, 15, 31
- };
- int i;
- int parity;
- int32_t output;
-
- parity = input & 255;
- parity ^= parity >> 4;
- parity ^= parity >> 2;
- parity ^= parity >> 1;
- parity &= 1;
- i = dactab[input & 127];
- output = i & 15;
- if ((i & 16))
- {
- /* No errors detected in seven bits */
- if (parity)
- (*errcnt)++;
- }
- else
- {
- /* One or two errors detected */
- (*errcnt)++;
- if (parity == 0)
- {
- /* Two errors detected */
- (*errcnt)++;
- output = -1;
- }
- }
- return output;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int32_t median(int32_t d1, int32_t d2, int32_t d3)
-{
- int32_t ret_val;
-
- ret_val = d2;
- if (d2 > d1 && d2 > d3)
- {
- ret_val = d1;
- if (d3 > d1)
- ret_val = d3;
- }
- else if (d2 < d1 && d2 < d3)
- {
- ret_val = d1;
- if (d3 < d1)
- ret_val = d3;
- }
- return ret_val;
-}
-/*- End of function --------------------------------------------------------*/
-
-static void decode(lpc10_decode_state_t *s,
- lpc10_frame_t *t,
- int voice[],
- int32_t *pitch,
- float *rms,
- float rc[])
-{
- static const int32_t ivtab[32] =
- {
- 24960, 24960, 24960, 24960, 25480, 25480, 25483, 25480,
- 16640, 1560, 1560, 1560, 16640, 1816, 1563, 1560,
- 24960, 24960, 24859, 24856, 26001, 25881, 25915, 25913,
- 1560, 1560, 7800, 3640, 1561, 1561, 3643, 3641
- };
- static const float corth[32] =
- {
- 32767.0f, 10.0f, 5.0f, 0.0f, 32767.0f, 8.0f, 4.0f, 0.0f,
- 32.0f, 6.4f, 3.2f, 0.0f, 32.0f, 6.4f, 3.2f, 0.0f,
- 32.0f, 11.2f, 6.4f, 0.0f, 32.0f, 11.2f, 6.4f, 0.0f,
- 16.0f, 5.6f, 3.2f, 0.0f, 16.0f, 5.6f, 3.2f, 0.0f
- };
- static const int32_t detau[128] =
- {
- 0, 0, 0, 3, 0, 3, 3, 31,
- 0, 3, 3, 21, 3, 3, 29, 30,
- 0, 3, 3, 20, 3, 25, 27, 26,
- 3, 23, 58, 22, 3, 24, 28, 3,
- 0, 3, 3, 3, 3, 39, 33, 32,
- 3, 37, 35, 36, 3, 38, 34, 3,
- 3, 42, 46, 44, 50, 40, 48, 3,
- 54, 3, 56, 3, 52, 3, 3, 1,
- 0, 3, 3, 108, 3, 78, 100, 104,
- 3, 84, 92, 88, 156, 80, 96, 3,
- 3, 74, 70, 72, 66, 76, 68, 3,
- 62, 3, 60, 3, 64, 3, 3, 1,
- 3, 116, 132, 112, 148, 152, 3, 3,
- 140, 3, 136, 3, 144, 3, 3, 1,
- 124, 120, 128, 3, 3, 3, 3, 1,
- 3, 3, 3, 1, 3, 1, 1, 1
- };
- static const int32_t rmst[64] =
- {
- 1024, 936, 856, 784, 718, 656, 600, 550,
- 502, 460, 420, 384, 352, 328, 294, 270,
- 246, 226, 206, 188, 172, 158, 144, 132,
- 120, 110, 102, 92, 84, 78, 70, 64,
- 60, 54, 50, 46, 42, 38, 34, 32,
- 30, 26, 24, 22, 20, 18, 17, 16,
- 15, 14, 13, 12, 11, 10, 9, 8,
- 7, 6, 5, 4, 3, 2, 1, 0
- };
- static const int32_t detab7[32] =
- {
- 4, 11, 18, 25, 32, 39, 46, 53,
- 60, 66, 72, 77, 82, 87, 92, 96,
- 101, 104, 108, 111, 114, 115, 117, 119,
- 121, 122, 123, 124, 125, 126, 127, 127
- };
- static const float descl[8] =
- {
- 0.6953f, 0.625f, 0.5781f, 0.5469f, 0.5312f, 0.5391f, 0.4688f, 0.3828f
- };
- static const int32_t deadd[8] =
- {
- 1152, -2816, -1536, -3584, -1280, -2432, 768, -1920
- };
- static const int32_t qb[8] =
- {
- 511, 511, 1023, 1023, 1023, 1023, 2047, 4095
- };
- static const int32_t nbit[10] =
- {
- 8, 8, 5, 5, 4, 4, 4, 4, 3, 2
- };
- static const int32_t zrc[10] =
- {
- 0, 0, 0, 0, 0, 3, 0, 2, 0, 0
- };
- static const int32_t bit[5] =
- {
- 2, 4, 8, 16, 32
- };
- int32_t ipit;
- int32_t iout;
- int32_t i;
- int32_t icorf;
- int32_t index;
- int32_t ivoic;
- int32_t ixcor;
- int32_t i1;
- int32_t i2;
- int32_t i4;
- int32_t ishift;
- int32_t lsb;
- int errcnt;
-
- /* If no error correction, do pitch and voicing then jump to decode */
- i4 = detau[t->ipitch];
- if (!s->error_correction)
- {
- voice[0] = 1;
- voice[1] = 1;
- if (t->ipitch <= 1)
- voice[0] = 0;
- if (t->ipitch == 0 || t->ipitch == 2)
- voice[1] = 0;
- if (i4 <= 4)
- i4 = s->iptold;
- *pitch = i4;
- if (voice[0] == 1 && voice[1] == 1)
- s->iptold = *pitch;
- if (voice[0] != voice[1])
- *pitch = s->iptold;
- }
- else
- {
- /* Do error correction pitch and voicing */
- if (i4 > 4)
- {
- s->dpit[0] = i4;
- ivoic = 2;
- s->iavgp = (s->iavgp*15 + i4 + 8)/16;
- }
- else
- {
- s->dpit[0] = s->iavgp;
- ivoic = i4;
- }
- s->drms[0] = t->irms;
- for (i = 0; i < LPC10_ORDER; i++)
- s->drc[i][0] = t->irc[i];
- /* Determine index to IVTAB from V/UV decision */
- /* If error rate is high then use alternate table */
- index = (s->ivp2h << 4) + (s->iovoic << 2) + ivoic + 1;
- i1 = ivtab[index - 1];
- ipit = i1 & 3;
- icorf = i1 >> 3;
- if (s->erate < 2048)
- icorf /= 64;
- /* Determine error rate: 4=high 1=low */
- ixcor = 4;
- if (s->erate < 2048)
- ixcor = 3;
- if (s->erate < 1024)
- ixcor = 2;
- if (s->erate < 128)
- ixcor = 1;
- /* Voice/unvoice decision determined from bits 0 and 1 of IVTAB */
- voice[0] = icorf/2 & 1;
- voice[1] = icorf & 1;
- /* Skip decoding on first frame because present data not yet available */
- if (s->first)
- {
- s->first = FALSE;
- /* Assign PITCH a "default" value on the first call, since */
- /* otherwise it would be left uninitialized. The two lines */
- /* below were copied from above, since it seemed like a */
- /* reasonable thing to do for the first call. */
- if (i4 <= 4)
- i4 = s->iptold;
- *pitch = i4;
- }
- else
- {
- /* If bit 4 of ICORF is set then correct RMS and RC(1) - RC(4). */
- /* Determine error rate and correct errors using a Hamming 8,4 code */
- /* during transition of unvoiced frames. If IOUT is negative, */
- /* more than 1 error occurred, use previous frame's parameters. */
- if ((icorf & bit[3]) != 0)
- {
- errcnt = 0;
- lsb = s->drms[1] & 1;
- index = (s->drc[7][1] << 4) + s->drms[1]/2;
- iout = hamming_84_decode(index, &errcnt);
- s->drms[1] = s->drms[2];
- if (iout >= 0)
- s->drms[1] = (iout << 1) + lsb;
- for (i = 1; i <= 4; i++)
- {
- if (i == 1)
- i1 = ((s->drc[8][1] & 7) << 1) + (s->drc[9][1] & 1);
- else
- i1 = s->drc[8 - i][1] & 15;
- i2 = s->drc[4 - i][1] & 31;
- lsb = i2 & 1;
- index = (i1 << 4) + (i2 >> 1);
- iout = hamming_84_decode(index, &errcnt);
- if (iout >= 0)
- {
- iout = (iout << 1) + lsb;
- if ((iout & 16) == 16)
- iout -= 32;
- }
- else
- {
- iout = s->drc[4 - i][2];
- }
- s->drc[4 - i][1] = iout;
- }
- /* Determine error rate */
- s->erate = (int32_t) (s->erate*0.96875f + errcnt*102.0f);
- }
- /* Get unsmoothed RMS, RC's, and PITCH */
- t->irms = s->drms[1];
- for (i = 0; i < LPC10_ORDER; i++)
- t->irc[i] = s->drc[i][1];
- if (ipit == 1)
- s->dpit[1] = s->dpit[2];
- if (ipit == 3)
- s->dpit[1] = s->dpit[0];
- *pitch = s->dpit[1];
- /* If bit 2 of ICORF is set then smooth RMS and RC's, */
- if ((icorf & bit[1]) != 0)
- {
- if ((float) abs(s->drms[1] - s->drms[0]) >= corth[ixcor + 3]
- &&
- (float) abs(s->drms[1] - s->drms[2]) >= corth[ixcor + 3])
- {
- t->irms = median(s->drms[2], s->drms[1], s->drms[0]);
- }
- for (i = 0; i < 6; i++)
- {
- if ((float) abs(s->drc[i][1] - s->drc[i][0]) >= corth[ixcor + ((i + 3) << 2) - 5]
- &&
- (float) abs(s->drc[i][1] - s->drc[i][2]) >= corth[ixcor + ((i + 3) << 2) - 5])
- {
- t->irc[i] = median(s->drc[i][2], s->drc[i][1], s->drc[i][0]);
- }
- }
- }
- /* If bit 3 of ICORF is set then smooth pitch */
- if ((icorf & bit[2]) != 0)
- {
- if ((float) abs(s->dpit[1] - s->dpit[0]) >= corth[ixcor - 1]
- &&
- (float) abs(s->dpit[1] - s->dpit[2]) >= corth[ixcor - 1])
- {
- *pitch = median(s->dpit[2], s->dpit[1], s->dpit[0]);
- }
- }
- /* If bit 5 of ICORF is set then RC(5) - RC(10) are loaded with
- values so that after quantization bias is removed in decode
- the values will be zero. */
- }
- if ((icorf & bit[4]) != 0)
- {
- for (i = 4; i < LPC10_ORDER; i++)
- t->irc[i] = zrc[i];
- }
- /* Housekeeping - one frame delay */
- s->iovoic = ivoic;
- s->ivp2h = voice[1];
- s->dpit[2] = s->dpit[1];
- s->dpit[1] = s->dpit[0];
- s->drms[2] = s->drms[1];
- s->drms[1] = s->drms[0];
- for (i = 0; i < LPC10_ORDER; i++)
- {
- s->drc[i][2] = s->drc[i][1];
- s->drc[i][1] = s->drc[i][0];
- }
- }
- /* Decode RMS */
- t->irms = rmst[(31 - t->irms)*2];
- /* Decode RC(1) and RC(2) from log-area-ratios */
- /* Protect from illegal coded value (-16) caused by bit errors */
- for (i = 0; i < 2; i++)
- {
- i2 = t->irc[i];
- i1 = 0;
- if (i2 < 0)
- {
- i1 = 1;
- i2 = -i2;
- if (i2 > 15)
- i2 = 0;
- }
- i2 = detab7[i2*2];
- if (i1 == 1)
- i2 = -i2;
- ishift = 15 - nbit[i];
- t->irc[i] = i2*pow_ii(2, ishift);
- }
- /* Decode RC(3)-RC(10) to sign plus 14 bits */
- for (i = 2; i < LPC10_ORDER; i++)
- {
- ishift = 15 - nbit[i];
- i2 = t->irc[i]*pow_ii(2, ishift) + qb[i - 2];
- t->irc[i] = (int32_t) (i2*descl[i - 2] + deadd[i - 2]);
- }
- /* Scale RMS and RC's to floats */
- *rms = (float) t->irms;
- for (i = 0; i < LPC10_ORDER; i++)
- rc[i] = t->irc[i]/16384.0f;
-}
-/*- End of function --------------------------------------------------------*/
-
-lpc10_decode_state_t *lpc10_decode_init(lpc10_decode_state_t *s, int error_correction)
-{
- static const int16_t rand_init[] =
- {
- -21161,
- -8478,
- 30892,
- -10216,
- 16950
- };
- int i;
- int j;
-
- if (s == NULL)
- {
- if ((s = (lpc10_decode_state_t *) malloc(sizeof(*s))) == NULL)
- return NULL;
- }
-
- s->error_correction = error_correction;
-
- /* State used by function decode */
- s->iptold = 60;
- s->first = TRUE;
- s->ivp2h = 0;
- s->iovoic = 0;
- s->iavgp = 60;
- s->erate = 0;
- for (i = 0; i < 3; i++)
- {
- for (j = 0; j < 10; j++)
- s->drc[j][i] = 0;
- s->dpit[i] = 0;
- s->drms[i] = 0;
- }
-
- /* State used by function synths */
- for (i = 0; i < 360; i++)
- s->buf[i] = 0.0f;
- s->buflen = LPC10_SAMPLES_PER_FRAME;
-
- /* State used by function pitsyn */
- s->rmso = 1.0f;
- s->first_pitsyn = TRUE;
-
- /* State used by function bsynz */
- s->ipo = 0;
- for (i = 0; i < 166; i++)
- {
- s->exc[i] = 0.0f;
- s->exc2[i] = 0.0f;
- }
- for (i = 0; i < 3; i++)
- {
- s->lpi[i] = 0.0f;
- s->hpi[i] = 0.0f;
- }
- s->rmso_bsynz = 0.0f;
-
- /* State used by function lpc10_random */
- s->j = 1;
- s->k = 4;
- for (i = 0; i < 5; i++)
- s->y[i] = rand_init[i];
-
- /* State used by function deemp */
- for (i = 0; i < 2; i++)
- s->dei[i] = 0.0f;
- for (i = 0; i < 3; i++)
- s->deo[i] = 0.0f;
-
- return s;
-}
-/*- End of function --------------------------------------------------------*/
-
-int lpc10_decode_release(lpc10_decode_state_t *s)
-{
- free(s);
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-int lpc10_decode(lpc10_decode_state_t *s, int16_t amp[], const uint8_t code[], int len)
-{
- int voice[2];
- int32_t pitch;
- float speech[LPC10_SAMPLES_PER_FRAME];
- float rc[LPC10_ORDER];
- lpc10_frame_t frame;
- float rms;
- int i;
- int j;
- int base;
-
- /* Decode 54 bits in 7 bytes to LPC10_SAMPLES_PER_FRAME speech samples. */
- len /= 7;
- for (i = 0; i < len; i++)
- {
- lpc10_unpack(&frame, &code[i*7]);
- decode(s, &frame, voice, &pitch, &rms, rc);
- synths(s, voice, &pitch, &rms, rc, speech);
- base = i*LPC10_SAMPLES_PER_FRAME;
- for (j = 0; j < LPC10_SAMPLES_PER_FRAME; j++)
- amp[base + j] = (int16_t) rintf(32768.0f*speech[j]);
- }
-
- return len*LPC10_SAMPLES_PER_FRAME;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * SpanDSP - a series of DSP components for telephony
- *
- * lpc10_encdecs.h - LPC10 low bit rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: lpc10_encdecs.h,v 1.9 2006/11/30 15:41:47 steveu Exp $
- */
-
-#define LPC10_ORDER 10
-
-#if !defined(min)
-#define min(a,b) ((a) <= (b) ? (a) : (b))
-#endif
-#if !defined(max)
-#define max(a,b) ((a) >= (b) ? (a) : (b))
-#endif
-
-void lpc10_placea(int32_t *ipitch,
- int32_t voibuf[4][2],
- int32_t *obound,
- int32_t af,
- int32_t vwin[3][2],
- int32_t awin[3][2],
- int32_t ewin[3][2],
- int32_t lframe,
- int32_t maxwin);
-
-void lpc10_placev(int32_t *osbuf,
- int32_t *osptr,
- int32_t oslen,
- int32_t *obound,
- int32_t vwin[3][2],
- int32_t af,
- int32_t lframe,
- int32_t minwin,
- int32_t maxwin,
- int32_t dvwinl,
- int32_t dvwinh);
-
-void lpc10_voicing(lpc10_encode_state_t *st,
- int32_t *vwin,
- float *inbuf,
- float *lpbuf,
- const int32_t buflim[],
- int32_t half,
- float *minamd,
- float *maxamd,
- int32_t *mintau,
- float *ivrc,
- int32_t *obound);
-
-void lpc10_analyse(lpc10_encode_state_t *st, float *speech, int32_t *voice, int32_t *pitch, float *rms, float rc[]);
-
-static __inline__ int32_t pow_ii(int32_t x, int32_t n)
-{
- int32_t pow;
- uint32_t u;
-
- if (n <= 0)
- {
- if (n == 0 || x == 1)
- return 1;
- if (x != -1)
- return (x == 0) ? 1/x : 0;
- n = -n;
- }
- u = n;
- for (pow = 1; ; )
- {
- if ((u & 1))
- pow *= x;
- if ((u >>= 1) == 0)
- break;
- x *= x;
- }
- return pow;
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ float r_sign(float a, float b)
-{
- float x;
-
- x = fabsf(a);
- return (b >= 0.0f) ? x : -x;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * lpc10_encode.c - LPC10 low bit rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the U.S. Department of Defense reference
- * implementation of the LPC-10 2400 bps Voice Coder. They do not
- * exert copyright claims on their code, and it may be freely used.
- *
- * $Id: lpc10_encode.c,v 1.19 2008/02/09 15:31:36 steveu Exp $
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <inttypes.h>
-#include <memory.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/lpc10.h"
-
-#include "lpc10_encdecs.h"
-
-static void lpc10_pack(lpc10_encode_state_t *s, uint8_t ibits[], lpc10_frame_t *t)
-{
- static const int iblist[53] =
- {
- 13, 12, 11, 1, 2, 13, 12, 11, 1, 2,
- 13, 10, 11, 2, 1, 10, 13, 12, 11, 10,
- 2, 13, 12, 11, 10, 2, 1, 12, 7, 6,
- 1, 10, 9, 8, 7, 4, 6, 9, 8, 7,
- 5, 1, 9, 8, 4, 6, 1, 5, 9, 8,
- 7, 5, 6
- };
- int32_t itab[13];
- int x;
- int i;
-
- /* ibits is 54 bits of LPC data ordered as follows: */
- /* R1-0, R2-0, R3-0, P-0, A-0, */
- /* R1-1, R2-1, R3-1, P-1, A-1, */
- /* R1-2, R4-0, R3-2, A-2, P-2, R4-1, */
- /* R1-3, R2-2, R3-3, R4-2, A-3, */
- /* R1-4, R2-3, R3-4, R4-3, A-4, */
- /* P-3, R2-4, R7-0, R8-0, P-4, R4-4, */
- /* R5-0, R6-0, R7-1,R10-0, R8-1, */
- /* R5-1, R6-1, R7-2, R9-0, P-5, */
- /* R5-2, R6-2,R10-1, R8-2, P-6, R9-1, */
- /* R5-3, R6-3, R7-3, R9-2, R8-3, SYNC */
-
- itab[0] = t->ipitch;
- itab[1] = t->irms;
- itab[2] = 0;
- for (i = 0; i < LPC10_ORDER; i++)
- itab[i + 3] = t->irc[LPC10_ORDER - 1 - i] & 0x7FFF;
- /* Put 54 bits into the output buffer */
- x = 0;
- for (i = 0; i < 53; i++)
- {
- x = (x << 1) | (itab[iblist[i] - 1] & 1);
- if ((i & 7) == 7)
- ibits[i >> 3] = (uint8_t) (x & 0xFF);
- itab[iblist[i] - 1] >>= 1;
- }
- x = (x << 1) | (s->isync & 1);
- s->isync ^= 1;
- x <<= 2;
- ibits[6] = (uint8_t) (x & 0xFF);
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Quantize LPC parameters for transmission */
-static int encode(lpc10_encode_state_t *s,
- lpc10_frame_t *t,
- int32_t *voice,
- int32_t pitch,
- float rms,
- float *rc)
-{
- static const int32_t enctab[16] =
- {
- 0, 7, 11, 12, 13, 10, 6, 1, 14, 9, 5, 2, 3, 4, 8, 15
- };
- static const int32_t entau[60] =
- {
- 19, 11, 27, 25, 29, 21, 23, 22, 30, 14, 15, 7, 39, 38, 46,
- 42, 43, 41, 45, 37, 53, 49, 51, 50, 54, 52, 60, 56, 58, 26,
- 90, 88, 92, 84, 86, 82, 83, 81, 85, 69, 77, 73, 75, 74, 78,
- 70, 71, 67, 99, 97, 113, 112, 114, 98, 106, 104, 108, 100,
- 101, 76
- };
- static const int32_t enadd[8] =
- {
- 1920, -768, 2432, 1280, 3584, 1536, 2816, -1152
- };
- static const float enscl[8] =
- {
- 0.0204f, 0.0167f, 0.0145f, 0.0147f, 0.0143f, 0.0135f, 0.0125f, 0.0112f
- };
- static const int32_t enbits[8] =
- {
- 6, 5, 4, 4, 4, 4, 3, 3
- };
- static const int32_t entab6[64] =
- {
- 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3,
- 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,
- 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 13, 14, 15
- };
- static const int32_t rmst[64] =
- {
- 1024, 936, 856, 784, 718, 656, 600, 550, 502,
- 460, 420, 384, 352, 328, 294, 270, 246, 226,
- 206, 188, 172, 158, 144, 132, 120, 110, 102,
- 92, 84, 78, 70, 64, 60, 54, 50,
- 46, 42, 38, 34, 32, 30, 26, 24,
- 22, 20, 18, 17, 16, 15, 14, 13,
- 12, 11, 10, 9, 8, 7, 6, 5, 4,
- 3, 2, 1, 0
- };
-
- int32_t idel;
- int32_t nbit;
- int32_t i;
- int32_t j;
- int32_t i2;
- int32_t i3;
- int32_t mrk;
-
- /* Scale RMS and RC's to int32_ts */
- t->irms = (int32_t) rms;
- for (i = 0; i < LPC10_ORDER; i++)
- t->irc[i] = (int32_t) (rc[i]*32768.0f);
- if (voice[0] != 0 && voice[1] != 0)
- {
- t->ipitch = entau[pitch - 1];
- }
- else
- {
- if (s->error_correction)
- {
- t->ipitch = 0;
- if (voice[0] != voice[1])
- t->ipitch = 127;
- }
- else
- {
- t->ipitch = (voice[0] << 1) + voice[1];
- }
- }
- /* Encode RMS by binary table search */
- j = 32;
- idel = 16;
- t->irms = min(t->irms, 1023);
- while (idel > 0)
- {
- if (t->irms > rmst[j - 1])
- j -= idel;
- if (t->irms < rmst[j - 1])
- j += idel;
- idel /= 2;
- }
- if (t->irms > rmst[j - 1])
- --j;
- t->irms = 31 - j/2;
- /* Encode RC(1) and (2) as log-area-ratios */
- for (i = 0; i < 2; i++)
- {
- i2 = t->irc[i];
- mrk = 0;
- if (i2 < 0)
- {
- i2 = -i2;
- mrk = 1;
- }
- i2 = min(i2/512, 63);
- i2 = entab6[i2];
- if (mrk != 0)
- i2 = -i2;
- t->irc[i] = i2;
- }
- /* Encode RC(3) - (10) linearly, remove bias then scale */
- for (i = 2; i < LPC10_ORDER; i++)
- {
- i2 = (int32_t) ((t->irc[i]/2 + enadd[LPC10_ORDER - 1 - i])*enscl[LPC10_ORDER - 1 - i]);
- i2 = max(i2, -127);
- i2 = min(i2, 127);
- nbit = enbits[LPC10_ORDER - 1 - i];
- i3 = (i2 < 0);
- i2 /= pow_ii(2, nbit);
- if (i3)
- i2--;
- t->irc[i] = i2;
- }
- /* Protect the most significant bits of the most
- important parameters during non-voiced frames.
- RC(1) - RC(4) are protected using 20 parity bits
- replacing RC(5) - RC(10). */
- if (s->error_correction)
- {
- if (t->ipitch == 0 || t->ipitch == 127)
- {
- t->irc[4] = enctab[(t->irc[0] & 0x1E) >> 1];
- t->irc[5] = enctab[(t->irc[1] & 0x1E) >> 1];
- t->irc[6] = enctab[(t->irc[2] & 0x1E) >> 1];
- t->irc[7] = enctab[(t->irms & 0x1E) >> 1];
- t->irc[8] = enctab[(t->irc[3] & 0x1E) >> 1] >> 1;
- t->irc[9] = enctab[(t->irc[3] & 0x1E) >> 1] & 1;
- }
- }
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-static void high_pass_100hz(lpc10_encode_state_t *s, float speech[], int start, int len)
-{
- float si;
- float err;
- int i;
-
- /* 100 Hz high pass filter */
- for (i = start; i < len; i++)
- {
- si = speech[i];
- err = si + s->z11*1.859076f - s->z21*0.8648249f;
- si = err - s->z11*2.0f + s->z21;
- s->z21 = s->z11;
- s->z11 = err;
- err = si + s->z12*1.935715f - s->z22*0.9417004f;
- si = err - s->z12*2.0f + s->z22;
- s->z22 = s->z12;
- s->z12 = err;
- speech[i] = si*0.902428f;
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-lpc10_encode_state_t *lpc10_encode_init(lpc10_encode_state_t *s, int error_correction)
-{
- int i;
- int j;
-
- if (s == NULL)
- {
- if ((s = (lpc10_encode_state_t *) malloc(sizeof(*s))) == NULL)
- return NULL;
- }
-
- s->error_correction = error_correction;
-
- /* State used only by function high_pass_100hz */
- s->z11 = 0.0f;
- s->z21 = 0.0f;
- s->z12 = 0.0f;
- s->z22 = 0.0f;
-
- /* State used by function lpc10_analyse */
- for (i = 0; i < 540; i++)
- {
- s->inbuf[i] = 0.0f;
- s->pebuf[i] = 0.0f;
- }
- for (i = 0; i < 696; i++)
- s->lpbuf[i] = 0.0f;
- for (i = 0; i < 312; i++)
- s->ivbuf[i] = 0.0f;
- s->bias = 0.0f;
- s->osptr = 1;
- for (i = 0; i < 3; i++)
- s->obound[i] = 0;
- s->vwin[2][0] = 307;
- s->vwin[2][1] = 462;
- s->awin[2][0] = 307;
- s->awin[2][1] = 462;
- for (i = 0; i < 4; i++)
- {
- s->voibuf[i][0] = 0;
- s->voibuf[i][1] = 0;
- }
- for (i = 0; i < 3; i++)
- s->rmsbuf[i] = 0.0f;
- for (i = 0; i < 3; i++)
- {
- for (j = 0; j < 10; j++)
- s->rcbuf[i][j] = 0.0f;
- }
- s->zpre = 0.0f;
-
- /* State used by function onset */
- s->n = 0.0f;
- s->d__ = 1.0f;
- for (i = 0; i < 16; i++)
- s->l2buf[i] = 0.0f;
- s->l2sum1 = 0.0f;
- s->l2ptr1 = 1;
- s->l2ptr2 = 9;
- s->hyst = FALSE;
-
- /* State used by function lpc10_voicing */
- s->dither = 20.0f;
- s->maxmin = 0.0f;
- for (i = 0; i < 3; i++)
- {
- s->voice[i][0] = 0.0f;
- s->voice[i][1] = 0.0f;
- }
- s->lbve = 3000;
- s->fbve = 3000;
- s->fbue = 187;
- s->ofbue = 187;
- s->sfbue = 187;
- s->lbue = 93;
- s->olbue = 93;
- s->slbue = 93;
- s->snr = (float) (s->fbve / s->fbue << 6);
-
- /* State used by function dynamic_pitch_tracking */
- for (i = 0; i < 60; i++)
- s->s[i] = 0.0f;
- for (i = 0; i < 2; i++)
- {
- for (j = 0; j < 60; j++)
- s->p[i][j] = 0;
- }
- s->ipoint = 0;
- s->alphax = 0.0f;
-
- /* State used by function lpc10_pack */
- s->isync = 0;
-
- return s;
-}
-/*- End of function --------------------------------------------------------*/
-
-int lpc10_encode_release(lpc10_encode_state_t *s)
-{
- free(s);
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-int lpc10_encode(lpc10_encode_state_t *s, uint8_t code[], const int16_t amp[], int len)
-{
- int32_t voice[2];
- int32_t pitch;
- float speech[LPC10_SAMPLES_PER_FRAME];
- float rc[LPC10_ORDER];
- float rms;
- lpc10_frame_t frame;
- int i;
- int j;
-
- len /= LPC10_SAMPLES_PER_FRAME;
- for (i = 0; i < len; i++)
- {
- for (j = 0; j < LPC10_SAMPLES_PER_FRAME; j++)
- speech[j] = (float) amp[i*LPC10_SAMPLES_PER_FRAME + j]/32768.0f;
- high_pass_100hz(s, speech, 0, LPC10_SAMPLES_PER_FRAME);
- lpc10_analyse(s, speech, voice, &pitch, &rms, rc);
- encode(s, &frame, voice, pitch, rms, rc);
- lpc10_pack(s, &code[7*i], &frame);
- }
- return len*7;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * lpc10_placev.c - LPC10 low bit rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the U.S. Department of Defense reference
- * implementation of the LPC-10 2400 bps Voice Coder. They do not
- * exert copyright claims on their code, and it may be freely used.
- *
- * $Id: lpc10_placev.c,v 1.13 2008/02/09 15:31:36 steveu Exp $
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <inttypes.h>
-#include <memory.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/lpc10.h"
-
-#include "lpc10_encdecs.h"
-
-#define subsc(x,y) (((x) << 1) + (y))
-
-void lpc10_placea(int32_t *ipitch,
- int32_t voibuf[3][2],
- int32_t *obound,
- int32_t af,
- int32_t vwin[3][2],
- int32_t awin[3][2],
- int32_t ewin[3][2],
- int32_t lframe,
- int32_t maxwin)
-{
- int allv;
- int winv;
- int32_t i;
- int32_t j;
- int32_t k;
- int32_t l;
- int32_t hrange;
- int ephase;
- int32_t lrange;
-
- lrange = (af - 2)*lframe + 1;
- hrange = af*lframe;
-
- /* Place the analysis window based on the voicing window placement,
- onsets, tentative voicing decision, and pitch. */
-
- /* Case 1: Sustained voiced speech
- If the five most recent voicing decisions are
- voiced, then the window is placed phase-synchronously with the
- previous window, as close to the present voicing window if possible.
- If onsets bound the voicing window, then preference is given to
- a phase-synchronous placement which does not overlap these onsets. */
-
- /* Case 2: Voiced transition
- If at least one voicing decision in AF is voicied, and there are no
- onsets, then the window is placed as in case 1. */
-
- /* Case 3: Unvoiced speech or onsets
- If both voicing decisions in AF are unvoiced, or there are onsets
- then the window is placed coincident with the voicing window. */
-
- /* Note: During phase-synchronous placement of windows, the length
- is not altered from MAXWIN, since this would defeat the purpose
- of phase-synchronous placement. */
-
- /* Check for case 1 and case 2 */
- allv = voibuf[af - 2][1] == 1
- &&
- voibuf[af - 1][0] == 1
- &&
- voibuf[af - 1][1] == 1
- &&
- voibuf[af][0] == 1
- &&
- voibuf[af][1] == 1;
- winv = voibuf[af][0] == 1 || voibuf[af][1] == 1;
- if (allv || (winv && *obound == 0))
- {
- /* APHASE: Phase synchronous window placement. */
- /* Get minimum lower index of the window. */
- i = (lrange + *ipitch - 1 - awin[af - 2][0]) / *ipitch;
- i *= *ipitch;
- i += awin[af - 2][0];
- /* l = the actual length of this frame's analysis window. */
- l = maxwin;
- /* Calculate the location where a perfectly centered window would start. */
- k = (vwin[af - 1][0] + vwin[af - 1][1] + 1 - l)/2;
- /* Choose the actual location to be the pitch multiple closest to this */
- awin[af - 1][0] = i + ((int) floorf((float) (k - i)/(float) *ipitch + 0.5f))*(*ipitch);
- awin[af - 1][1] = awin[af - 1][0] + l - 1;
- /* If there is an onset bounding the right of the voicing window and the
- analysis window overlaps that, then move the analysis window backward
- to avoid this onset. */
- if (*obound >= 2 && awin[af - 1][1] > vwin[af - 1][1])
- {
- awin[af - 1][0] -= *ipitch;
- awin[af - 1][1] -= *ipitch;
- }
- /* Similarly for the left of the voicing window. */
- if ((*obound == 1 || *obound == 3) && awin[af - 1][0] < vwin[af - 1][0])
- {
- awin[af - 1][0] += *ipitch;
- awin[af - 1][1] += *ipitch;
- }
- /* If this placement puts the analysis window above HRANGE, then
- move it backward an integer number of pitch periods. */
- while (awin[af - 1][1] > hrange)
- {
- awin[af - 1][0] -= *ipitch;
- awin[af - 1][1] -= *ipitch;
- }
- /* Similarly if the placement puts the analysis window below LRANGE. */
- while (awin[af - 1][0] < lrange)
- {
- awin[af - 1][0] += *ipitch;
- awin[af - 1][1] += *ipitch;
- }
- /* Make energy window be phase-synchronous. */
- ephase = TRUE;
- }
- else
- {
- /* Case 3 */
- awin[af - 1][0] = vwin[af - 1][0];
- awin[af - 1][1] = vwin[af - 1][1];
- ephase = FALSE;
- }
- /* RMS is computed over an integer number of pitch periods in the analysis
- window. When it is not placed phase-synchronously, it is placed as close
- as possible to onsets. */
- j = (awin[af - 1][1] - awin[af - 1][0] + 1) / *ipitch * *ipitch;
- if (j == 0 || !winv)
- {
- ewin[af - 1][0] = vwin[af - 1][0];
- ewin[af - 1][1] = vwin[af - 1][1];
- }
- else if (!ephase && *obound == 2)
- {
- ewin[af - 1][0] = awin[af - 1][1] - j + 1;
- ewin[af - 1][1] = awin[af - 1][1];
- }
- else
- {
- ewin[af - 1][0] = awin[af - 1][0];
- ewin[af - 1][1] = awin[af - 1][0] + j - 1;
- }
-}
-/*- End of function --------------------------------------------------------*/
-
-void lpc10_placev(int32_t *osbuf,
- int32_t *osptr,
- int32_t oslen,
- int32_t *obound,
- int32_t vwin[3][2],
- int32_t af,
- int32_t lframe,
- int32_t minwin,
- int32_t maxwin,
- int32_t dvwinl,
- int32_t dvwinh)
-{
- int32_t i1;
- int32_t i2;
- int crit;
- int32_t q;
- int32_t osptr1;
- int32_t hrange;
- int32_t lrange;
- int i;
-
- /* Voicing window placement */
-
- /* __________________ __________________ ______________ */
- /* | | | */
- /* | 1F | 2F | 3F ... */
- /* |__________________|__________________|______________ */
-
- /* Previous | */
- /* Window | */
- /* ...________| */
-
- /* | | */
- /* ------>| This window's placement range |<------ */
- /* | | */
-
- /* There are three cases. Note these are different from those
- given in the LPC-10e phase 1 report. */
-
- /* 1. If there are no onsets in this range, then the voicing window
- is centered in the pitch window. If such a placement is not within
- the window's placement range, then the window is placed in the left-most
- portion of the placement range. Its length is always MAXWIN. */
-
- /* 2. If the first onset is in 2F and there is sufficient room to place
- the window immediately before this onset, then the window is placed
- there, and its length is set to the maximum possible under these
- constraints. */
-
- /* "Critical Region Exception": If there is another onset in 2F
- such that a window can be placed between the two onsets, the
- window is placed there (ie, as in case 3). */
-
- /* 3. Otherwise, the window is placed immediately after the onset. The
- window's length is the longest length that can fit in the range under these
- constraints, except that the window may be shortened even further to avoid
- overlapping other onsets in the placement range. In any case, the window's
- length is at least MINWIN. */
-
- /* Note that the values of MINWIN and LFRAME must be chosen such
- that case 2 = false implies case 3 = true. This means that
- MINWIN <= LFRAME/2. If this were not the case, then a fourth case
- would have to be added for when the window cannot fit either before
- or after the onset. */
-
- /* Note also that onsets which weren't in 2F last time may be in 1F this
- time, due to the filter delays in computing onsets. The result is that
- occasionally a voicing window will overlap that onset. The only way
- to circumvent this problem is to add more delay in processing input
- speech. In the trade-off between delay and window-placement, window
- placement lost. */
-
- /* Compute the placement range */
-
- /* Computing MAX */
- i1 = vwin[af - 2][1] + 1;
- i2 = (af - 2)*lframe + 1;
- lrange = max(i1, i2);
- hrange = af*lframe;
- /* Compute OSPTR1, so the following code only looks at relevant onsets. */
- for (osptr1 = *osptr - 1; osptr1 >= 1; osptr1--)
- {
- if (osbuf[osptr1 - 1] <= hrange)
- break;
- }
- osptr1++;
- /* Check for case 1 first (fast case) */
- if (osptr1 <= 1 || osbuf[osptr1 - 2] < lrange)
- {
- /* Compute max */
- i1 = vwin[af - 2][1] + 1;
- vwin[af - 1][0] = max(i1, dvwinl);
- vwin[af - 1][1] = vwin[af - 1][0] + maxwin - 1;
- *obound = 0;
- }
- else
- {
- /* Search backward in OSBUF for first onset in range. */
- /* This code relies on the above check being performed first. */
- for (q = osptr1 - 1; q >= 1; q--)
- {
- if (osbuf[q - 1] < lrange)
- break;
- }
- q++;
- /* Check for case 2 (placement before onset): */
- /* Check for critical region exception: */
- crit = FALSE;
- for (i = q + 1; i < osptr1; i++)
- {
- if (osbuf[i - 1] - osbuf[q - 1] >= minwin)
- {
- crit = TRUE;
- break;
- }
- }
- /* Compute max */
- i1 = (af - 1)*lframe;
- i2 = lrange + minwin - 1;
- if (!crit && osbuf[q - 1] > max(i1, i2))
- {
- vwin[af - 1][1] = osbuf[q - 1] - 1;
- /* Compute max */
- i2 = vwin[af - 1][1] - maxwin + 1;
- vwin[af - 1][0] = max(lrange, i2);
- *obound = 2;
- }
- else
- {
- /* Case 3 (placement after onset) */
- vwin[af - 1][0] = osbuf[q - 1];
- do
- {
- if (++q >= osptr1
- ||
- osbuf[q - 1] > vwin[af - 1][0] + maxwin)
- {
- /* Compute min */
- i1 = vwin[af - 1][0] + maxwin - 1;
- vwin[af - 1][1] = min(i1, hrange);
- *obound = 1;
- return;
- }
- }
- while (osbuf[q - 1] < vwin[af - 1][0] + minwin);
- vwin[af - 1][1] = osbuf[q - 1] - 1;
- *obound = 3;
- }
- }
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * lpc10_voicing.c - LPC10 low bit rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This code is based on the U.S. Department of Defense reference
- * implementation of the LPC-10 2400 bps Voice Coder. They do not
- * exert copyright claims on their code, and it may be freely used.
- *
- * $Id: lpc10_voicing.c,v 1.9 2008/02/09 15:31:36 steveu Exp $
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <inttypes.h>
-#include <memory.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/dc_restore.h"
-#include "voipcodecs/lpc10.h"
-
-#include "lpc10_encdecs.h"
-
-static void vparms(int32_t vwin[],
- float *inbuf,
- float *lpbuf,
- const int32_t buflim[],
- int32_t half,
- float *dither,
- int32_t *mintau,
- int32_t *zc,
- int32_t *lbe,
- int32_t *fbe,
- float *qs,
- float *rc1,
- float *ar_b,
- float *ar_f)
-{
- int32_t inbuf_offset;
- int32_t lpbuf_offset;
- int32_t vlen;
- int32_t stop;
- int32_t i;
- int32_t start;
- float r1;
- float r2;
- float e_pre;
- float ap_rms;
- float e_0;
- float oldsgn;
- float lp_rms;
- float e_b;
- float e_f;
- float r_b;
- float r_f;
- float e0ap;
-
- /* Calculate zero crossings (ZC) and several energy and correlation */
- /* measures on low band and full band speech. Each measure is taken */
- /* over either the first or the second half of the voicing window, */
- /* depending on the variable HALF. */
- lpbuf_offset = buflim[2];
- lpbuf -= lpbuf_offset;
- inbuf_offset = buflim[0];
- inbuf -= inbuf_offset;
-
- lp_rms = 0.0f;
- ap_rms = 0.0f;
- e_pre = 0.0f;
- e0ap = 0.0f;
- *rc1 = 0.0f;
- e_0 = 0.0f;
- e_b = 0.0f;
- e_f = 0.0f;
- r_f = 0.0f;
- r_b = 0.0f;
- *zc = 0;
- vlen = vwin[1] - vwin[0] + 1;
- start = vwin[0] + half*vlen/2 + 1;
- stop = start + vlen/2 - 1;
-
- /* I'll use the symbol HVL in the table below to represent the value */
- /* VLEN/2. Note that if VLEN is odd, then HVL should be rounded down, */
- /* i.e., HVL = (VLEN-1)/2. */
-
- /* HALF START STOP */
-
- /* 1 VWIN(1)+1 VWIN(1)+HVL */
- /* 2 VWIN(1)+HVL+1 VWIN(1)+2*HVL */
- oldsgn = r_sign(1.0f, inbuf[start - 1] - *dither);
- for (i = start; i <= stop; i++)
- {
- lp_rms += fabsf(lpbuf[i]);
- ap_rms += fabsf(inbuf[i]);
- e_pre += fabsf(inbuf[i] - inbuf[i - 1]);
- r1 = inbuf[i];
- e0ap += r1*r1;
- *rc1 += inbuf[i]*inbuf[i - 1];
- r1 = lpbuf[i];
- e_0 += r1*r1;
- r1 = lpbuf[i - *mintau];
- e_b += r1*r1;
- r1 = lpbuf[i + *mintau];
- e_f += r1*r1;
- r_f += lpbuf[i]*lpbuf[i + *mintau];
- r_b += lpbuf[i]*lpbuf[i - *mintau];
- r1 = inbuf[i] + *dither;
- if (r_sign(1.0f, r1) != oldsgn)
- {
- ++(*zc);
- oldsgn = -oldsgn;
- }
- *dither = -(*dither);
- }
- /* Normalized short-term autocovariance coefficient at unit sample delay */
- *rc1 /= max(e0ap, 1.0f);
- /* Ratio of the energy of the first difference signal (6 dB/oct preemphasis)*/
- /* to the energy of the full band signal */
- /* Computing MAX */
- r1 = ap_rms*2.0f;
- *qs = e_pre/max(r1, 1.0f);
- /* aR_b is the product of the forward and reverse prediction gains, */
- /* looking backward in time (the causal case). */
- *ar_b = r_b/max(e_b, 1.0f)*(r_b/max(e_0, 1.0f));
- /* aR_f is the same as aR_b, but looking forward in time (non causal case).*/
- *ar_f = r_f/max(e_f, 1.0f)*(r_f/max(e_0, 1.0f));
- /* Normalize ZC, LBE, and FBE to old fixed window length of 180. */
- /* (The fraction 90/VLEN has a range of 0.58 to 1) */
- r2 = (float) (*zc << 1);
- *zc = lrintf(r2*(90.0f/vlen));
- r1 = lp_rms/4*(90.0f/vlen);
- *lbe = min(lrintf(r1), 32767);
- r1 = ap_rms/4*(90.0f/vlen);
- *fbe = min(lrintf(r1), 32767);
-}
-/*- End of function --------------------------------------------------------*/
-
-/* Voicing detection makes voicing decisions for each half */
-/* frame of input speech. Tentative voicing decisions are made two frames*/
-/* in the future (2F) for each half frame. These decisions are carried */
-/* through one frame in the future (1F) to the present (P) frame where */
-/* they are examined and smoothed, resulting in the final voicing */
-/* decisions for each half frame. */
-
-/* The voicing parameter (signal measurement) column vector (VALUE) */
-/* is based on a rectangular window of speech samples determined by the */
-/* window placement algorithm. The voicing parameter vector contains the*/
-/* AMDF windowed maximum-to-minimum ratio, the zero crossing rate, energy*/
-/* measures, reflection coefficients, and prediction gains. The voicing */
-/* window is placed to avoid contamination of the voicing parameter vector*/
-/* with speech onsets. */
-
-/* The input signal is then classified as unvoiced (including */
-/* silence) or voiced. This decision is made by a linear discriminant */
-/* function consisting of a dot product of the voicing decision */
-/* coefficient (VDC) row vector with the measurement column vector */
-/* (VALUE). The VDC vector is 2-dimensional, each row vector is optimized*/
-/* for a particular signal-to-noise ratio (SNR). So, before the dot */
-/* product is performed, the SNR is estimated to select the appropriate */
-/* VDC vector. */
-
-/* The smoothing algorithm is a modified median smoother. The */
-/* voicing discriminant function is used by the smoother to determine how*/
-/* strongly voiced or unvoiced a signal is. The smoothing is further */
-/* modified if a speech onset and a voicing decision transition occur */
-/* within one half frame. In this case, the voicing decision transition */
-/* is extended to the speech onset. For transmission purposes, there are*/
-/* constraints on the duration and transition of voicing decisions. The */
-/* smoother takes these constraints into account. */
-
-/* Finally, the energy estimates are updated along with the dither */
-/* threshold used to calculate the zero crossing rate (ZC). */
-
-void lpc10_voicing(lpc10_encode_state_t *s,
- int32_t vwin[],
- float *inbuf,
- float *lpbuf,
- const int32_t buflim[],
- int32_t half,
- float *minamd,
- float *maxamd,
- int32_t *mintau,
- float ivrc[],
- int32_t obound[])
-{
- static const float vdc[100] =
- {
- 0.0f, 1714.0f, -110.0f, 334.0f, -4096.0f, -654.0f, 3752.0f, 3769.0f, 0.0f, 1181.0f,
- 0.0f, 874.0f, -97.0f, 300.0f, -4096.0f, -1021.0f, 2451.0f, 2527.0f, 0.0f, -500.0f,
- 0.0f, 510.0f, -70.0f, 250.0f, -4096.0f, -1270.0f, 2194.0f, 2491.0f, 0.0f, -1500.0f,
- 0.0f, 500.0f, -10.0f, 200.0f, -4096.0f, -1300.0f, 2.0e3f, 2.0e3f, 0.0f, -2.0e3f,
- 0.0f, 500.0f, 0.0f, 0.0f, -4096.0f, -1300.0f, 2.0e3f, 2.0e3f, 0.0f, -2500.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f
- };
- static const int nvdcl = 5;
- static const float vdcl[10] =
- {
- 600.0f, 450.0f, 300.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f
- };
-
- int32_t inbuf_offset;
- int32_t lpbuf_offset;
- int32_t i1;
- float r1;
- float r2;
- float ar_b;
- float ar_f;
- int32_t snrl;
- int32_t i;
- float value[9];
- int32_t zc;
- int ot;
- float qs;
- int32_t vstate;
- float rc1;
- int32_t fbe;
- int32_t lbe;
- float snr2;
-
-#if (_MSC_VER >= 1400)
- __analysis_assume(half >=0 && half < 2);
-#endif
-
- inbuf_offset = 0;
- lpbuf_offset = 0;
- if (inbuf)
- {
- inbuf_offset = buflim[0];
- inbuf -= inbuf_offset;
- }
- if (lpbuf)
- {
- lpbuf_offset = buflim[2];
- lpbuf -= lpbuf_offset;
- }
-
- /* Voicing Decision Parameter vector (* denotes zero coefficient): */
-
- /* * MAXMIN */
- /* LBE/LBVE */
- /* ZC */
- /* RC1 */
- /* QS */
- /* IVRC2 */
- /* aR_B */
- /* aR_F */
- /* * LOG(LBE/LBVE) */
- /* Define 2-D voicing decision coefficient vector according to the voicing */
- /* parameter order above. Each row (VDC vector) is optimized for a specific */
- /* SNR. The last element of the vector is the constant. */
- /* E ZC RC1 Qs IVRC2 aRb aRf c */
-
- /* The VOICE array contains the result of the linear discriminant function*/
- /* (analog values). The VOIBUF array contains the hard-limited binary */
- /* voicing decisions. The VOICE and VOIBUF arrays, according to FORTRAN */
- /* memory allocation, are addressed as: */
-
- /* (half-frame number, future-frame number) */
-
- /* | Past | Present | Future1 | Future2 | */
- /* | 1,0 | 2,0 | 1,1 | 2,1 | 1,2 | 2,2 | 1,3 | 2,3 | ---> time */
-
- /* Update linear discriminant function history each frame: */
- if (half == 0)
- {
- s->voice[0][0] = s->voice[1][0];
- s->voice[0][1] = s->voice[1][1];
- s->voice[1][0] = s->voice[2][0];
- s->voice[1][1] = s->voice[2][1];
- s->maxmin = *maxamd / max(*minamd, 1.0f);
- }
- vc_assert(lpbuf);
- vc_assert(inbuf);
- /* Calculate voicing parameters twice per frame */
- vparms(vwin,
- &inbuf[inbuf_offset],
- &lpbuf[lpbuf_offset],
- buflim,
- half,
- &s->dither,
- mintau,
- &zc,
- &lbe,
- &fbe,
- &qs,
- &rc1,
- &ar_b,
- &ar_f);
- /* Estimate signal-to-noise ratio to select the appropriate VDC vector. */
- /* The SNR is estimated as the running average of the ratio of the */
- /* running average full-band voiced energy to the running average */
- /* full-band unvoiced energy. SNR filter has gain of 63. */
- r1 = (s->snr + s->fbve/(float) max(s->fbue, 1))*63/64.0f;
- s->snr = (float) lrintf(r1);
- snr2 = s->snr*s->fbue/max(s->lbue, 1);
- /* Quantize SNR to SNRL according to VDCL thresholds. */
- i1 = nvdcl - 1;
- for (snrl = 0; snrl < i1; snrl++)
- {
- if (snr2 > vdcl[snrl])
- break;
- }
- /* (Note: SNRL = NVDCL here) */
- /* Linear discriminant voicing parameters: */
- value[0] = s->maxmin;
- value[1] = (float) lbe/max(s->lbve, 1);
- value[2] = (float) zc;
- value[3] = rc1;
- value[4] = qs;
- value[5] = ivrc[1];
- value[6] = ar_b;
- value[7] = ar_f;
- /* Evaluation of linear discriminant function: */
- s->voice[2][half] = vdc[snrl*10 + 9];
- for (i = 0; i < 8; i++)
- s->voice[2][half] += vdc[snrl*10 + i]*value[i];
- /* Classify as voiced if discriminant > 0, otherwise unvoiced */
- /* Voicing decision for current half-frame: 1 = Voiced; 0 = Unvoiced */
- s->voibuf[3][half] = (s->voice[2][half] > 0.0f) ? 1 : 0;
- /* Skip voicing decision smoothing in first half-frame: */
- /* Give a value to VSTATE, so that trace statements below will print */
- /* a consistent value from one call to the next when HALF .EQ. 1. */
- /* The value of VSTATE is not used for any other purpose when this is */
- /* true. */
- vstate = -1;
- if (half != 0)
- {
- /* Voicing decision smoothing rules (override of linear combination): */
-
- /* Unvoiced half-frames: At least two in a row. */
- /* -------------------- */
-
- /* Voiced half-frames: At least two in a row in one frame. */
- /* ------------------- Otherwise at least three in a row. */
- /* (Due to the way transition frames are encoded) */
-
- /* In many cases, the discriminant function determines how to smooth. */
- /* In the following chart, the decisions marked with a * may be overridden. */
-
- /* Voicing override of transitions at onsets: */
- /* If a V/UV or UV/V voicing decision transition occurs within one-half */
- /* frame of an onset bounding a voicing window, then the transition is */
- /* moved to occur at the onset. */
-
- /* P 1F */
- /* ----- ----- */
- /* 0 0 0 0 */
- /* 0 0 0* 1 (If there is an onset there) */
- /* 0 0 1* 0* (Based on 2F and discriminant distance) */
- /* 0 0 1 1 */
- /* 0 1* 0 0 (Always) */
- /* 0 1* 0* 1 (Based on discriminant distance) */
- /* 0* 1 1 0* (Based on past, 2F, and discriminant distance) */
- /* 0 1* 1 1 (If there is an onset there) */
- /* 1 0* 0 0 (If there is an onset there) */
- /* 1 0 0 1 */
- /* 1 0* 1* 0 (Based on discriminant distance) */
- /* 1 0* 1 1 (Always) */
- /* 1 1 0 0 */
- /* 1 1 0* 1* (Based on 2F and discriminant distance) */
- /* 1 1 1* 0 (If there is an onset there) */
- /* 1 1 1 1 */
-
- /* Determine if there is an onset transition between P and 1F. */
- /* OT (Onset Transition) is true if there is an onset between */
- /* P and 1F but not after 1F. */
- ot = ((obound[0] & 2) != 0 || obound[1] == 1) && (obound[2] & 1) == 0;
- /* Multi-way dispatch on voicing decision history: */
- vstate = (s->voibuf[1][0] << 3) + (s->voibuf[1][1] << 2) + (s->voibuf[2][0] << 1) + s->voibuf[2][1];
- switch (vstate + 1)
- {
- case 2:
- if (ot && s->voibuf[3][0] == 1)
- s->voibuf[2][0] = 1;
- break;
- case 3:
- if (s->voibuf[3][0] == 0 || s->voice[1][0] < -s->voice[1][1])
- s->voibuf[2][0] = 0;
- else
- s->voibuf[2][1] = 1;
- break;
- case 5:
- s->voibuf[1][1] = 0;
- break;
- case 6:
- if (s->voice[0][1] < -s->voice[1][0])
- s->voibuf[1][1] = 0;
- else
- s->voibuf[2][0] = 1;
- break;
- case 7:
- if (s->voibuf[0][0] == 1 || s->voibuf[3][0] == 1 || s->voice[1][1] > s->voice[0][0])
- s->voibuf[2][1] = 1;
- else
- s->voibuf[1][0] = 1;
- break;
- case 8:
- if (ot)
- s->voibuf[1][1] = 0;
- break;
- case 9:
- if (ot)
- s->voibuf[1][1] = 1;
- break;
- case 11:
- if (s->voice[1][9] < -s->voice[0][1])
- s->voibuf[2][0] = 0;
- else
- s->voibuf[1][1] = 1;
- break;
- case 12:
- s->voibuf[1][1] = 1;
- break;
- case 14:
- if (s->voibuf[3][0] == 0 && s->voice[1][1] < -s->voice[1][0])
- s->voibuf[2][1] = 0;
- else
- s->voibuf[2][0] = 1;
- break;
- case 15:
- if (ot && s->voibuf[3][0] == 0)
- s->voibuf[2][0] = 0;
- break;
- }
- }
- /* During unvoiced half-frames, update the low band and full band unvoiced*/
- /* energy estimates (LBUE and FBUE) and also the zero crossing */
- /* threshold (DITHER). (The input to the unvoiced energy filters is */
- /* restricted to be less than 10dB above the previous inputs of the */
- /* filters.) */
- /* During voiced half-frames, update the low-pass (LBVE) and all-pass */
- /* (FBVE) voiced energy estimates. */
- if (s->voibuf[3][half] == 0)
- {
- r1 = (s->sfbue*63 + (min(fbe, s->ofbue*3) << 3))/64.0f;
- s->sfbue = lrintf(r1);
- s->fbue = s->sfbue/8;
- s->ofbue = fbe;
- r1 = (s->slbue*63 + (min(lbe, s->olbue*3) << 3))/64.0f;
- s->slbue = lrintf(r1);
- s->lbue = s->slbue/8;
- s->olbue = lbe;
- }
- else
- {
- s->lbve = lrintf((s->lbve*63 + lbe)/64.0f);
- s->fbve = lrintf((s->fbve*63 + fbe)/64.0f);
- }
- /* Set dither threshold to yield proper zero crossing rates in the */
- /* presence of low frequency noise and low level signal input. */
- /* NOTE: The divisor is a function of REF, the expected energies. */
- /* Computing MIN */
- /* Computing MAX */
- r2 = sqrtf((float) (s->lbue*s->lbve))*64/3000;
- r1 = max(r2, 1.0f);
- s->dither = min(r1, 20.0f);
- /* Voicing decisions are returned in VOIBUF. */
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-#ifdef _MSC_VER
-#pragma warning(disable:4100)
-#endif
-
-#include "windows.h"
-
-void gettimeofday(struct timeval *tv, void *tz)
-{
- long int l = GetTickCount();
-
- tv->tv_sec = l / 1000;
- tv->tv_usec = (l % 1000) * 1000;
- return;
-}
+++ /dev/null
-/*
- * SpanDSP - a series of DSP components for telephony
- *
- * inttypes.h - a fudge for MSVC, which lacks this header
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Michael Jerris
- *
- *
- * This file is released in the public domain.
- *
- */
-
-#if !defined(_INTTYPES_H_)
-#define _INTTYPES_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef _MSC_VER
-#if (_MSC_VER >= 1400) // VC8+
-#ifndef _CRT_SECURE_NO_DEPRECATE
-#define _CRT_SECURE_NO_DEPRECATE
-#endif
-#ifndef _CRT_NONSTDC_NO_DEPRECATE
-#define _CRT_NONSTDC_NO_DEPRECATE
-#endif
-#endif // VC8+
-#include <windows.h>
-typedef unsigned __int8 uint8_t;
-typedef unsigned __int16 uint16_t;
-typedef unsigned __int32 uint32_t;
-typedef unsigned __int64 uint64_t;
-typedef __int8 int8_t;
-typedef __int16 int16_t;
-typedef __int32 int32_t;
-typedef __int64 int64_t;
-#define inline __inline
-#define __inline__ __inline
-#define INT16_MAX 0x7fff
-#define INT16_MIN (-INT16_MAX - 1)
-#define _MMX_H_
-
-/* disable the following warnings
- * C4100: The formal parameter is not referenced in the body of the function. The unreferenced parameter is ignored.
- * C4200: Non standard extension C zero sized array
- * C4706: assignment within conditional expression
- * C4244: conversion from 'type1' to 'type2', possible loss of data
- * C4295: array is too small to include a terminating null character
- * C4125: decimal digit terminates octal escape sequence
- */
-#pragma warning(disable:4100 4200 4706 4295 4125)
-
-#pragma comment(lib, "ws2_32.lib")
-
-#define strncasecmp _strnicmp
-#define strcasecmp _stricmp
-#define snprintf _snprintf
-
-#if !defined(INFINITY)
-#define INFINITY 0x7fffffff
-#endif
-#endif
-
-#define PACKAGE "voipcodecs"
-#define VERSION "0.0.1andabit"
-
-#define INT32_MAX (2147483647)
-#define INT32_MIN (-2147483647 - 1)
-
-#define PRId8 "d"
-#define PRId16 "d"
-#define PRId32 "ld"
-#define PRId64 "lld"
-
-#define PRIu8 "u"
-#define PRIu16 "u"
-#define PRIu32 "lu"
-#define PRIu64 "llu"
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+++ /dev/null
-
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
+++ /dev/null
-# Microsoft Developer Studio Project File - Name="voipcodecs" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=voipcodecs - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "voipcodecs.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "voipcodecs.mak" CFG="voipcodecs - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "voipcodecs - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "voipcodecs - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "voipcodecs - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D HAVE_TGMATH_H /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /Zi /O2 /I "." /I "..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D HAVE_TGMATH_H /D "_WINDLL" /FR /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib ws2_32.lib winmm.lib /nologo /dll /map /debug /machine:I386 /out:"Release/libvoipcodecs.dll"
-
-!ELSEIF "$(CFG)" == "voipcodecs - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D HAVE_TGMATH_H /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "." /I "..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D HAVE_TGMATH_H /FR /FD /GZ /c
-# SUBTRACT CPP /WX /YX
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib ws2_32.lib winmm.lib /nologo /dll /incremental:no /map /debug /machine:I386 /out:"Debug/libvoipcodecs.dll" /pdbtype:sept
-# SUBTRACT LINK32 /nodefaultlib
-
-!ENDIF
-
-# Begin Target
-
-# Name "voipcodecs - Win32 Release"
-# Name "voipcodecs - Win32 Debug"
+++ /dev/null
-extern void gettimeofday(struct timeval *tv, void *tz);
+++ /dev/null
-/*
- * SpanDSP - a series of DSP components for telephony
- *
- * tgmath.h - a fudge for MSVC, which lacks this header
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Michael Jerris
- *
- *
- * This file is released in the public domain.
- *
- */
-
-#if !defined(_TGMATH_H_)
-#define _TGMATH_H_
-
-#include <math.h>
-
-#if !defined(M_PI)
-/* C99 systems may not define M_PI */
-#define M_PI 3.14159265358979323846264338327
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* A kindofa rint() for VC++ (only kindofa, because rint should be type generic,
- and this one is purely float to int */
-static inline long int lrintf(float a)
-{
- long int i;
-
- __asm
- {
- fld a
- fistp i
- }
- return i;
-}
-
-static inline long int lrint(double a)
-{
- long int i;
-
- __asm
- {
- fld a
- fistp i
- }
- return i;
-}
-
-static inline int rintf(float a)
-{
- int i;
-
- __asm
- {
- fld a
- fistp i
- }
- return i;
-}
-
-static inline int rint(double a)
-{
- int i;
-
- __asm
- {
- fld a
- fistp i
- }
- return i;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+++ /dev/null
-/*
- * SpanDSP - a series of DSP components for telephony
- *
- * inttypes.h - a fudge for MSVC, which lacks this header
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Michael Jerris
- *
- *
- * This file is released in the public domain.
- *
- */
-
-#if !defined(_INTTYPES_H_)
-#define _INTTYPES_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define open _open
-#define write _write
-
-extern int gethostname (char *name, size_t len);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+++ /dev/null
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="libvoipcodecs"
- ProjectGUID="{CF70F278-3364-4395-A2E1-23501C9B8AD2}"
- RootNamespace="libvoipcodecs"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="src; src\voipcodecs; src\msvc"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBSPANDSP_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_TGMATH_H"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- ModuleDefinitionFile="src/msvc/voipcodecs.def"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="src; src\voipcodecs; src\msvc"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBSPANDSP_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_TGMATH_H"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- ModuleDefinitionFile="src/msvc/voipcodecs.def"
- GenerateDebugInformation="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
+++ /dev/null
-EXPORTS
-g722_encode_init
-g722_encode_release
-g722_encode
-g722_decode_init
-g722_decode_release
-g722_decode
-g726_init
-g726_release
-ima_adpcm_init
-ima_adpcm_release
-oki_adpcm_init
-oki_adpcm_release
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * voipcodecs.h - The head guy amongst the headers
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2003 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the Lesser GNU General Public License version 2.1, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id$
- */
-
-/*! \file */
-
-#if !defined(_VOIPCODECS_H_)
-#define _VOIPCODECS_H_
-
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <time.h>
-
-#include <voipcodecs/telephony.h>
-#include <voipcodecs/bit_operations.h>
-#include <voipcodecs/bitstream.h>
-#include <voipcodecs/g711.h>
-#include <voipcodecs/g722.h>
-#include <voipcodecs/g726.h>
-#include <voipcodecs/gsm0610.h>
-#include <voipcodecs/ima_adpcm.h>
-#include <voipcodecs/lpc10.h>
-#include <voipcodecs/oki_adpcm.h>
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * oki_adpcm.c - Conversion routines between linear 16 bit PCM data and
- * OKI (Dialogic) ADPCM format. Supports with the 32kbps
- * and 24kbps variants used by Dialogic.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2001, 2004 Steve Underwood
- *
- * The actual OKI ADPCM encode and decode method is derived from freely
- * available code, whose exact origins seem uncertain.
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: oki_adpcm.c,v 1.23 2008/02/09 15:33:40 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <inttypes.h>
-#include <string.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/oki_adpcm.h"
-
-/* Routines to convert 12 bit linear samples to the Oki ADPCM coding format,
- widely used in CTI, because Dialogic use it. */
-
-static const int16_t step_size[49] =
-{
- 16, 17, 19, 21, 23, 25, 28, 31,
- 34, 37, 41, 45, 50, 55, 60, 66,
- 73, 80, 88, 97, 107, 118, 130, 143,
- 157, 173, 190, 209, 230, 253, 279, 307,
- 337, 371, 408, 449, 494, 544, 598, 658,
- 724, 796, 876, 963, 1060, 1166, 1282, 1408,
- 1552
-};
-
-static const int16_t step_adjustment[8] =
-{
- -1, -1, -1, -1, 2, 4, 6, 8
-};
-
-/* Band limiting filter, to allow sample rate conversion to and
- from 6k samples/second. */
-static const float cutoff_coeffs[] =
-{
- -3.648392e-4f,
- 5.062391e-4f,
- 1.206247e-3f,
- 1.804452e-3f,
- 1.691750e-3f,
- 4.083405e-4f,
- -1.931085e-3f,
- -4.452107e-3f,
- -5.794821e-3f,
- -4.778489e-3f,
- -1.161266e-3f,
- 3.928504e-3f,
- 8.259786e-3f,
- 9.500425e-3f,
- 6.512800e-3f,
- 2.227856e-4f,
- -6.531275e-3f,
- -1.026843e-2f,
- -8.718062e-3f,
- -2.280487e-3f,
- 5.817733e-3f,
- 1.096777e-2f,
- 9.634404e-3f,
- 1.569301e-3f,
- -9.522632e-3f,
- -1.748273e-2f,
- -1.684408e-2f,
- -6.100054e-3f,
- 1.071206e-2f,
- 2.525209e-2f,
- 2.871779e-2f,
- 1.664411e-2f,
- -7.706268e-3f,
- -3.331083e-2f,
- -4.521249e-2f,
- -3.085962e-2f,
- 1.373653e-2f,
- 8.089593e-2f,
- 1.529060e-1f,
- 2.080487e-1f,
- 2.286834e-1f,
- 2.080487e-1f,
- 1.529060e-1f,
- 8.089593e-2f,
- 1.373653e-2f,
- -3.085962e-2f,
- -4.521249e-2f,
- -3.331083e-2f,
- -7.706268e-3f,
- 1.664411e-2f,
- 2.871779e-2f,
- 2.525209e-2f,
- 1.071206e-2f,
- -6.100054e-3f,
- -1.684408e-2f,
- -1.748273e-2f,
- -9.522632e-3f,
- 1.569301e-3f,
- 9.634404e-3f,
- 1.096777e-2f,
- 5.817733e-3f,
- -2.280487e-3f,
- -8.718062e-3f,
- -1.026843e-2f,
- -6.531275e-3f,
- 2.227856e-4f,
- 6.512800e-3f,
- 9.500425e-3f,
- 8.259786e-3f,
- 3.928504e-3f,
- -1.161266e-3f,
- -4.778489e-3f,
- -5.794821e-3f,
- -4.452107e-3f,
- -1.931085e-3f,
- 4.083405e-4f,
- 1.691750e-3f,
- 1.804452e-3f,
- 1.206247e-3f,
- 5.062391e-4f,
- -3.648392e-4f
-};
-
-static int16_t decode(oki_adpcm_state_t *s, uint8_t adpcm)
-{
- int16_t e;
- int16_t ss;
- int16_t linear;
-
- /* Doing the next part as follows:
- *
- * x = adpcm & 0x07;
- * e = (step_size[s->step_index]*(x + x + 1)) >> 3;
- *
- * Seems an obvious improvement on a modern machine, but remember
- * the truncation errors do not come out the same. It would
- * not, therefore, be an exact match for what this code is doing.
- *
- * Just what a Dialogic card does, I do not know!
- */
-
- ss = step_size[s->step_index];
- e = ss >> 3;
- if (adpcm & 0x01)
- e += (ss >> 2);
- /*endif*/
- if (adpcm & 0x02)
- e += (ss >> 1);
- /*endif*/
- if (adpcm & 0x04)
- e = (int16_t)(e + ss);
- /*endif*/
- if (adpcm & 0x08)
- e = -e;
- /*endif*/
- linear = s->last + e;
-
- /* Saturate the values to +/- 2^11 (supposed to be 12 bits) */
- if (linear > 2047)
- linear = 2047;
- else if (linear < -2048)
- linear = -2048;
- /*endif*/
-
- s->last = linear;
- s->step_index = (int16_t)(s->step_index + step_adjustment[adpcm & 0x07]);
- if (s->step_index < 0)
- s->step_index = 0;
- else if (s->step_index > 48)
- s->step_index = 48;
- /*endif*/
- /* Note: the result here is a 12 bit value */
- return linear;
-}
-/*- End of function --------------------------------------------------------*/
-
-static uint8_t encode(oki_adpcm_state_t *s, int16_t linear)
-{
- int16_t e;
- int16_t ss;
- uint8_t adpcm;
-
- ss = step_size[s->step_index];
- e = (linear >> 4) - s->last;
- adpcm = (uint8_t) 0x00;
- if (e < 0)
- {
- adpcm = (uint8_t) 0x08;
- e = -e;
- }
- /*endif*/
- if (e >= ss)
- {
- adpcm |= (uint8_t) 0x04;
- e = (int16_t)(e - ss);
- }
- /*endif*/
- if (e >= (ss >> 1))
- {
- adpcm |= (uint8_t) 0x02;
- e = (int16_t)(e - ss);
- }
- /*endif*/
- if (e >= (ss >> 2))
- adpcm |= (uint8_t) 0x01;
- /*endif*/
-
- /* Use the decoder to set the estimate of the last sample. */
- /* It also will adjust the step_index for us. */
- s->last = decode(s, adpcm);
- return adpcm;
-}
-/*- End of function --------------------------------------------------------*/
-
-oki_adpcm_state_t *oki_adpcm_init(oki_adpcm_state_t *s, int bit_rate)
-{
- if (bit_rate != 32000 && bit_rate != 24000)
- return NULL;
- if (s == NULL)
- {
- if ((s = (oki_adpcm_state_t *) malloc(sizeof(*s))) == NULL)
- return NULL;
- }
- memset(s, 0, sizeof(*s));
- s->bit_rate = bit_rate;
-
- return s;
-}
-/*- End of function --------------------------------------------------------*/
-
-int oki_adpcm_release(oki_adpcm_state_t *s)
-{
- free(s);
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-int oki_adpcm_decode(oki_adpcm_state_t *s,
- int16_t amp[],
- const uint8_t oki_data[],
- int oki_bytes)
-{
- int i;
- int x;
- int l;
- int n;
- int samples;
- float z;
-
-#if (_MSC_VER >= 1400)
- __analysis_assume(s->phase >=0 && s->phase <= 4);
-#endif
-
- samples = 0;
- if (s->bit_rate == 32000)
- {
- for (i = 0; i < oki_bytes; i++)
- {
- amp[samples++] = decode(s, (oki_data[i] >> 4) & 0xF) << 4;
- amp[samples++] = decode(s, oki_data[i] & 0xF) << 4;
- }
- /*endwhile*/
- }
- else
- {
- n = 0;
- for (i = 0; i < oki_bytes; )
- {
- /* 6k to 8k sample/second conversion */
- if (s->phase)
- {
- s->history[s->ptr++] =
- decode(s, (n++ & 1) ? (oki_data[i++] & 0xF) : ((oki_data[i] >> 4) & 0xF)) << 4;
- s->ptr &= (32 - 1);
- }
- /*endif*/
- z = 0.0f;
- for (l = 80 - 3 + s->phase, x = s->ptr - 1; l >= 0; l -= 4, x--)
- z += cutoff_coeffs[l]*s->history[x & (32 - 1)];
- amp[samples++] = (int16_t) (z*4.0f);
- if (++s->phase > 3)
- s->phase = 0;
- /*endif*/
- }
- /*endfor*/
- }
- /*endif*/
- return samples;
-}
-/*- End of function --------------------------------------------------------*/
-
-int oki_adpcm_encode(oki_adpcm_state_t *s,
- uint8_t oki_data[],
- const int16_t amp[],
- int len)
-{
- int x;
- int l;
- int n;
- int bytes;
- float z;
-
- bytes = 0;
- if (s->bit_rate == 32000)
- {
- for (n = 0; n < len; n++)
- {
- s->oki_byte = (s->oki_byte << 4) | encode(s, amp[n]);
- if ((s->mark++ & 1))
- oki_data[bytes++] = s->oki_byte;
- /*endif*/
- }
- /*endfor*/
- }
- else
- {
- n = 0;
- for (;;)
- {
- /* 8k to 6k sample/second conversion */
- if (s->phase > 2)
- {
- s->history[s->ptr++] = amp[n];
- s->ptr &= (32 - 1);
- s->phase = 0;
- if (++n >= len)
- break;
- /*endif*/
- }
- /*endif*/
- s->history[s->ptr++] = amp[n];
- s->ptr &= (32 - 1);
- z = 0.0f;
- for (l = 80 - s->phase, x = s->ptr - 1; l >= 0; l -= 3, x--)
- z += cutoff_coeffs[l]*s->history[x & (32 - 1)];
- /*endfor*/
- s->oki_byte = (s->oki_byte << 4) | encode(s, (int16_t) (z*3.0f));
- if ((s->mark++ & 1))
- oki_data[bytes++] = s->oki_byte;
- /*endif*/
- s->phase++;
- if (++n >= len)
- break;
- /*endif*/
- }
- /*endfor*/
- }
- /*endif*/
- return bytes;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * vector_int.c - Integer vector arithmetic
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the Lesser Lesser GNU General Public License version 2.1.1, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: vector_int.c,v 1.6 2007/08/21 14:25:54 steveu Exp $
- */
-
-/*! \file */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <inttypes.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#if defined(HAVE_TGMATH_H)
-#include <tgmath.h>
-#endif
-#if defined(HAVE_MATH_H)
-#include <math.h>
-#endif
-#include <assert.h>
-
-#include "voipcodecs/telephony.h"
-#include "voipcodecs/vector_int.h"
-
-int32_t vec_dot_prodi16(const int16_t x[], const int16_t y[], int n)
-{
- int32_t z;
-
-#if defined(__GNUC__) && defined(__i386__)
- __asm__ __volatile__(
- " emms;\n"
- " pxor %%mm0,%%mm0;\n"
- " leal -32(%%esi,%%eax,2),%%edx;\n" /* edx = top - 32 */
-
- " cmpl %%edx,%%esi;\n"
- " ja 1f;\n"
-
- /* Work in blocks of 16 int16_t's until we are near the end */
- " .p2align 2;\n"
- "2:\n"
- " movq (%%edi),%%mm1;\n"
- " movq (%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 8(%%edi),%%mm1;\n"
- " movq 8(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 16(%%edi),%%mm1;\n"
- " movq 16(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- " movq 24(%%edi),%%mm1;\n"
- " movq 24(%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
-
- " addl $32,%%esi;\n"
- " addl $32,%%edi;\n"
- " cmpl %%edx,%%esi;\n"
- " jbe 2b;\n"
-
- " .p2align 2;\n"
- "1:\n"
- " addl $24,%%edx;\n" /* now edx = top - 8 */
- " cmpl %%edx,%%esi;\n"
- " ja 3f;\n"
-
- /* Work in blocks of 4 int16_t's until we are near the end */
- " .p2align 2;\n"
- "4:\n"
- " movq (%%edi),%%mm1;\n"
- " movq (%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
-
- " addl $8,%%esi;\n"
- " addl $8,%%edi;\n"
- " cmpl %%edx,%%esi;"
- " jbe 4b;\n"
-
- " .p2align 2;\n"
- "3:\n"
- " addl $4,%%edx;\n" /* now edx = top - 4 */
- " cmpl %%edx,%%esi;\n"
- " ja 5f;\n"
-
- /* Work in a block of 2 int16_t's */
- " movd (%%edi),%%mm1;\n"
- " movd (%%esi),%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
-
- " addl $4,%%esi;\n"
- " addl $4,%%edi;\n"
-
- " .p2align 2;\n"
- "5:\n"
- " addl $2,%%edx;\n" /* now edx = top - 2 */
- " cmpl %%edx,%%esi;\n"
- " ja 6f;\n"
-
- /* Deal with the very last int16_t, when n is odd */
- " movswl (%%edi),%%eax;\n"
- " andl $65535,%%eax;\n"
- " movd %%eax,%%mm1;\n"
- " movswl (%%esi),%%eax;\n"
- " andl $65535,%%eax;\n"
- " movd %%eax,%%mm2;\n"
- " pmaddwd %%mm2,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
-
- " .p2align 2;\n"
- "6:\n"
- /* Merge the pieces of the answer */
- " movq %%mm0,%%mm1;\n"
- " punpckhdq %%mm0,%%mm1;\n"
- " paddd %%mm1,%%mm0;\n"
- /* et voila, eax has the final result */
- " movd %%mm0,%%eax;\n"
-
- " emms;\n"
- : "=a" (z)
- : "S" (x), "D" (y), "a" (n)
- : "cc"
- );
-#else
- int i;
-
- z = 0;
- for (i = 0; i < n; i++)
- z += (int32_t) x[i]*(int32_t) y[i];
-#endif
- return z;
-}
-/*- End of function --------------------------------------------------------*/
-
-int32_t vec_min_maxi16(const int16_t x[], int n, int16_t out[])
-{
-#if defined(__GNUC__) && defined(__i386__)
- static const int32_t lower_bound = 0x80008000;
- static const int32_t upper_bound = 0x7FFF7FFF;
- int32_t max;
-
- __asm__ __volatile__(
- " emms;\n"
- " pushl %%edx;\n"
- " leal -8(%%esi,%%eax,2),%%edx;\n"
-
- " cmpl %%edx,%%esi;\n"
- " jbe 2f;\n"
- " movd %[lower],%%mm0;\n"
- " movd %[upper],%%mm1;\n"
- " jmp 1f;\n"
-
- " .p2align 2;\n"
- "2:\n"
- " movq (%%esi),%%mm0;\n" /* mm0 will be max's */
- " movq %%mm0,%%mm1;\n" /* mm1 will be min's */
- " addl $8,%%esi;\n"
- " cmpl %%edx,%%esi;\n"
- " ja 4f;\n"
-
- " .p2align 2;\n"
- "3:\n"
- " movq (%%esi),%%mm2;\n"
-
- " movq %%mm2,%%mm3;\n"
- " pcmpgtw %%mm0,%%mm3;\n" /* mm3 is bitmask for words where mm2 > mm0 */
- " movq %%mm3,%%mm4;\n"
- " pand %%mm2,%%mm3;\n" /* mm3 is mm2 masked to new max's */
- " pandn %%mm0,%%mm4;\n" /* mm4 is mm0 masked to its max's */
- " por %%mm3,%%mm4;\n"
- " movq %%mm4,%%mm0;\n" /* Now mm0 is updated max's */
-
- " movq %%mm1,%%mm3;\n"
- " pcmpgtw %%mm2,%%mm3;\n" /* mm3 is bitmask for words where mm2 < mm1 */
- " pand %%mm3,%%mm2;\n" /* mm2 is mm2 masked to new min's */
- " pandn %%mm1,%%mm3;\n" /* mm3 is mm1 masked to its min's */
- " por %%mm3,%%mm2;\n"
- " movq %%mm2,%%mm1;\n" /* now mm1 is updated min's */
-
- " addl $8,%%esi;\n"
- " cmpl %%edx,%%esi;\n"
- " jbe 3b;\n"
-
- " .p2align 2;\n"
- "4:\n"
- /* Merge down the 4-word max/mins to lower 2 words */
- " movq %%mm0,%%mm2;\n"
- " psrlq $32,%%mm2;\n"
- " movq %%mm2,%%mm3;\n"
- " pcmpgtw %%mm0,%%mm3;\n" /* mm3 is bitmask for words where mm2 > mm0 */
- " pand %%mm3,%%mm2;\n" /* mm2 is mm2 masked to new max's */
- " pandn %%mm0,%%mm3;\n" /* mm3 is mm0 masked to its max's */
- " por %%mm3,%%mm2;\n"
- " movq %%mm2,%%mm0;\n" /* now mm0 is updated max's */
-
- " movq %%mm1,%%mm2;\n"
- " psrlq $32,%%mm2;\n"
- " movq %%mm1,%%mm3;\n"
- " pcmpgtw %%mm2,%%mm3;\n" /* mm3 is bitmask for words where mm2 < mm1 */
- " pand %%mm3,%%mm2;\n" /* mm2 is mm2 masked to new min's */
- " pandn %%mm1,%%mm3;\n" /* mm3 is mm1 masked to its min's */
- " por %%mm3,%%mm2;\n"
- " movq %%mm2,%%mm1;\n" /* now mm1 is updated min's */
-
- " .p2align 2;\n"
- "1:\n"
- " addl $4,%%edx;\n" /* now dx = top-4 */
- " cmpl %%edx,%%esi;\n"
- " ja 5f;\n"
- /* Here, there are >= 2 words of input remaining */
- " movd (%%esi),%%mm2;\n"
-
- " movq %%mm2,%%mm3;\n"
- " pcmpgtw %%mm0,%%mm3;\n" /* mm3 is bitmask for words where mm2 > mm0 */
- " movq %%mm3,%%mm4;\n"
- " pand %%mm2,%%mm3;\n" /* mm3 is mm2 masked to new max's */
- " pandn %%mm0,%%mm4;\n" /* mm4 is mm0 masked to its max's */
- " por %%mm3,%%mm4;\n"
- " movq %%mm4,%%mm0;\n" /* now mm0 is updated max's */
-
- " movq %%mm1,%%mm3;\n"
- " pcmpgtw %%mm2,%%mm3;\n" /* mm3 is bitmask for words where mm2 < mm1 */
- " pand %%mm3,%%mm2;\n" /* mm2 is mm2 masked to new min's */
- " pandn %%mm1,%%mm3;\n" /* mm3 is mm1 masked to its min's */
- " por %%mm3,%%mm2;\n"
- " movq %%mm2,%%mm1;\n" /* now mm1 is updated min's */
-
- " addl $4,%%esi;\n"
-
- " .p2align 2;\n"
- "5:\n"
- /* Merge down the 2-word max/mins to 1 word */
- " movq %%mm0,%%mm2;\n"
- " psrlq $16,%%mm2;\n"
- " movq %%mm2,%%mm3;\n"
- " pcmpgtw %%mm0,%%mm3;\n" /* mm3 is bitmask for words where mm2 > mm0 */
- " pand %%mm3,%%mm2;\n" /* mm2 is mm2 masked to new max's */
- " pandn %%mm0,%%mm3;\n" /* mm3 is mm0 masked to its max's */
- " por %%mm3,%%mm2;\n"
- " movd %%mm2,%%ecx;\n" /* cx is max so far */
-
- " movq %%mm1,%%mm2;\n"
- " psrlq $16,%%mm2;\n"
- " movq %%mm1,%%mm3;\n"
- " pcmpgtw %%mm2,%%mm3;\n" /* mm3 is bitmask for words where mm2 < mm1 */
- " pand %%mm3,%%mm2;\n" /* mm2 is mm2 masked to new min's */
- " pandn %%mm1,%%mm3;\n" /* mm3 is mm1 masked to its min's */
- " por %%mm3,%%mm2;\n"
- " movd %%mm2,%%eax;\n" /* ax is min so far */
-
- " addl $2,%%edx;\n" /* now dx = top-2 */
- " cmpl %%edx,%%esi;\n"
- " ja 6f;\n"
-
- /* Here, there is one word of input left */
- " cmpw (%%esi),%%cx;\n"
- " jge 9f;\n"
- " movw (%%esi),%%cx;\n"
- " .p2align 2;\n"
- "9:\n"
- " cmpw (%%esi),%%ax;\n"
- " jle 6f;\n"
- " movw (%%esi),%%ax;\n"
-
- " .p2align 2;\n"
- "6:\n"
- /* (finally!) cx is the max, ax the min */
- " movswl %%cx,%%ecx;\n"
- " movswl %%ax,%%eax;\n"
-
- " popl %%edx;\n" /* ptr to output max,min vals */
- " andl %%edx,%%edx;\n"
- " jz 7f;\n"
- " movw %%cx,(%%edx);\n" /* max */
- " movw %%ax,2(%%edx);\n" /* min */
- " .p2align 2;\n"
- "7:\n"
- /* Now calculate max absolute value */
- " negl %%eax;\n"
- " cmpl %%ecx,%%eax;\n"
- " jge 8f;\n"
- " movl %%ecx,%%eax;\n"
- " .p2align 2;\n"
- "8:\n"
- " emms;\n"
- : "=a" (max)
- : "S" (x), "a" (n), "d" (out), [lower] "m" (lower_bound), [upper] "m" (upper_bound)
- : "ecx"
- );
- return max;
-#else
- int i;
- int16_t min;
- int16_t max;
- int16_t temp;
- int32_t z;
-
- max = INT16_MIN;
- min = INT16_MAX;
- for (i = 0; i < n; i++)
- {
- temp = x[i];
- if (temp > max)
- max = temp;
- /*endif*/
- if (temp < min)
- min = temp;
- /*endif*/
- }
- /*endfor*/
- out[0] = max;
- out[1] = min;
- z = abs(min);
- if (z > max)
- return z;
- return max;
-#endif
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * voipcodecs.h - The head guy amongst the headers
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2003 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the Lesser GNU General Public License version 2.1, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id$
- */
-
-/*! \file */
-
-#if !defined(_VOIPCODECS_H_)
-#define _VOIPCODECS_H_
-
-@VOIPCODECS_USE_FIXED_POINT@
-
-#include <stdlib.h>
-@INSERT_INTTYPES_HEADER@
-#include <string.h>
-#include <limits.h>
-#include <time.h>
-@INSERT_MATH_HEADER@
-
-#include <voipcodecs/telephony.h>
-#include <voipcodecs/bit_operations.h>
-#include <voipcodecs/bitstream.h>
-#include <voipcodecs/g711.h>
-#include <voipcodecs/g722.h>
-#include <voipcodecs/g726.h>
-#include <voipcodecs/gsm0610.h>
-#include <voipcodecs/ima_adpcm.h>
-#include <voipcodecs/lpc10.h>
-#include <voipcodecs/oki_adpcm.h>
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * bit_operations.h - Various bit level operations, such as bit reversal
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the Lesser GNU General Public License version 2.1, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: bit_operations.h,v 1.19 2007/12/13 11:31:32 steveu Exp $
- */
-
-/*! \file */
-
-#if !defined(_SPANDSP_BIT_OPERATIONS_H_)
-#define _SPANDSP_BIT_OPERATIONS_H_
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-/*! \brief Find the bit position of the highest set bit in a word
- \param bits The word to be searched
- \return The bit number of the highest set bit, or -1 if the word is zero. */
-static __inline__ int top_bit(unsigned int bits)
-{
- int res;
-
-#if defined(__i386__) || defined(__x86_64__)
- __asm__ (" xorl %[res],%[res];\n"
- " decl %[res];\n"
- " bsrl %[bits],%[res]\n"
- : [res] "=&r" (res)
- : [bits] "rm" (bits));
- return res;
-#elif defined(__ppc__) || defined(__powerpc__)
- __asm__ ("cntlzw %[res],%[bits];\n"
- : [res] "=&r" (res)
- : [bits] "r" (bits));
- return 31 - res;
-#else
- if (bits == 0)
- return -1;
- res = 0;
- if (bits & 0xFFFF0000)
- {
- bits &= 0xFFFF0000;
- res += 16;
- }
- if (bits & 0xFF00FF00)
- {
- bits &= 0xFF00FF00;
- res += 8;
- }
- if (bits & 0xF0F0F0F0)
- {
- bits &= 0xF0F0F0F0;
- res += 4;
- }
- if (bits & 0xCCCCCCCC)
- {
- bits &= 0xCCCCCCCC;
- res += 2;
- }
- if (bits & 0xAAAAAAAA)
- {
- bits &= 0xAAAAAAAA;
- res += 1;
- }
- return res;
-#endif
-}
-/*- End of function --------------------------------------------------------*/
-
-/*! \brief Find the bit position of the lowest set bit in a word
- \param bits The word to be searched
- \return The bit number of the lowest set bit, or -1 if the word is zero. */
-static __inline__ int bottom_bit(unsigned int bits)
-{
- int res;
-
-#if defined(__i386__) || defined(__x86_64__)
- __asm__ (" xorl %[res],%[res];\n"
- " decl %[res];\n"
- " bsfl %[bits],%[res]\n"
- : [res] "=&r" (res)
- : [bits] "rm" (bits));
- return res;
-#else
- if (bits == 0)
- return -1;
- res = 31;
- if (bits & 0x0000FFFF)
- {
- bits &= 0x0000FFFF;
- res -= 16;
- }
- if (bits & 0x00FF00FF)
- {
- bits &= 0x00FF00FF;
- res -= 8;
- }
- if (bits & 0x0F0F0F0F)
- {
- bits &= 0x0F0F0F0F;
- res -= 4;
- }
- if (bits & 0x33333333)
- {
- bits &= 0x33333333;
- res -= 2;
- }
- if (bits & 0x55555555)
- {
- bits &= 0x55555555;
- res -= 1;
- }
- return res;
-#endif
-}
-/*- End of function --------------------------------------------------------*/
-
-/*! \brief Bit reverse a byte.
- \param data The byte to be reversed.
- \return The bit reversed version of data. */
-static __inline__ uint8_t bit_reverse8(uint8_t x)
-{
-#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__powerpc__)
- /* If multiply is fast */
- return ((x*0x0802U & 0x22110U) | (x*0x8020U & 0x88440U))*0x10101U >> 16;
-#else
- /* If multiply is slow, but we have a barrel shifter */
- x = (x >> 4) | (x << 4);
- x = ((x & 0xCC) >> 2) | ((x & 0x33) << 2);
- return ((x & 0xAA) >> 1) | ((x & 0x55) << 1);
-#endif
-}
-/*- End of function --------------------------------------------------------*/
-
-/*! \brief Bit reverse a 16 bit word.
- \param data The word to be reversed.
- \return The bit reversed version of data. */
-uint16_t bit_reverse16(uint16_t data);
-
-/*! \brief Bit reverse a 32 bit word.
- \param data The word to be reversed.
- \return The bit reversed version of data. */
-uint32_t bit_reverse32(uint32_t data);
-
-/*! \brief Bit reverse each of the four bytes in a 32 bit word.
- \param data The word to be reversed.
- \return The bit reversed version of data. */
-uint32_t bit_reverse_4bytes(uint32_t data);
-
-#if defined(__x86_64__)
-/*! \brief Bit reverse each of the eight bytes in a 64 bit word.
- \param data The word to be reversed.
- \return The bit reversed version of data. */
-uint64_t bit_reverse_8bytes(uint64_t data);
-#endif
-
-/*! \brief Bit reverse each bytes in a buffer.
- \param to The buffer to place the reversed data in.
- \param from The buffer containing the data to be reversed.
- \param len The length of the data in the buffer. */
-void bit_reverse(uint8_t to[], const uint8_t from[], int len);
-
-/*! \brief Find the number of set bits in a 32 bit word.
- \param x The word to be searched.
- \return The number of set bits. */
-int one_bits32(uint32_t x);
-
-/*! \brief Create a mask as wide as the number in a 32 bit word.
- \param x The word to be searched.
- \return The mask. */
-uint32_t make_mask32(uint32_t x);
-
-/*! \brief Create a mask as wide as the number in a 16 bit word.
- \param x The word to be searched.
- \return The mask. */
-uint16_t make_mask16(uint16_t x);
-
-/*! \brief Find the least significant one in a word, and return a word
- with just that bit set.
- \param x The word to be searched.
- \return The word with the single set bit. */
-static __inline__ uint32_t least_significant_one32(uint32_t x)
-{
- return (x & (-(int32_t) x));
-}
-/*- End of function --------------------------------------------------------*/
-
-/*! \brief Find the most significant one in a word, and return a word
- with just that bit set.
- \param x The word to be searched.
- \return The word with the single set bit. */
-static __inline__ uint32_t most_significant_one32(uint32_t x)
-{
-#if defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || defined(__powerpc__)
- return 1 << top_bit(x);
-#else
- x = make_mask32(x);
- return (x ^ (x >> 1));
-#endif
-}
-/*- End of function --------------------------------------------------------*/
-
-/*! \brief Find the parity of a byte.
- \param x The byte to be checked.
- \return 1 for odd, or 0 for even. */
-static __inline__ int parity8(uint8_t x)
-{
- x = (x ^ (x >> 4)) & 0x0F;
- return (0x6996 >> x) & 1;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*! \brief Find the parity of a 16 bit word.
- \param x The word to be checked.
- \return 1 for odd, or 0 for even. */
-static __inline__ int parity16(uint16_t x)
-{
- x ^= (x >> 8);
- x = (x ^ (x >> 4)) & 0x0F;
- return (0x6996 >> x) & 1;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*! \brief Find the parity of a 32 bit word.
- \param x The word to be checked.
- \return 1 for odd, or 0 for even. */
-static __inline__ int parity32(uint32_t x)
-{
- x ^= (x >> 16);
- x ^= (x >> 8);
- x = (x ^ (x >> 4)) & 0x0F;
- return (0x6996 >> x) & 1;
-}
-/*- End of function --------------------------------------------------------*/
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * bitstream.h - Bitstream composition and decomposition routines.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the Lesser GNU General Public License version 2.1, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: bitstream.h,v 1.8 2007/12/13 11:31:32 steveu Exp $
- */
-
-/*! \file */
-
-#if !defined(_SPANDSP_BITSTREAM_H_)
-#define _SPANDSP_BITSTREAM_H_
-
-/*! \page bitstream_page Bitstream composition and decomposition
-\section bitstream_page_sec_1 What does it do?
-
-\section bitstream_page_sec_2 How does it work?
-*/
-
-/*! Bitstream handler state */
-typedef struct
-{
- /*! The bit stream. */
- unsigned int bitstream;
- /*! The residual bits in bitstream. */
- unsigned int residue;
-} bitstream_state_t;
-
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-/*! \brief Put a chunk of bits into the output buffer.
- \param s A pointer to the bitstream context.
- \param c A pointer to the bitstream output buffer.
- \param value The value to be pushed into the output buffer.
- \param bits The number of bits of value to be pushed. 1 to 25 bit is valid. */
-void bitstream_put(bitstream_state_t *s, uint8_t **c, unsigned int value, int bits);
-
-void bitstream_put2(bitstream_state_t *s, uint8_t **c, unsigned int value, int bits);
-
-/*! \brief Get a chunk of bits from the input buffer.
- \param s A pointer to the bitstream context.
- \param c A pointer to the bitstream input buffer.
- \param bits The number of bits of value to be grabbed. 1 to 25 bit is valid.
- \return The value retrieved from the input buffer. */
-unsigned int bitstream_get(bitstream_state_t *s, const uint8_t **c, int bits);
-
-unsigned int bitstream_get2(bitstream_state_t *s, const uint8_t **c, int bits);
-
-/*! \brief Flush any residual bit to the output buffer.
- \param s A pointer to the bitstream context.
- \param c A pointer to the bitstream output buffer. */
-void bitstream_flush(bitstream_state_t *s, uint8_t **c);
-
-void bitstream_flush2(bitstream_state_t *s, uint8_t **c);
-
-/*! \brief Initialise a bitstream context.
- \param s A pointer to the bitstream context.
- \return A pointer to the bitstream context. */
-bitstream_state_t *bitstream_init(bitstream_state_t *s);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * dc_restore.h - General telephony routines to restore the zero D.C.
- * level to audio which has a D.C. bias.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2001 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: dc_restore.h,v 1.18 2007/04/08 08:16:17 steveu Exp $
- */
-
-/*! \file */
-
-#if !defined(_SPANDSP_DC_RESTORE_H_)
-#define _SPANDSP_DC_RESTORE_H_
-
-/*! \page dc_restore_page Removing DC bias from a signal
-
-\section dc_restore_page_sec_1 What does it do?
-
-Telecoms signals often contain considerable DC, but DC upsets a lot of signal
-processing functions. Placing a zero DC restorer at the front of the processing
-chain can often simplify the downstream processing.
-
-\section dc_restore_page_sec_2 How does it work?
-
-The DC restorer uses a leaky integrator to provide a long-ish term estimate of
-the DC bias in the signal. A 32 bit estimate is used for the 16 bit audio, so
-the noise introduced by the estimation can be keep in the lower bits, and the 16
-bit DC value, which is subtracted from the signal, is fairly clean. The
-following code fragment shows the algorithm used. dc_bias is a 32 bit integer,
-while the sample and the resulting clean_sample are 16 bit integers.
-
- dc_bias += ((((int32_t) sample << 15) - dc_bias) >> 14);
- clean_sample = sample - (dc_bias >> 15);
-*/
-
-/*!
- Zero DC restoration descriptor. This defines the working state for a single
- instance of DC content filter.
-*/
-typedef struct
-{
- int32_t state;
-} dc_restore_state_t;
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-static __inline__ void dc_restore_init(dc_restore_state_t *dc)
-{
- dc->state = 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int16_t dc_restore(dc_restore_state_t *dc, int16_t sample)
-{
- dc->state += ((((int32_t) sample << 15) - dc->state) >> 14);
- return (int16_t) (sample - (dc->state >> 15));
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int16_t dc_restore_estimate(dc_restore_state_t *dc)
-{
- return (int16_t) (dc->state >> 15);
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int16_t saturate(int32_t amp)
-{
- int16_t amp16;
-
- /* Hopefully this is optimised for the common case - not clipping */
- amp16 = (int16_t) amp;
- if (amp == amp16)
- return amp16;
- if (amp > INT16_MAX)
- return INT16_MAX;
- return INT16_MIN;
-}
-/*- End of function --------------------------------------------------------*/
-
-#if defined(_MSC_VER) && !defined(_WIN64)
-__inline float rintf (float flt)\r
-{\r
- _asm\r
- { fld flt\r
- frndint\r
- }\r
-}\r
-\r
-__inline double rint(double dbl)\r
-{\r
- __asm \r
- {\r
- fld dbl\r
- frndint\r
- }\r
-}\r
-\r
-__inline long lrintf (float flt)\r
-{\r
- long retval;\r
- _asm\r
- { fld flt\r
- fistp retval\r
- }\r
- return retval;\r
-}
-#elif defined(_WIN64)
-#include <intrin.h>
-
- __inline__ long int rint(double x)
- {
-#ifdef _M_X64
- return (long int)_mm_cvtsd_si64x( _mm_loadu_pd ((const double*)&x) );
-#else
-#warning "Not Supported: Replacing with a simple C cast."
- return (long int) (x);
-#endif
- }
- __inline__ int rintf(float x)
- {
-#ifdef _M_X64
- return _mm_cvt_ss2si( _mm_load_ss((const float*)&x) );
-#else
-#warning "Not Supported: Replacing with a simple C cast."
- return (int) (x);
-#endif
- }
- __inline__ long int lrintf(float x)
- {
-#ifdef _M_X64
- return _mm_cvt_ss2si( _mm_load_ss((const float*)&x) );
-#else
-#warning "Not Supported: Replacing with a simple C cast."
- return (long int) (x);
-#endif
- }
-#endif
-
-static __inline__ int16_t fsaturatef(float famp)
-{
- if (famp > 32767.0)
- return INT16_MAX;
- if (famp < -32768.0)
- return INT16_MIN;
- return (int16_t) rintf(famp);
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int16_t fsaturate(double damp)
-{
- if (damp > 32767.0)
- return INT16_MAX;
- if (damp < -32768.0)
- return INT16_MIN;
- return (int16_t) rint(damp);
-}
-/*- End of function --------------------------------------------------------*/
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * g711.h - In line A-law and u-law conversion routines
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2001 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: g711.h,v 1.9 2008/02/09 15:32:26 steveu Exp $
- */
-
-/*! \file */
-
-/*! \page g711_page A-law and mu-law handling
-Lookup tables for A-law and u-law look attractive, until you consider the impact
-on the CPU cache. If it causes a substantial area of your processor cache to get
-hit too often, cache sloshing will severely slow things down. The main reason
-these routines are slow in C, is the lack of direct access to the CPU's "find
-the first 1" instruction. A little in-line assembler fixes that, and the
-conversion routines can be faster than lookup tables, in most real world usage.
-A "find the first 1" instruction is available on most modern CPUs, and is a
-much underused feature.
-
-If an assembly language method of bit searching is not available, these routines
-revert to a method that can be a little slow, so the cache thrashing might not
-seem so bad :(
-
-Feel free to submit patches to add fast "find the first 1" support for your own
-favourite processor.
-
-Look up tables are used for transcoding between A-law and u-law, since it is
-difficult to achieve the precise transcoding procedure laid down in the G.711
-specification by other means.
-*/
-
-#if !defined(_SPANDSP_G711_H_)
-#define _SPANDSP_G711_H_
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-/* N.B. It is tempting to use look-up tables for A-law and u-law conversion.
- * However, you should consider the cache footprint.
- *
- * A 64K byte table for linear to x-law and a 512 byte table for x-law to
- * linear sound like peanuts these days, and shouldn't an array lookup be
- * real fast? No! When the cache sloshes as badly as this one will, a tight
- * calculation may be better. The messiest part is normally finding the
- * segment, but a little inline assembly can fix that on an i386, x86_64 and
- * many other modern processors.
- */
-
-/*
- * Mu-law is basically as follows:
- *
- * Biased Linear Input Code Compressed Code
- * ------------------------ ---------------
- * 00000001wxyza 000wxyz
- * 0000001wxyzab 001wxyz
- * 000001wxyzabc 010wxyz
- * 00001wxyzabcd 011wxyz
- * 0001wxyzabcde 100wxyz
- * 001wxyzabcdef 101wxyz
- * 01wxyzabcdefg 110wxyz
- * 1wxyzabcdefgh 111wxyz
- *
- * Each biased linear code has a leading 1 which identifies the segment
- * number. The value of the segment number is equal to 7 minus the number
- * of leading 0's. The quantization interval is directly available as the
- * four bits wxyz. * The trailing bits (a - h) are ignored.
- *
- * Ordinarily the complement of the resulting code word is used for
- * transmission, and so the code word is complemented before it is returned.
- *
- * For further information see John C. Bellamy's Digital Telephony, 1982,
- * John Wiley & Sons, pps 98-111 and 472-476.
- */
-
-//#define ULAW_ZEROTRAP /* turn on the trap as per the MIL-STD */
-#define ULAW_BIAS 0x84 /* Bias for linear code. */
-
-/*! \brief Encode a linear sample to u-law
- \param linear The sample to encode.
- \return The u-law value.
-*/
-static __inline__ uint8_t linear_to_ulaw(int linear)
-{
- uint8_t u_val;
- int mask;
- int seg;
-
- /* Get the sign and the magnitude of the value. */
- if (linear >= 0)
- {
- linear = ULAW_BIAS + linear;
- mask = 0xFF;
- }
- else
- {
- linear = ULAW_BIAS - linear;
- mask = 0x7F;
- }
-
- seg = top_bit(linear | 0xFF) - 7;
-
- /*
- * Combine the sign, segment, quantization bits,
- * and complement the code word.
- */
- if (seg >= 8)
- u_val = (uint8_t) (0x7F ^ mask);
- else
- u_val = (uint8_t) (((seg << 4) | ((linear >> (seg + 3)) & 0xF)) ^ mask);
-#ifdef ULAW_ZEROTRAP
- /* Optional ITU trap */
- if (u_val == 0)
- u_val = 0x02;
-#endif
- return u_val;
-}
-/*- End of function --------------------------------------------------------*/
-
-/*! \brief Decode an u-law sample to a linear value.
- \param ulaw The u-law sample to decode.
- \return The linear value.
-*/
-static __inline__ int16_t ulaw_to_linear(uint8_t ulaw)
-{
- int t;
-
- /* Complement to obtain normal u-law value. */
- ulaw = ~ulaw;
- /*
- * Extract and bias the quantization bits. Then
- * shift up by the segment number and subtract out the bias.
- */
- t = (((ulaw & 0x0F) << 3) + ULAW_BIAS) << (((int) ulaw & 0x70) >> 4);
- return (int16_t) ((ulaw & 0x80) ? (ULAW_BIAS - t) : (t - ULAW_BIAS));
-}
-/*- End of function --------------------------------------------------------*/
-
-/*
- * A-law is basically as follows:
- *
- * Linear Input Code Compressed Code
- * ----------------- ---------------
- * 0000000wxyza 000wxyz
- * 0000001wxyza 001wxyz
- * 000001wxyzab 010wxyz
- * 00001wxyzabc 011wxyz
- * 0001wxyzabcd 100wxyz
- * 001wxyzabcde 101wxyz
- * 01wxyzabcdef 110wxyz
- * 1wxyzabcdefg 111wxyz
- *
- * For further information see John C. Bellamy's Digital Telephony, 1982,
- * John Wiley & Sons, pps 98-111 and 472-476.
- */
-
-#define ALAW_AMI_MASK 0x55
-
-/*! \brief Encode a linear sample to A-law
- \param linear The sample to encode.
- \return The A-law value.
-*/
-static __inline__ uint8_t linear_to_alaw(int linear)
-{
- int mask;
- int seg;
-
- if (linear >= 0)
- {
- /* Sign (bit 7) bit = 1 */
- mask = ALAW_AMI_MASK | 0x80;
- }
- else
- {
- /* Sign (bit 7) bit = 0 */
- mask = ALAW_AMI_MASK;
- linear = -linear - 1;
- }
-
- /* Convert the scaled magnitude to segment number. */
- seg = top_bit(linear | 0xFF) - 7;
- if (seg >= 8)
- {
- if (linear >= 0)
- {
- /* Out of range. Return maximum value. */
- return (uint8_t) (0x7F ^ mask);
- }
- /* We must be just a tiny step below zero */
- return (uint8_t) (0x00 ^ mask);
- }
- /* Combine the sign, segment, and quantization bits. */
- return (uint8_t) (((seg << 4) | ((linear >> ((seg) ? (seg + 3) : 4)) & 0x0F)) ^ mask);
-}
-/*- End of function --------------------------------------------------------*/
-
-/*! \brief Decode an A-law sample to a linear value.
- \param alaw The A-law sample to decode.
- \return The linear value.
-*/
-static __inline__ int16_t alaw_to_linear(uint8_t alaw)
-{
- int i;
- int seg;
-
- alaw ^= ALAW_AMI_MASK;
- i = ((alaw & 0x0F) << 4);
- seg = (((int) alaw & 0x70) >> 4);
- if (seg)
- i = (i + 0x108) << (seg - 1);
- else
- i += 8;
- return (int16_t) ((alaw & 0x80) ? i : -i);
-}
-/*- End of function --------------------------------------------------------*/
-
-/*! \brief Transcode from A-law to u-law, using the procedure defined in G.711.
- \param alaw The A-law sample to transcode.
- \return The best matching u-law value.
-*/
-uint8_t alaw_to_ulaw(uint8_t alaw);
-
-/*! \brief Transcode from u-law to A-law, using the procedure defined in G.711.
- \param ulaw The u-law sample to transcode.
- \return The best matching A-law value.
-*/
-uint8_t ulaw_to_alaw(uint8_t ulaw);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * g722.h - The ITU G.722 codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2005 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Based on a single channel G.722 codec which is:
- *
- ***** Copyright (c) CMU 1993 *****
- * Computer Science, Speech Group
- * Chengxiang Lu and Alex Hauptmann
- *
- * $Id: g722.h,v 1.17 2008/02/09 15:32:26 steveu Exp $
- */
-
-
-/*! \file */
-
-#if !defined(_SPANDSP_G722_H_)
-#define _SPANDSP_G722_H_
-
-/*! \page g722_page G.722 encoding and decoding
-\section g722_page_sec_1 What does it do?
-The G.722 module is a bit exact implementation of the ITU G.722 specification for all three
-specified bit rates - 64000bps, 56000bps and 48000bps. It passes the ITU tests.
-
-To allow fast and flexible interworking with narrow band telephony, the encoder and decoder
-support an option for the linear audio to be an 8k samples/second stream. In this mode the
-codec is considerably faster, and still fully compatible with wideband terminals using G.722.
-
-\section g722_page_sec_2 How does it work?
-???.
-*/
-
-enum
-{
- G722_SAMPLE_RATE_8000 = 0x0001,
- G722_PACKED = 0x0002
-};
-
-typedef struct
-{
- /*! TRUE if the operating in the special ITU test mode, with the band split filters
- disabled. */
- int itu_test_mode;
- /*! TRUE if the G.722 data is packed */
- int packed;
- /*! TRUE if encode from 8k samples/second */
- int eight_k;
- /*! 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. */
- int bits_per_sample;
-
- /*! Signal history for the QMF */
- int x[24];
-
- struct
- {
- int s;
- int sp;
- int sz;
- int r[3];
- int a[3];
- int ap[3];
- int p[3];
- int d[7];
- int b[7];
- int bp[7];
- int sg[7];
- int nb;
- int det;
- } band[2];
-
- unsigned int in_buffer;
- int in_bits;
- unsigned int out_buffer;
- int out_bits;
-} g722_encode_state_t;
-
-typedef struct
-{
- /*! TRUE if the operating in the special ITU test mode, with the band split filters
- disabled. */
- int itu_test_mode;
- /*! TRUE if the G.722 data is packed */
- int packed;
- /*! TRUE if decode to 8k samples/second */
- int eight_k;
- /*! 6 for 48000kbps, 7 for 56000kbps, or 8 for 64000kbps. */
- int bits_per_sample;
-
- /*! Signal history for the QMF */
- int x[24];
-
- struct
- {
- int s;
- int sp;
- int sz;
- int r[3];
- int a[3];
- int ap[3];
- int p[3];
- int d[7];
- int b[7];
- int bp[7];
- int sg[7];
- int nb;
- int det;
- } band[2];
-
- unsigned int in_buffer;
- int in_bits;
- unsigned int out_buffer;
- int out_bits;
-} g722_decode_state_t;
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-/*! Initialise an G.722 encode context.
- \param s The G.722 encode context.
- \param rate The required bit rate for the G.722 data.
- The valid rates are 64000, 56000 and 48000.
- \param options
- \return A pointer to the G.722 encode context, or NULL for error. */
-g722_encode_state_t *g722_encode_init(g722_encode_state_t *s, int rate, int options);
-
-int g722_encode_release(g722_encode_state_t *s);
-
-/*! Encode a buffer of linear PCM data to G.722
- \param s The G.722 context.
- \param g722_data The G.722 data produced.
- \param amp The audio sample buffer.
- \param len The number of samples in the buffer.
- \return The number of bytes of G.722 data produced. */
-int g722_encode(g722_encode_state_t *s, uint8_t g722_data[], const int16_t amp[], int len);
-
-/*! Initialise an G.722 decode context.
- \param s The G.722 decode context.
- \param rate The bit rate of the G.722 data.
- The valid rates are 64000, 56000 and 48000.
- \param options
- \return A pointer to the G.722 decode context, or NULL for error. */
-g722_decode_state_t *g722_decode_init(g722_decode_state_t *s, int rate, int options);
-
-int g722_decode_release(g722_decode_state_t *s);
-
-/*! Decode a buffer of G.722 data to linear PCM.
- \param s The G.722 context.
- \param amp The audio sample buffer.
- \param g722_data
- \param len
- \return The number of samples returned. */
-int g722_decode(g722_decode_state_t *s, int16_t amp[], const uint8_t g722_data[], int len);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * g726.h - ITU G.726 codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: g726.h,v 1.19 2008/02/09 15:32:26 steveu Exp $
- */
-
-/*! \file */
-
-#if !defined(_SPANDSP_G726_H_)
-#define _SPANDSP_G726_H_
-
-/*! \page g726_page G.726 encoding and decoding
-\section g726_page_sec_1 What does it do?
-
-The G.726 module is a bit exact implementation of the full ITU G.726 specification.
-It supports:
- - 16 kbps, 24kbps, 32kbps, and 40kbps operation.
- - Tandem adjustment, for interworking with A-law and u-law.
- - Annex A support, for use in environments not using A-law or u-law.
-
-It passes the ITU tests.
-
-\section g726_page_sec_2 How does it work?
-???.
-*/
-
-enum
-{
- G726_ENCODING_LINEAR = 0, /* Interworking with 16 bit signed linear */
- G726_ENCODING_ULAW, /* Interworking with u-law */
- G726_ENCODING_ALAW /* Interworking with A-law */
-};
-
-enum
-{
- G726_PACKING_NONE = 0,
- G726_PACKING_LEFT = 1,
- G726_PACKING_RIGHT = 2
-};
-
-struct g726_state_s;
-
-typedef int16_t (*g726_decoder_func_t)(struct g726_state_s *s, uint8_t code);
-
-typedef uint8_t (*g726_encoder_func_t)(struct g726_state_s *s, int16_t amp);
-
-/*!
- * The following is the definition of the state structure
- * used by the G.726 encoder and decoder to preserve their internal
- * state between successive calls. The meanings of the majority
- * of the state structure fields are explained in detail in the
- * CCITT Recommendation G.721. The field names are essentially indentical
- * to variable names in the bit level description of the coding algorithm
- * included in this Recommendation.
- */
-typedef struct g726_state_s
-{
- /*! The bit rate */
- int rate;
- /*! The external coding, for tandem operation */
- int ext_coding;
- /*! The number of bits per sample */
- unsigned int bits_per_sample;
- /*! One of the G.726_PACKING_xxx options */
- int packing;
-
- /*! Locked or steady state step size multiplier. */
- int32_t yl;
- /*! Unlocked or non-steady state step size multiplier. */
- int16_t yu;
- /*! int16_t term energy estimate. */
- int16_t dms;
- /*! Long term energy estimate. */
- int16_t dml;
- /*! Linear weighting coefficient of 'yl' and 'yu'. */
- int16_t ap;
-
- /*! Coefficients of pole portion of prediction filter. */
- int16_t a[2];
- /*! Coefficients of zero portion of prediction filter. */
- int16_t b[6];
- /*! Signs of previous two samples of a partially reconstructed signal. */
- int16_t pk[2];
- /*! Previous 6 samples of the quantized difference signal represented in
- an internal floating point format. */
- int16_t dq[6];
- /*! Previous 2 samples of the quantized difference signal represented in an
- internal floating point format. */
- int16_t sr[2];
- /*! Delayed tone detect */
- int td;
-
- /*! \brief The bit stream processing context. */
- bitstream_state_t bs;
-
- /*! \brief The current encoder function. */
- g726_encoder_func_t enc_func;
- /*! \brief The current decoder function. */
- g726_decoder_func_t dec_func;
-} g726_state_t;
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-/*! Initialise a G.726 encode or decode context.
- \param s The G.726 context.
- \param bit_rate The required bit rate for the ADPCM data.
- The valid rates are 16000, 24000, 32000 and 40000.
- \param ext_coding The coding used outside G.726.
- \param packing One of the G.726_PACKING_xxx options.
- \return A pointer to the G.726 context, or NULL for error. */
-g726_state_t *g726_init(g726_state_t *s, int bit_rate, int ext_coding, int packing);
-
-/*! Free a G.726 encode or decode context.
- \param s The G.726 context.
- \return 0 for OK. */
-int g726_release(g726_state_t *s);
-
-/*! Decode a buffer of G.726 ADPCM data to linear PCM, a-law or u-law.
- \param s The G.726 context.
- \param amp The audio sample buffer.
- \param g726_data
- \param g726_bytes
- \return The number of samples returned. */
-int g726_decode(g726_state_t *s,
- int16_t amp[],
- const uint8_t g726_data[],
- int g726_bytes);
-
-/*! Encode a buffer of linear PCM data to G.726 ADPCM.
- \param s The G.726 context.
- \param g726_data The G.726 data produced.
- \param amp The audio sample buffer.
- \param len The number of samples in the buffer.
- \return The number of bytes of G.726 data produced. */
-int g726_encode(g726_state_t *s,
- uint8_t g726_data[],
- const int16_t amp[],
- int len);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * gsm0610.h - GSM 06.10 full rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: gsm0610.h,v 1.15 2008/02/12 12:27:48 steveu Exp $
- */
-
-#if !defined(_VOIPCODECS_GSM0610_H_)
-#define _VOIPCODECS_GSM0610_H_
-
-/*! \page gsm0610_page GSM 06.10 encoding and decoding
-\section gsm0610_page_sec_1 What does it do?
-
-The GSM 06.10 module is an version of the widely used GSM FR codec software
-available from http://kbs.cs.tu-berlin.de/~jutta/toast.html. This version
-was produced since some versions of this codec are not bit exact, or not
-very efficient on modern processors. This implementation can use MMX instructions
-on Pentium class processors, or alternative methods on other processors. It
-passes all the ETSI test vectors. That is, it is a tested bit exact implementation.
-
-This implementation supports encoded data in one of three packing formats:
- - Unpacked, with the 76 parameters of a GSM 06.10 code frame each occupying a
- separate byte. (note that none of the parameters exceed 8 bits).
- - Packed the the 33 byte per frame, used for VoIP, where 4 bits per frame are wasted.
- - Packed in WAV49 format, where 2 frames are packed into 65 bytes.
-
-\section gsm0610_page_sec_2 How does it work?
-???.
-*/
-
-enum
-{
- GSM0610_PACKING_NONE,
- GSM0610_PACKING_WAV49,
- GSM0610_PACKING_VOIP
-};
-
-/*!
- GSM 06.10 FR codec unpacked frame.
-*/
-typedef struct
-{
- int16_t LARc[8];
- int16_t Nc[4];
- int16_t bc[4];
- int16_t Mc[4];
- int16_t xmaxc[4];
- int16_t xMc[4][13];
-} gsm0610_frame_t;
-
-/*!
- GSM 06.10 FR codec state descriptor. This defines the state of
- a single working instance of the GSM 06.10 FR encoder or decoder.
-*/
-typedef struct
-{
- /*! \brief One of the packing modes */
- int packing;
-
- int16_t dp0[280];
-
- /*! Preprocessing */
- int16_t z1;
- int32_t L_z2;
- /*! Pre-emphasis */
- int16_t mp;
-
- /*! Short term delay filter */
- int16_t u[8];
- int16_t LARpp[2][8];
- int16_t j;
-
- /*! Long term synthesis */
- int16_t nrp;
- /*! Short term synthesis */
- int16_t v[9];
- /*! Decoder postprocessing */
- int16_t msr;
-
- /*! Encoder data */
- int16_t e[50];
-} gsm0610_state_t;
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-/*! Initialise a GSM 06.10 encode or decode context.
- \param s The GSM 06.10 context
- \param packing One of the GSM0610_PACKING_xxx options.
- \return A pointer to the GSM 06.10 context, or NULL for error. */
-gsm0610_state_t *gsm0610_init(gsm0610_state_t *s, int packing);
-
-/*! Release a GSM 06.10 encode or decode context.
- \param s The GSM 06.10 context
- \return 0 for success, else -1. */
-int gsm0610_release(gsm0610_state_t *s);
-
-/*! Set the packing format for a GSM 06.10 encode or decode context.
- \param s The GSM 06.10 context
- \param packing One of the GSM0610_PACKING_xxx options.
- \return 0 for success, else -1. */
-int gsm0610_set_packing(gsm0610_state_t *s, int packing);
-
-/*! Encode a buffer of linear PCM data to GSM 06.10.
- \param s The GSM 06.10 context.
- \param code The GSM 06.10 data produced.
- \param amp The audio sample buffer.
- \param len The number of samples in the buffer.
- \return The number of bytes of GSM 06.10 data produced. */
-int gsm0610_encode(gsm0610_state_t *s, uint8_t code[], const int16_t amp[], int len);
-
-/*! Decode a buffer of GSM 06.10 data to linear PCM.
- \param s The GSM 06.10 context.
- \param amp The audio sample buffer.
- \param code The GSM 06.10 data.
- \param len The number of bytes of GSM 06.10 data to be decoded.
- \return The number of samples returned. */
-int gsm0610_decode(gsm0610_state_t *s, int16_t amp[], const uint8_t code[], int len);
-
-int gsm0610_pack_none(uint8_t c[], const gsm0610_frame_t *s);
-
-/*! Pack a pair of GSM 06.10 frames in the format used for wave files (wave type 49).
- \param c The buffer for the packed data. This must be at least 65 bytes long.
- \param s A pointer to the frames to be packed.
- \return The number of bytes generated. */
-int gsm0610_pack_wav49(uint8_t c[], const gsm0610_frame_t *s);
-
-/*! Pack a GSM 06.10 frames in the format used for VoIP.
- \param c The buffer for the packed data. This must be at least 33 bytes long.
- \param s A pointer to the frame to be packed.
- \return The number of bytes generated. */
-int gsm0610_pack_voip(uint8_t c[], const gsm0610_frame_t *s);
-
-int gsm0610_unpack_none(gsm0610_frame_t *s, const uint8_t c[]);
-
-/*! Unpack a pair of GSM 06.10 frames from the format used for wave files (wave type 49).
- \param s A pointer to a buffer into which the frames will be packed.
- \param c The buffer containing the data to be unpacked. This must be at least 65 bytes long.
- \return The number of bytes absorbed. */
-int gsm0610_unpack_wav49(gsm0610_frame_t *s, const uint8_t c[]);
-
-/*! Unpack a GSM 06.10 frame from the format used for VoIP.
- \param s A pointer to a buffer into which the frame will be packed.
- \param c The buffer containing the data to be unpacked. This must be at least 33 bytes long.
- \return The number of bytes absorbed. */
-int gsm0610_unpack_voip(gsm0610_frame_t *s, const uint8_t c[]);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-/*- End of include ---------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * imaadpcm.c - Conversion routines between linear 16 bit PCM data and
- * IMA/DVI/Intel ADPCM format.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2004 Steve Underwood
- *
- * Based on a bit from here, a bit from there, eye of toad,
- * ear of bat, etc - plus, of course, my own 2 cents.
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: ima_adpcm.h,v 1.18 2008/02/09 15:33:40 steveu Exp $
- */
-
-/*! \file */
-
-#if !defined(_SPANDSP_IMA_ADPCM_H_)
-#define _SPANDSP_IMA_ADPCM_H_
-
-/*! \page ima_adpcm_page IMA/DVI/Intel ADPCM encoding and decoding
-\section ima_adpcm_page_sec_1 What does it do?
-IMA ADPCM offers a good balance of simplicity and quality at a rate of
-32kbps.
-
-\section ima_adpcm_page_sec_2 How does it work?
-
-\section ima_adpcm_page_sec_3 How do I use it?
-*/
-
-enum
-{
- /*! IMA4 is the original IMA ADPCM variant */
- IMA_ADPCM_IMA4 = 0,
- /*! DVI4 is the IMA ADPCM variant defined in RFC3551 */
- IMA_ADPCM_DVI4 = 1,
- /*! VDVI is the variable bit rate IMA ADPCM variant defined in RFC3551 */
- IMA_ADPCM_VDVI = 2
-};
-
-/*!
- IMA (DVI/Intel) ADPCM conversion state descriptor. This defines the state of
- a single working instance of the IMA ADPCM converter. This is used for
- either linear to ADPCM or ADPCM to linear conversion.
-*/
-typedef struct
-{
- int variant;
- /*! \brief The size of a chunk, in samples. */
- int chunk_size;
- /*! \brief The last state of the ADPCM algorithm. */
- int last;
- /*! \brief Current index into the step size table. */
- int step_index;
- /*! \brief The current IMA code byte in progress. */
- uint16_t ima_byte;
- int bits;
-} ima_adpcm_state_t;
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-/*! Initialise an IMA ADPCM encode or decode context.
- \param s The IMA ADPCM context
- \param variant ???
- \param chunk_size The size of a chunk, in samples. A chunk size of
- zero sample samples means treat each encode or decode operation
- as a chunk.
- \return A pointer to the IMA ADPCM context, or NULL for error. */
-ima_adpcm_state_t *ima_adpcm_init(ima_adpcm_state_t *s, int variant, int chunk_size);
-
-/*! Free an IMA ADPCM encode or decode context.
- \param s The IMA ADPCM context.
- \return 0 for OK. */
-int ima_adpcm_release(ima_adpcm_state_t *s);
-
-/*! Encode a buffer of linear PCM data to IMA ADPCM.
- \param s The IMA ADPCM context.
- \param ima_data The IMA ADPCM data produced.
- \param amp The audio sample buffer.
- \param len The number of samples in the buffer.
- \return The number of bytes of IMA ADPCM data produced. */
-int ima_adpcm_encode(ima_adpcm_state_t *s,
- uint8_t ima_data[],
- const int16_t amp[],
- int len);
-
-/*! Decode a buffer of IMA ADPCM data to linear PCM.
- \param s The IMA ADPCM context.
- \param amp The audio sample buffer.
- \param ima_data
- \param ima_bytes
- \return The number of samples returned. */
-int ima_adpcm_decode(ima_adpcm_state_t *s,
- int16_t amp[],
- const uint8_t ima_data[],
- int ima_bytes);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * lpc10.h - LPC10 low bit rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: lpc10.h,v 1.15 2008/02/09 15:31:36 steveu Exp $
- */
-
-#if !defined(_SPANDSP_LPC10_H_)
-#define _SPANDSP_LPC10_H_
-
-/*! \page lpc10_page LPC10 encoding and decoding
-\section lpc10_page_sec_1 What does it do?
-The LPC10 module implements the US Department of Defense LPC10
-codec. This codec produces compressed data at 2400bps. At such
-a low rate high fidelity cannot be expected. However, the speech
-clarity is quite good, and this codec is unencumbered by patent
-or other restrictions.
-
-\section lpc10_page_sec_2 How does it work?
-???.
-*/
-
-#define LPC10_SAMPLES_PER_FRAME 180
-#define LPC10_BITS_IN_COMPRESSED_FRAME 54
-
-/*!
- LPC10 codec unpacked frame.
-*/
-typedef struct
-{
- int32_t ipitch;
- int32_t irms;
- int32_t irc[10];
-} lpc10_frame_t;
-
-/*!
- LPC10 codec encoder state descriptor. This defines the state of
- a single working instance of the LPC10 encoder.
-*/
-typedef struct
-{
- int error_correction;
-
- /* State used only by function high_pass_100hz */
- float z11;
- float z21;
- float z12;
- float z22;
-
- /* State used by function lpc10_analyse */
- float inbuf[LPC10_SAMPLES_PER_FRAME*3];
- float pebuf[LPC10_SAMPLES_PER_FRAME*3];
- float lpbuf[696];
- float ivbuf[312];
- float bias;
- int32_t osbuf[10]; /* No initial value necessary */
- int32_t osptr; /* Initial value 1 */
- int32_t obound[3];
- int32_t vwin[3][2]; /* Initial value vwin[2][0] = 307; vwin[2][1] = 462; */
- int32_t awin[3][2]; /* Initial value awin[2][0] = 307; awin[2][1] = 462; */
- int32_t voibuf[4][2];
- float rmsbuf[3];
- float rcbuf[3][10];
- float zpre;
-
- /* State used by function onset */
- float n;
- float d__; /* Initial value 1.0f */
- float fpc; /* No initial value necessary */
- float l2buf[16];
- float l2sum1;
- int32_t l2ptr1; /* Initial value 1 */
- int32_t l2ptr2; /* Initial value 9 */
- int32_t lasti; /* No initial value necessary */
- int hyst; /* Initial value FALSE */
-
- /* State used by function lpc10_voicing */
- float dither; /* Initial value 20.0f */
- float snr;
- float maxmin;
- float voice[3][2]; /* Initial value is probably unnecessary */
- int32_t lbve;
- int32_t lbue;
- int32_t fbve;
- int32_t fbue;
- int32_t ofbue;
- int32_t sfbue;
- int32_t olbue;
- int32_t slbue;
-
- /* State used by function dynamic_pitch_tracking */
- float s[60];
- int32_t p[2][60];
- int32_t ipoint;
- float alphax;
-
- /* State used by function lpc10_pack */
- int32_t isync;
-} lpc10_encode_state_t;
-
-/*!
- LPC10 codec decoder state descriptor. This defines the state of
- a single working instance of the LPC10 decoder.
-*/
-typedef struct
-{
- int error_correction;
-
- /* State used by function decode */
- int32_t iptold; /* Initial value 60 */
- int first; /* Initial value TRUE */
- int32_t ivp2h;
- int32_t iovoic;
- int32_t iavgp; /* Initial value 60 */
- int32_t erate;
- int32_t drc[10][3];
- int32_t dpit[3];
- int32_t drms[3];
-
- /* State used by function synths */
- float buf[LPC10_SAMPLES_PER_FRAME*2];
- int32_t buflen; /* Initial value LPC10_SAMPLES_PER_FRAME */
-
- /* State used by function pitsyn */
- int32_t ivoico; /* No initial value necessary as long as first_pitsyn is initially TRUE_ */
- int32_t ipito; /* No initial value necessary as long as first_pitsyn is initially TRUE_ */
- float rmso; /* Initial value 1.0f */
- float rco[10]; /* No initial value necessary as long as first_pitsyn is initially TRUE_ */
- int32_t jsamp; /* Nno initial value necessary as long as first_pitsyn is initially TRUE_ */
- int first_pitsyn; /* Initial value TRUE */
-
- /* State used by function bsynz */
- int32_t ipo;
- float exc[166];
- float exc2[166];
- float lpi[3];
- float hpi[3];
- float rmso_bsynz;
-
- /* State used by function random */
- int32_t j;
- int32_t k;
- int16_t y[5];
-
- /* State used by function deemp */
- float dei[2];
- float deo[3];
-} lpc10_decode_state_t;
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-/*! Initialise an LPC10e encode context.
- \param s The LPC10e context
- \param error_correction ???
- \return A pointer to the LPC10e context, or NULL for error. */
-lpc10_encode_state_t *lpc10_encode_init(lpc10_encode_state_t *s, int error_correction);
-
-int lpc10_encode_release(lpc10_encode_state_t *s);
-
-/*! Encode a buffer of linear PCM data to LPC10e.
- \param s The LPC10e context.
- \param ima_data The LPC10e data produced.
- \param amp The audio sample buffer.
- \param len The number of samples in the buffer. This must be a multiple of 180, as
- this is the number of samples on a frame.
- \return The number of bytes of LPC10e data produced. */
-int lpc10_encode(lpc10_encode_state_t *s, uint8_t code[], const int16_t amp[], int len);
-
-/*! Initialise an LPC10e decode context.
- \param s The LPC10e context
- \param error_correction ???
- \return A pointer to the LPC10e context, or NULL for error. */
-lpc10_decode_state_t *lpc10_decode_init(lpc10_decode_state_t *st, int error_correction);
-
-int lpc10_decode_release(lpc10_decode_state_t *s);
-
-/*! Decode a buffer of LPC10e data to linear PCM.
- \param s The LPC10e context.
- \param amp The audio sample buffer.
- \param code The LPC10e data.
- \param len The number of bytes of LPC10e data to be decoded. This must be a multiple of 7,
- as each frame is packed into 7 bytes.
- \return The number of samples returned. */
-int lpc10_decode(lpc10_decode_state_t *s, int16_t amp[], const uint8_t code[], int len);
-
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-/*- End of include ---------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * oki_adpcm.h - Conversion routines between linear 16 bit PCM data and
- * OKI (Dialogic) ADPCM format.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2001 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, or
- * the Lesser GNU General Public License version 2.1, as published by
- * the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: oki_adpcm.h,v 1.18 2008/02/09 15:33:40 steveu Exp $
- */
-
-/*! \file */
-
-#if !defined(_SPANDSP_OKI_ADPCM_H_)
-#define _SPANDSP_OKI_ADPCM_H_
-
-/*! \page okiadpcm_page OKI (Dialogic) ADPCM encoding and decoding
-\section okiadpcm_page_sec_1 What does it do?
-OKI ADPCM is widely used in the CTI industry because it is the principal format
-supported by Dialogic. As the market leader, they tend to define "common
-practice". It offers a good balance of simplicity and quality at rates of
-24kbps or 32kbps. 32kbps is obtained by ADPCM compressing 8k samples/second linear
-PCM. 24kbps is obtained by resampling to 6k samples/second and using the same ADPCM
-compression algorithm on the slower samples.
-
-The algorithms for this ADPCM codec can be found in "PC Telephony - The complete guide
-to designing, building and programming systems using Dialogic and Related Hardware"
-by Bob Edgar. pg 272-276. */
-
-/*!
- Oki (Dialogic) ADPCM conversion state descriptor. This defines the state of
- a single working instance of the Oki ADPCM converter. This is used for
- either linear to ADPCM or ADPCM to linear conversion.
-*/
-typedef struct
-{
- /*! \brief The bit rate - 24000 or 32000. */
- int bit_rate;
- /*! \brief The last state of the ADPCM algorithm. */
- int16_t last;
- /*! \brief Current index into the step size table. */
- int16_t step_index;
- /*! \brief The compressed data byte in progress. */
- uint8_t oki_byte;
- /*! \brief The signal history for the sample rate converter. */
- int16_t history[32];
- /*! \brief Pointer into the history buffer. */
- int ptr;
- /*! \brief Odd/even sample counter. */
- int mark;
- /*! \brief Phase accumulator for the sample rate converter. */
- int phase;
-} oki_adpcm_state_t;
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-/*! Initialise an Oki ADPCM encode or decode context.
- \param s The Oki ADPCM context.
- \param bit_rate The required bit rate for the ADPCM data.
- The valid rates are 24000 and 32000.
- \return A pointer to the Oki ADPCM context, or NULL for error. */
-oki_adpcm_state_t *oki_adpcm_init(oki_adpcm_state_t *s, int bit_rate);
-
-/*! Free an Oki ADPCM encode or decode context.
- \param s The Oki ADPCM context.
- \return 0 for OK. */
-int oki_adpcm_release(oki_adpcm_state_t *s);
-
-/*! Decode a buffer of Oki ADPCM data to linear PCM.
- \param s The Oki ADPCM context.
- \param amp The audio sample buffer.
- \param oki_data
- \param oki_bytes
- \return The number of samples returned. */
-int oki_adpcm_decode(oki_adpcm_state_t *s,
- int16_t amp[],
- const uint8_t oki_data[],
- int oki_bytes);
-
-/*! Encode a buffer of linear PCM data to Oki ADPCM.
- \param s The Oki ADPCM context.
- \param oki_data The Oki ADPCM data produced
- \param amp The audio sample buffer.
- \param len The number of samples in the buffer.
- \return The number of bytes of Oki ADPCM data produced. */
-int oki_adpcm_encode(oki_adpcm_state_t *s,
- uint8_t oki_data[],
- const int16_t amp[],
- int len);
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * telephony.h - some very basic telephony definitions
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2003 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the Lesser GNU General Public License version 2.1, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: telephony.h,v 1.10 2007/04/05 19:20:50 steveu Exp $
- */
-
-#if !defined(_SPANDSP_TELEPHONY_H_)
-#define _SPANDSP_TELEPHONY_H_
-
-#define SAMPLE_RATE 8000
-
-/* This is based on A-law, but u-law is only 0.03dB different */
-#define DBM0_MAX_POWER (3.14f + 3.02f)
-#define DBM0_MAX_SINE_POWER (3.14f)
-/* This is based on the ITU definition of dbOv in G.100.1 */
-#define DBOV_MAX_POWER (0.0f)
-#define DBOV_MAX_SINE_POWER (-3.02f)
-
-/*! \brief A handler for pure receive. The buffer cannot be altered. */
-typedef int (span_rx_handler_t)(void *s, const int16_t amp[], int len);
-
-/*! \brief A handler for receive, where the buffer can be altered. */
-typedef int (span_mod_handler_t)(void *s, int16_t amp[], int len);
-
-/*! \brief A handler for transmit, where the buffer will be filled. */
-typedef int (span_tx_handler_t)(void *s, int16_t amp[], int max_len);
-
-#define ms_to_samples(t) (((t)*SAMPLE_RATE)/1000)
-
-#if !defined(FALSE)
-#define FALSE 0
-#endif
-#if !defined(TRUE)
-#define TRUE (!FALSE)
-#endif
-
-#include <assert.h>
-#if (_MSC_VER >= 1400) // VC8+
-#define vc_assert(expr) assert(expr);__analysis_assume( expr )
-#else
-#define vc_assert(expr) assert(expr)
-#endif
-
-#if defined(__cplusplus)
-/* C++ doesn't seem to have sane rounding functions/macros yet */
-#ifndef _MSC_VER
-#define lrint(x) ((long int) (x))
-#define lrintf(x) ((long int) (x))
-#endif
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * vector_int.h
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2003 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the Lesser GNU General Public License version 2.1, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: vector_int.h,v 1.8 2007/12/13 11:31:33 steveu Exp $
- */
-
-#if !defined(_SPANDSP_VECTOR_INT_H_)
-#define _SPANDSP_VECTOR_INT_H_
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-int32_t vec_dot_prodi16(const int16_t x[], const int16_t y[], int n);
-
-/*! \brief Find the minimum and maximum values in a vector.
- \param x The vector to be searched.
- \param n The number of elements in the vetor.
- \param out A two element vector. The first will receive the
- maximum. The second will receive the minimum. This parameter
- may be set to NULL.
- \return The absolute maximum value. Since the range of negative numbers
- exceeds the range of positive one, the returned integer is longer
- than the ones being searched. */
-int32_t vec_min_maxi16(const int16_t x[], int n, int16_t out[]);
-
-static __inline__ int vec_norm2i16(const int16_t *vec, int len)
-{
- int i;
- int sum;
-
- sum = 0;
- for (i = 0; i < len; i++)
- sum += vec[i]*vec[i];
- return sum;
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ void vec_sari16(int16_t *vec, int len, int shift)
-{
- int i;
-
- for (i = 0; i < len; i++)
- vec[i] >>= shift;
-}
-/*- End of function --------------------------------------------------------*/
-
-static __inline__ int vec_max_bitsi16(const int16_t *vec, int len)
-{
- int i;
- int max;
- int v;
- int b;
-
- max = 0;
- for (i = 0; i < len; i++)
- {
- v = abs(vec[i]);
- if (v > max)
- max = v;
- }
- b = 0;
- while (max != 0)
- {
- b++;
- max >>= 1;
- }
- return b;
-}
-/*- End of function --------------------------------------------------------*/
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * version.h - A tag file, so the exact installed revision can be assertained.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2007 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: version.h.in,v 1.2 2007/04/06 13:20:36 steveu Exp $
- */
-
-#if !defined(_SPANDSP_VERSION_H_)
-#define _SPANDSP_VERSION_H_
-
-/* The date and time of the version are in UTC form. */
-
-#define SPANDSP_RELEASE_DATE $SPANDSP_RELEASE_DATE
-#define SPANDSP_RELEASE_TIME $SPANDSP_RELEASE_TIME
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * version.h - A tag file, so the exact installed revision can be assertained.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2007 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: version.h.in,v 1.2 2007/04/06 13:20:36 steveu Exp $
- */
-
-#if !defined(_SPANDSP_VERSION_H_)
-#define _SPANDSP_VERSION_H_
-
-/* The date and time of the version are in UTC form. */
-
-#define SPANDSP_RELEASE_DATE $SPANDSP_RELEASE_DATE
-#define SPANDSP_RELEASE_TIME $SPANDSP_RELEASE_TIME
-
-#endif
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-##
-## SpanDSP - a series of DSP components for telephony
-##
-## Makefile.am -- Process this file with automake to produce Makefile.in
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License version 2, as
-## published by the Free Software Foundation.
-##
-## 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-##
-## $Id: Makefile.am,v 1.94 2008/01/31 13:34:40 steveu Exp $
-
-AM_CFLAGS = $(COMP_VENDOR_CFLAGS)
-
-LIBS += $(TESTLIBS)
-
-EXTRA_DIST = regression_tests.sh
-
-MAINTAINERCLEANFILES = Makefile.in
-
-INCLUDES = -I$(top_builddir)/src -DDATADIR="\"$(pkgdatadir)\""
-
-LIBDIR = -L$(top_builddir)/src
-
-noinst_PROGRAMS = g711_tests \
- g722_tests \
- g726_tests \
- gsm0610_tests \
- ima_adpcm_tests \
- lpc10_tests \
- oki_adpcm_tests
-
-g711_tests_SOURCES = g711_tests.c
-g711_tests_LDADD = $(LIBDIR) -lvoipcodecs -lspandsp
-
-g722_tests_SOURCES = g722_tests.c
-g722_tests_LDADD = $(LIBDIR) -lvoipcodecs
-
-g726_tests_SOURCES = g726_tests.c
-g726_tests_LDADD = $(LIBDIR) -lvoipcodecs
-
-gsm0610_tests_SOURCES = gsm0610_tests.c
-gsm0610_tests_LDADD = $(LIBDIR) -lvoipcodecs
-
-ima_adpcm_tests_SOURCES = ima_adpcm_tests.c
-ima_adpcm_tests_LDADD = $(LIBDIR) -lvoipcodecs
-
-lpc10_tests_SOURCES = lpc10_tests.c
-lpc10_tests_LDADD = $(LIBDIR) -lvoipcodecs
-
-oki_adpcm_tests_SOURCES = oki_adpcm_tests.c
-oki_adpcm_tests_LDADD = $(LIBDIR) -lvoipcodecs
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * g711_tests.c
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: g711_tests.c,v 1.7 2007/11/10 11:14:58 steveu Exp $
- */
-
-/*! \page g711_tests_page A-law and u-law conversion tests
-\section g711_tests_page_sec_1 What does it do?
-
-\section g711_tests_page_sec_2 How is it used?
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <audiofile.h>
-
-#include "voipcodecs.h"
-#include <spandsp/power_meter.h>
-
-#define OUT_FILE_NAME "g711.wav"
-
-int16_t amp[65536];
-
-const uint8_t alaw_1khz_sine[] = {0x34, 0x21, 0x21, 0x34, 0xB4, 0xA1, 0xA1, 0xB4};
-const uint8_t ulaw_1khz_sine[] = {0x1E, 0x0B, 0x0B, 0x1E, 0x9E, 0x8B, 0x8B, 0x9E};
-
-int main(int argc, char *argv[])
-{
- AFfilehandle outhandle;
- AFfilesetup filesetup;
- power_meter_t power_meter;
- int outframes;
- int i;
- int block;
- int pre;
- int post;
- int post_post;
- int alaw_failures;
- int ulaw_failures;
- float worst_alaw;
- float worst_ulaw;
- float tmp;
-
- if ((filesetup = afNewFileSetup()) == AF_NULL_FILESETUP)
- {
- fprintf(stderr, " Failed to create file setup\n");
- exit(2);
- }
- afInitSampleFormat(filesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16);
- afInitRate(filesetup, AF_DEFAULT_TRACK, (float) SAMPLE_RATE);
- afInitFileFormat(filesetup, AF_FILE_WAVE);
- afInitChannels(filesetup, AF_DEFAULT_TRACK, 1);
-
- if ((outhandle = afOpenFile(OUT_FILE_NAME, "w", filesetup)) == AF_NULL_FILEHANDLE)
- {
- fprintf(stderr, " Cannot create wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
-
- printf("Conversion accuracy tests.\n");
- alaw_failures = 0;
- ulaw_failures = 0;
- worst_alaw = 0.0;
- worst_ulaw = 0.0;
- for (block = 0; block < 1; block++)
- {
- for (i = 0; i < 65536; i++)
- {
- pre = i - 32768;
- post = alaw_to_linear(linear_to_alaw(pre));
- if (abs(pre) > 140)
- {
- tmp = (float) abs(post - pre)/(float) abs(pre);
- if (tmp > 0.10)
- {
- printf("A-law: Excessive error at %d (%d)\n", pre, post);
- alaw_failures++;
- }
- if (tmp > worst_alaw)
- worst_alaw = tmp;
- }
- else
- {
- /* Small values need different handling for sensible measurement */
- if (abs(post - pre) > 15)
- {
- printf("A-law: Excessive error at %d (%d)\n", pre, post);
- alaw_failures++;
- }
- }
- amp[i] = post;
- }
- outframes = afWriteFrames(outhandle,
- AF_DEFAULT_TRACK,
- amp,
- 65536);
- if (outframes != 65536)
- {
- fprintf(stderr, " Error writing wave file\n");
- exit(2);
- }
- for (i = 0; i < 65536; i++)
- {
- pre = i - 32768;
- post = ulaw_to_linear(linear_to_ulaw(pre));
- if (abs(pre) > 40)
- {
- tmp = (float) abs(post - pre)/(float) abs(pre);
- if (tmp > 0.10)
- {
- printf("u-law: Excessive error at %d (%d)\n", pre, post);
- ulaw_failures++;
- }
- if (tmp > worst_ulaw)
- worst_ulaw = tmp;
- }
- else
- {
- /* Small values need different handling for sensible measurement */
- if (abs(post - pre) > 4)
- {
- printf("u-law: Excessive error at %d (%d)\n", pre, post);
- ulaw_failures++;
- }
- }
- amp[i] = post;
- }
- outframes = afWriteFrames(outhandle,
- AF_DEFAULT_TRACK,
- amp,
- 65536);
- if (outframes != 65536)
- {
- fprintf(stderr, " Error writing wave file\n");
- exit(2);
- }
- }
- printf("Worst A-law error (ignoring small values) %f%%\n", worst_alaw*100.0);
- printf("Worst u-law error (ignoring small values) %f%%\n", worst_ulaw*100.0);
- if (alaw_failures || ulaw_failures)
- {
- printf("%d A-law values with excessive error\n", alaw_failures);
- printf("%d u-law values with excessive error\n", ulaw_failures);
- printf("Tests failed\n");
- exit(2);
- }
-
- printf("Cyclic conversion repeatability tests.\n");
- /* Find what happens to every possible linear value after a round trip. */
- for (i = 0; i < 65536; i++)
- {
- pre = i - 32768;
- /* Make a round trip */
- post = alaw_to_linear(linear_to_alaw(pre));
- /* A second round trip should cause no further change */
- post_post = alaw_to_linear(linear_to_alaw(post));
- if (post_post != post)
- {
- printf("A-law second round trip mismatch - at %d, %d != %d\n", pre, post, post_post);
- printf("Tests failed\n");
- exit(2);
- }
- /* Make a round trip */
- post = ulaw_to_linear(linear_to_ulaw(pre));
- /* A second round trip should cause no further change */
- post_post = ulaw_to_linear(linear_to_ulaw(post));
- if (post_post != post)
- {
- printf("u-law round trip mismatch - at %d, %d != %d\n", pre, post, post_post);
- printf("Tests failed\n");
- exit(2);
- }
- }
-
- printf("Reference power level tests.\n");
- power_meter_init(&power_meter, 7);
-
- for (i = 0; i < 8000; i++)
- {
- amp[i] = ulaw_to_linear(ulaw_1khz_sine[i & 7]);
- power_meter_update(&power_meter, amp[i]);
- }
- printf("Reference u-law 1kHz tone is %fdBm0\n", power_meter_current_dbm0(&power_meter));
- outframes = afWriteFrames(outhandle,
- AF_DEFAULT_TRACK,
- amp,
- 8000);
- if (outframes != 8000)
- {
- fprintf(stderr, " Error writing wave file\n");
- exit(2);
- }
- if (0.1f < fabs(power_meter_current_dbm0(&power_meter)))
- {
- printf("Test failed.\n");
- exit(2);
- }
-
- for (i = 0; i < 8000; i++)
- {
- amp[i] = alaw_to_linear(alaw_1khz_sine[i & 7]);
- power_meter_update(&power_meter, amp[i]);
- }
- printf("Reference A-law 1kHz tone is %fdBm0\n", power_meter_current_dbm0(&power_meter));
- outframes = afWriteFrames(outhandle,
- AF_DEFAULT_TRACK,
- amp,
- 8000);
- if (outframes != 8000)
- {
- fprintf(stderr, " Error writing wave file\n");
- exit(2);
- }
- if (0.1f < fabs(power_meter_current_dbm0(&power_meter)))
- {
- printf("Test failed.\n");
- exit(2);
- }
-
- /* Check the transcoding functions. */
- printf("Testing transcoding A-law -> u-law -> A-law\n");
- for (i = 0; i < 256; i++)
- {
- if (alaw_to_ulaw(ulaw_to_alaw(i)) != i)
- {
- if (abs(alaw_to_ulaw(ulaw_to_alaw(i)) - i) > 1)
- {
- printf("u-law -> A-law -> u-law gave %d -> %d\n", i, alaw_to_ulaw(ulaw_to_alaw(i)));
- printf("Test failed\n");
- exit(2);
- }
- }
- }
-
- printf("Testing transcoding u-law -> A-law -> u-law\n");
- for (i = 0; i < 256; i++)
- {
- if (ulaw_to_alaw(alaw_to_ulaw(i)) != i)
- {
- if (abs(alaw_to_ulaw(ulaw_to_alaw(i)) - i) > 1)
- {
- printf("A-law -> u-law -> A-law gave %d -> %d\n", i, ulaw_to_alaw(alaw_to_ulaw(i)));
- printf("Test failed\n");
- exit(2);
- }
- }
- }
-
- if (afCloseFile(outhandle))
- {
- fprintf(stderr, " Cannot close wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
- afFreeFileSetup(filesetup);
-
- printf("Tests passed.\n");
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * g722_tests.c - Test G.722 encode and decode.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2005 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: g722_tests.c,v 1.19 2007/11/10 11:14:58 steveu Exp $
- */
-
-/*! \file */
-
-/*! \page g722_tests_page G.722 tests
-\section g722_tests_page_sec_1 What does it do?
-This modules implements two sets of tests:
- - The tests defined in the G.722 specification, using the test data files supplied
- with the specification.
- - A generally audio quality test, consisting of compressing and decompressing a speeech
- file for audible comparison.
-
-The speech file should be recorded at 16 bits/sample, 16000 samples/second, and named
-"pre_g722.wav".
-
-The ITU tests use the codec in a special mode, in which the QMFs, which split and recombine the
-sub-bands, are disabled. This means they do not test 100% of the codec. This is the reason for
-including the additional listening test.
-
-\section g722_tests_page_sec_2 How is it used?
-To perform the tests in the G.722 specification you need to obtain the test data files from the
-specification. These are copyright material, and so cannot be distributed with this test software.
-
-The files, containing test vectors, which are supplied with the G.722 specification, should be
-copied to itutests/g722. The ITU tests can then be run by executing g722_tests without
-any parameters.
-
-To perform a general audio quality test, g722_tests should be run with a parameter specifying
-the required bit rate for compression. The valid parameters are "-48", "-56", and "-64".
-The file ../localtests/short_wb_voice.wav will be compressed to the specified bit rate, decompressed,
-and the resulting audio stored in post_g722.wav.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <memory.h>
-#include <ctype.h>
-#include <audiofile.h>
-
-#include "voipcodecs.h"
-
-#define G722_SAMPLE_RATE 16000
-
-#define BLOCK_LEN 320
-
-#define MAX_TEST_VECTOR_LEN 40000
-
-#define TESTDATA_DIR "../itutests/g722/"
-
-#define EIGHTK_IN_FILE_NAME "../localtests/short_nb_voice.wav"
-#define IN_FILE_NAME "../localtests/short_wb_voice.wav"
-#define OUT_FILE_NAME "post_g722.wav"
-
-#if 0
-static const char *itu_test_files[] =
-{
- TESTDATA_DIR "T1C1.XMT", /* 69973 bytes */
- TESTDATA_DIR "T1C2.XMT", /* 3605 bytes */
- TESTDATA_DIR "T1D3.COD", /* 69973 bytes */
-
- TESTDATA_DIR "T2R1.COD", /* 69973 bytes */
- TESTDATA_DIR "T2R2.COD", /* 3605 bytes */
-
- TESTDATA_DIR "T3L1.RC1", /* 69973 bytes */
- TESTDATA_DIR "T3L1.RC2", /* 69973 bytes */
- TESTDATA_DIR "T3L1.RC3", /* 69973 bytes */
- TESTDATA_DIR "T3H1.RC0", /* 69973 bytes */
- TESTDATA_DIR "T3L2.RC1", /* 3605 bytes */
- TESTDATA_DIR "T3L2.RC2", /* 3605 bytes */
- TESTDATA_DIR "T3L2.RC3", /* 3605 bytes */
- TESTDATA_DIR "T3H2.RC0", /* 3605 bytes */
- TESTDATA_DIR "T3L3.RC1", /* 69973 bytes */
- TESTDATA_DIR "T3L3.RC2", /* 69973 bytes */
- TESTDATA_DIR "T3L3.RC3", /* 69973 bytes */
- TESTDATA_DIR "T3H3.RC0" /* 69973 bytes */
-};
-#endif
-
-static const char *encode_test_files[] =
-{
- TESTDATA_DIR "T1C1.XMT", TESTDATA_DIR "T2R1.COD",
- TESTDATA_DIR "T1C2.XMT", TESTDATA_DIR "T2R2.COD",
- NULL
-};
-
-static const char *decode_test_files[] =
-{
- TESTDATA_DIR "T2R1.COD",
- TESTDATA_DIR "T3L1.RC1",
- TESTDATA_DIR "T3L1.RC2",
- TESTDATA_DIR "T3L1.RC3",
- TESTDATA_DIR "T3H1.RC0",
-
- TESTDATA_DIR "T2R2.COD",
- TESTDATA_DIR "T3L2.RC1",
- TESTDATA_DIR "T3L2.RC2",
- TESTDATA_DIR "T3L2.RC3",
- TESTDATA_DIR "T3H2.RC0",
-
- TESTDATA_DIR "T1D3.COD",
- TESTDATA_DIR "T3L3.RC1",
- TESTDATA_DIR "T3L3.RC2",
- TESTDATA_DIR "T3L3.RC3",
- TESTDATA_DIR "T3H3.RC0",
-
- NULL
-};
-
-int16_t itu_data[MAX_TEST_VECTOR_LEN];
-uint16_t itu_ref[MAX_TEST_VECTOR_LEN];
-uint16_t itu_ref_upper[MAX_TEST_VECTOR_LEN];
-uint8_t compressed[MAX_TEST_VECTOR_LEN];
-int16_t decompressed[MAX_TEST_VECTOR_LEN];
-
-static int hex_get(char *s)
-{
- int i;
- int value;
- int x;
-
- for (value = i = 0; i < 4; i++)
- {
- x = *s++ - 0x30;
- if (x > 9)
- x -= 0x07;
- if (x > 15)
- x -= 0x20;
- if (x < 0 || x > 15)
- return -1;
- value <<= 4;
- value |= x;
- }
- return value;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int get_vector(FILE *file, uint16_t vec[])
-{
- char buf[132 + 1];
- char *s;
- int i;
- int value;
-
- while (fgets(buf, 133, file))
- {
- if (buf[0] == '/' && buf[1] == '*')
- continue;
- s = buf;
- i = 0;
- while ((value = hex_get(s)) >= 0)
- {
- vec[i++] = value;
- s += 4;
- }
- return i;
- }
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int get_test_vector(const char *file, uint16_t buf[], int max_len)
-{
- int octets;
- int i;
- FILE *infile;
-
- if ((infile = fopen(file, "r")) == NULL)
- {
- fprintf(stderr, " Failed to open '%s'\n", file);
- exit(2);
- }
- octets = 0;
- while ((i = get_vector(infile, buf + octets)) > 0)
- octets += i;
- fclose(infile);
- return octets;
-}
-/*- End of function --------------------------------------------------------*/
-
-int main(int argc, char *argv[])
-{
- g722_encode_state_t enc_state;
- g722_decode_state_t dec_state;
- int len;
- int len_comp;
- int len_comp_upper;
- int len_data;
- int len2;
- int len3;
- int i;
- int j;
- int k;
- int file;
- AFfilehandle inhandle;
- AFfilehandle outhandle;
- AFfilesetup filesetup;
- int outframes;
- int samples;
- int mode;
- int itutests;
- int bit_rate;
- int eight_k_in;
- int eight_k_out;
- float x;
- int16_t indata[BLOCK_LEN];
- int16_t outdata[BLOCK_LEN];
- uint8_t adpcmdata[BLOCK_LEN];
-
- i = 1;
- bit_rate = 64000;
- eight_k_in = FALSE;
- eight_k_out = FALSE;
- itutests = TRUE;
- while (argc > i)
- {
- if (strcmp(argv[i], "-48") == 0)
- {
- bit_rate = 48000;
- itutests = FALSE;
- i++;
- }
- else if (strcmp(argv[i], "-56") == 0)
- {
- bit_rate = 56000;
- itutests = FALSE;
- i++;
- }
- else if (strcmp(argv[i], "-64") == 0)
- {
- bit_rate = 64000;
- itutests = FALSE;
- i++;
- }
- else if (strcmp(argv[i], "-8k8k") == 0)
- {
- eight_k_in = TRUE;
- eight_k_out = TRUE;
- i++;
- }
- else if (strcmp(argv[i], "-8k16k") == 0)
- {
- eight_k_in = TRUE;
- eight_k_out = FALSE;
- i++;
- }
- else if (strcmp(argv[i], "-16k8k") == 0)
- {
- eight_k_in = FALSE;
- eight_k_out = TRUE;
- i++;
- }
- else if (strcmp(argv[i], "-16k16k") == 0)
- {
- eight_k_in = FALSE;
- eight_k_out = FALSE;
- i++;
- }
- else
- {
- fprintf(stderr, "Unknown parameter %s specified.\n", argv[i]);
- exit(2);
- }
- }
-
- if (itutests)
- {
- /* ITU G.722 encode tests, using configuration 1. The QMF is bypassed */
- for (file = 0; encode_test_files[file]; file += 2)
- {
- printf("Testing %s -> %s\n", encode_test_files[file], encode_test_files[file + 1]);
-
- /* Get the input data */
- len_data = get_test_vector(encode_test_files[file], (uint16_t *) itu_data, MAX_TEST_VECTOR_LEN);
-
- /* Get the reference output data */
- len_comp = get_test_vector(encode_test_files[file + 1], itu_ref, MAX_TEST_VECTOR_LEN);
-
- /* Process the input data */
- /* Skip the reset stuff at each end of the data */
- for (i = 0; i < len_data; i++)
- {
- if ((itu_data[i] & 1) == 0)
- break;
- }
- for (j = i; j < len_data; j++)
- {
- if ((itu_data[j] & 1))
- break;
- }
- len = j - i;
- g722_encode_init(&enc_state, 64000, 0);
- enc_state.itu_test_mode = TRUE;
- len2 = g722_encode(&enc_state, compressed, itu_data + i, len);
-
- /* Check the result against the ITU's reference output data */
- j = 0;
- for (k = 0; k < len2; k++)
- {
- if ((compressed[k] & 0xFF) != ((itu_ref[k + i] >> 8) & 0xFF))
- {
- printf(">>> %6d %4x %4x\n", k, compressed[k] & 0xFF, itu_ref[k + i] & 0xFFFF);
- j++;
- }
- }
- printf("%d bad samples, out of %d/%d samples\n", j, len, len_data);
- if (j)
- {
- printf("Test failed\n");
- exit(2);
- }
- printf("Test passed\n");
- }
-
- /* ITU G.722 decode tests, using configuration 2. The QMF is bypassed */
- /* Run each of the tests for each of the modes - 48kbps, 56kbps and 64kbps. */
- for (mode = 1; mode <= 3; mode++)
- {
- for (file = 0; decode_test_files[file]; file += 5)
- {
- printf("Testing mode %d, %s -> %s + %s\n",
- mode,
- decode_test_files[file],
- decode_test_files[file + mode],
- decode_test_files[file + 4]);
-
- /* Get the input data */
- len_data = get_test_vector(decode_test_files[file], (uint16_t *) itu_data, MAX_TEST_VECTOR_LEN);
-
- /* Get the lower reference output data */
- len_comp = get_test_vector(decode_test_files[file + mode], itu_ref, MAX_TEST_VECTOR_LEN);
-
- /* Get the upper reference output data */
- len_comp_upper = get_test_vector(decode_test_files[file + 4], itu_ref_upper, MAX_TEST_VECTOR_LEN);
-
- /* Process the input data */
- /* Skip the reset stuff at each end of the data */
- for (i = 0; i < len_data; i++)
- {
- if ((itu_data[i] & 1) == 0)
- break;
- }
- for (j = i; j < len_data; j++)
- {
- if ((itu_data[j] & 1))
- break;
- }
- len = j - i;
- for (k = 0; k < len; k++)
- compressed[k] = itu_data[k + i] >> ((mode == 3) ? 10 : (mode == 2) ? 9 : 8);
-
- g722_decode_init(&dec_state, (mode == 3) ? 48000 : (mode == 2) ? 56000 : 64000, 0);
- dec_state.itu_test_mode = TRUE;
- len2 = g722_decode(&dec_state, decompressed, compressed, len);
-
- /* Check the result against the ITU's reference output data */
- j = 0;
- for (k = 0; k < len2; k += 2)
- {
- if ((decompressed[k] & 0xFFFF) != (itu_ref[(k >> 1) + i] & 0xFFFF)
- ||
- (decompressed[k + 1] & 0xFFFF) != (itu_ref_upper[(k >> 1) + i] & 0xFFFF))
- {
- printf(">>> %6d %4x %4x %4x %4x\n", k >> 1, decompressed[k] & 0xFFFF, decompressed[k + 1] & 0xFFFF, itu_ref[(k >> 1) + i] & 0xFFFF, itu_ref_upper[(k >> 1) + i] & 0xFFFF);
- j++;
- }
- }
- printf("%d bad samples, out of %d/%d samples\n", j, len, len_data);
- if (j)
- {
- printf("Test failed\n");
- exit(2);
- }
- printf("Test passed\n");
- }
- }
-
- printf("Tests passed.\n");
- }
- else
- {
- if (eight_k_in)
- {
- if ((inhandle = afOpenFile(EIGHTK_IN_FILE_NAME, "r", NULL)) == AF_NULL_FILEHANDLE)
- {
- fprintf(stderr, " Cannot open wave file '%s'\n", EIGHTK_IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetFrameSize(inhandle, AF_DEFAULT_TRACK, 1)) != 2.0)
- {
- printf(" Unexpected frame size in wave file '%s'\n", EIGHTK_IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetRate(inhandle, AF_DEFAULT_TRACK)) != (float) SAMPLE_RATE)
- {
- printf(" Unexpected sample rate %f in wave file '%s'\n", x, EIGHTK_IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetChannels(inhandle, AF_DEFAULT_TRACK)) != 1.0)
- {
- printf(" Unexpected number of channels in wave file '%s'\n", EIGHTK_IN_FILE_NAME);
- exit(2);
- }
- }
- else
- {
- if ((inhandle = afOpenFile(IN_FILE_NAME, "r", NULL)) == AF_NULL_FILEHANDLE)
- {
- fprintf(stderr, " Cannot open wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetFrameSize(inhandle, AF_DEFAULT_TRACK, 1)) != 2.0)
- {
- printf(" Unexpected frame size in wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetRate(inhandle, AF_DEFAULT_TRACK)) != (float) G722_SAMPLE_RATE)
- {
- printf(" Unexpected sample rate %f in wave file '%s'\n", x, IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetChannels(inhandle, AF_DEFAULT_TRACK)) != 1.0)
- {
- printf(" Unexpected number of channels in wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- }
-
- if ((filesetup = afNewFileSetup()) == AF_NULL_FILESETUP)
- {
- fprintf(stderr, " Failed to create file setup\n");
- exit(2);
- }
- afInitSampleFormat(filesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16);
- if (eight_k_out)
- afInitRate(filesetup, AF_DEFAULT_TRACK, (float) SAMPLE_RATE);
- else
- afInitRate(filesetup, AF_DEFAULT_TRACK, (float) G722_SAMPLE_RATE);
- afInitFileFormat(filesetup, AF_FILE_WAVE);
- afInitChannels(filesetup, AF_DEFAULT_TRACK, 1);
- if ((outhandle = afOpenFile(OUT_FILE_NAME, "w", filesetup)) == AF_NULL_FILEHANDLE)
- {
- fprintf(stderr, " Cannot create wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
- if (eight_k_in)
- g722_encode_init(&enc_state, bit_rate, G722_PACKED | G722_SAMPLE_RATE_8000);
- else
- g722_encode_init(&enc_state, bit_rate, G722_PACKED);
- if (eight_k_out)
- g722_decode_init(&dec_state, bit_rate, G722_PACKED | G722_SAMPLE_RATE_8000);
- else
- g722_decode_init(&dec_state, bit_rate, G722_PACKED);
- for (;;)
- {
- samples = afReadFrames(inhandle,
- AF_DEFAULT_TRACK,
- indata,
- BLOCK_LEN);
- if (samples <= 0)
- break;
- len2 = g722_encode(&enc_state, adpcmdata, indata, samples);
- len3 = g722_decode(&dec_state, outdata, adpcmdata, len2);
- outframes = afWriteFrames(outhandle,
- AF_DEFAULT_TRACK,
- outdata,
- len3);
- if (outframes != len3)
- {
- fprintf(stderr, " Error writing wave file\n");
- exit(2);
- }
- }
- if (afCloseFile(inhandle))
- {
- fprintf(stderr, " Cannot close wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if (afCloseFile(outhandle))
- {
- fprintf(stderr, " Cannot close wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
- afFreeFileSetup(filesetup);
-
- printf("'%s' transcoded to '%s' at %dbps.\n", IN_FILE_NAME, OUT_FILE_NAME, bit_rate);
- }
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * g726_tests.c - Test G.726 encode and decode.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: g726_tests.c,v 1.17 2007/11/10 11:14:58 steveu Exp $
- */
-
-/*! \file */
-
-/*! \page g726_tests_page G.726 tests
-\section g726_tests_page_sec_1 What does it do?
-Two sets of tests are performed:
- - The tests defined in the G.726 specification, using the test data files supplied with
- the specification.
- - A generally audio quality test, consisting of compressing and decompressing a speeech
- file for audible comparison.
-
-The speech file should be recorded at 16 bits/sample, 8000 samples/second, and named
-"pre_g726.wav".
-
-\section g726_tests_page_sec_2 How is it used?
-To perform the tests in the G.726 specification you need to obtain the test data files from the
-specification. These are copyright material, and so cannot be distributed with this test software.
-
-The files, containing test vectors, which are supplied with the G.726 specification, should be
-copied to itutests/g726 so the files are arranged in the same directory heirarchy in which they
-are supplied. That is, you should have file names like
-
- - itutests/g726/DISK1/INPUT/NRM.M
- - itutests/g726/DISK1/INPUT/OVR.M
- - itutests/g726/DISK2/INPUT/NRM.A
- - itutests/g726/DISK2/INPUT/OVR.A
-
-in your source tree. The ITU tests can then be run by executing g726_tests without
-any parameters.
-
-To perform a general audio quality test, g726_tests should be run with a parameter specifying
-the required bit rate for compression. The valid parameters are "-16", "-24", "-32", and "-40".
-The test file ../localtests/short_nb_voice.wav will be compressed to the specified bit rate,
-decompressed, and the resulting audio stored in post_g726.wav.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <memory.h>
-#include <ctype.h>
-#include <audiofile.h>
-
-#include "voipcodecs.h"
-
-#define BLOCK_LEN 320
-#define MAX_TEST_VECTOR_LEN 40000
-
-#define IN_FILE_NAME "../localtests/short_nb_voice.wav"
-#define OUT_FILE_NAME "post_g726.wav"
-
-#define TESTDATA_DIR "../itutests/g726/"
-
-int16_t outdata[MAX_TEST_VECTOR_LEN];
-uint8_t adpcmdata[MAX_TEST_VECTOR_LEN];
-
-int16_t itudata[MAX_TEST_VECTOR_LEN];
-uint8_t itu_ref[MAX_TEST_VECTOR_LEN];
-uint8_t unpacked[MAX_TEST_VECTOR_LEN];
-uint8_t xlaw[MAX_TEST_VECTOR_LEN];
-
-/*
-Table 4 - V Reset and homing sequences for u-law
- Normal I-input Overload
-Algorithm Input Intermediate Output Input Output Input Intermediate Output
- (PCM) (ADPCM) (PCM) (ADPCM) (PCM) (PCM) (ADPCM) (PCM)
-
-16F NRM.M RN16FM.I RN16FM.O I16 RI16FM.O OVR.M RV16FM.I RV16FM.O
- HN16FM.I HN16FM.O HI16FM.O HV16FM.I HV16FM.O
-
-24F NRM.M RN24FM.I RN24FM.O I24 RI24FM.O OVR.M RV24FM.I RV24FM.O
- HN24FM.I HN24FM.O HI24FM.O HV24FM.I HV24FM.O
-
-32F NRM.M RN32FM.I RN32FM.O I32 RI32FM.O OVR.M RV32FM.I RV32FM.O
- HN32FM.I HN32FM.O HI32FM.O HV32FM.I HV32FM.O
-
-40F NRM.M RN40FM.I RN40FM.O I40 RI40FM.O OVR.M RV40FM.I RV40FM.O
- HN40FM.I HN40FM.O HI40FM.O HV40FM.I HV40FM.O
-
-
-Table 5 - V Reset and homing sequences for A-law
- Normal I-input Overload
-Algorithm Input Intermediate Output Input Output Input Intermediate Output
- (PCM) (ADPCM) (PCM) (ADPCM) (PCM) (PCM) (ADPCM) (PCM)
-16F NRM.A RN16FA.I RN16FA.O I16 RI16FA.O OVR.A RV16FA.I RV16FA.O
- HN16FA.I HN16FA.O HI16FA.O HV16FA.I HV16FA.O
-
-24F NRM.A RN24FA.I RN24FA.O I24 RI24FA.O OVR.A RV24FA.I RV24FA.O
- HN24FA.I HN24FA.O HI24FA.O HV24FA.I HV24FA.O
-
-32F NRM.A RN32FA.I RN32FA.O I32 RI32FA.O OVR.A RV32FA.I RV32FA.O
- HN32FA.I HN32FA.O HI32FA.O HV32FA.I HV32FA.O
-
-40F NRM.A RN40FA.I RN40FA.O I40 RI40FA.O OVR.A RV40FA.I RV40FA.O
- HN40FA.I HN40FA.O HI40FA.O HV40FA.I HV40FA.O
-
-Table 6 ¡V Reset and homing cross sequences for u-law -> A-law
- Normal Overload
-Algorithm Input Intermediate Output Input Intermediate Output
- (PCM) (ADPCM) (PCM) (PCM) (ADPCM) (PCM)
-16F NRM.M RN16FM.I RN16FC.O OVR.M RV16FM.I RV16FC.O
- HN16FM.I HN16FC.O HV16FM.I HV16FC.O
-
-24F NRM.M RN24FM.I RN24FC.O OVR.M RV24FM.I RV24FC.O
- HN24FM.I HN24FC.O HV24FM.I HV24FC.O
-
-32F NRM.M RN32FM.I RN32FC.O OVR.M RV32FM.I RV32FC.O
- HN32FM.I HN32FC.O HV32FM.I HV32FC.O
-
-40F NRM.M RN40FM.I RN40FC.O OVR.M RV40FM.I RV40FC.O
- HN40FM.I HN40FC.O HV40FM.I HV40FC.O
-
-Table 7 ¡V Reset and homing cross sequences for A-law -> u-law
- Normal Overload
-Algorithm Input Intermediate Output Input Intermediate Output
- (PCM) (ADPCM) (PCM) (PCM) (ADPCM) (PCM)
-16F NRM.A RN16FA.I RN16FX.O OVR.A RV16FA.I RV16FX.O
- HN16FA.I HN16FX.O HV16FA.I HV16FX.O
-
-24F NRM.A RN24FA.I RN24FX.O OVR.A RV24FA.I RV24FX.O
- HN24FA.I HN24FX.O HV24FA.I HV24FX.O
-
-32F NRM.A RN32FA.I RN32FX.O OVR.A RV32FA.I RV32FX.O
- HN32FA.I HN32FX.O HV32FA.I HV32FX.O
-
-40F NRM.A RN40FA.I RN40FX.O OVR.A RV40FA.I RV40FX.O
- HN40FA.I HN40FX.O HV40FA.I HV40FX.O
-*/
-
-#define G726_ENCODING_NONE 9999
-
-typedef struct
-{
- const char *conditioning_pcm_file;
- const char *pcm_file;
- const char *conditioning_adpcm_file;
- const char *adpcm_file;
- const char *output_file;
- int rate;
- int compression_law;
- int decompression_law;
-} test_set_t;
-
-static test_set_t itu_test_sets[] =
-{
- /* u-law to u-law tests */
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- "",
- TESTDATA_DIR "DISK1/RESET/16/RN16FM.I",
- TESTDATA_DIR "DISK1/RESET/16/RN16FM.O",
- 16000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- "",
- "",
- TESTDATA_DIR "DISK1/INPUT/I16",
- TESTDATA_DIR "DISK1/RESET/16/RI16FM.O",
- 16000,
- G726_ENCODING_NONE,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- "",
- TESTDATA_DIR "DISK1/RESET/16/RV16FM.I",
- TESTDATA_DIR "DISK1/RESET/16/RV16FM.O",
- 16000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- "",
- TESTDATA_DIR "DISK1/RESET/24/RN24FM.I",
- TESTDATA_DIR "DISK1/RESET/24/RN24FM.O",
- 24000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- "",
- "",
- TESTDATA_DIR "DISK1/INPUT/I24",
- TESTDATA_DIR "DISK1/RESET/24/RI24FM.O",
- 24000,
- G726_ENCODING_NONE,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- "",
- TESTDATA_DIR "DISK1/RESET/24/RV24FM.I",
- TESTDATA_DIR "DISK1/RESET/24/RV24FM.O",
- 24000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- "",
- TESTDATA_DIR "DISK1/RESET/32/RN32FM.I",
- TESTDATA_DIR "DISK1/RESET/32/RN32FM.O",
- 32000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- "",
- "",
- TESTDATA_DIR "DISK1/INPUT/I32",
- TESTDATA_DIR "DISK1/RESET/32/RI32FM.O",
- 32000,
- G726_ENCODING_NONE,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- "",
- TESTDATA_DIR "DISK1/RESET/32/RV32FM.I",
- TESTDATA_DIR "DISK1/RESET/32/RV32FM.O",
- 32000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- "",
- TESTDATA_DIR "DISK1/RESET/40/RN40FM.I",
- TESTDATA_DIR "DISK1/RESET/40/RN40FM.O",
- 40000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- "",
- "",
- TESTDATA_DIR "DISK1/INPUT/I40",
- TESTDATA_DIR "DISK1/RESET/40/RI40FM.O",
- 40000,
- G726_ENCODING_NONE,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- "",
- TESTDATA_DIR "DISK1/RESET/40/RV40FM.I",
- TESTDATA_DIR "DISK1/RESET/40/RV40FM.O",
- 40000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- /* A-law to A-law tests */
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- "",
- TESTDATA_DIR "DISK2/RESET/16/RN16FA.I",
- TESTDATA_DIR "DISK2/RESET/16/RN16FA.O",
- 16000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- "",
- "",
- TESTDATA_DIR "DISK2/INPUT/I16",
- TESTDATA_DIR "DISK2/RESET/16/RI16FA.O",
- 16000,
- G726_ENCODING_NONE,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- "",
- TESTDATA_DIR "DISK2/RESET/16/RV16FA.I",
- TESTDATA_DIR "DISK2/RESET/16/RV16FA.O",
- 16000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- "",
- TESTDATA_DIR "DISK2/RESET/24/RN24FA.I",
- TESTDATA_DIR "DISK2/RESET/24/RN24FA.O",
- 24000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- "",
- "",
- TESTDATA_DIR "DISK2/INPUT/I24",
- TESTDATA_DIR "DISK2/RESET/24/RI24FA.O",
- 24000,
- G726_ENCODING_NONE,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- "",
- TESTDATA_DIR "DISK2/RESET/24/RV24FA.I",
- TESTDATA_DIR "DISK2/RESET/24/RV24FA.O",
- 24000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- "",
- TESTDATA_DIR "DISK2/RESET/32/RN32FA.I",
- TESTDATA_DIR "DISK2/RESET/32/RN32FA.O",
- 32000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- "",
- "",
- TESTDATA_DIR "DISK2/INPUT/I32",
- TESTDATA_DIR "DISK2/RESET/32/RI32FA.O",
- 32000,
- G726_ENCODING_NONE,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- "",
- TESTDATA_DIR "DISK2/RESET/32/RV32FA.I",
- TESTDATA_DIR "DISK2/RESET/32/RV32FA.O",
- 32000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- "",
- TESTDATA_DIR "DISK2/RESET/40/RN40FA.I",
- TESTDATA_DIR "DISK2/RESET/40/RN40FA.O",
- 40000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- "",
- "",
- TESTDATA_DIR "DISK2/INPUT/I40",
- TESTDATA_DIR "DISK2/RESET/40/RI40FA.O",
- 40000,
- G726_ENCODING_NONE,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- "",
- TESTDATA_DIR "DISK2/RESET/40/RV40FA.I",
- TESTDATA_DIR "DISK2/RESET/40/RV40FA.O",
- 40000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- /* u-law to A-law tests */
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- "",
- TESTDATA_DIR "DISK1/RESET/16/RN16FM.I",
- TESTDATA_DIR "DISK1/RESET/16/RN16FC.O",
- 16000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- "",
- TESTDATA_DIR "DISK1/RESET/16/RV16FM.I",
- TESTDATA_DIR "DISK1/RESET/16/RV16FC.O",
- 16000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- "",
- TESTDATA_DIR "DISK1/RESET/24/RN24FM.I",
- TESTDATA_DIR "DISK1/RESET/24/RN24FC.O",
- 24000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- "",
- TESTDATA_DIR "DISK1/RESET/24/RV24FM.I",
- TESTDATA_DIR "DISK1/RESET/24/RV24FC.O",
- 24000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- "",
- TESTDATA_DIR "DISK1/RESET/32/RN32FM.I",
- TESTDATA_DIR "DISK1/RESET/32/RN32FC.O",
- 32000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- "",
- TESTDATA_DIR "DISK1/RESET/32/RV32FM.I",
- TESTDATA_DIR "DISK1/RESET/32/RV32FC.O",
- 32000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- "",
- TESTDATA_DIR "DISK1/RESET/40/RN40FM.I",
- TESTDATA_DIR "DISK1/RESET/40/RN40FC.O",
- 40000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- "",
- TESTDATA_DIR "DISK1/RESET/40/RV40FM.I",
- TESTDATA_DIR "DISK1/RESET/40/RV40FC.O",
- 40000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- /* A-law to u-law tests */
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- "",
- TESTDATA_DIR "DISK2/RESET/16/RN16FA.I",
- TESTDATA_DIR "DISK2/RESET/16/RN16FX.O",
- 16000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- "",
- TESTDATA_DIR "DISK2/RESET/16/RV16FA.I",
- TESTDATA_DIR "DISK2/RESET/16/RV16FX.O",
- 16000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- "",
- TESTDATA_DIR "DISK2/RESET/24/RN24FA.I",
- TESTDATA_DIR "DISK2/RESET/24/RN24FX.O",
- 24000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- "",
- TESTDATA_DIR "DISK2/RESET/24/RV24FA.I",
- TESTDATA_DIR "DISK2/RESET/24/RV24FX.O",
- 24000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- "",
- TESTDATA_DIR "DISK2/RESET/32/RN32FA.I",
- TESTDATA_DIR "DISK2/RESET/32/RN32FX.O",
- 32000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- "",
- TESTDATA_DIR "DISK2/RESET/32/RV32FA.I",
- TESTDATA_DIR "DISK2/RESET/32/RV32FX.O",
- 32000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- "",
- TESTDATA_DIR "DISK2/RESET/40/RN40FA.I",
- TESTDATA_DIR "DISK2/RESET/40/RN40FX.O",
- 40000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- "",
- TESTDATA_DIR "DISK2/RESET/40/RV40FA.I",
- TESTDATA_DIR "DISK2/RESET/40/RV40FX.O",
- 40000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- /* u-law to u-law tests */
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- TESTDATA_DIR "DISK1/HOMING/16/I_INI_16.M",
- TESTDATA_DIR "DISK1/HOMING/16/HN16FM.I",
- TESTDATA_DIR "DISK1/HOMING/16/HN16FM.O",
- 16000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- "",
- TESTDATA_DIR "DISK1/HOMING/16/I_INI_16.M",
- TESTDATA_DIR "DISK1/INPUT/I16",
- TESTDATA_DIR "DISK1/HOMING/16/HI16FM.O",
- 16000,
- G726_ENCODING_NONE,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- TESTDATA_DIR "DISK1/HOMING/16/I_INI_16.M",
- TESTDATA_DIR "DISK1/HOMING/16/HV16FM.I",
- TESTDATA_DIR "DISK1/HOMING/16/HV16FM.O",
- 16000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- TESTDATA_DIR "DISK1/HOMING/24/I_INI_24.M",
- TESTDATA_DIR "DISK1/HOMING/24/HN24FM.I",
- TESTDATA_DIR "DISK1/HOMING/24/HN24FM.O",
- 24000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- "",
- TESTDATA_DIR "DISK1/HOMING/24/I_INI_24.M",
- TESTDATA_DIR "DISK1/INPUT/I24",
- TESTDATA_DIR "DISK1/HOMING/24/HI24FM.O",
- 24000,
- G726_ENCODING_NONE,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- TESTDATA_DIR "DISK1/HOMING/24/I_INI_24.M",
- TESTDATA_DIR "DISK1/HOMING/24/HV24FM.I",
- TESTDATA_DIR "DISK1/HOMING/24/HV24FM.O",
- 24000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- TESTDATA_DIR "DISK1/HOMING/32/I_INI_32.M",
- TESTDATA_DIR "DISK1/HOMING/32/HN32FM.I",
- TESTDATA_DIR "DISK1/HOMING/32/HN32FM.O",
- 32000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- "",
- TESTDATA_DIR "DISK1/HOMING/32/I_INI_32.M",
- TESTDATA_DIR "DISK1/INPUT/I32",
- TESTDATA_DIR "DISK1/HOMING/32/HI32FM.O",
- 32000,
- G726_ENCODING_NONE,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- TESTDATA_DIR "DISK1/HOMING/32/I_INI_32.M",
- TESTDATA_DIR "DISK1/HOMING/32/HV32FM.I",
- TESTDATA_DIR "DISK1/HOMING/32/HV32FM.O",
- 32000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- TESTDATA_DIR "DISK1/HOMING/40/I_INI_40.M",
- TESTDATA_DIR "DISK1/HOMING/40/HN40FM.I",
- TESTDATA_DIR "DISK1/HOMING/40/HN40FM.O",
- 40000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- {
- "",
- "",
- TESTDATA_DIR "DISK1/HOMING/40/I_INI_40.M",
- TESTDATA_DIR "DISK1/INPUT/I40",
- TESTDATA_DIR "DISK1/HOMING/40/HI40FM.O",
- 40000,
- G726_ENCODING_NONE,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- TESTDATA_DIR "DISK1/HOMING/40/I_INI_40.M",
- TESTDATA_DIR "DISK1/HOMING/40/HV40FM.I",
- TESTDATA_DIR "DISK1/HOMING/40/HV40FM.O",
- 40000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ULAW
- },
- /* A-law to A-law tests */
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- TESTDATA_DIR "DISK2/HOMING/16/I_INI_16.A",
- TESTDATA_DIR "DISK2/HOMING/16/HN16FA.I",
- TESTDATA_DIR "DISK2/HOMING/16/HN16FA.O",
- 16000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- "",
- TESTDATA_DIR "DISK2/HOMING/16/I_INI_16.A",
- TESTDATA_DIR "DISK2/INPUT/I16",
- TESTDATA_DIR "DISK2/HOMING/16/HI16FA.O",
- 16000,
- G726_ENCODING_NONE,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- TESTDATA_DIR "DISK2/HOMING/16/I_INI_16.A",
- TESTDATA_DIR "DISK2/HOMING/16/HV16FA.I",
- TESTDATA_DIR "DISK2/HOMING/16/HV16FA.O",
- 16000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- TESTDATA_DIR "DISK2/HOMING/24/I_INI_24.A",
- TESTDATA_DIR "DISK2/HOMING/24/HN24FA.I",
- TESTDATA_DIR "DISK2/HOMING/24/HN24FA.O",
- 24000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- "",
- TESTDATA_DIR "DISK2/HOMING/24/I_INI_24.A",
- TESTDATA_DIR "DISK2/INPUT/I24",
- TESTDATA_DIR "DISK2/HOMING/24/HI24FA.O",
- 24000,
- G726_ENCODING_NONE,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- TESTDATA_DIR "DISK2/HOMING/24/I_INI_24.A",
- TESTDATA_DIR "DISK2/HOMING/24/HV24FA.I",
- TESTDATA_DIR "DISK2/HOMING/24/HV24FA.O",
- 24000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- TESTDATA_DIR "DISK2/HOMING/32/I_INI_32.A",
- TESTDATA_DIR "DISK2/HOMING/32/HN32FA.I",
- TESTDATA_DIR "DISK2/HOMING/32/HN32FA.O",
- 32000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- "",
- TESTDATA_DIR "DISK2/HOMING/32/I_INI_32.A",
- TESTDATA_DIR "DISK2/INPUT/I32",
- TESTDATA_DIR "DISK2/HOMING/32/HI32FA.O",
- 32000,
- G726_ENCODING_NONE,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- TESTDATA_DIR "DISK2/HOMING/32/I_INI_32.A",
- TESTDATA_DIR "DISK2/HOMING/32/HV32FA.I",
- TESTDATA_DIR "DISK2/HOMING/32/HV32FA.O",
- 32000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- TESTDATA_DIR "DISK2/HOMING/40/I_INI_40.A",
- TESTDATA_DIR "DISK2/HOMING/40/HN40FA.I",
- TESTDATA_DIR "DISK2/HOMING/40/HN40FA.O",
- 40000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- {
- "",
- "",
- TESTDATA_DIR "DISK2/HOMING/40/I_INI_40.A",
- TESTDATA_DIR "DISK2/INPUT/I40",
- TESTDATA_DIR "DISK2/HOMING/40/HI40FA.O",
- 40000,
- G726_ENCODING_NONE,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- TESTDATA_DIR "DISK2/HOMING/40/I_INI_40.A",
- TESTDATA_DIR "DISK2/HOMING/40/HV40FA.I",
- TESTDATA_DIR "DISK2/HOMING/40/HV40FA.O",
- 40000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ALAW
- },
- /* u-law to A-law tests */
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- TESTDATA_DIR "DISK2/HOMING/16/I_INI_16.A",
- TESTDATA_DIR "DISK1/HOMING/16/HN16FM.I",
- TESTDATA_DIR "DISK1/HOMING/16/HN16FC.O",
- 16000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- TESTDATA_DIR "DISK2/HOMING/16/I_INI_16.A",
- TESTDATA_DIR "DISK1/HOMING/16/HV16FM.I",
- TESTDATA_DIR "DISK1/HOMING/16/HV16FC.O",
- 16000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- TESTDATA_DIR "DISK2/HOMING/24/I_INI_24.A",
- TESTDATA_DIR "DISK1/HOMING/24/HN24FM.I",
- TESTDATA_DIR "DISK1/HOMING/24/HN24FC.O",
- 24000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- TESTDATA_DIR "DISK2/HOMING/24/I_INI_24.A",
- TESTDATA_DIR "DISK1/HOMING/24/HV24FM.I",
- TESTDATA_DIR "DISK1/HOMING/24/HV24FC.O",
- 24000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- TESTDATA_DIR "DISK2/HOMING/32/I_INI_32.A",
- TESTDATA_DIR "DISK1/HOMING/32/HN32FM.I",
- TESTDATA_DIR "DISK1/HOMING/32/HN32FC.O",
- 32000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- TESTDATA_DIR "DISK2/HOMING/32/I_INI_32.A",
- TESTDATA_DIR "DISK1/HOMING/32/HV32FM.I",
- TESTDATA_DIR "DISK1/HOMING/32/HV32FC.O",
- 32000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/NRM.M",
- TESTDATA_DIR "DISK2/HOMING/40/I_INI_40.A",
- TESTDATA_DIR "DISK1/HOMING/40/HN40FM.I",
- TESTDATA_DIR "DISK1/HOMING/40/HN40FC.O",
- 40000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- {
- TESTDATA_DIR "DISK1/PCM_INIT.M",
- TESTDATA_DIR "DISK1/INPUT/OVR.M",
- TESTDATA_DIR "DISK2/HOMING/40/I_INI_40.A",
- TESTDATA_DIR "DISK1/HOMING/40/HV40FM.I",
- TESTDATA_DIR "DISK1/HOMING/40/HV40FC.O",
- 40000,
- G726_ENCODING_ULAW,
- G726_ENCODING_ALAW
- },
- /* A-law to u-law tests */
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- TESTDATA_DIR "DISK1/HOMING/16/I_INI_16.M",
- TESTDATA_DIR "DISK2/HOMING/16/HN16FA.I",
- TESTDATA_DIR "DISK2/HOMING/16/HN16FX.O",
- 16000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- TESTDATA_DIR "DISK1/HOMING/16/I_INI_16.M",
- TESTDATA_DIR "DISK2/HOMING/16/HV16FA.I",
- TESTDATA_DIR "DISK2/HOMING/16/HV16FX.O",
- 16000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- TESTDATA_DIR "DISK1/HOMING/24/I_INI_24.M",
- TESTDATA_DIR "DISK2/HOMING/24/HN24FA.I",
- TESTDATA_DIR "DISK2/HOMING/24/HN24FX.O",
- 24000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- TESTDATA_DIR "DISK1/HOMING/24/I_INI_24.M",
- TESTDATA_DIR "DISK2/HOMING/24/HV24FA.I",
- TESTDATA_DIR "DISK2/HOMING/24/HV24FX.O",
- 24000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- TESTDATA_DIR "DISK1/HOMING/32/I_INI_32.M",
- TESTDATA_DIR "DISK2/HOMING/32/HN32FA.I",
- TESTDATA_DIR "DISK2/HOMING/32/HN32FX.O",
- 32000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- TESTDATA_DIR "DISK1/HOMING/32/I_INI_32.M",
- TESTDATA_DIR "DISK2/HOMING/32/HV32FA.I",
- TESTDATA_DIR "DISK2/HOMING/32/HV32FX.O",
- 32000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/NRM.A",
- TESTDATA_DIR "DISK1/HOMING/40/I_INI_40.M",
- TESTDATA_DIR "DISK2/HOMING/40/HN40FA.I",
- TESTDATA_DIR "DISK2/HOMING/40/HN40FX.O",
- 40000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- TESTDATA_DIR "DISK2/PCM_INIT.A",
- TESTDATA_DIR "DISK2/INPUT/OVR.A",
- TESTDATA_DIR "DISK1/HOMING/40/I_INI_40.M",
- TESTDATA_DIR "DISK2/HOMING/40/HV40FA.I",
- TESTDATA_DIR "DISK2/HOMING/40/HV40FX.O",
- 40000,
- G726_ENCODING_ALAW,
- G726_ENCODING_ULAW
- },
- {
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0,
- 0
- }
-};
-
-static int hex_get(char *s)
-{
- int i;
- int value;
- int x;
-
- for (value = i = 0; i < 2; i++)
- {
- x = *s++ - 0x30;
- if (x > 9)
- x -= 0x07;
- if (x > 15)
- x -= 0x20;
- if (x < 0 || x > 15)
- return -1;
- value <<= 4;
- value |= x;
- }
- return value;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int get_vector(FILE *file, uint8_t vec[])
-{
- char buf[132 + 1];
- char *s;
- int i;
- int value;
-
- while (fgets(buf, 133, file))
- {
- s = buf;
- i = 0;
- while ((value = hex_get(s)) >= 0)
- {
- vec[i++] = value;
- s += 2;
- }
- return i;
- }
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int get_test_vector(const char *file, uint8_t buf[], int max_len)
-{
- int octets;
- int i;
- int sum;
- FILE *infile;
-
- if ((infile = fopen(file, "r")) == NULL)
- {
- fprintf(stderr, " Failed to open '%s'\n", file);
- exit(2);
- }
- octets = 0;
- while ((i = get_vector(infile, buf + octets)) > 0)
- octets += i;
- fclose(infile);
- /* The last octet is a sumcheck, so the real data octets are one less than
- the total we have */
- octets--;
- /* Test the checksum */
- for (sum = i = 0; i < octets; i++)
- sum += buf[i];
- if (sum%255 != (int) buf[i])
- {
- fprintf(stderr, " Sumcheck failed in '%s' - %x %x\n", file, sum%255, buf[i]);
- exit(2);
- }
- return octets;
-}
-/*- End of function --------------------------------------------------------*/
-
-int main(int argc, char *argv[])
-{
- g726_state_t enc_state;
- g726_state_t dec_state;
- int len2;
- int len3;
- int i;
- int test;
- int bits_per_code;
- int itutests;
- int bit_rate;
- int bad_samples;
- AFfilehandle inhandle;
- AFfilehandle outhandle;
- AFfilesetup filesetup;
- int16_t amp[1024];
- int frames;
- int outframes;
- int conditioning_samples;
- int samples;
- int conditioning_adpcm;
- int adpcm;
- int packing;
- float x;
-
- i = 1;
- bit_rate = 32000;
- itutests = TRUE;
- packing = G726_PACKING_NONE;
- while (argc > i)
- {
- if (strcmp(argv[i], "-16") == 0)
- {
- bit_rate = 16000;
- itutests = FALSE;
- i++;
- }
- else if (strcmp(argv[i], "-24") == 0)
- {
- bit_rate = 24000;
- itutests = FALSE;
- i++;
- }
- else if (strcmp(argv[i], "-32") == 0)
- {
- bit_rate = 32000;
- itutests = FALSE;
- i++;
- }
- else if (strcmp(argv[i], "-40") == 0)
- {
- bit_rate = 40000;
- itutests = FALSE;
- i++;
- }
- else if (strcmp(argv[i], "-l") == 0)
- {
- packing = G726_PACKING_LEFT;
- i++;
- }
- else if (strcmp(argv[i], "-r") == 0)
- {
- packing = G726_PACKING_RIGHT;
- i++;
- }
- else
- {
- fprintf(stderr, "Unknown parameter %s specified.\n", argv[i]);
- exit(2);
- }
- }
-
- len2 = 0;
- conditioning_samples = 0;
- if (itutests)
- {
- for (test = 0; itu_test_sets[test].rate; test++)
- {
- printf("Test %2d: '%s' + '%s'\n"
- " -> '%s' + '%s'\n"
- " -> '%s' [%d, %d, %d]\n",
- test,
- itu_test_sets[test].conditioning_pcm_file,
- itu_test_sets[test].pcm_file,
- itu_test_sets[test].conditioning_adpcm_file,
- itu_test_sets[test].adpcm_file,
- itu_test_sets[test].output_file,
- itu_test_sets[test].rate,
- itu_test_sets[test].compression_law,
- itu_test_sets[test].decompression_law);
- switch (itu_test_sets[test].rate)
- {
- case 16000:
- bits_per_code = 2;
- break;
- case 24000:
- bits_per_code = 3;
- break;
- case 32000:
- default:
- bits_per_code = 4;
- break;
- case 40000:
- bits_per_code = 5;
- break;
- }
- if (itu_test_sets[test].compression_law != G726_ENCODING_NONE)
- {
- /* Test the encode side */
- g726_init(&enc_state, itu_test_sets[test].rate, itu_test_sets[test].compression_law, G726_PACKING_NONE);
- if (itu_test_sets[test].conditioning_pcm_file[0])
- {
- conditioning_samples = get_test_vector(itu_test_sets[test].conditioning_pcm_file, xlaw, MAX_TEST_VECTOR_LEN);
- printf("Test %d: Homing %d samples at %dbps\n", test, conditioning_samples, itu_test_sets[test].rate);
- }
- else
- {
- conditioning_samples = 0;
- }
- samples = get_test_vector(itu_test_sets[test].pcm_file, xlaw + conditioning_samples, MAX_TEST_VECTOR_LEN);
- memcpy(itudata, xlaw, samples + conditioning_samples);
- printf("Test %d: Compressing %d samples at %dbps\n", test, samples, itu_test_sets[test].rate);
- len2 = g726_encode(&enc_state, adpcmdata, itudata, conditioning_samples + samples);
- }
- /* Test the decode side */
- g726_init(&dec_state, itu_test_sets[test].rate, itu_test_sets[test].decompression_law, G726_PACKING_NONE);
- if (itu_test_sets[test].conditioning_adpcm_file[0])
- {
- conditioning_adpcm = get_test_vector(itu_test_sets[test].conditioning_adpcm_file, unpacked, MAX_TEST_VECTOR_LEN);
- printf("Test %d: Homing %d octets at %dbps\n", test, conditioning_adpcm, itu_test_sets[test].rate);
- }
- else
- {
- conditioning_adpcm = 0;
- }
- adpcm = get_test_vector(itu_test_sets[test].adpcm_file, unpacked + conditioning_adpcm, MAX_TEST_VECTOR_LEN);
- if (itu_test_sets[test].compression_law != G726_ENCODING_NONE)
- {
- /* Test our compressed version against the reference compressed version */
- printf("Test %d: Compressed data check - %d/%d octets\n", test, conditioning_adpcm + adpcm, len2);
- if (conditioning_adpcm + adpcm == len2)
- {
- for (bad_samples = 0, i = conditioning_samples; i < len2; i++)
- {
- if (adpcmdata[i] != unpacked[i])
- {
- bad_samples++;
- printf("Test %d: Compressed mismatch %d %x %x\n", test, i, adpcmdata[i], unpacked[i]);
- }
- }
- if (bad_samples > 0)
- {
- printf("Test failed\n");
- exit(2);
- }
- printf("Test passed\n");
- }
- else
- {
- printf("Test %d: Length mismatch - ref = %d, processed = %d\n", test, conditioning_adpcm + adpcm, len2);
- exit(2);
- }
- }
-
- len3 = g726_decode(&dec_state, outdata, unpacked, conditioning_adpcm + adpcm);
-
- /* Get the output reference data */
- samples = get_test_vector(itu_test_sets[test].output_file, xlaw, MAX_TEST_VECTOR_LEN);
- memcpy(itu_ref, xlaw, samples);
- /* Test our decompressed version against the reference decompressed version */
- printf("Test %d: Decompressed data check - %d/%d samples\n", test, samples, len3 - conditioning_adpcm);
- if (samples == len3 - conditioning_adpcm)
- {
- for (bad_samples = 0, i = 0; i < len3; i++)
- {
- if (itu_ref[i] != ((uint8_t *) outdata)[i + conditioning_adpcm])
- {
- bad_samples++;
- printf("Test %d: Decompressed mismatch %d %x %x\n", test, i, itu_ref[i], ((uint8_t *) outdata)[i + conditioning_adpcm]);
- }
- }
- if (bad_samples > 0)
- {
- printf("Test failed\n");
- exit(2);
- }
- printf("Test passed\n");
- }
- else
- {
- printf("Test %d: Length mismatch - ref = %d, processed = %d\n", test, samples, len3 - conditioning_adpcm);
- exit(2);
- }
- }
-
- printf("Tests passed.\n");
- }
- else
- {
- if ((inhandle = afOpenFile(IN_FILE_NAME, "r", 0)) == AF_NULL_FILEHANDLE)
- {
- printf(" Cannot open wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetFrameSize(inhandle, AF_DEFAULT_TRACK, 1)) != 2.0)
- {
- printf(" Unexpected frame size in wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetRate(inhandle, AF_DEFAULT_TRACK)) != (float) SAMPLE_RATE)
- {
- printf(" Unexpected sample rate in wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetChannels(inhandle, AF_DEFAULT_TRACK)) != 1.0)
- {
- printf(" Unexpected number of channels in wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if ((filesetup = afNewFileSetup()) == AF_NULL_FILESETUP)
- {
- fprintf(stderr, " Failed to create file setup\n");
- exit(2);
- }
- afInitSampleFormat(filesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16);
- afInitRate(filesetup, AF_DEFAULT_TRACK, (float) SAMPLE_RATE);
- afInitFileFormat(filesetup, AF_FILE_WAVE);
- afInitChannels(filesetup, AF_DEFAULT_TRACK, 1);
-
- outhandle = afOpenFile(OUT_FILE_NAME, "w", filesetup);
- if (outhandle == AF_NULL_FILEHANDLE)
- {
- fprintf(stderr, " Cannot create wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
-
- printf("ADPCM packing is %d\n", packing);
- g726_init(&enc_state, bit_rate, G726_ENCODING_LINEAR, packing);
- g726_init(&dec_state, bit_rate, G726_ENCODING_LINEAR, packing);
-
- while ((frames = afReadFrames(inhandle, AF_DEFAULT_TRACK, amp, 159)))
- {
- adpcm = g726_encode(&enc_state, adpcmdata, amp, frames);
- frames = g726_decode(&dec_state, amp, adpcmdata, adpcm);
- outframes = afWriteFrames(outhandle, AF_DEFAULT_TRACK, amp, frames);
- }
- if (afCloseFile(inhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if (afCloseFile(outhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
- afFreeFileSetup(filesetup);
- printf("'%s' transcoded to '%s' at %dbps.\n", IN_FILE_NAME, OUT_FILE_NAME, bit_rate);
- }
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * gsm0610_tests.c - Test the GSM 06.10 FR codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: gsm0610_tests.c,v 1.8 2007/11/10 11:14:58 steveu Exp $
- */
-
-/*! \file */
-
-/*! \page gsm0610_tests_page GSM 06.10 full rate codec tests
-\section gsm0610_tests_page_sec_1 What does it do?
-Two sets of tests are performed:
- - The tests defined in the GSM 06.10 specification, using the test data files supplied with
- the specification.
- - A generally audio quality test, consisting of compressing and decompressing a speeech
- file for audible comparison.
-
-The speech file should be recorded at 16 bits/sample, 8000 samples/second, and named
-"pre_gsm0610.wav".
-
-\section gsm0610_tests_page_sec_2 How is it used?
-To perform the tests in the GSM 06.10 specification you need to obtain the test data files from the
-specification. These are copyright material, and so cannot be distributed with this test software.
-They can, however, be freely downloaded from the ETSI web site.
-
-The files, containing test vectors, which are supplied with the GSM 06.10 specification, should be
-copied to etsitests/gsm0610/unpacked so the files are arranged in the following directories.
-
-./fr_A:
- Seq01-A.cod Seq01-A.inp Seq01-A.out
- Seq02-A.cod Seq02-A.inp Seq02-A.out
- Seq03-A.cod Seq03-A.inp Seq03-A.out
- Seq04-A.cod Seq04-A.inp Seq04-A.out
- Seq05-A.out
-
-./fr_L:
- Seq01.cod Seq01.inp Seq01.out
- Seq02.cod Seq02.inp Seq02.out
- Seq03.cod Seq03.inp Seq03.out
- Seq04.cod Seq04.inp Seq04.out
- Seq05.cod Seq05.out
-
-./fr_U:
- Seq01-U.cod Seq01-U.inp Seq01-U.out
- Seq02-U.cod Seq02-U.inp Seq02-U.out
- Seq03-U.cod Seq03-U.inp Seq03-U.out
- Seq04-U.cod Seq04-U.inp Seq04-U.out
- Seq05-U.out
-
-./fr_homing_A:
- Homing01_A.out
- Seq01H_A.cod Seq01H_A.inp Seq01H_A.out
- Seq02H_A.cod Seq02H_A.inp Seq02H_A.out
- Seq03H_A.cod Seq03H_A.inp Seq03H_A.out
- Seq04H_A.cod Seq04H_A.inp Seq04H_A.out
- Seq05H_A.out
- Seq06H_A.cod Seq06H_A.inp
-
-./fr_homing_L:
- Homing01.cod Homing01.out
- Seq01h.cod Seq01h.inp Seq01h.out
- Seq02h.cod Seq02h.inp Seq02h.out
- Seq03h.cod Seq03h.inp Seq03h.out
- Seq04h.cod Seq04h.inp Seq04h.out
- Seq05h.cod Seq05h.out
- Seq06h.cod Seq06h.inp
-
-./fr_homing_U:
- Homing01_U.out
- Seq01H_U.cod Seq01H_U.inp Seq01H_U.out
- Seq02H_U.cod Seq02H_U.inp Seq02H_U.out
- Seq03H_U.cod Seq03H_U.inp Seq03H_U.out
- Seq04H_U.cod Seq04H_U.inp Seq04H_U.out
- Seq05H_U.out
- Seq06H_U.cod Seq06H_U.inp
-
-./fr_sync_A:
- Seqsync_A.inp
- Sync000_A.cod --to-- Sync159_A.cod
-
-./fr_sync_L:
- Bitsync.inp
- Seqsync.inp
- Sync000.cod --to-- Sync159.cod
-
-./fr_sync_U:
- Seqsync_U.inp
- Sync000_U.cod --to-- Sync159_U.cod
-
-This is different from the directory structure in which they are supplied. Also, the files names are a little
-different. The supplied names are messy, and inconsistent across the sets. The names required by these tests
-just clean up these inconsistencies. Note that you will need a Windows machine to unpack some of the supplied
-files.
-
-To perform a general audio quality test, gsm0610_tests should be run. The file ../localtests/short_nb_voice.wav
-will be compressed to GSM 06.10 data, decompressed, and the resulting audio stored in post_gsm0610.wav.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <ctype.h>
-#include <audiofile.h>
-
-#include "voipcodecs.h"
-
-#define BLOCK_LEN 160
-
-#define TEST_DIR "../etsitests/gsm0610/unpacked/fr_"
-
-#define IN_FILE_NAME "../localtests/short_nb_voice.wav"
-#define OUT_FILE_NAME "post_gsm0610.wav"
-
-#define HIST_LEN 1000
-
-uint8_t law_in_vector[1000000];
-int16_t in_vector[1000000];
-uint16_t code_vector_buf[1000000];
-uint8_t code_vector[1000000];
-uint8_t ref_code_vector[1000000];
-uint8_t decoder_code_vector[1000000];
-uint8_t law_out_vector[1000000];
-int16_t out_vector[1000000];
-int16_t ref_out_vector[1000000];
-uint8_t ref_law_out_vector[1000000];
-int vector_len;
-
-static int get_test_vector(int full, int disk, const char *name)
-{
- char buf[500];
- int in;
- int len;
- int i;
-
- if (full)
- {
- sprintf(buf, "%s%c/%s.inp", TEST_DIR, 'L', name);
- if ((in = open(buf, O_RDONLY)) < 0)
- {
- fprintf(stderr, "Cannot open %s\n", buf);
- exit(2);
- }
- len = read(in, in_vector, 1000000);
- close(in);
- len /= sizeof(int16_t);
- vector_len = len;
- }
-
- sprintf(buf, "%s%c/%s.out", TEST_DIR, 'L', name);
- if ((in = open(buf, O_RDONLY)) < 0)
- {
- fprintf(stderr, "Cannot open %s\n", buf);
- exit(2);
- }
- len = read(in, ref_out_vector, 1000000);
- close(in);
- len /= sizeof(int16_t);
- if (full)
- {
- if (len != vector_len)
- {
- fprintf(stderr, "Input and reference vector lengths do not match - %d %d\n", vector_len, len);
- exit(2);
- }
- }
- else
- {
- vector_len = len;
- }
-
- sprintf(buf, "%s%c/%s.cod", TEST_DIR, 'L', name);
- if ((in = open(buf, O_RDONLY)) < 0)
- {
- fprintf(stderr, "Cannot open %s\n", buf);
- exit(2);
- }
- len = read(in, code_vector_buf, 1000000);
- close(in);
- len /= sizeof(int16_t);
- for (i = 0; i < len; i++)
- {
- ref_code_vector[i] = code_vector_buf[i];
- decoder_code_vector[i] = code_vector_buf[i];
- }
- if (len*BLOCK_LEN != vector_len*76)
- {
- fprintf(stderr, "Input and code vector lengths do not match - %d %d\n", vector_len, len);
- exit(2);
- }
-
- return len;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int get_law_test_vector(int full, int law, const char *name)
-{
- char buf[500];
- int in;
- int len;
- int i;
- int law_uc;
-
- law_uc = toupper(law);
-
- if (full)
- {
- sprintf(buf, "%s%c/%s-%c.inp", TEST_DIR, law_uc, name, law_uc);
- if ((in = open(buf, O_RDONLY)) < 0)
- {
- fprintf(stderr, "Cannot open %s\n", buf);
- exit(2);
- }
- len = read(in, law_in_vector, 1000000);
- close(in);
- vector_len = len;
-
- sprintf(buf, "%s%c/%s-%c.cod", TEST_DIR, law_uc, name, law_uc);
- if ((in = open(buf, O_RDONLY)) < 0)
- {
- fprintf(stderr, "Cannot open %s\n", buf);
- exit(2);
- }
- len = read(in, code_vector_buf, 1000000);
- close(in);
- len /= sizeof(int16_t);
- for (i = 0; i < len; i++)
- ref_code_vector[i] = code_vector_buf[i];
- if (len*BLOCK_LEN != vector_len*76)
- {
- fprintf(stderr, "Input and code vector lengths do not match - %d %d\n", vector_len, len);
- exit(2);
- }
- }
-
- sprintf(buf, "%s%c/%s-%c.out", TEST_DIR, law_uc, name, law_uc);
- if ((in = open(buf, O_RDONLY)) < 0)
- {
- fprintf(stderr, "Cannot open %s\n", buf);
- exit(2);
- }
- len = read(in, ref_law_out_vector, 1000000);
- close(in);
- if (full)
- {
- if (len != vector_len)
- {
- fprintf(stderr, "Input and reference vector lengths do not match - %d %d\n", vector_len, len);
- exit(2);
- }
- }
- else
- {
- vector_len = len;
- }
-
- sprintf(buf, "%s%c/%s.cod", TEST_DIR, 'L', name);
- if ((in = open(buf, O_RDONLY)) < 0)
- {
- fprintf(stderr, "Cannot open %s\n", buf);
- exit(2);
- }
- len = read(in, code_vector_buf, 1000000);
- close(in);
- len /= sizeof(int16_t);
- for (i = 0; i < len; i++)
- decoder_code_vector[i] = code_vector_buf[i];
-
- return len;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int perform_linear_test(int full, int disk, const char *name)
-{
- gsm0610_state_t *gsm0610_enc_state;
- gsm0610_state_t *gsm0610_dec_state;
- int i;
- int xxx;
- int mismatches;
-
- printf("Performing linear test '%s' from disk %d\n", name, disk);
-
- get_test_vector(full, disk, name);
-
- if (full)
- {
- if ((gsm0610_enc_state = gsm0610_init(NULL, GSM0610_PACKING_NONE)) == NULL)
- {
- fprintf(stderr, " Cannot create encoder\n");
- exit(2);
- }
- xxx = gsm0610_encode(gsm0610_enc_state, code_vector, in_vector, vector_len/BLOCK_LEN);
-
- printf("Check code vector of length %d\n", xxx);
- for (i = 0, mismatches = 0; i < xxx; i++)
- {
- if (code_vector[i] != ref_code_vector[i])
- {
- printf("%8d/%3d: %6d %6d\n", i/76, i%76, code_vector[i], ref_code_vector[i]);
- mismatches++;
- }
- }
- gsm0610_release(gsm0610_enc_state);
- if (mismatches)
- {
- printf("Test failed: %d of %d samples mismatch\n", mismatches, xxx);
- exit(2);
- }
- printf("Test passed\n");
- }
-
- if ((gsm0610_dec_state = gsm0610_init(NULL, GSM0610_PACKING_NONE)) == NULL)
- {
- fprintf(stderr, " Cannot create decoder\n");
- exit(2);
- }
- xxx = gsm0610_decode(gsm0610_dec_state, out_vector, decoder_code_vector, vector_len/BLOCK_LEN);
- printf("Check output vector of length %d\n", vector_len);
- for (i = 0, mismatches = 0; i < vector_len; i++)
- {
- if (out_vector[i] != ref_out_vector[i])
- {
- printf("%8d: %6d %6d\n", i, out_vector[i], ref_out_vector[i]);
- mismatches++;
- }
- }
- if (mismatches)
- {
- printf("Test failed: %d of %d samples mismatch\n", mismatches, vector_len);
- exit(2);
- }
- gsm0610_release(gsm0610_dec_state);
- printf("Test passed\n");
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int perform_law_test(int full, int law, const char *name)
-{
- gsm0610_state_t *gsm0610_enc_state;
- gsm0610_state_t *gsm0610_dec_state;
- int i;
- int xxx;
- int mismatches;
-
- if (law == 'a')
- printf("Performing A-law test '%s'\n", name);
- else
- printf("Performing u-law test '%s'\n", name);
-
- get_law_test_vector(full, law, name);
-
- if (full)
- {
- if ((gsm0610_enc_state = gsm0610_init(NULL, GSM0610_PACKING_NONE)) == NULL)
- {
- fprintf(stderr, " Cannot create encoder\n");
- exit(2);
- }
- if (law == 'a')
- {
- for (i = 0; i < vector_len; i++)
- in_vector[i] = alaw_to_linear(law_in_vector[i]);
- }
- else
- {
- for (i = 0; i < vector_len; i++)
- in_vector[i] = ulaw_to_linear(law_in_vector[i]);
- }
- xxx = gsm0610_encode(gsm0610_enc_state, code_vector, in_vector, vector_len/BLOCK_LEN);
-
- printf("Check code vector of length %d\n", xxx);
- for (i = 0, mismatches = 0; i < xxx; i++)
- {
- if (code_vector[i] != ref_code_vector[i])
- {
- printf("%8d/%3d: %6d %6d %6d\n", i/76, i%76, code_vector[i], ref_code_vector[i], decoder_code_vector[i]);
- mismatches++;
- }
- }
- if (mismatches)
- {
- printf("Test failed: %d of %d samples mismatch\n", mismatches, xxx);
- exit(2);
- }
- printf("Test passed\n");
- gsm0610_release(gsm0610_enc_state);
- }
-
- if ((gsm0610_dec_state = gsm0610_init(NULL, GSM0610_PACKING_NONE)) == NULL)
- {
- fprintf(stderr, " Cannot create decoder\n");
- exit(2);
- }
- xxx = gsm0610_decode(gsm0610_dec_state, out_vector, decoder_code_vector, vector_len/BLOCK_LEN);
- if (law == 'a')
- {
- for (i = 0; i < vector_len; i++)
- law_out_vector[i] = linear_to_alaw(out_vector[i]);
- }
- else
- {
- for (i = 0; i < vector_len; i++)
- law_out_vector[i] = linear_to_ulaw(out_vector[i]);
- }
- printf("Check output vector of length %d\n", vector_len);
- for (i = 0, mismatches = 0; i < vector_len; i++)
- {
- if (law_out_vector[i] != ref_law_out_vector[i])
- {
- printf("%8d: %6d %6d\n", i, law_out_vector[i], ref_law_out_vector[i]);
- mismatches++;
- }
- }
- if (mismatches)
- {
- printf("Test failed: %d of %d samples mismatch\n", mismatches, vector_len);
- exit(2);
- }
- gsm0610_release(gsm0610_dec_state);
- printf("Test passed\n");
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int repack_gsm0610_voip_to_wav49(uint8_t c[], const uint8_t d[])
-{
- gsm0610_frame_t frame[2];
- int n;
-
- n = gsm0610_unpack_voip(&frame[0], d);
- gsm0610_unpack_voip(&frame[1], d + n);
- n = gsm0610_pack_wav49(c, frame);
- return n;
-}
-/*- End of function --------------------------------------------------------*/
-
-static int repack_gsm0610_wav49_to_voip(uint8_t d[], const uint8_t c[])
-{
- gsm0610_frame_t frame[2];
- int n[2];
-
- gsm0610_unpack_wav49(frame, c);
- n[0] = gsm0610_pack_voip(d, &frame[0]);
- n[1] = gsm0610_pack_voip(d + n[0], &frame[1]);
- return n[0] + n[1];
-}
-/*- End of function --------------------------------------------------------*/
-
-static int perform_pack_unpack_test(void)
-{
- uint8_t a[66];
- uint8_t b[66];
- uint8_t c[66];
- int i;
- int j;
-
- printf("Performing packing/unpacking tests (not part of the ETSI conformance tests).\n");
- /* Try trans-packing a lot of random data looking for before/after mismatch. */
- for (j = 0; j < 1000; j++)
- {
- for (i = 0; i < 65; i++)
- a[i] = rand();
- repack_gsm0610_wav49_to_voip(b, a);
- repack_gsm0610_voip_to_wav49(c, b);
- if (memcmp(a, c, 65))
- {
- printf("Test failed: data mismatch\n");
- exit(2);
- }
-
- for (i = 0; i < 66; i++)
- a[i] = rand();
- /* Insert the magic code */
- a[0] = (a[0] & 0xF) | 0xD0;
- a[33] = (a[33] & 0xF) | 0xD0;
- repack_gsm0610_voip_to_wav49(b, a);
- repack_gsm0610_wav49_to_voip(c, b);
- //for (i = 0; i < 66; i++)
- // printf("%2d: 0x%02X 0x%02X\n", i, a[i], c[i]);
- if (memcmp(a, c, 66))
- {
- printf("Test failed: data mismatch\n");
- exit(2);
- }
- }
- printf("Test passed\n");
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-
-int main(int argc, char *argv[])
-{
- AFfilehandle inhandle;
- AFfilehandle outhandle;
- AFfilesetup filesetup;
- int frames;
- int outframes;
- float x;
- int16_t pre_amp[HIST_LEN];
- int16_t post_amp[HIST_LEN];
- uint8_t gsm0610_data[HIST_LEN];
- gsm0610_state_t *gsm0610_enc_state;
- gsm0610_state_t *gsm0610_dec_state;
- int etsitests;
- int packing;
- int i;
-
- etsitests = TRUE;
- packing = GSM0610_PACKING_NONE;
- for (i = 1; i < argc; i++)
- {
- if (strcmp(argv[i], "-l") == 0)
- {
- etsitests = FALSE;
- continue;
- }
- if (strcmp(argv[i], "-p") == 0)
- {
- packing = atoi(argv[++i]);
- continue;
- }
- fprintf(stderr, "Unknown parameter %s specified.\n", argv[i]);
- exit(2);
- }
-
- if (etsitests)
- {
- perform_linear_test(TRUE, 1, "Seq01");
- perform_linear_test(TRUE, 1, "Seq02");
- perform_linear_test(TRUE, 1, "Seq03");
- perform_linear_test(TRUE, 1, "Seq04");
- perform_linear_test(FALSE, 1, "Seq05");
- perform_law_test(TRUE, 'a', "Seq01");
- perform_law_test(TRUE, 'a', "Seq02");
- perform_law_test(TRUE, 'a', "Seq03");
- perform_law_test(TRUE, 'a', "Seq04");
- perform_law_test(FALSE, 'a', "Seq05");
- perform_law_test(TRUE, 'u', "Seq01");
- perform_law_test(TRUE, 'u', "Seq02");
- perform_law_test(TRUE, 'u', "Seq03");
- perform_law_test(TRUE, 'u', "Seq04");
- perform_law_test(FALSE, 'u', "Seq05");
- /* This is not actually an ETSI test */
- perform_pack_unpack_test();
-
- printf("Tests passed.\n");
- }
- else
- {
- if ((inhandle = afOpenFile(IN_FILE_NAME, "r", 0)) == AF_NULL_FILEHANDLE)
- {
- printf(" Cannot open wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetFrameSize(inhandle, AF_DEFAULT_TRACK, 1)) != 2.0)
- {
- printf(" Unexpected frame size in wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetRate(inhandle, AF_DEFAULT_TRACK)) != (float) SAMPLE_RATE)
- {
- printf(" Unexpected sample rate in wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if ((x = afGetChannels(inhandle, AF_DEFAULT_TRACK)) != 1.0)
- {
- printf(" Unexpected number of channels in wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if ((filesetup = afNewFileSetup()) == AF_NULL_FILESETUP)
- {
- fprintf(stderr, " Failed to create file setup\n");
- exit(2);
- }
- afInitSampleFormat(filesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16);
- afInitRate(filesetup, AF_DEFAULT_TRACK, (float) SAMPLE_RATE);
- afInitFileFormat(filesetup, AF_FILE_WAVE);
- afInitChannels(filesetup, AF_DEFAULT_TRACK, 1);
-
- outhandle = afOpenFile(OUT_FILE_NAME, "w", filesetup);
- if (outhandle == AF_NULL_FILEHANDLE)
- {
- fprintf(stderr, " Cannot create wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
-
- if ((gsm0610_enc_state = gsm0610_init(NULL, packing)) == NULL)
- {
- fprintf(stderr, " Cannot create encoder\n");
- exit(2);
- }
-
- if ((gsm0610_dec_state = gsm0610_init(NULL, packing)) == NULL)
- {
- fprintf(stderr, " Cannot create decoder\n");
- exit(2);
- }
-
- while ((frames = afReadFrames(inhandle, AF_DEFAULT_TRACK, pre_amp, 2*BLOCK_LEN)))
- {
- gsm0610_encode(gsm0610_enc_state, gsm0610_data, pre_amp, (packing == GSM0610_PACKING_WAV49) ? 1 : 2);
- gsm0610_decode(gsm0610_dec_state, post_amp, gsm0610_data, (packing == GSM0610_PACKING_WAV49) ? 1 : 2);
- outframes = afWriteFrames(outhandle, AF_DEFAULT_TRACK, post_amp, frames);
- }
-
- if (afCloseFile(inhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", IN_FILE_NAME);
- exit(2);
- }
- if (afCloseFile(outhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
- afFreeFileSetup(filesetup);
- gsm0610_release(gsm0610_enc_state);
- gsm0610_release(gsm0610_dec_state);
- }
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * ima_adpcm_tests.c - Test the IMA/DVI/Intel ADPCM encode and decode
- * software.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2004 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id$
- */
-
-/*! \file */
-
-/*! \page ima_adpcm_tests_page IMA ADPCM tests
-\section ima_adpcm_tests_page_sec_1 What does it do?
-To perform a general audio quality test, ima_adpcm_tests should be run. The test file
-../localtests/short_nb_voice.wav will be compressed to the specified bit rate,
-decompressed, and the resulting audio stored in post_ima_adpcm.wav. A simple SNR test
-is automatically performed. Listening tests may be used for a more detailed evaluation
-of the degradation in quality caused by the compression.
-
-\section ima_adpcm_tests_page_sec_2 How is it used?
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <time.h>
-#include <audiofile.h>
-
-#include "voipcodecs.h"
-
-#define IN_FILE_NAME "../localtests/short_nb_voice.wav"
-#define OUT_FILE_NAME "post_ima_adpcm.wav"
-
-#define HIST_LEN 1000
-
-int main(int argc, char *argv[])
-{
- int i;
- AFfilehandle inhandle;
- AFfilehandle outhandle;
- AFfilesetup filesetup;
- int frames;
- int dec_frames;
- int outframes;
- int ima_bytes;
- float x;
- double pre_energy;
- double post_energy;
- double diff_energy;
- int16_t pre_amp[HIST_LEN];
- int16_t post_amp[HIST_LEN];
- uint8_t ima_data[HIST_LEN];
- int16_t history[HIST_LEN];
- int hist_in;
- int hist_out;
- ima_adpcm_state_t *ima_enc_state;
- ima_adpcm_state_t *ima_dec_state;
- int xx;
- int vbr;
- const char *in_file_name;
-
- vbr = FALSE;
- in_file_name = IN_FILE_NAME;
- for (i = 1; i < argc; i++)
- {
- if (strcmp(argv[i], "-v") == 0)
- {
- vbr = TRUE;
- continue;
- }
- if (strcmp(argv[i], "-i") == 0)
- {
- in_file_name = argv[++i];
- continue;
- }
- fprintf(stderr, "Unknown parameter %s specified.\n", argv[i]);
- exit(2);
- }
-
- if ((inhandle = afOpenFile(in_file_name, "r", 0)) == AF_NULL_FILEHANDLE)
- {
- printf(" Cannot open wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((x = afGetFrameSize(inhandle, AF_DEFAULT_TRACK, 1)) != 2.0)
- {
- printf(" Unexpected frame size in wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((x = afGetRate(inhandle, AF_DEFAULT_TRACK)) != (float) SAMPLE_RATE)
- {
- printf(" Unexpected sample rate in wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((x = afGetChannels(inhandle, AF_DEFAULT_TRACK)) != 1.0)
- {
- printf(" Unexpected number of channels in wave file '%s'\n", in_file_name);
- exit(2);
- }
-
- if ((filesetup = afNewFileSetup()) == AF_NULL_FILESETUP)
- {
- fprintf(stderr, " Failed to create file setup\n");
- exit(2);
- }
- afInitSampleFormat(filesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16);
- afInitRate(filesetup, AF_DEFAULT_TRACK, (float) SAMPLE_RATE);
- afInitFileFormat(filesetup, AF_FILE_WAVE);
- afInitChannels(filesetup, AF_DEFAULT_TRACK, 1);
- if ((outhandle = afOpenFile(OUT_FILE_NAME, "w", filesetup)) == AF_NULL_FILEHANDLE)
- {
- fprintf(stderr, " Cannot create wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
-
- if ((ima_enc_state = ima_adpcm_init(NULL, (vbr) ? IMA_ADPCM_VDVI : IMA_ADPCM_DVI4)) == NULL)
- {
- fprintf(stderr, " Cannot create encoder\n");
- exit(2);
- }
-
- if ((ima_dec_state = ima_adpcm_init(NULL, (vbr) ? IMA_ADPCM_VDVI : IMA_ADPCM_DVI4)) == NULL)
- {
- fprintf(stderr, " Cannot create decoder\n");
- exit(2);
- }
-
- hist_in = 0;
- hist_out = 0;
- pre_energy = 0.0;
- post_energy = 0.0;
- diff_energy = 0.0;
- while ((frames = afReadFrames(inhandle, AF_DEFAULT_TRACK, pre_amp, 159)))
- {
- ima_bytes = ima_adpcm_encode(ima_enc_state, ima_data, pre_amp, frames);
- dec_frames = ima_adpcm_decode(ima_dec_state, post_amp, ima_data, ima_bytes);
- for (i = 0; i < frames; i++)
- {
- history[hist_in++] = pre_amp[i];
- if (hist_in >= HIST_LEN)
- hist_in = 0;
- pre_energy += (double) pre_amp[i] * (double) pre_amp[i];
- }
- for (i = 0; i < dec_frames; i++)
- {
- post_energy += (double) post_amp[i] * (double) post_amp[i];
- xx = post_amp[i] - history[hist_out++];
- if (hist_out >= HIST_LEN)
- hist_out = 0;
- diff_energy += (double) xx * (double) xx;
- }
- outframes = afWriteFrames(outhandle, AF_DEFAULT_TRACK, post_amp, dec_frames);
- }
- if (afCloseFile(inhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", in_file_name);
- exit(2);
- }
- if (afCloseFile(outhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
- afFreeFileSetup(filesetup);
- ima_adpcm_release(ima_enc_state);
- ima_adpcm_release(ima_dec_state);
-
- printf("Output energy is %f%% of input energy.\n", 100.0*post_energy/pre_energy);
- printf("Residual energy is %f%% of the total.\n", 100.0*diff_energy/post_energy);
- if (fabs(1.0 - post_energy/pre_energy) > 0.05
- ||
- fabs(diff_energy/post_energy) > 0.03)
- {
- printf("Tests failed.\n");
- exit(2);
- }
-
- printf("Tests passed.\n");
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * lpc10_tests.c - Test the LPC10 low bit rate speech codec.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2006 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: lpc10_tests.c,v 1.11 2007/11/10 11:14:58 steveu Exp $
- */
-
-/*! \file */
-
-/*! \page lpc10_tests_page LPC10 codec tests
-\section lpc10_tests_page_sec_1 What does it do?
-
-\section lpc10_tests_page_sec_2 How is it used?
-To perform a general audio quality test, lpc10 should be run. The file ../localtests/short_nb_voice.wav
-will be compressed to LPC10 data, decompressed, and the resulting audio stored in post_lpc10.wav.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <assert.h>
-#include <ctype.h>
-#include <audiofile.h>
-
-#include "voipcodecs.h"
-
-#define BLOCK_LEN 180
-
-#define BLOCKS_PER_READ 1
-
-#define IN_FILE_NAME "../localtests/dam9.wav"
-#define REF_FILE_NAME "../localtests/dam9_lpc55.wav"
-#define COMPRESS_FILE_NAME "lpc10_out.lpc10"
-#define DECOMPRESS_FILE_NAME "lpc10_in.lpc10"
-#define OUT_FILE_NAME "post_lpc10.wav"
-
-int main(int argc, char *argv[])
-{
- AFfilehandle inhandle;
- AFfilehandle refhandle;
- AFfilehandle outhandle;
- AFfilesetup filesetup;
- int frames;
- int outframes;
- float x;
- double pre_energy;
- double post_energy;
- double ref_energy;
- double diff_energy;
- int16_t pre_amp[BLOCKS_PER_READ*BLOCK_LEN];
- int16_t post_amp[BLOCKS_PER_READ*BLOCK_LEN];
- int16_t ref_amp[BLOCKS_PER_READ*BLOCK_LEN];
- int16_t log_amp[BLOCKS_PER_READ*BLOCK_LEN*3];
- uint8_t lpc10_data[BLOCKS_PER_READ*7];
- double xx;
- lpc10_encode_state_t *lpc10_enc_state;
- lpc10_decode_state_t *lpc10_dec_state;
- int i;
- int block_no;
- int log_error;
- int compress;
- int decompress;
- const char *in_file_name;
- int compress_file;
- int decompress_file;
- int len;
-
- compress = FALSE;
- decompress = FALSE;
- log_error = TRUE;
- in_file_name = IN_FILE_NAME;
- for (i = 1; i < argc; i++)
- {
- if (strcmp(argv[i], "-c") == 0)
- {
- compress = TRUE;
- continue;
- }
- if (strcmp(argv[i], "-d") == 0)
- {
- decompress = TRUE;
- continue;
- }
- if (strcmp(argv[i], "-i") == 0)
- {
- in_file_name = argv[++i];
- continue;
- }
- if (strcmp(argv[i], "-l") == 0)
- {
- log_error = FALSE;
- continue;
- }
- }
-
- compress_file = -1;
- decompress_file = -1;
- inhandle = AF_NULL_FILEHANDLE;
- refhandle = AF_NULL_FILEHANDLE;
- outhandle = AF_NULL_FILEHANDLE;
- if (!decompress)
- {
- if ((inhandle = afOpenFile(in_file_name, "r", 0)) == AF_NULL_FILEHANDLE)
- {
- printf(" Cannot open wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((x = afGetFrameSize(inhandle, AF_DEFAULT_TRACK, 1)) != 2.0)
- {
- printf(" Unexpected frame size in wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((x = afGetRate(inhandle, AF_DEFAULT_TRACK)) != (float) SAMPLE_RATE)
- {
- printf(" Unexpected sample rate in wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((x = afGetChannels(inhandle, AF_DEFAULT_TRACK)) != 1.0)
- {
- printf(" Unexpected number of channels in wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((filesetup = afNewFileSetup()) == AF_NULL_FILESETUP)
- {
- fprintf(stderr, " Failed to create file setup\n");
- exit(2);
- }
-
- if ((refhandle = afOpenFile(REF_FILE_NAME, "r", 0)) == AF_NULL_FILEHANDLE)
- {
- printf(" Cannot open wave file '%s'\n", REF_FILE_NAME);
- exit(2);
- }
- if ((x = afGetFrameSize(refhandle, AF_DEFAULT_TRACK, 1)) != 2.0)
- {
- printf(" Unexpected frame size in wave file '%s'\n", REF_FILE_NAME);
- exit(2);
- }
- if ((x = afGetRate(refhandle, AF_DEFAULT_TRACK)) != (float) SAMPLE_RATE)
- {
- printf(" Unexpected sample rate in wave file '%s'\n", REF_FILE_NAME);
- exit(2);
- }
- if ((x = afGetChannels(refhandle, AF_DEFAULT_TRACK)) != 1.0)
- {
- printf(" Unexpected number of channels in wave file '%s'\n", REF_FILE_NAME);
- exit(2);
- }
- }
- else
- {
- if ((decompress_file = open(DECOMPRESS_FILE_NAME, O_RDONLY)) < 0)
- {
- fprintf(stderr, " Cannot open decompressed data file '%s'\n", DECOMPRESS_FILE_NAME);
- exit(2);
- }
- }
-
- if ((filesetup = afNewFileSetup()) == AF_NULL_FILESETUP)
- {
- fprintf(stderr, " Failed to create file setup\n");
- exit(2);
- }
- afInitSampleFormat(filesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16);
- afInitRate(filesetup, AF_DEFAULT_TRACK, (float) SAMPLE_RATE);
- afInitFileFormat(filesetup, AF_FILE_WAVE);
- afInitChannels(filesetup, AF_DEFAULT_TRACK, 1);
-
- if ((outhandle = afOpenFile(OUT_FILE_NAME, "w", filesetup)) == AF_NULL_FILEHANDLE)
- {
- fprintf(stderr, " Cannot create wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
-
- if ((lpc10_enc_state = lpc10_encode_init(NULL, TRUE)) == NULL)
- {
- fprintf(stderr, " Cannot create encoder\n");
- exit(2);
- }
-
- if ((lpc10_dec_state = lpc10_decode_init(NULL, TRUE)) == NULL)
- {
- fprintf(stderr, " Cannot create decoder\n");
- exit(2);
- }
-
- if (compress)
- {
- if ((compress_file = open(COMPRESS_FILE_NAME, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0)
- {
- fprintf(stderr, " Cannot create compressed data file '%s'\n", COMPRESS_FILE_NAME);
- exit(2);
- }
- }
-
- pre_energy = 0.0;
- post_energy = 0.0;
- ref_energy = 0.0;
- diff_energy = 0.0;
-
- if (decompress)
- {
- while ((len = read(decompress_file, lpc10_data, BLOCKS_PER_READ*7)) > 0)
- {
- lpc10_decode(lpc10_dec_state, post_amp, lpc10_data, len/7);
- outframes = afWriteFrames(outhandle, AF_DEFAULT_TRACK, post_amp, BLOCK_LEN*len/7);
- }
- }
- else
- {
- block_no = 0;
- while ((frames = afReadFrames(inhandle, AF_DEFAULT_TRACK, pre_amp, BLOCKS_PER_READ*BLOCK_LEN)) == BLOCKS_PER_READ*BLOCK_LEN
- &&
- (frames = afReadFrames(refhandle, AF_DEFAULT_TRACK, ref_amp, BLOCKS_PER_READ*BLOCK_LEN)) == BLOCKS_PER_READ*BLOCK_LEN)
- {
- lpc10_encode(lpc10_enc_state, lpc10_data, pre_amp, BLOCKS_PER_READ);
- if (compress)
- write(compress_file, lpc10_data, BLOCKS_PER_READ*7);
- lpc10_decode(lpc10_dec_state, post_amp, lpc10_data, BLOCKS_PER_READ);
- for (i = 0; i < BLOCK_LEN; i++)
- {
- pre_energy += (double) pre_amp[i]*(double) pre_amp[i];
- post_energy += (double) post_amp[i]*(double) post_amp[i];
- ref_energy += (double) ref_amp[i]*(double) ref_amp[i];
- /* The reference file has some odd clipping, so eliminate this from the
- energy measurement. */
- if (ref_amp[i] == 32767 || ref_amp[i] == -32768)
- xx = 0.0;
- else
- xx = post_amp[i] - ref_amp[i];
- diff_energy += (double) xx*(double) xx;
- log_amp[i] = xx;
- }
- block_no++;
- if (log_error)
- outframes = afWriteFrames(outhandle, AF_DEFAULT_TRACK, log_amp, frames);
- else
- outframes = afWriteFrames(outhandle, AF_DEFAULT_TRACK, post_amp, frames);
- }
- if (afCloseFile(inhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", in_file_name);
- exit(2);
- }
- if (afCloseFile(refhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", REF_FILE_NAME);
- exit(2);
- }
- }
-
- if (afCloseFile(outhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
- afFreeFileSetup(filesetup);
- if (compress)
- close(compress_file);
- if (decompress)
- close(decompress_file);
- lpc10_encode_release(lpc10_enc_state);
- lpc10_decode_release(lpc10_dec_state);
-
- if (!decompress)
- {
- printf("Output energy is %f%% of input energy.\n", 100.0*post_energy/pre_energy);
- printf("Difference energy is %f%% of the total.\n", 100.0*diff_energy/ref_energy);
- if (fabs(1.0 - post_energy/pre_energy) > 0.05
- ||
- fabs(diff_energy/post_energy) > 0.03)
- {
- printf("Tests failed.\n");
- exit(2);
- }
- printf("Tests passed.\n");
- }
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-/*
- * VoIPcodecs - a series of DSP components for telephony
- *
- * oki_adpcm_tests.c - Test the Oki (Dialogic) ADPCM encode and decode
- * software at 24kbps and 32kbps.
- *
- * Written by Steve Underwood <steveu@coppice.org>
- *
- * Copyright (C) 2004 Steve Underwood
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2, as
- * published by the Free Software Foundation.
- *
- * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: oki_adpcm_tests.c,v 1.24 2007/11/10 11:14:58 steveu Exp $
- */
-
-/*! \file */
-
-/*! \page oki_adpcm_tests_page OKI (Dialogic) ADPCM tests
-\section oki_adpcm_tests_page_sec_1 What does it do?
-To perform a general audio quality test, oki_adpcm_tests should be run. The test file
-../localtests/short_nb_voice.wav will be compressed to the specified bit rate,
-decompressed, and the resulting audio stored in post_oki_adpcm.wav. A simple SNR test
-is automatically performed. Listening tests may be used for a more detailed evaluation
-of the degradation in quality caused by the compression. Both 32k bps and 24k bps
-compression may be tested.
-
-\section oki_adpcm_tests_page_sec_2 How is it used?
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <time.h>
-#include <audiofile.h>
-
-#include "voipcodecs.h"
-
-#define IN_FILE_NAME "../localtests/short_nb_voice.wav"
-#define OUT_FILE_NAME "post_oki_adpcm.wav"
-
-#define HIST_LEN 1000
-
-int main(int argc, char *argv[])
-{
- int i;
- AFfilehandle inhandle;
- AFfilehandle outhandle;
- AFfilesetup filesetup;
- int frames;
- int dec_frames;
- int outframes;
- int oki_bytes;
- int bit_rate;
- float x;
- double pre_energy;
- double post_energy;
- double diff_energy;
- int16_t pre_amp[HIST_LEN];
- int16_t post_amp[HIST_LEN];
- uint8_t oki_data[HIST_LEN];
- int16_t history[HIST_LEN];
- int hist_in;
- int hist_out;
- oki_adpcm_state_t *oki_enc_state;
- oki_adpcm_state_t *oki_dec_state;
- int xx;
- int total_pre_samples;
- int total_compressed_bytes;
- int total_post_samples;
- const char *in_file_name;
-
- bit_rate = 32000;
- in_file_name = IN_FILE_NAME;
- for (i = 1; i < argc; i++)
- {
- if (strcmp(argv[i], "-2") == 0)
- {
- bit_rate = 24000;
- continue;
- }
- if (strcmp(argv[i], "-i") == 0)
- {
- in_file_name = argv[++i];
- continue;
- }
- fprintf(stderr, "Unknown parameter %s specified.\n", argv[i]);
- exit(2);
- }
-
- if ((inhandle = afOpenFile(in_file_name, "r", 0)) == AF_NULL_FILEHANDLE)
- {
- printf(" Cannot open wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((x = afGetFrameSize(inhandle, AF_DEFAULT_TRACK, 1)) != 2.0)
- {
- printf(" Unexpected frame size in wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((x = afGetRate(inhandle, AF_DEFAULT_TRACK)) != (float) SAMPLE_RATE)
- {
- printf(" Unexpected sample rate in wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((x = afGetChannels(inhandle, AF_DEFAULT_TRACK)) != 1.0)
- {
- printf(" Unexpected number of channels in wave file '%s'\n", in_file_name);
- exit(2);
- }
- if ((filesetup = afNewFileSetup()) == AF_NULL_FILESETUP)
- {
- fprintf(stderr, " Failed to create file setup\n");
- exit(2);
- }
- afInitSampleFormat(filesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, 16);
- afInitRate(filesetup, AF_DEFAULT_TRACK, (float) SAMPLE_RATE);
- afInitFileFormat(filesetup, AF_FILE_WAVE);
- afInitChannels(filesetup, AF_DEFAULT_TRACK, 1);
-
- outhandle = afOpenFile(OUT_FILE_NAME, "w", filesetup);
- if (outhandle == AF_NULL_FILEHANDLE)
- {
- fprintf(stderr, " Cannot create wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
-
- if ((oki_enc_state = oki_adpcm_init(NULL, bit_rate)) == NULL)
- {
- fprintf(stderr, " Cannot create encoder\n");
- exit(2);
- }
-
- if ((oki_dec_state = oki_adpcm_init(NULL, bit_rate)) == NULL)
- {
- fprintf(stderr, " Cannot create decoder\n");
- exit(2);
- }
-
- hist_in = 0;
- if (bit_rate == 32000)
- hist_out = 0;
- else
- hist_out = HIST_LEN - 27;
- memset(history, 0, sizeof(history));
- pre_energy = 0.0;
- post_energy = 0.0;
- diff_energy = 0.0;
- total_pre_samples = 0;
- total_compressed_bytes = 0;
- total_post_samples = 0;
- while ((frames = afReadFrames(inhandle, AF_DEFAULT_TRACK, pre_amp, 159)))
- {
- total_pre_samples +=frames;
- oki_bytes = oki_adpcm_encode(oki_enc_state, oki_data, pre_amp, frames);
- total_compressed_bytes += oki_bytes;
- dec_frames = oki_adpcm_decode(oki_dec_state, post_amp, oki_data, oki_bytes);
- total_post_samples += dec_frames;
- for (i = 0; i < frames; i++)
- {
- history[hist_in++] = pre_amp[i];
- if (hist_in >= HIST_LEN)
- hist_in = 0;
- pre_energy += (double) pre_amp[i] * (double) pre_amp[i];
- }
- for (i = 0; i < dec_frames; i++)
- {
- post_energy += (double) post_amp[i] * (double) post_amp[i];
- xx = post_amp[i] - history[hist_out++];
- if (hist_out >= HIST_LEN)
- hist_out = 0;
- diff_energy += (double) xx * (double) xx;
- //post_amp[i] = xx;
- }
- outframes = afWriteFrames(outhandle, AF_DEFAULT_TRACK, post_amp, dec_frames);
- }
- if (afCloseFile(inhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", in_file_name);
- exit(2);
- }
- if (afCloseFile(outhandle) != 0)
- {
- printf(" Cannot close wave file '%s'\n", OUT_FILE_NAME);
- exit(2);
- }
- afFreeFileSetup(filesetup);
- oki_adpcm_release(oki_enc_state);
- oki_adpcm_release(oki_dec_state);
-
- printf("Pre samples: %d\n", total_pre_samples);
- printf("Compressed bytes: %d\n", total_compressed_bytes);
- printf("Post samples: %d\n", total_post_samples);
-
- printf("Output energy is %f%% of input energy.\n", 100.0*post_energy/pre_energy);
- printf("Residual energy is %f%% of the total.\n", 100.0*diff_energy/post_energy);
- if (bit_rate == 32000)
- {
- if (fabs(1.0 - post_energy/pre_energy) > 0.05
- ||
- fabs(diff_energy/post_energy) > 0.03)
- {
- printf("Tests failed.\n");
- exit(2);
- }
- }
- else
- {
- if (fabs(1.0 - post_energy/pre_energy) > 0.20
- ||
- fabs(diff_energy/post_energy) > 0.10)
- {
- printf("Tests failed.\n");
- exit(2);
- }
- }
-
- printf("Tests passed.\n");
- return 0;
-}
-/*- End of function --------------------------------------------------------*/
-/*- End of file ------------------------------------------------------------*/
+++ /dev/null
-#!/bin/sh
-#
-# VoIPcodecs - a series of DSP components for telephony
-#
-# regression_tests.sh
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2, as
-# published by the Free Software Foundation.
-#
-# 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-# $Id: regression_tests.sh,v 1.47 2007/12/22 12:37:22 steveu Exp $
-#
-
-STDOUT_DEST=xyzzy
-STDERR_DEST=xyzzy2
-
-echo Performing basic VoIP codecs regression tests
-echo
-
-./g711_tests >$STDOUT_DEST 2>$STDERR_DEST
-RETVAL=$?
-if [ $RETVAL != 0 ]
-then
- echo g711_tests failed!
- exit $RETVAL
-fi
-echo g711_tests completed OK
-
-./g722_tests >$STDOUT_DEST 2>$STDERR_DEST
-RETVAL=$?
-if [ $RETVAL != 0 ]
-then
- echo g722_tests failed!
- exit $RETVAL
-fi
-echo g722_tests completed OK
-
-./g726_tests >$STDOUT_DEST 2>$STDERR_DEST
-RETVAL=$?
-if [ $RETVAL != 0 ]
-then
- echo g726_tests failed!
- exit $RETVAL
-fi
-echo g726_tests completed OK
-
-./gsm0610_tests >$STDOUT_DEST 2>$STDERR_DEST
-RETVAL=$?
-if [ $RETVAL != 0 ]
-then
- echo gsm0610_tests failed!
- exit $RETVAL
-fi
-echo gsm0610_tests completed OK
-
-./ima_adpcm_tests >$STDOUT_DEST 2>$STDERR_DEST
-RETVAL=$?
-if [ $RETVAL != 0 ]
-then
- echo ima_adpcm_tests failed!
- exit $RETVAL
-fi
-echo ima_adpcm_tests completed OK
-
-./lpc10_tests >$STDOUT_DEST 2>$STDERR_DEST
-RETVAL=$?
-if [ $RETVAL != 0 ]
-then
- echo lpc10_tests failed!
- exit $RETVAL
-fi
-echo lpc10_tests completed OK
-
-./oki_adpcm_tests >$STDOUT_DEST 2>$STDERR_DEST
-RETVAL=$?
-if [ $RETVAL != 0 ]
-then
- echo oki_adpcm_tests failed!
- exit $RETVAL
-fi
-echo oki_adpcm_tests completed OK
-
-echo
-echo All regression tests successfully completed
+++ /dev/null
-Summary: VoIPcodecs is a library of unencumbered codecs commonly used for VoIP
-Name: @PACKAGE@
-Version: @VERSION@
-Release: 1
-License: GPL
-Group: System Environment/Libraries
-URL: http://www.soft-switch.org/voipcodecs
-BuildRoot: %{_tmppath}/%{name}-%{version}-root
-Source: http://www.soft-switch.org/downloads/voipcodecs/@PACKAGE@-@VERSION@.tar.gz
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-
-Docdir: %{_prefix}/doc
-
-BuildRequires: audiofile-devel
-BuildRequires: doxygen
-
-%description
-VoIPcodecs is a library of unencumbered codecs commonly used for VoIP.
-
-%package devel
-Summary: VoIPcodecs development files
-Group: Development/Libraries
-Requires: voipcodecs = %{version}
-PreReq: /sbin/install-info
-
-%description devel
-VoIPcodecs development files.
-
-%prep
-%setup -q
-
-%build
-%configure --enable-doc --disable-static --disable-rpath
-make
-
-%install
-rm -rf %{buildroot}
-make install DESTDIR=%{buildroot}
-rm %{buildroot}%{_libdir}/libvoipcodecs.la
-
-%clean
-rm -rf %{buildroot}
-
-%files
-%defattr(-,root,root,-)
-%doc ChangeLog AUTHORS COPYING NEWS README
-
-%{_libdir}/libvoipcodecs.so.*
-
-%{_datadir}/voipcodecs
-
-%files devel
-%defattr(-,root,root,-)
-%doc doc/api
-%{_includedir}/voipcodecs.h
-%{_includedir}/voipcodecs
-%{_libdir}/libvoipcodecs.so
-
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
-%changelog
-* Thu Feb 7 2008 Steve Underwood <steveu@coppice.org> 0.0.1
-- First pass
+++ /dev/null
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- version='1.0'>
- <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"/>
- <xsl:param name="html.stylesheet">css.css</xsl:param>
-</xsl:stylesheet>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>\r
-<VisualStudioProject\r
- ProjectType="Visual C++"\r
- Version="9.00"\r
- Name="Download TIFF"\r
- ProjectGUID="{2B8A45C9-FEB4-4734-AB37-8DB9DB899917}"\r
- RootNamespace="Download TIFF"\r
- Keyword="Win32Proj"\r
- TargetFrameworkVersion="131072"\r
- >\r
- <Platforms>\r
- <Platform\r
- Name="Win32"\r
- />\r
- </Platforms>\r
- <ToolFiles>\r
- </ToolFiles>\r
- <Configurations>\r
- <Configuration\r
- Name="Debug|Win32"\r
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
- IntermediateDirectory="$(ConfigurationName)"\r
- ConfigurationType="10"\r
- CharacterSet="2"\r
- BuildLogFile="$(IntDir)\BuildLog $(ProjectName).htm"\r
- >\r
- <Tool\r
- Name="VCPreBuildEventTool"\r
- CommandLine=""\r
- />\r
- <Tool\r
- Name="VCCustomBuildTool"\r
- CommandLine=""\r
- Outputs=""\r
- />\r
- <Tool\r
- Name="VCMIDLTool"\r
- />\r
- <Tool\r
- Name="VCPostBuildEventTool"\r
- />\r
- </Configuration>\r
- <Configuration\r
- Name="Release|Win32"\r
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
- IntermediateDirectory="$(ConfigurationName)"\r
- ConfigurationType="10"\r
- CharacterSet="2"\r
- BuildLogFile="$(IntDir)\BuildLog $(ProjectName).htm"\r
- >\r
- <Tool\r
- Name="VCPreBuildEventTool"\r
- CommandLine=""\r
- />\r
- <Tool\r
- Name="VCCustomBuildTool"\r
- />\r
- <Tool\r
- Name="VCMIDLTool"\r
- />\r
- <Tool\r
- Name="VCPostBuildEventTool"\r
- CommandLine=""\r
- />\r
- </Configuration>\r
- </Configurations>\r
- <References>\r
- </References>\r
- <Files>\r
- <File\r
- RelativePath=".\tiff\cleancount"\r
- >\r
- <FileConfiguration\r
- Name="Debug|Win32"\r
- >\r
- <Tool\r
- Name="VCCustomBuildTool"\r
- Description="Downloading Tiff."\r
- CommandLine="if not exist "$(ProjectDir)..\tiff-3.8.2" cscript /nologo "$(ProjectDir)util.vbs" GetUnzip http://files.freeswitch.org/downloads/libs/tiff-3.8.2.tar.gz "$(ProjectDir).."
"\r
- Outputs="$(ProjectDir)..\tiff-3.8.2"\r
- />\r
- </FileConfiguration>\r
- <FileConfiguration\r
- Name="Release|Win32"\r
- >\r
- <Tool\r
- Name="VCCustomBuildTool"\r
- Description="Downloading Lame."\r
- CommandLine="if not exist "$(ProjectDir)..\tiff-3.8.2" cscript /nologo "$(ProjectDir)util.vbs" GetUnzip http://files.freeswitch.org/downloads/libs/tiff-3.8.2.tar.gz "$(ProjectDir).."
"\r
- Outputs="$(ProjectDir)..\tiff-3.8.2"\r
- />\r
- </FileConfiguration>\r
- </File>\r
- </Files>\r
- <Globals>\r
- </Globals>\r
-</VisualStudioProject>\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\\tiff-3.8.2\libtiff""\r
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src\msvc";"$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\tiff-3.8.2\libtiff""\r
UsePrecompiledHeader="0"\r
/>\r
<Tool\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\\tiff-3.8.2\libtiff""\r
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src\msvc";"$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\tiff-3.8.2\libtiff""\r
UsePrecompiledHeader="0"\r
/>\r
<Tool\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\\tiff-3.8.2\libtiff""\r
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src\msvc";"$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\tiff-3.8.2\libtiff""\r
UsePrecompiledHeader="0"\r
/>\r
<Tool\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\\tiff-3.8.2\libtiff""\r
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src\msvc";"$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\tiff-3.8.2\libtiff""\r
UsePrecompiledHeader="0"\r
/>\r
<Tool\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\\tiff-3.8.2\libtiff""\r
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src\msvc";"$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\tiff-3.8.2\libtiff""\r
UsePrecompiledHeader="0"\r
/>\r
<Tool\r
/>\r
<Tool\r
Name="VCCLCompilerTool"\r
- AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\\tiff-3.8.2\libtiff""\r
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\spandsp\src\msvc";"$(InputDir)..\..\..\..\libs\spandsp\src";"$(InputDir)..\..\..\..\libs\tiff-3.8.2\libtiff""\r
UsePrecompiledHeader="0"\r
/>\r
<Tool\r