You can subscribe to this list here.
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(6) |
Jul
(10) |
Aug
(9) |
Sep
(9) |
Oct
(2) |
Nov
(1) |
Dec
(2) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010 |
Jan
(1) |
Feb
|
Mar
|
Apr
(4) |
May
|
Jun
(2) |
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
(8) |
Apr
(20) |
May
(5) |
Jun
(1) |
Jul
(3) |
Aug
(1) |
Sep
|
Oct
|
Nov
(8) |
Dec
(1) |
2012 |
Jan
(15) |
Feb
(28) |
Mar
(2) |
Apr
|
May
(7) |
Jun
(2) |
Jul
(38) |
Aug
(14) |
Sep
(13) |
Oct
(3) |
Nov
(15) |
Dec
|
2014 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2015 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
میدونم که قرار بود دیگه پیام ندم و قولمو شکوندم چون یادم رفته بودشماره ات رو پاک کردم ولی یه چیزایی بود که خواستم بهت بگم. هرچند که ناخوشایند باشه ما از روز اول هدف اصلیمون از چت کردن خوش گذروندن بود.هم من هم تو.اگر بگی هدف اصلی غیر ازین بود باور نمیکنم چون اگر غیر این بود و تو جور دیگه ای به رابطه نگاه میکردی یهو بدون هیچحرفی گوشیت رو دو ماه خاموش نمیکردی بدون ااینکه بهم خبر بدی. من همیشه بهت میگفتم که دوست ندارم بهم وابسته شیم و دلیلشم کاملا مشخص بود و آخرشم. به این حرف من رسیدیم چون آخر سر این تو بودی که شروع کردی به بهونه گرفتن.من توی خدمت یواشکی گوشی برده بودم و فشار زیاد روم بود و میخواستن بفرستنم بازداشتگاه بعد تو هی بهونه میگرفتی چرا نمیدونم جوابمو نمیدی دروغ میگی و ازین حرفا. من هیچ وقت نگفتم دوستت دارم برای اینکه از اول رابطه مون براساس خوشگذرونی بود نه نميخواستم بهت دروغ بگم و با احساساتت بازی کنم... رابطه مون یه رابطه عاطفی نبود از اول.توهم این طوری قبول کرده بودی رابطه رو اما اواخر عاطفیش کردی.که شایدم حق داشتی. اما بهرحال من دیگه نمیدونستم باید چکار کنم. اما تو همیشه میخوای از من یه هیولای نامرد درست کنی و خودت رو فرشته جلوه بدی. نه هم من اشتباه داشتم هم تو هم من خوبی کردم هم تو. این طوری بود... ent from Yahoo Mail on Android
On Mon, 2 Feb 2015, Nicanor Garcia wrote: > Hello, > > Sorry if this is not the right to place this question, but I haven't been > able to find information about this. > > I'm currently using avconv with libopencore to encode and decode voice > signals with the AMR codec for my research, but I have some questions about > its behavior which I haven't been able to answer myself by searching through > the documentation. > > Currently I'm using the -b option to set the bitrate of the encoded audio, > but I want to know what would happen if I didn't set that option? Would I > get a multi-rate audio signal? This is more a question about libavcodec, not about opencore-amr itself. But anyway; no, if you leave out the -b option, the bitrate would be set to some default (200 kbps), and it would pick the closest bitrate (12200 bps for AMR NB) instead. // Martin
Hello, Sorry if this is not the right to place this question, but I haven't been able to find information about this. I'm currently using avconv with libopencore to encode and decode voice signals with the AMR codec for my research, but I have some questions about its behavior which I haven't been able to answer myself by searching through the documentation. Currently I'm using the -b option to set the bitrate of the encoded audio, but I want to know what would happen if I didn't set that option? Would I get a multi-rate audio signal? If you could lead me to more information about this options I would really appreciate it. Thank you very much. Nicanor Garcia
Hi. I am using opencore-amr in a windows real-time project.I noticed that the library has a kind of VAD functionality which makes the noise packets silence.I want to distinguish the noise packets from voice ones which decode to the silence packets.How can I do that?How can I distinguish AMR silent packets (in order to not process them)?
Module: fdk-aac Tag: v0.1.1 SHA1: 1551d17717e42e7c295da0a682ae299791ee87c7 Tagger: Martin Storsjo <ma...@ma...> Date: Tue Nov 13 23:47:47 2012 +0200 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=tag;h=1551d17717e42e7c295da0a682ae299791ee87c7 fdk-aac 0.1.1 This is the second release of the fdk-aac project, including crash fixes and a number of other minor improvements.
Module: fdk-aac Branch: master Commit: b966edf7fc05d22e7370d263cbc682efcd361889 Author: Martin Storsjo <ma...@ma...> Date: Tue Nov 13 23:26:30 2012 +0200 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=b966edf7fc05d22e7370d263cbc682efcd361889 Add a changelog entry for 0.1.1, bump the version numbers --- ChangeLog | 9 +++++++++ configure.ac | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index e844fc6..9e6eaa1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +0.1.1 + - Updated to a new upstream version from Android 4.2, fixing a lot of crashes + - Cleanup of autotools usage + - Make sure the shared library links to libm if necessary + - Performance improvements on x86 + - Added support for WG4/DVD audio channel mappings + - Minimized the differences to upstream + - Added an example encoder tool + 0.1.0 - Initial release of fdk-aac - autotools based build system diff --git a/configure.ac b/configure.ac index 44fb2f1..c52d0b9 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ dnl -*- Autoconf -*- dnl Process this file with autoconf to produce a configure script. -AC_INIT([fdk-aac], [0.1.0], [http://sourceforge.net/projects/opencore-amr/]) +AC_INIT([fdk-aac], [0.1.1], [http://sourceforge.net/projects/opencore-amr/]) AC_CONFIG_AUX_DIR(.) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([tar-ustar foreign]) @@ -26,7 +26,7 @@ AC_CHECK_LIB([m], [sin]) dnl soname version to use dnl goes by ‘current[:revision[:age]]’ with the soname ending up as dnl current.age.revision -FDK_AAC_VERSION=0:1:0 +FDK_AAC_VERSION=0:2:0 AC_SUBST(FDK_AAC_VERSION) AC_CONFIG_FILES([Makefile
Module: fdk-aac Branch: master Commit: ec5d9228938a0b3746bab2934d06828576122514 Author: Martin Storsjo <ma...@ma...> Date: Fri Nov 2 12:21:27 2012 +0200 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=ec5d9228938a0b3746bab2934d06828576122514 Rename sbr_rom/ram files back to the original names This minimizes the differences to upstream. --- Makefile.am | 4 ++-- libSBRenc/src/{sbr_ram_enc.cpp => sbr_ram.cpp} | 0 libSBRenc/src/{sbr_rom_enc.cpp => sbr_rom.cpp} | 0 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index a5ef764..e995b0a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -159,7 +159,7 @@ SBRENC_SRC = \ libSBRenc/src/ps_encode.cpp \ libSBRenc/src/resampler.cpp \ libSBRenc/src/sbr_encoder.cpp \ - libSBRenc/src/sbr_ram_enc.cpp \ + libSBRenc/src/sbr_ram.cpp \ libSBRenc/src/ton_corr.cpp \ libSBRenc/src/code_env.cpp \ libSBRenc/src/env_est.cpp \ @@ -168,7 +168,7 @@ SBRENC_SRC = \ libSBRenc/src/ps_main.cpp \ libSBRenc/src/sbrenc_freq_sca.cpp \ libSBRenc/src/sbr_misc.cpp \ - libSBRenc/src/sbr_rom_enc.cpp \ + libSBRenc/src/sbr_rom.cpp \ libSBRenc/src/tran_det.cpp SYS_SRC = \ diff --git a/libSBRenc/src/sbr_ram_enc.cpp b/libSBRenc/src/sbr_ram.cpp similarity index 100% rename from libSBRenc/src/sbr_ram_enc.cpp rename to libSBRenc/src/sbr_ram.cpp diff --git a/libSBRenc/src/sbr_rom_enc.cpp b/libSBRenc/src/sbr_rom.cpp similarity index 100% rename from libSBRenc/src/sbr_rom_enc.cpp rename to libSBRenc/src/sbr_rom.cpp
Module: fdk-aac Branch: master Commit: 53b442d8af20822cb65b060587e04986f4610358 Author: Martin Storsjo <ma...@ma...> Date: Fri Nov 2 12:47:43 2012 +0200 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=53b442d8af20822cb65b060587e04986f4610358 build: Build object files in subdirectories This allows producing more than one object file with the same name. --- Makefile.am | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/Makefile.am b/Makefile.am index 3c5e958..a5ef764 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,5 @@ ACLOCAL_AMFLAGS = -I m4 +AUTOMAKE_OPTIONS = subdir-objects AM_CPPFLAGS = \ -I$(top_srcdir)/libAACdec/include \
Module: fdk-aac Branch: master Commit: dc409c50e6e207a5ad1747d19cbafcf7856ba163 Author: Martin Storsjo <ma...@ma...> Date: Fri Nov 2 12:45:29 2012 +0200 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=dc409c50e6e207a5ad1747d19cbafcf7856ba163 build: Don't use make variables in the declaration of source files This is required for working dependency generation with the subdir-objects option enabled. --- Makefile.am | 253 ++++++++++++++++++++++++++++------------------------------ 1 files changed, 122 insertions(+), 131 deletions(-) diff --git a/Makefile.am b/Makefile.am index 52e56ca..3c5e958 100644 --- a/Makefile.am +++ b/Makefile.am @@ -41,149 +41,140 @@ aac_enc_SOURCES = aac-enc.c wavreader.c noinst_HEADERS = wavreader.h endif -AACDEC_DIR = $(top_srcdir)/libAACdec/src AACDEC_SRC = \ - $(AACDEC_DIR)/aacdec_drc.cpp \ - $(AACDEC_DIR)/aacdec_hcr.cpp \ - $(AACDEC_DIR)/aacdecoder.cpp \ - $(AACDEC_DIR)/aacdec_pns.cpp \ - $(AACDEC_DIR)/aac_ram.cpp \ - $(AACDEC_DIR)/block.cpp \ - $(AACDEC_DIR)/channelinfo.cpp \ - $(AACDEC_DIR)/ldfiltbank.cpp \ - $(AACDEC_DIR)/rvlcbit.cpp \ - $(AACDEC_DIR)/rvlc.cpp \ - $(AACDEC_DIR)/aacdec_hcr_bit.cpp \ - $(AACDEC_DIR)/aacdec_hcrs.cpp \ - $(AACDEC_DIR)/aacdecoder_lib.cpp \ - $(AACDEC_DIR)/aacdec_tns.cpp \ - $(AACDEC_DIR)/aac_rom.cpp \ - $(AACDEC_DIR)/channel.cpp \ - $(AACDEC_DIR)/conceal.cpp \ - $(AACDEC_DIR)/pulsedata.cpp \ - $(AACDEC_DIR)/rvlcconceal.cpp \ - $(AACDEC_DIR)/stereo.cpp - -AACENC_DIR = $(top_srcdir)/libAACenc/src + libAACdec/src/aacdec_drc.cpp \ + libAACdec/src/aacdec_hcr.cpp \ + libAACdec/src/aacdecoder.cpp \ + libAACdec/src/aacdec_pns.cpp \ + libAACdec/src/aac_ram.cpp \ + libAACdec/src/block.cpp \ + libAACdec/src/channelinfo.cpp \ + libAACdec/src/ldfiltbank.cpp \ + libAACdec/src/rvlcbit.cpp \ + libAACdec/src/rvlc.cpp \ + libAACdec/src/aacdec_hcr_bit.cpp \ + libAACdec/src/aacdec_hcrs.cpp \ + libAACdec/src/aacdecoder_lib.cpp \ + libAACdec/src/aacdec_tns.cpp \ + libAACdec/src/aac_rom.cpp \ + libAACdec/src/channel.cpp \ + libAACdec/src/conceal.cpp \ + libAACdec/src/pulsedata.cpp \ + libAACdec/src/rvlcconceal.cpp \ + libAACdec/src/stereo.cpp + AACENC_SRC = \ - $(AACENC_DIR)/aacenc.cpp \ - $(AACENC_DIR)/aacEnc_ram.cpp \ - $(AACENC_DIR)/band_nrg.cpp \ - $(AACENC_DIR)/block_switch.cpp \ - $(AACENC_DIR)/grp_data.cpp \ - $(AACENC_DIR)/metadata_main.cpp \ - $(AACENC_DIR)/pre_echo_control.cpp \ - $(AACENC_DIR)/quantize.cpp \ - $(AACENC_DIR)/tonality.cpp \ - $(AACENC_DIR)/aacenc_hcr.cpp \ - $(AACENC_DIR)/aacEnc_rom.cpp \ - $(AACENC_DIR)/bandwidth.cpp \ - $(AACENC_DIR)/channel_map.cpp \ - $(AACENC_DIR)/intensity.cpp \ - $(AACENC_DIR)/ms_stereo.cpp \ - $(AACENC_DIR)/psy_configuration.cpp \ - $(AACENC_DIR)/sf_estim.cpp \ - $(AACENC_DIR)/transform.cpp \ - $(AACENC_DIR)/aacenc_lib.cpp \ - $(AACENC_DIR)/aacenc_tns.cpp \ - $(AACENC_DIR)/bit_cnt.cpp \ - $(AACENC_DIR)/chaosmeasure.cpp \ - $(AACENC_DIR)/line_pe.cpp \ - $(AACENC_DIR)/noisedet.cpp \ - $(AACENC_DIR)/psy_main.cpp \ - $(AACENC_DIR)/spreading.cpp \ - $(AACENC_DIR)/aacenc_pns.cpp \ - $(AACENC_DIR)/adj_thr.cpp \ - $(AACENC_DIR)/bitenc.cpp \ - $(AACENC_DIR)/dyn_bits.cpp \ - $(AACENC_DIR)/metadata_compressor.cpp \ - $(AACENC_DIR)/pnsparam.cpp \ - $(AACENC_DIR)/qc_main.cpp - -FDK_DIR = $(top_srcdir)/libFDK/src + libAACenc/src/aacenc.cpp \ + libAACenc/src/aacEnc_ram.cpp \ + libAACenc/src/band_nrg.cpp \ + libAACenc/src/block_switch.cpp \ + libAACenc/src/grp_data.cpp \ + libAACenc/src/metadata_main.cpp \ + libAACenc/src/pre_echo_control.cpp \ + libAACenc/src/quantize.cpp \ + libAACenc/src/tonality.cpp \ + libAACenc/src/aacenc_hcr.cpp \ + libAACenc/src/aacEnc_rom.cpp \ + libAACenc/src/bandwidth.cpp \ + libAACenc/src/channel_map.cpp \ + libAACenc/src/intensity.cpp \ + libAACenc/src/ms_stereo.cpp \ + libAACenc/src/psy_configuration.cpp \ + libAACenc/src/sf_estim.cpp \ + libAACenc/src/transform.cpp \ + libAACenc/src/aacenc_lib.cpp \ + libAACenc/src/aacenc_tns.cpp \ + libAACenc/src/bit_cnt.cpp \ + libAACenc/src/chaosmeasure.cpp \ + libAACenc/src/line_pe.cpp \ + libAACenc/src/noisedet.cpp \ + libAACenc/src/psy_main.cpp \ + libAACenc/src/spreading.cpp \ + libAACenc/src/aacenc_pns.cpp \ + libAACenc/src/adj_thr.cpp \ + libAACenc/src/bitenc.cpp \ + libAACenc/src/dyn_bits.cpp \ + libAACenc/src/metadata_compressor.cpp \ + libAACenc/src/pnsparam.cpp \ + libAACenc/src/qc_main.cpp + FDK_SRC = \ - $(FDK_DIR)/autocorr2nd.cpp \ - $(FDK_DIR)/dct.cpp \ - $(FDK_DIR)/FDK_bitbuffer.cpp \ - $(FDK_DIR)/FDK_core.cpp \ - $(FDK_DIR)/FDK_crc.cpp \ - $(FDK_DIR)/FDK_hybrid.cpp \ - $(FDK_DIR)/FDK_tools_rom.cpp \ - $(FDK_DIR)/FDK_trigFcts.cpp \ - $(FDK_DIR)/fft.cpp \ - $(FDK_DIR)/fft_rad2.cpp \ - $(FDK_DIR)/fixpoint_math.cpp \ - $(FDK_DIR)/mdct.cpp \ - $(FDK_DIR)/qmf.cpp \ - $(FDK_DIR)/scale.cpp - -MPEGTPDEC_DIR = $(top_srcdir)/libMpegTPDec/src + libFDK/src/autocorr2nd.cpp \ + libFDK/src/dct.cpp \ + libFDK/src/FDK_bitbuffer.cpp \ + libFDK/src/FDK_core.cpp \ + libFDK/src/FDK_crc.cpp \ + libFDK/src/FDK_hybrid.cpp \ + libFDK/src/FDK_tools_rom.cpp \ + libFDK/src/FDK_trigFcts.cpp \ + libFDK/src/fft.cpp \ + libFDK/src/fft_rad2.cpp \ + libFDK/src/fixpoint_math.cpp \ + libFDK/src/mdct.cpp \ + libFDK/src/qmf.cpp \ + libFDK/src/scale.cpp + MPEGTPDEC_SRC = \ - $(MPEGTPDEC_DIR)/tpdec_adif.cpp \ - $(MPEGTPDEC_DIR)/tpdec_adts.cpp \ - $(MPEGTPDEC_DIR)/tpdec_asc.cpp \ - $(MPEGTPDEC_DIR)/tpdec_latm.cpp \ - $(MPEGTPDEC_DIR)/tpdec_lib.cpp + libMpegTPDec/src/tpdec_adif.cpp \ + libMpegTPDec/src/tpdec_adts.cpp \ + libMpegTPDec/src/tpdec_asc.cpp \ + libMpegTPDec/src/tpdec_latm.cpp \ + libMpegTPDec/src/tpdec_lib.cpp -MPEGTPENC_DIR = $(top_srcdir)/libMpegTPEnc/src MPEGTPENC_SRC = \ - $(MPEGTPENC_DIR)/tpenc_adif.cpp \ - $(MPEGTPENC_DIR)/tpenc_adts.cpp \ - $(MPEGTPENC_DIR)/tpenc_asc.cpp \ - $(MPEGTPENC_DIR)/tpenc_latm.cpp \ - $(MPEGTPENC_DIR)/tpenc_lib.cpp + libMpegTPEnc/src/tpenc_adif.cpp \ + libMpegTPEnc/src/tpenc_adts.cpp \ + libMpegTPEnc/src/tpenc_asc.cpp \ + libMpegTPEnc/src/tpenc_latm.cpp \ + libMpegTPEnc/src/tpenc_lib.cpp -PCMUTILS_DIR = $(top_srcdir)/libPCMutils/src PCMUTILS_SRC = \ - $(PCMUTILS_DIR)/pcmutils_lib.cpp + libPCMutils/src/pcmutils_lib.cpp -SBRDEC_DIR = $(top_srcdir)/libSBRdec/src SBRDEC_SRC = \ - $(SBRDEC_DIR)/env_calc.cpp \ - $(SBRDEC_DIR)/env_dec.cpp \ - $(SBRDEC_DIR)/env_extr.cpp \ - $(SBRDEC_DIR)/huff_dec.cpp \ - $(SBRDEC_DIR)/lpp_tran.cpp \ - $(SBRDEC_DIR)/psbitdec.cpp \ - $(SBRDEC_DIR)/psdec.cpp \ - $(SBRDEC_DIR)/psdec_hybrid.cpp \ - $(SBRDEC_DIR)/sbr_crc.cpp \ - $(SBRDEC_DIR)/sbr_deb.cpp \ - $(SBRDEC_DIR)/sbr_dec.cpp \ - $(SBRDEC_DIR)/sbrdec_drc.cpp \ - $(SBRDEC_DIR)/sbrdec_freq_sca.cpp \ - $(SBRDEC_DIR)/sbrdecoder.cpp \ - $(SBRDEC_DIR)/sbr_ram.cpp \ - $(SBRDEC_DIR)/sbr_rom.cpp - -SBRENC_DIR = $(top_srcdir)/libSBRenc/src + libSBRdec/src/env_calc.cpp \ + libSBRdec/src/env_dec.cpp \ + libSBRdec/src/env_extr.cpp \ + libSBRdec/src/huff_dec.cpp \ + libSBRdec/src/lpp_tran.cpp \ + libSBRdec/src/psbitdec.cpp \ + libSBRdec/src/psdec.cpp \ + libSBRdec/src/psdec_hybrid.cpp \ + libSBRdec/src/sbr_crc.cpp \ + libSBRdec/src/sbr_deb.cpp \ + libSBRdec/src/sbr_dec.cpp \ + libSBRdec/src/sbrdec_drc.cpp \ + libSBRdec/src/sbrdec_freq_sca.cpp \ + libSBRdec/src/sbrdecoder.cpp \ + libSBRdec/src/sbr_ram.cpp \ + libSBRdec/src/sbr_rom.cpp + SBRENC_SRC = \ - $(SBRENC_DIR)/bit_sbr.cpp \ - $(SBRENC_DIR)/env_bit.cpp \ - $(SBRENC_DIR)/fram_gen.cpp \ - $(SBRENC_DIR)/mh_det.cpp \ - $(SBRENC_DIR)/ps_bitenc.cpp \ - $(SBRENC_DIR)/ps_encode.cpp \ - $(SBRENC_DIR)/resampler.cpp \ - $(SBRENC_DIR)/sbr_encoder.cpp \ - $(SBRENC_DIR)/sbr_ram_enc.cpp \ - $(SBRENC_DIR)/ton_corr.cpp \ - $(SBRENC_DIR)/code_env.cpp \ - $(SBRENC_DIR)/env_est.cpp \ - $(SBRENC_DIR)/invf_est.cpp \ - $(SBRENC_DIR)/nf_est.cpp \ - $(SBRENC_DIR)/ps_main.cpp \ - $(SBRENC_DIR)/sbrenc_freq_sca.cpp \ - $(SBRENC_DIR)/sbr_misc.cpp \ - $(SBRENC_DIR)/sbr_rom_enc.cpp \ - $(SBRENC_DIR)/tran_det.cpp - -SYS_DIR = $(top_srcdir)/libSYS/src + libSBRenc/src/bit_sbr.cpp \ + libSBRenc/src/env_bit.cpp \ + libSBRenc/src/fram_gen.cpp \ + libSBRenc/src/mh_det.cpp \ + libSBRenc/src/ps_bitenc.cpp \ + libSBRenc/src/ps_encode.cpp \ + libSBRenc/src/resampler.cpp \ + libSBRenc/src/sbr_encoder.cpp \ + libSBRenc/src/sbr_ram_enc.cpp \ + libSBRenc/src/ton_corr.cpp \ + libSBRenc/src/code_env.cpp \ + libSBRenc/src/env_est.cpp \ + libSBRenc/src/invf_est.cpp \ + libSBRenc/src/nf_est.cpp \ + libSBRenc/src/ps_main.cpp \ + libSBRenc/src/sbrenc_freq_sca.cpp \ + libSBRenc/src/sbr_misc.cpp \ + libSBRenc/src/sbr_rom_enc.cpp \ + libSBRenc/src/tran_det.cpp + SYS_SRC = \ - $(SYS_DIR)/cmdl_parser.cpp \ - $(SYS_DIR)/conv_string.cpp \ - $(SYS_DIR)/genericStds.cpp \ - $(SYS_DIR)/wav_file.cpp + libSYS/src/cmdl_parser.cpp \ + libSYS/src/conv_string.cpp \ + libSYS/src/genericStds.cpp \ + libSYS/src/wav_file.cpp libfdk_aac_la_SOURCES = \ $(AACDEC_SRC) $(AACENC_SRC) \
Module: fdk-aac Branch: master Commit: 9285c096fe4b8810a290875d73d35a4496e7c4b3 Author: Martin Storsjo <ma...@ma...> Date: Thu Nov 1 11:15:28 2012 +0200 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=9285c096fe4b8810a290875d73d35a4496e7c4b3 Revert "Use __builtin_clz instead of default implementation of fixnormz on GCC" This reverts commit e036dbc8eb7d5fdd02dc70faff20e9ac3e2989ca. Upstream took __builtin_clz in use (in the new header libFDK/include/x86/clz_x86.h, together with an alternative implementation for MSVC), so this change can be dropped to minimize the differences. --- libFDK/include/clz.h | 12 ------------ 1 files changed, 0 insertions(+), 12 deletions(-) diff --git a/libFDK/include/clz.h b/libFDK/include/clz.h index d276002..38c5073 100644 --- a/libFDK/include/clz.h +++ b/libFDK/include/clz.h @@ -118,11 +118,6 @@ inline INT fixnormz_S (SHORT a) { return fixnormz_D((INT)(a)); } -#elif defined(__GNUC__) -inline INT fixnormz_S (SHORT a) -{ - return a ? __builtin_clz(a) : 16; -} #else inline INT fixnormz_S (SHORT a) { @@ -139,12 +134,6 @@ inline INT fixnormz_S (SHORT a) #endif #if !defined(FUNCTION_fixnormz_D) -#if defined(__GNUC__) -inline INT fixnormz_D (LONG a) -{ - return a ? __builtin_clz(a) : 32; -} -#else inline INT fixnormz_D (LONG a) { INT leadingBits = 0; @@ -157,7 +146,6 @@ inline INT fixnormz_D (LONG a) return (leadingBits); } #endif -#endif /*****************************************************************************
Module: fdk-aac Branch: master Commit: 48cfc02cbf7016a4c1e3d537fa0bba4278f2c173 Author: Martin Storsjo <ma...@ma...> Date: Thu Nov 1 11:11:46 2012 +0200 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=48cfc02cbf7016a4c1e3d537fa0bba4278f2c173 Revert parts of "Use saturating adds to avoid overflow" This reverts commit 839ae290c1f5a263613bea1a5fde863e757a8849. This change is no longer necessary on top of the new upstream, I cannot reproduce the crash that this fixed with the new upstream. --- libAACenc/src/aacenc_tns.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libAACenc/src/aacenc_tns.cpp b/libAACenc/src/aacenc_tns.cpp index d6339fc..00b2bca 100644 --- a/libAACenc/src/aacenc_tns.cpp +++ b/libAACenc/src/aacenc_tns.cpp @@ -1150,8 +1150,8 @@ static INT FDKaacEnc_AutoToParcor( for(j=numOfCoeff-i-1; j>=0; j--) { FIXP_DBL accu1 = fMult(tmp, input[j]); FIXP_DBL accu2 = fMult(tmp, workBuffer[j]); - workBuffer[j] = fAddSaturate(workBuffer[j], accu1); - input[j] = fAddSaturate(input[j], accu2); + workBuffer[j] += accu1; + input[j] += accu2; } workBuffer++;
Module: fdk-aac Branch: master Commit: dc0de33e863cb55f500f9cbf113371d1ec0f601a Author: Martin Storsjo <ma...@ma...> Date: Fri Jul 6 17:14:12 2012 +0300 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=dc0de33e863cb55f500f9cbf113371d1ec0f601a Only use __int64 on MSVC, not on all win32 compilers Mingw32 doesn't define the __int64 types. This was implicitly reverted in AOSP (where this change was already merged before) by the new code drop from Fraunhofer. --- libSYS/include/machine_type.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/libSYS/include/machine_type.h b/libSYS/include/machine_type.h index b5642b2..d04a8e8 100644 --- a/libSYS/include/machine_type.h +++ b/libSYS/include/machine_type.h @@ -173,7 +173,7 @@ amm...@ii... /* Define 64 bit base integer type. */ -#ifdef _WIN32 +#ifdef _MSC_VER typedef __int64 INT64; typedef unsigned __int64 UINT64; #else
Module: fdk-aac Branch: master Commit: 961d5598d3d514916eebc0ac89c9459b4a02ee51 Author: Martin Storsjo <ma...@ma...> Date: Thu Nov 1 11:02:05 2012 +0200 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=961d5598d3d514916eebc0ac89c9459b4a02ee51 Update Makefile.am to account for a removed file in the latest upstream --- Makefile.am | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index 319cc0c..52e56ca 100644 --- a/Makefile.am +++ b/Makefile.am @@ -98,8 +98,7 @@ AACENC_SRC = \ $(AACENC_DIR)/dyn_bits.cpp \ $(AACENC_DIR)/metadata_compressor.cpp \ $(AACENC_DIR)/pnsparam.cpp \ - $(AACENC_DIR)/qc_main.cpp \ - $(AACENC_DIR)/tns_param.cpp + $(AACENC_DIR)/qc_main.cpp FDK_DIR = $(top_srcdir)/libFDK/src FDK_SRC = \
Module: fdk-aac Branch: master Commit: 54dfe1ec6972ca0d56dcb671448f84fea5e37e35 Author: Martin Storsjo <ma...@ma...> Date: Thu Nov 1 11:08:03 2012 +0200 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=54dfe1ec6972ca0d56dcb671448f84fea5e37e35 Merge remote-tracking branch 'aosp/jb-mr1-release' into master Conflicts: libAACenc/src/band_nrg.cpp libAACenc/src/grp_data.cpp libSBRenc/src/env_est.cpp ---
Module: fdk-aac Branch: master Commit: 6ab36997af5d5acda4f21d33031f4e45c85f96b7 Author: Jean-Michel Trivi <jm...@go...> Date: Tue Oct 2 10:16:04 2012 -0700 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=6ab36997af5d5acda4f21d33031f4e45c85f96b7 Bug 7170947 Update AAC codec >From Fraunhofer: * AAC Decoder - Stick to the written MPEG standard instead of the MPEG reference software in terms of reference level normalization. Always set the program reference level equal to the target level. This disables level normalization using a default level for streams without embedded metadata. Modified file(s): libAACdec\src\aacdec_drc.cpp - Fix downmix channel assignment when using a WAV output channel ordering. Modified file(s): libPCMutils\src\pcmutils_lib.cpp - Retain signal accuracy and prevent LSB alteration when no level correction needs to be done. Modified file(s): libAACdec\src\aacdec_drc.h libAACdec\src\aacdec_drc.cpp libSBRdec\src\sbrdecoder.cpp libSBRdec\src\sbr_dec.cpp libSBRdec\src\sbrdec_drc.cpp - Align metadata processing with reference implementation. Modified file(s): libAACdec\src\aacdec_drc.h libAACdec\src\aacdecoder.cpp * AAC-Encoder - Prevent potential overflow in energy calculation after TNS processing. Modified file(s): libAACenc\src\band_nrg.cpp - Added saturation for number of relevant lines which are used in pe calculation. Modified file(s): libAACenc\src\line_pe.cpp - Removed obsolete files. Deleded file(s): libAACenc\src\tns_param.h libAACenc\src\tns_param.cpp * FDK-Library - Added x86 Count Leading Zeros intrinsic. Modified file(s): libFDK\include\clz.h Added file(s): libFDK\include\x86\clz_x86.h - Fixed compilation for MIPS GCC-4.4 and higher. Modified file(s): libFDK\include\mips\cplx_mul.h libFDK\include\mips\fixmul_mips.h Change-Id: I4be65f07f88d412224c7fddc3f054e8f451176cc --- documentation/aacDecoder.pdf | 2434 ++++++++++---------- documentation/aacEncoder.pdf | 12 +- libAACdec/src/aacdec_drc.cpp | 38 +- libAACdec/src/aacdec_drc.h | 5 +- libAACdec/src/aacdecoder.cpp | 15 +- libAACdec/src/aacdecoder_lib.cpp | 2 +- libAACenc/src/aacenc_lib.cpp | 2 +- libAACenc/src/band_nrg.cpp | 14 +- libAACenc/src/line_pe.cpp | 2 + libAACenc/src/tns_param.cpp | 93 - libFDK/include/FDK_archdef.h | 1 - libFDK/include/clz.h | 3 + libFDK/include/mips/cplx_mul.h | 39 +- libFDK/include/mips/fixmul_mips.h | 7 +- .../tns_param.h => libFDK/include/x86/clz_x86.h | 76 +- libFDK/src/FDK_core.cpp | 2 +- libPCMutils/src/pcmutils_lib.cpp | 13 +- libSBRdec/src/sbr_dec.cpp | 18 +- libSBRdec/src/sbrdec_drc.cpp | 37 +- libSBRdec/src/sbrdec_drc.h | 1 + libSBRdec/src/sbrdecoder.cpp | 19 +- 21 files changed, 1443 insertions(+), 1390 deletions(-) diff --git a/documentation/aacDecoder.pdf b/documentation/aacDecoder.pdf index 0d42e79..a8cee17 100644 --- a/documentation/aacDecoder.pdf +++ b/documentation/aacDecoder.pdf @@ -586,15 +586,15 @@ endobj << /S /GoTo /D [390 0 R /Fit ] >> endobj 394 0 obj << -/Length 954 +/Length 956 /Filter /FlateDecode >> stream -xڅV[��6~���fj, �Mߜ��lg�I�5yЂ0jAr�Xg��{tۉ��Θ�s��UG��c��w�?_�(�Q�pJ�b]�%�Q�/�Y��$s�+҉(B�渜ث�G;���&إ�]^�9,Vo �H��7k��Dݔ)�Et��?�m��`3Y�:Y��m?c-�?>�Zȣ�w�R5����/��(�0O�Y3�j%�1�`�,/���t��8ドル����ݒx<&�O��'\�A!�m�C^�I%������OO0����e�EAy��
Module: fdk-aac Branch: master Commit: ed8b5a747e97c9b8b029ba6485e33f3aad081652 Author: John Grossman <jo...@go...> Committer: Android (Google) Code Review <and...@go...> Date: Wed Sep 12 15:11:17 2012 -0700 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=ed8b5a747e97c9b8b029ba6485e33f3aad081652 Merge "Don't zero out spec coeffs before doing the final IMDCT." into jb-mr1-dev ---
Module: fdk-aac Branch: master Commit: 34ce250e9075adda4fb8a797c7f47dc049476e8b Author: John Grossman <jo...@go...> Date: Wed Sep 12 14:08:09 2012 -0700 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=34ce250e9075adda4fb8a797c7f47dc049476e8b Don't zero out spec coeffs before doing the final IMDCT. Addresses bug 7140347. When flushing the decoder, you need to make sure to zero out any lingering spectral coefficients as well as zero out the overlap buffer state after decoding the final access unit. Zeroing out the spec coefficients *before* you decode the last block, however, seems like a mistake. If the final block contains any useful information for the stream, then you end up outputting the overlap portion of the second to last decoded block combined with zeros. Because of the shape of the second to last block's windows, this results in what appears to be a fade out, but actually is a zero'ed out final block. Signed-off-by: John Grossman <jo...@go...> Change-Id: I0fab9ee1a5899811d5519a91dc05631e9bf4963c --- libAACdec/src/aacdecoder.cpp | 5 +---- 1 files changed, 1 insertions(+), 4 deletions(-) diff --git a/libAACdec/src/aacdecoder.cpp b/libAACdec/src/aacdecoder.cpp index 4cf1391..2843e9f 100644 --- a/libAACdec/src/aacdecoder.cpp +++ b/libAACdec/src/aacdecoder.cpp @@ -1646,10 +1646,6 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( self->sbrEnabled ); - if ( flags&AACDEC_FLUSH ) { - FDKmemclear(pAacDecoderChannelInfo->pSpectralCoefficient, sizeof(FIXP_DBL)*self->streamInfo.aacSamplesPerFrame); - } - switch (pAacDecoderChannelInfo->renderMode) { case AACDEC_RENDER_IMDCT: @@ -1677,6 +1673,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( break; } if ( flags&AACDEC_FLUSH ) { + FDKmemclear(pAacDecoderChannelInfo->pSpectralCoefficient, sizeof(FIXP_DBL)*self->streamInfo.aacSamplesPerFrame); FDKmemclear(self->pAacDecoderStaticChannelInfo[c]->pOverlapBuffer, OverlapBufferSize*sizeof(FIXP_DBL)); } }
Module: fdk-aac Branch: master Commit: 1043598349977d71cf19cc9db0d09d3c0cbfb2f9 Author: Keun young Park <keu...@go...> Date: Tue Sep 11 17:28:46 2012 -0700 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=1043598349977d71cf19cc9db0d09d3c0cbfb2f9 fix mips build by reverting files back - MIPS still needs the work-around Change-Id: If68b2028bd2779ada79020bb333ec8817abe9429 --- libFDK/include/mips/cplx_mul.h | 28 ++++------------------------ libFDK/include/mips/fixmul_mips.h | 8 +------- 2 files changed, 5 insertions(+), 31 deletions(-) diff --git a/libFDK/include/mips/cplx_mul.h b/libFDK/include/mips/cplx_mul.h index e0781dd..4e8f26f 100644 --- a/libFDK/include/mips/cplx_mul.h +++ b/libFDK/include/mips/cplx_mul.h @@ -108,20 +108,9 @@ inline void cplxMultDiv2( FIXP_DBL *c_Re, FIXP_DBL b_Im) { INT result; - - __asm__ ("mult %[a_Re], %[b_Re];\n" - "msub %[a_Im], %[b_Im];\n" - : "=hi"(result) - : [a_Re]"r"(a_Re), [b_Re]"r"(b_Re), [a_Im]"r"(a_Im), [b_Im]"r"(b_Im) - : "lo"); - + result = (((long long)a_Re * b_Re) - ((long long) a_Im * b_Im)) >> 32; *c_Re = result; - - __asm__ ("mult %[a_Re], %[b_Im];\n" - "madd %[a_Im], %[b_Re];\n" - : "=hi"(result) - : [a_Re]"r"(a_Re), [b_Im]"r"(b_Im), [a_Im]"r"(a_Im), [b_Re]"r"(b_Re) - : "lo"); + result = (((long long)a_Re * b_Im) - ((long long) a_Im * b_Re)) >> 32; *c_Im = result; } #endif @@ -135,18 +124,9 @@ inline void cplxMult( FIXP_DBL *c_Re, FIXP_DBL b_Im) { INT result; - __asm__ ("mult %[a_Re], %[b_Re];\n" - "msub %[a_Im], %[b_Im];\n" - : "=hi"(result) - : [a_Re]"r"(a_Re), [b_Re]"r"(b_Re), [a_Im]"r"(a_Im), [b_Im]"r"(b_Im) - : "lo"); + result = (((long long)a_Re * b_Re) - ((long long) a_Im * b_Im)) >> 32; *c_Re = result<<1; - - __asm__ ("mult %[a_Re], %[b_Im];\n" - "madd %[a_Im], %[b_Re];\n" - : "=hi"(result) - : [a_Re]"r"(a_Re), [b_Im]"r"(b_Im), [a_Im]"r"(a_Im), [b_Re]"r"(b_Re) - : "lo"); + result = (((long long)a_Re * b_Im) - ((long long) a_Im * b_Re)) >> 32; *c_Im = result<<1; } #endif diff --git a/libFDK/include/mips/fixmul_mips.h b/libFDK/include/mips/fixmul_mips.h index 4fb72f7..0e7af0d 100644 --- a/libFDK/include/mips/fixmul_mips.h +++ b/libFDK/include/mips/fixmul_mips.h @@ -100,14 +100,8 @@ amm...@ii... inline INT fixmuldiv2_DD (const INT a, const INT b) { - INT result ; - asm ("mult %1,%2;\n" - : "=hi" (result) - : "d" (a), "r" (b) - : "lo"); - - return result ; + return ((long long) a * b) >> 32; } #endif /* (__GNUC__) && defined(__mips__) */
Module: fdk-aac Branch: master Commit: 381d69840ad3af2259f0b7ef49236f9ee9c76b76 Author: Jean-Michel Trivi <jm...@go...> Date: Sun Sep 9 11:48:51 2012 -0700 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=381d69840ad3af2259f0b7ef49236f9ee9c76b76 Bug fixes in AAC decoder, AAC encoder, FDK library Latest code drop from Fraunhofer: * AAC-Decoder - Expanded AAC-LD/ELD decoder TNS max band tables to avoid wrong data access for sampling rates <22kHz and >48kHz. Modified file(s): libAACdec\src\aacdec_tns.cpp libAACdec\src\aac_rom.h libAACdec\src\aac_rom.cpp - Fixed ELD synthesis QMF filterbank scaling for downsampled SBR. Modified file(s): libFDK\src\qmf.cpp * AAC-Encoder - Fixed bit rate limiting for lower limit as introduced in the Delivery 2012年05月11日. Modified file(s): libAACenc\include\aacenc_lib.h libAACenc\src\aacenc.h libAACenc\src\aacenc.cpp libSBRenc\src\sbr_rom.h libSBRenc\src\sbr_rom.cpp - Allow negative prediction gain as meaning that there is no coding gain. Make use of scaleValueSaturate in gauss window calculation. Modified file(s): libAACenc\src\aacenc_tns.cpp - Added energy saturation to prevent overflow in short blocks. Modified file(s): libAACenc\src\grp_data.cpp - Perform scalefactor adaption in case quantized lines are out of valid range. Modified file(s): libAACenc\src\quantize.cpp - Interrupt quantization loop when no spectral data is available. Adjustments in bitreservoir adaption. Modified file(s): libAACenc\src\qc_main.cpp - Indroduced dynamic scaling in none missing harmonic energy lowering compensation. Modified file(s): libSBRenc\src\env_est.cpp * FDK-Library - Fixed saturation for negative values in scaleValueSaturate. Modified file(s): libFDK\include\scale.h Change-Id: If830ea65caef6b5554281e4b7a77a8b2e08825ce --- documentation/aacDecoder.pdf | 2435 ++++++++-------- documentation/aacEncoder.pdf | 5751 ++++++++++++++++++------------------- libAACdec/src/aac_rom.cpp | 30 +- libAACdec/src/aac_rom.h | 4 +- libAACdec/src/aacdec_tns.cpp | 4 +- libAACdec/src/aacdecoder_lib.cpp | 2 +- libAACenc/include/aacenc_lib.h | 95 +- libAACenc/src/aacenc.cpp | 11 +- libAACenc/src/aacenc.h | 1 - libAACenc/src/aacenc_lib.cpp | 2 +- libAACenc/src/aacenc_tns.cpp | 23 +- libAACenc/src/grp_data.cpp | 12 +- libAACenc/src/qc_main.cpp | 54 +- libAACenc/src/quantize.cpp | 32 +- libFDK/include/common_fix.h | 2 - libFDK/include/mips/cplx_mul.h | 28 +- libFDK/include/mips/fixmul_mips.h | 8 +- libFDK/include/scale.h | 10 +- libFDK/src/FDK_core.cpp | 2 +- libFDK/src/qmf.cpp | 6 +- libSBRdec/src/sbr_dec.cpp | 4 +- libSBRenc/src/env_est.cpp | 20 +- libSBRenc/src/sbr_encoder.cpp | 2 +- libSBRenc/src/sbr_rom.cpp | 17 +- libSBRenc/src/sbr_rom.h | 4 +- libSYS/include/genericStds.h | 2 + libSYS/include/machine_type.h | 2 +- libSYS/src/cmdl_parser.cpp | 3 + 28 files changed, 4235 insertions(+), 4331 deletions(-) Diff: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commitdiff;h=381d69840ad3af2259f0b7ef49236f9ee9c76b76
Module: fdk-aac Branch: master Commit: fea3c1d0ffaf5975bb15462e11edf9c7a664890d Author: Jeffrey Knockel <je...@gm...> Committer: Martin Storsjo <ma...@ma...> Date: Thu Oct 25 12:12:57 2012 +0300 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=fea3c1d0ffaf5975bb15462e11edf9c7a664890d Make sure AACdynamic_RAM gets allocated aligned to 8 bytes This fixes assert failures on platforms where malloc doesn't provide 8 byte alignment, such as Win9x. --- libAACenc/src/aacEnc_ram.cpp | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/libAACenc/src/aacEnc_ram.cpp b/libAACenc/src/aacEnc_ram.cpp index 9366235..45bca93 100644 --- a/libAACenc/src/aacEnc_ram.cpp +++ b/libAACenc/src/aacEnc_ram.cpp @@ -95,7 +95,7 @@ amm...@ii... #include "aacEnc_ram.h" - C_ALLOC_MEM (AACdynamic_RAM, FIXP_DBL, AAC_ENC_DYN_RAM_SIZE/sizeof(FIXP_DBL)) + C_AALLOC_MEM (AACdynamic_RAM, FIXP_DBL, AAC_ENC_DYN_RAM_SIZE/sizeof(FIXP_DBL)) /* Static memory areas, must not be overwritten in other sections of the decoder !
Module: vo-amrwbenc Branch: master Commit: 22ac37427c83bbc4a2db580a80c47ee7acd57f79 Author: Nick Kralevich <nn...@go...> Committer: Martin Storsjo <ma...@ma...> Date: Fri Oct 19 22:24:35 2012 +0300 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/vo-amrwbenc;a=commit;h=22ac37427c83bbc4a2db580a80c47ee7acd57f79 Upstream commit "hardening: eliminate more .text relocations" In 74bc3e133bd59a65dbed70b5fc89549f04a545e2, a bunch of text relocations were cleaned up from amrwbenc. Looks like we forgot one. Fixed. Change-Id: I80d4c68be435c3461731374d2b6d3bdbd61354a5 Adapted from upstream commit c40e9b86092e67f245ba8f05244f578b26e49fe2. --- amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s b/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s index 183a372..a9a474c 100644 --- a/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s +++ b/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s @@ -44,7 +44,9 @@ pred_lt4_asm: SUBLT r5, r5, #2 @x-- SUB r5, r5, #30 @x -= 15 RSB r4, r2, #3 @k = 3 - frac - LDR r6, Table + ADRL r8, Table + LDR r6, [r8] + ADD r6, r8 MOV r8, r4, LSL #6 @MOV r7, #0 @j = 0 ADD r8, r6, r8 @ptr2 = &(inter4_2[k][0]) @@ -451,7 +453,7 @@ pred_lt4_end: LDMFD r13!, {r4 - r12, r15} Table: - .word voAWB_inter4_2 + .word voAWB_inter4_2-Table @ENDFUNC .END
Module: fdk-aac Branch: master Commit: 790bf9f088f8960b62d189eb44322d078109f272 Author: Sergio Ammirata <se...@am...> Committer: Martin Storsjo <ma...@ma...> Date: Thu Oct 4 15:51:05 2012 -0400 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=790bf9f088f8960b62d189eb44322d078109f272 Add support for Workgroup 4 (WG4) channel mapping This is the channel ordering used in DVD Audio, and is the standard used internally in the VLC media player. --- libAACenc/src/aacenc.h | 3 ++- libAACenc/src/aacenc_lib.cpp | 2 +- libAACenc/src/channel_map.cpp | 16 +++++++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/libAACenc/src/aacenc.h b/libAACenc/src/aacenc.h index 8242248..bb49019 100644 --- a/libAACenc/src/aacenc.h +++ b/libAACenc/src/aacenc.h @@ -174,7 +174,8 @@ typedef enum { typedef enum { CH_ORDER_MPEG = 0, /*!< MPEG channel ordering (e. g. 5.1: C, L, R, SL, SR, LFE) */ - CH_ORDER_WAV /*!< WAV fileformat channel ordering (e. g. 5.1: L, R, C, LFE, SL, SR) */ + CH_ORDER_WAV, /*!< WAV fileformat channel ordering (e. g. 5.1: L, R, C, LFE, SL, SR) */ + CH_ORDER_WG4 /*!< WG4 fileformat channel ordering (e. g. 5.1: L, R, SL, SR, C, LFE) */ } CHANNEL_ORDER; diff --git a/libAACenc/src/aacenc_lib.cpp b/libAACenc/src/aacenc_lib.cpp index 6cd1f80..9647094 100644 --- a/libAACenc/src/aacenc_lib.cpp +++ b/libAACenc/src/aacenc_lib.cpp @@ -1657,7 +1657,7 @@ AACENC_ERROR aacEncoder_SetParam( break; case AACENC_CHANNELORDER: if (hAacEncoder->aacConfig.channelOrder != (CHANNEL_ORDER)value) { - if (! ((value==0) || (value==1)) ) { + if (! ((value==0) || (value==1) || (value==2)) ) { err = AACENC_INVALID_CONFIG; break; } diff --git a/libAACenc/src/channel_map.cpp b/libAACenc/src/channel_map.cpp index 687ed83..6eddd47 100644 --- a/libAACenc/src/channel_map.cpp +++ b/libAACenc/src/channel_map.cpp @@ -153,6 +153,18 @@ static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabWav[] = { MODE_1_2_2_2_1, { 2, 0, 1, 6, 7, 4, 5, 3,-1,-1,-1,-1} }, /* 7.1ch */ }; +static const CHANNEL_ASSIGNMENT_INFO_TAB assignmentInfoTabWg4[] = +{ + { MODE_INVALID, {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} }, /* invalid */ + { MODE_1, { 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} }, /* mono */ + { MODE_2, { 0, 1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} }, /* stereo */ + { MODE_1_2, { 2, 0, 1,-1,-1,-1,-1,-1,-1,-1,-1,-1} }, /* 3ch */ + { MODE_1_2_1, { 3, 0, 1, 2,-1,-1,-1,-1,-1,-1,-1,-1} }, /* 4ch */ + { MODE_1_2_2, { 4, 0, 1, 2, 3,-1,-1,-1,-1,-1,-1,-1} }, /* 5ch */ + { MODE_1_2_2_1, { 4, 0, 1, 2, 3, 5,-1,-1,-1,-1,-1,-1} }, /* 5.1ch */ + { MODE_1_2_2_2_1, { 6, 0, 1, 2, 3, 4, 5, 7,-1,-1,-1,-1} }, /* 7.1ch */ +}; + /* Channel mode configuration tab provides, corresponding number of channels and elements */ @@ -176,8 +188,10 @@ const INT* FDKaacEnc_getChannelAssignment(CHANNEL_MODE encMode, CHANNEL_ORDER co if (co == CH_ORDER_MPEG) pTab = assignmentInfoTabMpeg; - else + else if (co == CH_ORDER_WAV) pTab = assignmentInfoTabWav; + else + pTab = assignmentInfoTabWg4; for(i=MAX_MODES-1; i>0; i--) { if (encMode== pTab[i].encoderMode) {
Module: fdk-aac Branch: master Commit: e79b172ba6f62855b7d5d5b86cd3c118be8750ea Author: Martin Storsjo <ma...@ma...> Date: Fri Sep 14 11:10:29 2012 +0300 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=e79b172ba6f62855b7d5d5b86cd3c118be8750ea Revert "Do schur_div with a direct 64 bit division instead of a loop on x86" This reverts commit 923f3e95f3e332d26f03cf6782f0ab61596ceef2. The optimized version differed from the original in a few cases (in some cases where the return value turned out to be negative while the original implementation returned a positive value), so revert it for now until it has been analyzed completely. --- libFDK/src/fixpoint_math.cpp | 10 ---------- 1 files changed, 0 insertions(+), 10 deletions(-) diff --git a/libFDK/src/fixpoint_math.cpp b/libFDK/src/fixpoint_math.cpp index 7d5fbb5..000820c 100644 --- a/libFDK/src/fixpoint_math.cpp +++ b/libFDK/src/fixpoint_math.cpp @@ -443,15 +443,6 @@ FIXP_DBL sqrtFixp(FIXP_DBL op) *****************************************************************************/ -#if defined(__x86__) -FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) -{ - INT64 tmp=(INT64)num<<31; - LONG div=(tmp/denum)>>(DFRACT_BITS-count); - return (FIXP_DBL)(div) << (DFRACT_BITS-count); -} - -#else FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) { @@ -478,7 +469,6 @@ FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) return (FIXP_DBL)(div << (DFRACT_BITS - count)); } -#endif #endif /* !defined(FUNCTION_schur_div) */
Module: fdk-aac Branch: master Commit: bf0d9ddc43b25f0fb56ed69ff72d1c37c29e2db6 Author: Martin Storsjo <ma...@ma...> Date: Sun Jul 1 12:15:32 2012 +0300 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=bf0d9ddc43b25f0fb56ed69ff72d1c37c29e2db6 Add an encoder example --- .gitignore | 1 + Makefile.am | 9 ++ aac-enc.c | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 10 +++ wavreader.c | 163 ++++++++++++++++++++++++++++++++++++++++ wavreader.h | 37 +++++++++ 6 files changed, 454 insertions(+), 0 deletions(-) diff --git a/.gitignore b/.gitignore index 90c8b90..387e07b 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ m4/ltversion.m4 m4/lt~obsolete.m4 missing stamp-h1 +aac-enc diff --git a/Makefile.am b/Makefile.am index 9743bfa..319cc0c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -32,6 +32,15 @@ lib_LTLIBRARIES = libfdk-aac.la libfdk_aac_la_LDFLAGS = -version-info @FDK_AAC_VERSION@ -no-undefined \ -export-symbols $(top_srcdir)/fdk-aac.sym +if EXAMPLE +bin_PROGRAMS = aac-enc$(EXEEXT) + +aac_enc_LDADD = libfdk-aac.la +aac_enc_SOURCES = aac-enc.c wavreader.c + +noinst_HEADERS = wavreader.h +endif + AACDEC_DIR = $(top_srcdir)/libAACdec/src AACDEC_SRC = \ $(AACDEC_DIR)/aacdec_drc.cpp \ diff --git a/aac-enc.c b/aac-enc.c new file mode 100644 index 0000000..1528881 --- /dev/null +++ b/aac-enc.c @@ -0,0 +1,234 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 2011 Martin Storsjo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the License for the specific language governing permissions + * and limitations under the License. + * ------------------------------------------------------------------- + */ + +#include <stdio.h> +#include <stdint.h> +#include <unistd.h> +#include <stdlib.h> +#include "libAACenc/include/aacenc_lib.h" +#include "wavreader.h" + +void usage(const char* name) { + fprintf(stderr, "%s [-r bitrate] [-t aot] [-a afterburner] [-s sbr] [-v vbr] in.wav out.aac\n", name); + fprintf(stderr, "Supported AOTs:\n"); + fprintf(stderr, "\t2\tAAC-LC\n"); + fprintf(stderr, "\t5\tHE-AAC\n"); + fprintf(stderr, "\t29\tHE-AAC v2\n"); + fprintf(stderr, "\t23\tAAC-LD\n"); + fprintf(stderr, "\t39\tAAC-ELD\n"); +} + +int main(int argc, char *argv[]) { + int bitrate = 64000; + int ch; + const char *infile, *outfile; + FILE *out; + void *wav; + int format, sample_rate, channels, bits_per_sample; + int input_size; + uint8_t* input_buf; + int16_t* convert_buf; + int aot = 2; + int afterburner = 1; + int eld_sbr = 0; + int vbr = 0; + HANDLE_AACENCODER handle; + CHANNEL_MODE mode; + AACENC_InfoStruct info = { 0 }; + while ((ch = getopt(argc, argv, "r:t:a:s:v:")) != -1) { + switch (ch) { + case 'r': + bitrate = atoi(optarg); + break; + case 't': + aot = atoi(optarg); + break; + case 'a': + afterburner = atoi(optarg); + break; + case 's': + eld_sbr = atoi(optarg); + break; + case 'v': + vbr = atoi(optarg); + break; + case '?': + default: + usage(argv[0]); + return 1; + } + } + if (argc - optind < 2) { + usage(argv[0]); + return 1; + } + infile = argv[optind]; + outfile = argv[optind + 1]; + + wav = wav_read_open(infile); + if (!wav) { + fprintf(stderr, "Unable to open wav file %s\n", infile); + return 1; + } + if (!wav_get_header(wav, &format, &channels, &sample_rate, &bits_per_sample, NULL)) { + fprintf(stderr, "Bad wav file %s\n", infile); + return 1; + } + if (format != 1) { + fprintf(stderr, "Unsupported WAV format %d\n", format); + return 1; + } + if (bits_per_sample != 16) { + fprintf(stderr, "Unsupported WAV sample depth %d\n", bits_per_sample); + return 1; + } + switch (channels) { + case 1: mode = MODE_1; break; + case 2: mode = MODE_2; break; + case 3: mode = MODE_1_2; break; + case 4: mode = MODE_1_2_1; break; + case 5: mode = MODE_1_2_2; break; + case 6: mode = MODE_1_2_2_1; break; + default: + fprintf(stderr, "Unsupported WAV channels %d\n", channels); + return 1; + } + if (aacEncOpen(&handle, 0, channels) != AACENC_OK) { + fprintf(stderr, "Unable to open encoder\n"); + return 1; + } + if (aacEncoder_SetParam(handle, AACENC_AOT, aot) != AACENC_OK) { + fprintf(stderr, "Unable to set the AOT\n"); + return 1; + } + if (aot == 39 && eld_sbr) { + if (aacEncoder_SetParam(handle, AACENC_SBR_MODE, 1) != AACENC_OK) { + fprintf(stderr, "Unable to set SBR mode for ELD\n"); + return 1; + } + } + if (aacEncoder_SetParam(handle, AACENC_SAMPLERATE, sample_rate) != AACENC_OK) { + fprintf(stderr, "Unable to set the AOT\n"); + return 1; + } + if (aacEncoder_SetParam(handle, AACENC_CHANNELMODE, mode) != AACENC_OK) { + fprintf(stderr, "Unable to set the channel mode\n"); + return 1; + } + if (aacEncoder_SetParam(handle, AACENC_CHANNELORDER, 1) != AACENC_OK) { + fprintf(stderr, "Unable to set the wav channel order\n"); + return 1; + } + if (vbr) { + if (aacEncoder_SetParam(handle, AACENC_BITRATEMODE, vbr) != AACENC_OK) { + fprintf(stderr, "Unable to set the VBR bitrate mode\n"); + return 1; + } + } else { + if (aacEncoder_SetParam(handle, AACENC_BITRATE, bitrate) != AACENC_OK) { + fprintf(stderr, "Unable to set the bitrate\n"); + return 1; + } + } + if (aacEncoder_SetParam(handle, AACENC_TRANSMUX, 2) != AACENC_OK) { + fprintf(stderr, "Unable to set the ADTS transmux\n"); + return 1; + } + if (aacEncoder_SetParam(handle, AACENC_AFTERBURNER, afterburner) != AACENC_OK) { + fprintf(stderr, "Unable to set the afterburner mode\n"); + return 1; + } + if (aacEncEncode(handle, NULL, NULL, NULL, NULL) != AACENC_OK) { + fprintf(stderr, "Unable to initialize the encoder\n"); + return 1; + } + if (aacEncInfo(handle, &info) != AACENC_OK) { + fprintf(stderr, "Unable to get the encoder info\n"); + return 1; + } + + out = fopen(outfile, "wb"); + if (!out) { + perror(outfile); + return 1; + } + + input_size = channels*2*info.frameLength; + input_buf = (uint8_t*) malloc(input_size); + convert_buf = (int16_t*) malloc(input_size); + + while (1) { + AACENC_BufDesc in_buf = { 0 }, out_buf = { 0 }; + AACENC_InArgs in_args = { 0 }; + AACENC_OutArgs out_args = { 0 }; + int in_identifier = IN_AUDIO_DATA; + int in_size, in_elem_size; + int out_identifier = OUT_BITSTREAM_DATA; + int out_size, out_elem_size; + int read, i; + void *in_ptr, *out_ptr; + uint8_t outbuf[20480]; + AACENC_ERROR err; + + read = wav_read_data(wav, input_buf, input_size); + for (i = 0; i < read/2; i++) { + const uint8_t* in = &input_buf[2*i]; + convert_buf[i] = in[0] | (in[1] << 8); + } + if (read <= 0) { + in_args.numInSamples = -1; + } else { + in_ptr = convert_buf; + in_size = read; + in_elem_size = 2; + + in_args.numInSamples = read/2; + in_buf.numBufs = 1; + in_buf.bufs = &in_ptr; + in_buf.bufferIdentifiers = &in_identifier; + in_buf.bufSizes = &in_size; + in_buf.bufElSizes = &in_elem_size; + } + out_ptr = outbuf; + out_size = sizeof(outbuf); + out_elem_size = 1; + out_buf.numBufs = 1; + out_buf.bufs = &out_ptr; + out_buf.bufferIdentifiers = &out_identifier; + out_buf.bufSizes = &out_size; + out_buf.bufElSizes = &out_elem_size; + + if ((err = aacEncEncode(handle, &in_buf, &out_buf, &in_args, &out_args)) != AACENC_OK) { + if (err == AACENC_ENCODE_EOF) + break; + fprintf(stderr, "Encoding failed\n"); + return 1; + } + if (out_args.numOutBytes == 0) + continue; + fwrite(outbuf, 1, out_args.numOutBytes, out); + } + free(input_buf); + free(convert_buf); + fclose(out); + wav_read_close(wav); + aacEncClose(&handle); + + return 0; +} + diff --git a/configure.ac b/configure.ac index cfa77ad..44fb2f1 100644 --- a/configure.ac +++ b/configure.ac @@ -7,7 +7,17 @@ AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([tar-ustar foreign]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +dnl Various options for configure +AC_ARG_ENABLE([example], + [AS_HELP_STRING([--enable-example], + [enable example encoding program (default is no)])], + [example=$enableval], [example=no]) + +dnl Automake conditionals to set +AM_CONDITIONAL(EXAMPLE, test x$example = xyes) + dnl Checks for programs. +AC_PROG_CC AC_PROG_CXX LT_INIT diff --git a/wavreader.c b/wavreader.c new file mode 100644 index 0000000..f672001 --- /dev/null +++ b/wavreader.c @@ -0,0 +1,163 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 2009 Martin Storsjo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the License for the specific language governing permissions + * and limitations under the License. + * ------------------------------------------------------------------- + */ + +#include "wavreader.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdint.h> + +#define TAG(a, b, c, d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d)) + +struct wav_reader { + FILE *wav; + uint32_t data_length; + + int format; + int sample_rate; + int bits_per_sample; + int channels; + int byte_rate; + int block_align; +}; + +static uint32_t read_tag(struct wav_reader* wr) { + uint32_t tag = 0; + tag = (tag << 8) | fgetc(wr->wav); + tag = (tag << 8) | fgetc(wr->wav); + tag = (tag << 8) | fgetc(wr->wav); + tag = (tag << 8) | fgetc(wr->wav); + return tag; +} + +static uint32_t read_int32(struct wav_reader* wr) { + uint32_t value = 0; + value |= fgetc(wr->wav) << 0; + value |= fgetc(wr->wav) << 8; + value |= fgetc(wr->wav) << 16; + value |= fgetc(wr->wav) << 24; + return value; +} + +static uint16_t read_int16(struct wav_reader* wr) { + uint16_t value = 0; + value |= fgetc(wr->wav) << 0; + value |= fgetc(wr->wav) << 8; + return value; +} + +void* wav_read_open(const char *filename) { + struct wav_reader* wr = (struct wav_reader*) malloc(sizeof(*wr)); + long data_pos = 0; + memset(wr, 0, sizeof(*wr)); + + wr->wav = fopen(filename, "rb"); + if (wr->wav == NULL) { + free(wr); + return NULL; + } + + while (1) { + uint32_t tag, tag2, length; + tag = read_tag(wr); + if (feof(wr->wav)) + break; + length = read_int32(wr); + if (tag != TAG('R', 'I', 'F', 'F') || length < 4) { + fseek(wr->wav, length, SEEK_CUR); + continue; + } + tag2 = read_tag(wr); + length -= 4; + if (tag2 != TAG('W', 'A', 'V', 'E')) { + fseek(wr->wav, length, SEEK_CUR); + continue; + } + // RIFF chunk found, iterate through it + while (length >= 8) { + uint32_t subtag, sublength; + subtag = read_tag(wr); + if (feof(wr->wav)) + break; + sublength = read_int32(wr); + length -= 8; + if (length < sublength) + break; + if (subtag == TAG('f', 'm', 't', ' ')) { + if (sublength < 16) { + // Insufficient data for 'fmt ' + break; + } + wr->format = read_int16(wr); + wr->channels = read_int16(wr); + wr->sample_rate = read_int32(wr); + wr->byte_rate = read_int32(wr); + wr->block_align = read_int16(wr); + wr->bits_per_sample = read_int16(wr); + fseek(wr->wav, sublength - 16, SEEK_CUR); + } else if (subtag == TAG('d', 'a', 't', 'a')) { + data_pos = ftell(wr->wav); + wr->data_length = sublength; + fseek(wr->wav, sublength, SEEK_CUR); + } else { + fseek(wr->wav, sublength, SEEK_CUR); + } + length -= sublength; + } + if (length > 0) { + // Bad chunk? + fseek(wr->wav, length, SEEK_CUR); + } + } + fseek(wr->wav, data_pos, SEEK_SET); + return wr; +} + +void wav_read_close(void* obj) { + struct wav_reader* wr = (struct wav_reader*) obj; + fclose(wr->wav); + free(wr); +} + +int wav_get_header(void* obj, int* format, int* channels, int* sample_rate, int* bits_per_sample, unsigned int* data_length) { + struct wav_reader* wr = (struct wav_reader*) obj; + if (format) + *format = wr->format; + if (channels) + *channels = wr->channels; + if (sample_rate) + *sample_rate = wr->sample_rate; + if (bits_per_sample) + *bits_per_sample = wr->bits_per_sample; + if (data_length) + *data_length = wr->data_length; + return wr->format && wr->sample_rate; +} + +int wav_read_data(void* obj, unsigned char* data, unsigned int length) { + struct wav_reader* wr = (struct wav_reader*) obj; + int n; + if (wr->wav == NULL) + return -1; + if (length > wr->data_length) + length = wr->data_length; + n = fread(data, 1, length, wr->wav); + wr->data_length -= length; + return n; +} + diff --git a/wavreader.h b/wavreader.h new file mode 100644 index 0000000..57a13ff --- /dev/null +++ b/wavreader.h @@ -0,0 +1,37 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 2009 Martin Storsjo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the License for the specific language governing permissions + * and limitations under the License. + * ------------------------------------------------------------------- + */ + +#ifndef WAVREADER_H +#define WAVREADER_H + +#ifdef __cplusplus +extern "C" { +#endif + +void* wav_read_open(const char *filename); +void wav_read_close(void* obj); + +int wav_get_header(void* obj, int* format, int* channels, int* sample_rate, int* bits_per_sample, unsigned int* data_length); +int wav_read_data(void* obj, unsigned char* data, unsigned int length); + +#ifdef __cplusplus +} +#endif + +#endif +
Module: fdk-aac Branch: master Commit: 923f3e95f3e332d26f03cf6782f0ab61596ceef2 Author: Jakub Stachowski <qb...@go...> Committer: Martin Storsjo <ma...@ma...> Date: Tue Aug 14 21:59:32 2012 +0200 URL: http://opencore-amr.git.sf.net/git/gitweb.cgi?p=opencore-amr/fdk-aac;a=commit;h=923f3e95f3e332d26f03cf6782f0ab61596ceef2 Do schur_div with a direct 64 bit division instead of a loop on x86 This speeds up HE-AACv2 encoding from 3.85 s to 3.42 s on a Core i7. --- libFDK/src/fixpoint_math.cpp | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/libFDK/src/fixpoint_math.cpp b/libFDK/src/fixpoint_math.cpp index 000820c..7d5fbb5 100644 --- a/libFDK/src/fixpoint_math.cpp +++ b/libFDK/src/fixpoint_math.cpp @@ -443,6 +443,15 @@ FIXP_DBL sqrtFixp(FIXP_DBL op) *****************************************************************************/ +#if defined(__x86__) +FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) +{ + INT64 tmp=(INT64)num<<31; + LONG div=(tmp/denum)>>(DFRACT_BITS-count); + return (FIXP_DBL)(div) << (DFRACT_BITS-count); +} + +#else FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) { @@ -469,6 +478,7 @@ FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) return (FIXP_DBL)(div << (DFRACT_BITS - count)); } +#endif #endif /* !defined(FUNCTION_schur_div) */