Imported Upstream version 0.6.3 upstream/0.6.3
authorMarius Gavrilescu <Marius Gavrilescu>
Thu, 8 Dec 2016 16:34:05 +0000 (18:34 +0200)
committerMarius Gavrilescu <Marius Gavrilescu>
Thu, 8 Dec 2016 16:34:05 +0000 (18:34 +0200)
16 files changed:
ChangeLog
MSVC/fdk-aac.vcxproj
MSVC/fdkaac.sln
MSVC/fdkaac.vcxproj
README
man/fdkaac.1
src/aacenc.c
src/aacenc.h
src/compat.h
src/compat_posix.c
src/compat_win32.c
src/m4af.c
src/m4af.h
src/main.c
src/pcm_float_converter.c
version.h

index 771eb878911d1172af430ce79626c44923fa76e7..4455a7ef1f14bc53884f36142cd28ea8f85e7202 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,18 @@
-2014-09-13  nu774 <honeycomb77@gmail.com>
+2015-02-14  nu774 <honeycomb77@gmail.com>
 
   * update ChangeLog [HEAD]
 
-  * bump version [v0.6.1]
+  * bump version [v0.6.2]
+
+  * take stco->co64 switch due to mdat relocation into account on finalizing m4a
+
+  * fix incorrect iTunSMPB written when interrupted by signals
+
+2014-09-13  nu774 <honeycomb77@gmail.com>
+
+  * update ChangeLog [origin/master]
+
+  * bump version
 
 2014-09-12  nu774 <honeycomb77@gmail.com>
 
@@ -10,7 +20,7 @@
 
 2014-08-17  nu774 <honeycomb77@gmail.com>
 
-  * update INSTALL [origin/master]
+  * update INSTALL
 
   * add m4 macros
 
index 9bf4fe6f05dffe9a9bd419f320f1378a3de3729e..2035c149ad5af3442a776e9443ae1b509c40b085 100644 (file)
@@ -5,75 +5,69 @@
       <Configuration>Debug</Configuration>
       <Platform>Win32</Platform>
     </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
     <ProjectConfiguration Include="Release|Win32">
       <Configuration>Release</Configuration>
       <Platform>Win32</Platform>
     </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{D7D4B982-8B16-4A10-8B1C-9527BD789709}</ProjectGuid>
     <Keyword>Win32Proj</Keyword>
-    <RootNamespace>fdkaac</RootNamespace>
+    <RootNamespace>fdk-aac</RootNamespace>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(VCTargetsPath14)' != ''">v140_xp</PlatformToolset>
+    <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(VCTargetsPath12)' != ''">v120_xp</PlatformToolset>
+    <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(VCTargetsPath11)' != ''">v110_xp</PlatformToolset>
+    <PlatformToolset Condition="'$(PlatformToolset)' == ''">v100</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+  <PropertyGroup Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
     <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+    <UseDebugLibraries>true</UseDebugLibraries>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
     <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+  <ImportGroup Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <IntDir>$(Configuration)Lib\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <IntDir>$(Configuration)Lib\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+  <ItemDefinitionGroup>
     <ClCompile>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../fdk-aac/libaacenc/include;../fdk-aac/libFDK/include;../fdk-aac/libMpegTPEnc/include;../fdk-aac/libPCMutils/include;../fdk-aac/libSBRenc/include;../fdk-aac/libSYS/include</AdditionalIncludeDirectories>
-      <StringPooling>true</StringPooling>
     </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
   </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../fdk-aac/libaacenc/include;../fdk-aac/libFDK/include;../fdk-aac/libMpegTPEnc/include;../fdk-aac/libPCMutils/include;../fdk-aac/libSBRenc/include;../fdk-aac/libSYS/include</AdditionalIncludeDirectories>
-      <StringPooling>true</StringPooling>
+      <AdditionalOptions>/Qvec-report:1 %(AdditionalOptions)</AdditionalOptions>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Platform)'=='x64'">
+    <ClCompile>
+      <PreprocessorDefinitions>__x86_64__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClCompile Include="..\fdk-aac\libAACenc\src\aacenc.cpp" />
index 5507930320acb71a94bffa0b2790b02329174ed7..5a4c448e606dda7eb36755b88237db95281cd248 100644 (file)
@@ -8,17 +8,27 @@ EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
                Debug|Win32 = Debug|Win32
+               Debug|x64 = Debug|x64
                Release|Win32 = Release|Win32
+               Release|x64 = Release|x64
        EndGlobalSection
        GlobalSection(ProjectConfigurationPlatforms) = postSolution
                {E62D32CF-E308-40BD-9FF0-8266C6CAA9AA}.Debug|Win32.ActiveCfg = Debug|Win32
                {E62D32CF-E308-40BD-9FF0-8266C6CAA9AA}.Debug|Win32.Build.0 = Debug|Win32
+               {E62D32CF-E308-40BD-9FF0-8266C6CAA9AA}.Debug|x64.ActiveCfg = Debug|x64
+               {E62D32CF-E308-40BD-9FF0-8266C6CAA9AA}.Debug|x64.Build.0 = Debug|x64
                {E62D32CF-E308-40BD-9FF0-8266C6CAA9AA}.Release|Win32.ActiveCfg = Release|Win32
                {E62D32CF-E308-40BD-9FF0-8266C6CAA9AA}.Release|Win32.Build.0 = Release|Win32
+               {E62D32CF-E308-40BD-9FF0-8266C6CAA9AA}.Release|x64.ActiveCfg = Release|x64
+               {E62D32CF-E308-40BD-9FF0-8266C6CAA9AA}.Release|x64.Build.0 = Release|x64
                {D7D4B982-8B16-4A10-8B1C-9527BD789709}.Debug|Win32.ActiveCfg = Debug|Win32
                {D7D4B982-8B16-4A10-8B1C-9527BD789709}.Debug|Win32.Build.0 = Debug|Win32
+               {D7D4B982-8B16-4A10-8B1C-9527BD789709}.Debug|x64.ActiveCfg = Debug|x64
+               {D7D4B982-8B16-4A10-8B1C-9527BD789709}.Debug|x64.Build.0 = Debug|x64
                {D7D4B982-8B16-4A10-8B1C-9527BD789709}.Release|Win32.ActiveCfg = Release|Win32
                {D7D4B982-8B16-4A10-8B1C-9527BD789709}.Release|Win32.Build.0 = Release|Win32
+               {D7D4B982-8B16-4A10-8B1C-9527BD789709}.Release|x64.ActiveCfg = Release|x64
+               {D7D4B982-8B16-4A10-8B1C-9527BD789709}.Release|x64.Build.0 = Release|x64
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
index 229e8ad93ccf8ca598832908289a7bbe90d81ec0..0a59d914d92bd70f6309f3907e668602a57eb874 100644 (file)
@@ -5,55 +5,50 @@
       <Configuration>Debug</Configuration>
       <Platform>Win32</Platform>
     </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
     <ProjectConfiguration Include="Release|Win32">
       <Configuration>Release</Configuration>
       <Platform>Win32</Platform>
     </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{E62D32CF-E308-40BD-9FF0-8266C6CAA9AA}</ProjectGuid>
     <Keyword>Win32Proj</Keyword>
     <RootNamespace>fdkaac</RootNamespace>
   </PropertyGroup>
+  <PropertyGroup>
+    <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(VCTargetsPath14)' != ''">v140_xp</PlatformToolset>
+    <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(VCTargetsPath12)' != ''">v120_xp</PlatformToolset>
+    <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(VCTargetsPath11)' != ''">v110_xp</PlatformToolset>
+    <PlatformToolset Condition="'$(PlatformToolset)' == ''">v100</PlatformToolset>
+  </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+  <PropertyGroup Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
     <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
+  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+    <UseDebugLibraries>true</UseDebugLibraries>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
     <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+  <ImportGroup Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <IntDir>cli_$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-    <IntDir>$(Configuration)Cli\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+  <ItemDefinitionGroup>
     <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>HAVE_STDINT_H;inline=__inline;_CRT_SECURE_NO_WARNINGS;WIN32;_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>HAVE_STDINT_H;inline=__inline;_CRT_SECURE_NO_WARNINGS;WIN32;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>./include;../missings;.;..</AdditionalIncludeDirectories>
-      <StringPooling>true</StringPooling>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
@@ -67,31 +62,19 @@ copy ..\fdk-aac\libSYS\include\genericStds.h include\fdk-aac\
 copy ..\fdk-aac\libSYS\include\machine_type.h include\fdk-aac\ </Command>
     </PreBuildEvent>
   </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
     <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
       <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>HAVE_STDINT_H;inline=__inline;_CRT_SECURE_NO_WARNINGS;WIN32;_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>./include;../missings;.;..</AdditionalIncludeDirectories>
-      <StringPooling>true</StringPooling>
     </ClCompile>
     <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
     </Link>
-    <PreBuildEvent>
-      <Command>copy ..\fdk-aac\libAACdec\include\aacdecoder_lib.h include\fdk-aac\ 
-copy ..\fdk-aac\libAACenc\include\aacenc_lib.h include\fdk-aac\ 
-copy ..\fdk-aac\libSYS\include\FDK_Audio.h include\fdk-aac\
-copy ..\fdk-aac\libSYS\include\genericStds.h include\fdk-aac\ 
-copy ..\fdk-aac\libSYS\include\machine_type.h include\fdk-aac\ </Command>
-    </PreBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClCompile Include="..\missings\getopt.c" />
diff --git a/README b/README
index fba5b6443f2b2b29303e7764c8737100d361da47..f11010d46c313389f797d728f4d11bff27562bcc 100644 (file)
--- a/README
+++ b/README
@@ -52,15 +52,6 @@ OPTIONS
     39
     :   MPEG-4 AAC ELD
 
-    129
-    :   MPEG-2 AAC LC
-
-    132
-    :   MPEG-2 HE-AAC (SBR)
-
-    156
-    :   MPEG-2 HE-AAC v2 (SBR+PS)
-
 -b, --bitrate \<n\>
 :   Target bitrate (for CBR)
 
index 922641e21aa4ae54c672a555e0a4b133e71b2f00..39987a6cbe5cc073c4be2c90a0a990ebfd7c2272 100644 (file)
@@ -1,10 +1,13 @@
-.TH FDKAAC 1 "November, 2013" 
+.\" Automatically generated by Pandoc 1.17.1
+.\"
+.TH "FDKAAC" "1" "November, 2013" "" ""
+.hy
 .SH NAME
 .PP
 fdkaac \- command line frontend for libfdk\-aac encoder
 .SH SYNOPSIS
 .PP
-\f[B]fdkaac\f[] [OPTIONS][FILE]
+\f[B]fdkaac\f[] [OPTIONS] [FILE]
 .SH DESCRIPTION
 .PP
 \f[B]fdkaac\f[] reads linear PCM audio in either WAV, raw PCM, or CAF
@@ -56,21 +59,6 @@ MPEG\-4 AAC LD
 MPEG\-4 AAC ELD
 .RS
 .RE
-.TP
-.B 129
-MPEG\-2 AAC LC
-.RS
-.RE
-.TP
-.B 132
-MPEG\-2 HE\-AAC (SBR)
-.RS
-.RE
-.TP
-.B 156
-MPEG\-2 HE\-AAC v2 (SBR+PS)
-.RS
-.RE
 .RE
 .TP
 .B \-b, \-\-bitrate <n>
index a6984fec8a94aa0216a7d02dea358f8879bf2717..0dd47bb109374c5ba9936979a4ed272a1c61de01 100644 (file)
 #include <string.h>
 #include "aacenc.h"
 
+int aacenc_is_explicit_bw_compatible_sbr_signaling_available()
+{
+    LIB_INFO lib_info;
+    aacenc_get_lib_info(&lib_info);
+    return lib_info.version > 0x03040900;
+}
+
 int aacenc_is_sbr_ratio_available()
 {
 #if AACENCODER_LIB_VL0 < 3 || (AACENCODER_LIB_VL0==3 && AACENCODER_LIB_VL1<4)
@@ -20,15 +27,14 @@ int aacenc_is_sbr_ratio_available()
 #else
     LIB_INFO lib_info;
     aacenc_get_lib_info(&lib_info);
-    return lib_info.version > 0x03040000;
+    return lib_info.version > 0x03040800;
 #endif
 }
 
 int aacenc_is_sbr_active(const aacenc_param_t *params)
 {
     switch (params->profile) {
-    case AOT_SBR: case AOT_PS: case AOT_MP2_SBR: case AOT_MP2_PS:
-    case AOT_DABPLUS_SBR: case AOT_DABPLUS_PS:
+    case AOT_SBR: case AOT_PS:
     case AOT_DRM_SBR: case AOT_DRM_MPEG_PS:
         return 1;
     }
@@ -39,9 +45,9 @@ int aacenc_is_sbr_active(const aacenc_param_t *params)
 
 int aacenc_is_dual_rate_sbr(const aacenc_param_t *params)
 {
-    if (params->profile == AOT_PS || params->profile == AOT_MP2_PS)
+    if (params->profile == AOT_PS)
         return 1;
-    else if (params->profile == AOT_SBR || params->profile == AOT_MP2_SBR)
+    else if (params->profile == AOT_SBR)
         return params->sbr_ratio == 0 || params->sbr_ratio == 2;
     else if (params->profile == AOT_ER_AAC_ELD && params->lowdelay_sbr)
         return params->sbr_ratio == 2;
@@ -64,6 +70,70 @@ void aacenc_get_lib_info(LIB_INFO *info)
     free(lib_info);
 }
 
+static const unsigned aacenc_sampling_freq_tab[] = {
+    96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 
+    16000, 12000, 11025, 8000, 7350, 0, 0, 0
+};
+
+static
+unsigned sampling_freq_index(unsigned rate)
+{
+    unsigned i;
+    for (i = 0; aacenc_sampling_freq_tab[i]; ++i)
+        if (aacenc_sampling_freq_tab[i] == rate)
+            return i;
+    return 0xf;
+}
+
+/*
+ * Append backward compatible SBR/PS signaling to implicit signaling ASC,
+ * if SBR/PS is present.
+ */
+int aacenc_mp4asc(const aacenc_param_t *params,
+                  const uint8_t *asc, uint32_t ascsize,
+                  uint8_t *outasc, uint32_t *outsize)
+{
+    unsigned asc_sfreq = aacenc_sampling_freq_tab[(asc[0]&0x7)<<1 |asc[1]>>7];
+    unsigned shift = aacenc_is_dual_rate_sbr(params);
+
+    switch (params->profile) {
+    case AOT_SBR:
+    case AOT_PS:
+        if (!shift)
+            break;
+        if (*outsize < ascsize + 3)
+            return -1;
+        memcpy(outasc, asc, ascsize);
+        /* syncExtensionType:11 (value:0x2b7) */
+        outasc[ascsize+0] = 0x2b << 1;
+        outasc[ascsize+1] = 0x7 << 5;
+        /* extensionAudioObjectType:5 (value:5)*/
+        outasc[ascsize+1] |= 5;
+        /* sbrPresentFlag:1 (value:1) */
+        outasc[ascsize+2] = 0x80;
+        /* extensionSamplingFrequencyIndex:4 */
+        outasc[ascsize+2] |= sampling_freq_index(asc_sfreq << shift) << 3;
+        if (params->profile == AOT_SBR) {
+            *outsize = ascsize + 3;
+            return 0;
+        }
+        if (*outsize < ascsize + 5)
+            return -1;
+        /* syncExtensionType:11 (value:0x548) */
+        outasc[ascsize+2] |= 0x5;
+        outasc[ascsize+3] = 0x48;
+        /* psPresentFlag:1 (value:1) */
+        outasc[ascsize+4] = 0x80;
+        *outsize = ascsize + 5;
+        return 0;
+    }
+    if (*outsize < ascsize)
+        return -1;
+    memcpy(outasc, asc, ascsize);
+    *outsize = ascsize;
+    return 0;
+}
+
 static
 int aacenc_channel_mode(const pcm_sample_description_t *format)
 {
@@ -140,7 +210,7 @@ int aacenc_init(HANDLE_AACENCODER *encoder, const aacenc_param_t *params,
     aacEncoder_SetParam(*encoder, AACENC_SBR_MODE, params->lowdelay_sbr);
 
 #if AACENCODER_LIB_VL0 > 3 || (AACENCODER_LIB_VL0==3 && AACENCODER_LIB_VL1>=4)
-    if (lib_info.version > 0x03040000)
+    if (lib_info.version > 0x03040800)
         aacEncoder_SetParam(*encoder, AACENC_SBR_RATIO, params->sbr_ratio);
 #endif
 
index ec0bea1ff5533f35fa2117423c3cd6c1fa3c8ae1..2b7d102d01f07509d51f2c25e00d09d9cc0ef120 100644 (file)
@@ -30,6 +30,8 @@ typedef struct aacenc_frame_t {
     uint32_t size, capacity;
 } aacenc_frame_t;
 
+int aacenc_is_explicit_bw_compatible_sbr_signaling_available();
+
 int aacenc_is_sbr_ratio_available();
 
 int aacenc_is_sbr_active(const aacenc_param_t *params);
@@ -38,6 +40,10 @@ int aacenc_is_dual_rate_sbr(const aacenc_param_t *params);
 
 void aacenc_get_lib_info(LIB_INFO *info);
 
+int aacenc_mp4asc(const aacenc_param_t *params,
+                  const uint8_t *asc, uint32_t ascsize,
+                  uint8_t *outasc, uint32_t *outsize);
+
 int aacenc_init(HANDLE_AACENCODER *encoder, const aacenc_param_t *params,
                 const pcm_sample_description_t *format,
                 AACENC_InfoStruct *info);
index 4f651abb5f7791aa7071f3c3ffbf8178b93d552b..cc7dcefa859a0b610c66ba7698767a33869775ce 100644 (file)
 
 int64_t aacenc_timer(void);
 FILE *aacenc_fopen(const char *name, const char *mode);
+#ifdef _WIN32
 void aacenc_getmainargs(int *argc, char ***argv);
+#else
+#define aacenc_getmainargs(argc, argv) (void)0
+#endif
 char *aacenc_to_utf8(const char *s);
+#ifdef _WIN32
 int aacenc_fprintf(FILE *fp, const char *fmt, ...);
+#else
+#define aacenc_fprintf fprintf
+#endif
 const char *aacenc_basename(const char *path);
+int aacenc_seekable(FILE *fp);
 
 #endif
index e101ff70fa3fdfccab558d1e47e5fc167edf869e..f895637c939a55068c4d27aca85569d7f5fd6102 100644 (file)
@@ -32,20 +32,9 @@ FILE *aacenc_fopen(const char *name, const char *mode)
     return fp;
 }
 
-void aacenc_getmainargs(int *argc, char ***argv)
+int aacenc_seekable(FILE *fp)
 {
-    return;
-}
-
-int aacenc_fprintf(FILE *fp, const char *fmt, ...)
-{
-    va_list ap;
-    int cnt;
-
-    va_start(ap, fmt);
-    cnt = vfprintf(fp, fmt, ap);
-    va_end(ap);
-    return cnt;
+    return fseek(fp, 0, SEEK_CUR) == 0;
 }
 
 /*
index 44822816afed5554bec473a6cb3f65ab5f97c5e0..8acbda2de858f838d22727534d79865db4618864 100644 (file)
 #include "compat.h"
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
-
-typedef struct
-{
-    int newmode;
-} _startupinfo;
-
-extern
-int __wgetmainargs(int *, wchar_t ***, wchar_t ***, int, _startupinfo *);
+#include <shellapi.h>
 
 int64_t aacenc_timer(void)
 {
@@ -41,6 +34,11 @@ int64_t aacenc_timer(void)
     return (int64_t)tv.time * 1000 + tv.millitm;
 }
 
+int aacenc_seekable(FILE *fp)
+{
+    return GetFileType((HANDLE)_get_osfhandle(_fileno(fp))) == FILE_TYPE_DISK;
+}
+
 static
 int codepage_decode_wchar(int codepage, const char *from, wchar_t **to)
 {
@@ -98,13 +96,13 @@ void aacenc_free_mainargs(void)
 void aacenc_getmainargs(int *argc, char ***argv)
 {
     int i;
-    wchar_t **wargv, **envp;
-    _startupinfo si = { 0 };
+    wchar_t **wargv;
 
-    __wgetmainargs(argc, &wargv, &envp, 1, &si);
+    wargv = CommandLineToArgvW(GetCommandLineW(), argc);
     *argv = malloc((*argc + 1) * sizeof(char*));
     for (i = 0; i < *argc; ++i)
         codepage_encode_wchar(CP_UTF8, wargv[i], &(*argv)[i]);
+        LocalFree(wargv);
     (*argv)[*argc] = 0;
     __aacenc_argv__ = *argv;
     atexit(aacenc_free_mainargs);
index 1c51c00357870a4ccf1264750111ba89aaf99d2b..7f3b180a46fe093bd1cf80b51239d99eb2db4182 100644 (file)
@@ -39,6 +39,14 @@ typedef struct m4af_chunk_entry_t {
     uint32_t duration;
 } m4af_chunk_entry_t;
 
+typedef struct m4af_itmf_entry_t {
+    uint32_t fcc;
+    char *name;
+    uint32_t type_code;
+    char *data;
+    uint32_t data_size;
+} m4af_itmf_entry_t;
+
 typedef struct m4af_track_t {
     uint32_t codec;
     uint32_t timescale;
@@ -1374,7 +1382,6 @@ uint64_t m4af_patch_moov(m4af_ctx_t *ctx, uint32_t moov_size, uint32_t offset)
 static
 void m4af_shift_mdat_pos(m4af_ctx_t *ctx, uint32_t offset)
 {
-    unsigned i, j;
     int64_t begin, end;
     char *buf;
     
index 09ebe9333ba4b101190714e7116a76f103ff4a5e..3a04742a9e7055dd7d76025eeeac4aa7c020491f 100644 (file)
@@ -71,14 +71,6 @@ typedef struct m4af_io_callbacks_t {
     m4af_tell_callback tell;
 } m4af_io_callbacks_t;
 
-typedef struct m4af_itmf_entry_t {
-    uint32_t fcc;
-    char *name;
-    uint32_t type_code;
-    char *data;
-    uint32_t data_size;
-} m4af_itmf_entry_t;
-
 typedef struct m4af_ctx_t m4af_ctx_t;
 
 
index 6ffb7b197cc6228a6fbc5d18d2f9f5fd0433ac98..1eb9a0e827c6338c9dc1095ca8e988d2e0b0eaec 100644 (file)
@@ -117,9 +117,6 @@ PROGNAME " %s\n"
 "                                29: MPEG-4 HE-AAC v2 (SBR+PS)\n"
 "                                23: MPEG-4 AAC LD\n"
 "                                39: MPEG-4 AAC ELD\n"
-"                               129: MPEG-2 AAC LC\n"
-"                               132: MPEG-2 HE-AAC (SBR)\n"
-"                               156: MPEG-2 HE-AAC v2 (SBR+PS)\n"
 " -b, --bitrate <n>             Bitrate in bits per seconds (for CBR)\n"
 " -m, --bitrate-mode <n>        Bitrate configuration\n"
 "                                 0: CBR (default)\n"
@@ -702,7 +699,6 @@ pcm_reader_t *open_input(aacenc_param_ex_t *params)
 {
     pcm_io_context_t io = { 0 };
     pcm_reader_t *reader = 0;
-    struct stat stb = { 0 };
 
     if ((params->input_fp = aacenc_fopen(params->input_filename, "rb")) == 0) {
         aacenc_fprintf(stderr, "ERROR: %s: %s\n", params->input_filename,
@@ -710,8 +706,7 @@ pcm_reader_t *open_input(aacenc_param_ex_t *params)
         goto FAIL;
     }
     io.cookie = params->input_fp;
-    if (fstat(fileno(params->input_fp), &stb) == 0
-            && (stb.st_mode & S_IFMT) == S_IFREG)
+    if (aacenc_seekable(params->input_fp))
         io.vtbl = &pcm_io_vtbl;
     else
         io.vtbl = &pcm_io_vtbl_noseek;
@@ -803,12 +798,14 @@ int main(int argc, char **argv)
         params.sbr_ratio = 2;
     }
     scale_shift = aacenc_is_dual_rate_sbr((aacenc_param_t*)&params);
-    params.sbr_signaling =
-        (params.transport_format == TT_MP4_LOAS) ? 2 :
-        (params.transport_format == TT_MP4_RAW)  ? 1 : 0;
-    if (sbr_mode && !scale_shift)
-        params.sbr_signaling = 2;
-
+    params.sbr_signaling = 0;
+    if (sbr_mode) {
+        if (params.transport_format == TT_MP4_LOAS || !scale_shift)
+            params.sbr_signaling = 2;
+        if (params.transport_format == TT_MP4_RAW &&
+            aacenc_is_explicit_bw_compatible_sbr_signaling_available())
+            params.sbr_signaling = 1;
+    }
     if (aacenc_init(&encoder, (aacenc_param_t*)&params, sample_format,
                     &aacinfo) < 0)
         goto END;
@@ -834,9 +831,17 @@ int main(int argc, char **argv)
                                 params.output_fp)) < 0)
             goto END;
         m4af_set_num_channels(m4af, 0, sample_format->channels_per_frame);
-        m4af_set_decoder_specific_info(m4af, 0,
-                                       aacinfo.confBuf, aacinfo.confSize);
         m4af_set_fixed_frame_duration(m4af, 0, framelen >> scale_shift);
+        if (aacenc_is_explicit_bw_compatible_sbr_signaling_available())
+            m4af_set_decoder_specific_info(m4af, 0,
+                                           aacinfo.confBuf, aacinfo.confSize);
+        else {
+            uint8_t mp4asc[32];
+            uint32_t ascsize = sizeof(mp4asc);
+            aacenc_mp4asc((aacenc_param_t*)&params, aacinfo.confBuf,
+                          aacinfo.confSize, mp4asc, &ascsize);
+            m4af_set_decoder_specific_info(m4af, 0, mp4asc, ascsize);
+        }
         m4af_set_vbr_mode(m4af, 0, params.bitrate_mode);
         m4af_set_priming_mode(m4af, params.gapless_mode + 1);
         m4af_begin_write(m4af);
index 594879f080e79ae7b142a832d51bd4e630633213..3d7ce3e814382a49168769d959c0518e6a74be58 100644 (file)
@@ -41,7 +41,6 @@ static int64_t get_position(pcm_reader_t *reader)
 
 static int read_frames(pcm_reader_t *reader, void *buffer, unsigned nframes)
 {
-    unsigned i;
     pcm_float_converter_t *self = (pcm_float_converter_t *)reader;
     const pcm_sample_description_t *sfmt = pcm_get_format(self->src);
     nframes = pcm_read_frames(self->src, buffer, nframes);
index 151b33eec61cd9b852afd306b7b6139c3a9b961e..10bb7c43ddd3513de9a4b39d7a09b580ff062cb6 100644 (file)
--- a/version.h
+++ b/version.h
@@ -1,4 +1,4 @@
 #ifndef VERSION_H
 #define VERSION_H
-const char *fdkaac_version = "0.6.2";
+const char *fdkaac_version = "0.6.3";
 #endif
This page took 0.02939 seconds and 4 git commands to generate.