--- /dev/null
+ frontend/audio.c | 11 +++++-
+ frontend/faad.sln | 16 ++++----
+ frontend/main.c | 89 ++++++++++++++++++++++++++++++++---------
+ frontend/unicode_support.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++
+ frontend/unicode_support.h | 21 ++++++++++
+ include/neaacdec.h | 6 +--
+ libfaad/common.h | 4 +-
+ libfaad/decoder.c | 6 +--
+ libfaad/lt_predict.c | 2 +-
+ libfaad/output.c | 36 ++++++++---------
+ 10 files changed, 233 insertions(+), 56 deletions(-)
+
+diff --git a/frontend/audio.c b/frontend/audio.c
+index 9ab7a2a..20f92a2 100644
+--- a/frontend/audio.c
++++ b/frontend/audio.c
+@@ -39,11 +39,14 @@
+ #include <stdint.h>
+
+ #include "audio.h"
++#include "unicode_support.h"
+
+
+ audio_file *open_audio_file(char *infile, int samplerate, int channels,
+ int outputFormat, int fileType, long channelMask)
+ {
++ wchar_t *fileNameW;
++
+ audio_file *aufile = malloc(sizeof(audio_file));
+
+ aufile->outputFormat = outputFormat;
+@@ -80,7 +83,13 @@ audio_file *open_audio_file(char *infile, int samplerate, int channels,
+ aufile->toStdio = 1;
+ } else {
+ aufile->toStdio = 0;
+- aufile->sndfile = fopen(infile, "wb");
++ aufile->sndfile = NULL;
++ fileNameW = utf8_to_utf16(infile);
++ if(fileNameW)
++ {
++ aufile->sndfile = _wfopen(fileNameW, L"wb");
++ free(fileNameW);
++ }
+ }
+
+ if (aufile->sndfile == NULL)
+diff --git a/frontend/faad.sln b/frontend/faad.sln
+index a47200b..ddbea6d 100644
+--- a/frontend/faad.sln
++++ b/frontend/faad.sln
+@@ -1,15 +1,13 @@
+ 
+-Microsoft Visual Studio Solution File, Format Version 9.00
+-# Visual Studio 2005
+-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "faad", "faad.vcproj", "{2BD8CBB3-DFC9-4A6A-9B7A-07ED749BED58}"
+- ProjectSection(ProjectDependencies) = postProject
+- {F470BB4A-7675-4D6A-B310-41F33AC6F987} = {F470BB4A-7675-4D6A-B310-41F33AC6F987}
+- {BC3EFE27-9015-4C9C-AD3C-72B3B7ED2114} = {BC3EFE27-9015-4C9C-AD3C-72B3B7ED2114}
+- EndProjectSection
++Microsoft Visual Studio Solution File, Format Version 12.00
++# Visual Studio 14
++VisualStudioVersion = 14.0.25420.1
++MinimumVisualStudioVersion = 10.0.40219.1
++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "faad", "faad.vcxproj", "{2BD8CBB3-DFC9-4A6A-9B7A-07ED749BED58}"
+ EndProject
+-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfaad", "..\libfaad\libfaad.vcproj", "{BC3EFE27-9015-4C9C-AD3C-72B3B7ED2114}"
++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfaad", "..\libfaad\libfaad.vcxproj", "{BC3EFE27-9015-4C9C-AD3C-72B3B7ED2114}"
+ EndProject
+-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mp4ff", "..\common\mp4ff\mp4ff.vcproj", "{F470BB4A-7675-4D6A-B310-41F33AC6F987}"
++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mp4ff", "..\common\mp4ff\mp4ff.vcxproj", "{F470BB4A-7675-4D6A-B310-41F33AC6F987}"
+ EndProject
+ Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+diff --git a/frontend/main.c b/frontend/main.c
+index f943d9d..e4294d0 100644
+--- a/frontend/main.c
++++ b/frontend/main.c
+@@ -44,11 +44,13 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <getopt.h>
++#include <io.h>
+
+ #include <neaacdec.h>
+ #include <mp4ff.h>
+
+ #include "audio.h"
++#include "unicode_support.h"
+
+ #ifndef min
+ #define min(a,b) ( (a) < (b) ? (a) : (b) )
+@@ -71,6 +73,8 @@ static void faad_fprintf(FILE *stream, const char *fmt, ...)
+ vfprintf(stream, fmt, ap);
+
+ va_end(ap);
++
++ fflush(stream);
+ }
+ }
+
+@@ -450,7 +454,7 @@ static int decodeAACfile(char *aacfile, char *sndfile, char *adts_fn, int to_std
+ NeAACDecFrameInfo frameInfo;
+ NeAACDecConfigurationPtr config;
+
+- char percents[200];
++ char percents[300];
+ int percent, old_percent = -1;
+ int bread, fileread;
+ int header_type = 0;
+@@ -463,11 +467,19 @@ static int decodeAACfile(char *aacfile, char *sndfile, char *adts_fn, int to_std
+
+ aac_buffer b;
+
++ wchar_t *fileNameW;
++
+ memset(&b, 0, sizeof(aac_buffer));
+
+ if (adts_out)
+ {
+- adtsFile = fopen(adts_fn, "wb");
++ adtsFile = NULL;
++ fileNameW = utf8_to_utf16(adts_fn);
++ if(fileNameW)
++ {
++ adtsFile = _wfopen(fileNameW, L"wb");
++ free(fileNameW);
++ }
+ if (adtsFile == NULL)
+ {
+ faad_fprintf(stderr, "Error opening file: %s\n", adts_fn);
+@@ -477,20 +489,26 @@ static int decodeAACfile(char *aacfile, char *sndfile, char *adts_fn, int to_std
+
+ if (0 == strcmp(aacfile, "-"))
+ {
+- b.infile = stdin;
++ b.infile = stdin;
+ #ifdef _WIN32
+ setmode(fileno(stdin), O_BINARY);
+ #endif
+-
+- } else
++ }
++ else
+ {
+- b.infile = fopen(aacfile, "rb");
+- if (b.infile == NULL)
+- {
+- /* unable to open file */
+- faad_fprintf(stderr, "Error opening file: %s\n", aacfile);
+- return 1;
+- }
++ b.infile = NULL;
++ fileNameW = utf8_to_utf16(aacfile);
++ if(fileNameW)
++ {
++ b.infile = _wfopen(fileNameW, L"rb");
++ free(fileNameW);
++ }
++ if (b.infile == NULL)
++ {
++ /* unable to open file */
++ faad_fprintf(stderr, "Error opening file: %s\n", aacfile);
++ return 1;
++ }
+ }
+
+ retval = fseek(b.infile, 0, SEEK_END);
+@@ -715,7 +733,7 @@ static int decodeAACfile(char *aacfile, char *sndfile, char *adts_fn, int to_std
+ if (percent > old_percent)
+ {
+ old_percent = percent;
+- sprintf(percents, "%d%% decoding %s.", percent, aacfile);
++ _snprintf_s(percents, 300, _TRUNCATE, "[%d%%] decoding %s.", percent, aacfile);
+ faad_fprintf(stderr, "%s\r", percents);
+ #ifdef _WIN32
+ SetConsoleTitle(percents);
+@@ -817,7 +835,7 @@ static int decodeMP4file(char *mp4file, char *sndfile, char *adts_fn, int to_std
+ unsigned char *buffer;
+ int buffer_size;
+
+- char percents[200];
++ char percents[300];
+ int percent, old_percent = -1;
+
+ int first_time = 1;
+@@ -828,6 +846,7 @@ static int decodeMP4file(char *mp4file, char *sndfile, char *adts_fn, int to_std
+ unsigned int framesize;
+ unsigned long timescale;
+
++ wchar_t *fileNameW;
+
+ /* initialise the callback structure */
+ mp4ff_callback_t *mp4cb = malloc(sizeof(mp4ff_callback_t));
+@@ -837,7 +856,14 @@ static int decodeMP4file(char *mp4file, char *sndfile, char *adts_fn, int to_std
+ return 1;
+ }
+
+- mp4File = fopen(mp4file, "rb");
++ mp4File = NULL;
++ fileNameW = utf8_to_utf16(mp4file);
++ if(fileNameW)
++ {
++ mp4File = _wfopen(fileNameW, L"rb");
++ free(fileNameW);
++ }
++
+ mp4cb->read = read_callback;
+ mp4cb->seek = seek_callback;
+ mp4cb->user_data = mp4File;
+@@ -854,7 +880,13 @@ static int decodeMP4file(char *mp4file, char *sndfile, char *adts_fn, int to_std
+
+ if (adts_out)
+ {
+- adtsFile = fopen(adts_fn, "wb");
++ adtsFile = NULL;
++ fileNameW = utf8_to_utf16(adts_fn);
++ if(fileNameW)
++ {
++ adtsFile = _wfopen(fileNameW, L"wb");
++ free(fileNameW);
++ }
+ if (adtsFile == NULL)
+ {
+ faad_fprintf(stderr, "Error opening file: %s\n", adts_fn);
+@@ -1060,7 +1092,7 @@ static int decodeMP4file(char *mp4file, char *sndfile, char *adts_fn, int to_std
+ if (percent > old_percent)
+ {
+ old_percent = percent;
+- sprintf(percents, "%d%% decoding %s.", percent, mp4file);
++ _snprintf_s(percents, 300, _TRUNCATE, "[%d%%] decoding %s.", percent, mp4file);
+ faad_fprintf(stderr, "%s\r", percents);
+ #ifdef _WIN32
+ SetConsoleTitle(percents);
+@@ -1098,7 +1130,7 @@ static int decodeMP4file(char *mp4file, char *sndfile, char *adts_fn, int to_std
+ return frameInfo.error;
+ }
+
+-int main(int argc, char *argv[])
++int faad_main(int argc, char *argv[])
+ {
+ int result;
+ int infoOnly = 0;
+@@ -1122,6 +1154,7 @@ int main(int argc, char *argv[])
+ unsigned char header[8];
+ float length = 0;
+ FILE *hMP4File;
++ wchar_t *fileNameW;
+
+ /* System dependant types */
+ #ifdef _WIN32
+@@ -1352,7 +1385,13 @@ int main(int argc, char *argv[])
+ } else {
+
+ mp4file = 0;
+- hMP4File = fopen(aacFileName, "rb");
++ hMP4File = NULL;
++ fileNameW = utf8_to_utf16(aacFileName);
++ if(fileNameW)
++ {
++ hMP4File = _wfopen(fileNameW, L"rb");
++ free(fileNameW);
++ }
+ if (!hMP4File)
+ {
+ faad_fprintf(stderr, "Error opening file: %s\n", aacFileName);
+@@ -1415,3 +1454,15 @@ int main(int argc, char *argv[])
+
+ return 0;
+ }
++
++int wmain(int argc, wchar_t **argv_utf16)
++{
++ int result = 0;
++ char **argv_utf8 = NULL;
++
++ init_commandline_arguments_utf8(argc, &argv_utf8, argv_utf16);
++ result = faad_main(argc, argv_utf8);
++ free_commandline_arguments_utf8(argc, &argv_utf8);
++
++ return result;
++}
+diff --git a/frontend/unicode_support.c b/frontend/unicode_support.c
+new file mode 100644
+index 0000000..21ecd5c
+--- /dev/null
++++ b/frontend/unicode_support.c
+@@ -0,0 +1,98 @@
++#include "unicode_support.h"
++
++#include <stdio.h>
++#include <windows.h>
++
++char *utf16_to_utf8(const wchar_t *input)
++{
++ char *Buffer;
++ int BuffSize, Result;
++
++ BuffSize = WideCharToMultiByte(CP_UTF8, 0, input, -1, NULL, 0, NULL, NULL);
++ Buffer = (char*) malloc(sizeof(char) * BuffSize);
++
++ if(!Buffer)
++ {
++ fprintf(stderr, "Error in utf16_to_utf8: Memory allocation failed!\n");
++ return NULL;
++ }
++
++ Result = WideCharToMultiByte(CP_UTF8, 0, input, -1, Buffer, BuffSize, NULL, NULL);
++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL;
++}
++
++wchar_t *utf8_to_utf16(const char *input)
++{
++ wchar_t *Buffer;
++ int BuffSize, Result;
++
++ BuffSize = MultiByteToWideChar(CP_UTF8, 0, input, -1, NULL, 0);
++ Buffer = (wchar_t*) malloc(sizeof(wchar_t) * BuffSize);
++
++ if(!Buffer)
++ {
++ fprintf(stderr, "Error in utf8_to_utf16: Memory allocation failed!\n");
++ return NULL;
++ }
++
++ Result = MultiByteToWideChar(CP_UTF8, 0, input, -1, Buffer, BuffSize);
++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL;
++}
++
++void init_commandline_arguments_utf8(int argc, char ***argv_utf8, wchar_t **argv_utf16)
++{
++ int i = 0;
++
++ *argv_utf8 = (char**) malloc(argc * sizeof(char*));
++ if(!(*argv_utf8))
++ {
++ fprintf(stderr, "Error in init_commandline_arguments_utf8: Memory allocation failed!\n");
++ exit(-1);
++ }
++
++ for(i = 0; i < argc; i++)
++ {
++ (*argv_utf8)[i] = utf16_to_utf8(argv_utf16[i]);
++ if(!(*argv_utf8)[i])
++ {
++ fprintf(stderr, "Error in init_commandline_arguments_utf8: Memory allocation failed!\n");
++ exit(-1);
++ }
++ }
++}
++
++void free_commandline_arguments_utf8(int argc, char ***argv_utf8)
++{
++ int i = 0;
++
++ if(*argv_utf8 != NULL)
++ {
++ for(i = 0; i < argc; i++)
++ {
++ if((*argv_utf8)[i] != NULL)
++ {
++ free((*argv_utf8)[i]);
++ (*argv_utf8)[i] = NULL;
++ }
++ }
++ free(*argv_utf8);
++ *argv_utf8 = NULL;
++ }
++}
++
++FILE *fopen_utf8(const char *filename_utf8, const char *mode_utf8)
++{
++ FILE *ret = NULL;
++ wchar_t *filename_utf16 = utf8_to_utf16(filename_utf8);
++ wchar_t *mode_utf16 = utf8_to_utf16(mode_utf8);
++
++ if(filename_utf16 && mode_utf16)
++ {
++ ret = _wfopen(filename_utf16, mode_utf16);
++ }
++
++ if(filename_utf16) free(filename_utf16);
++ if(mode_utf16) free(mode_utf16);
++
++ return ret;
++}
+diff --git a/frontend/unicode_support.h b/frontend/unicode_support.h
+new file mode 100644
+index 0000000..cc13fd9
+--- /dev/null
++++ b/frontend/unicode_support.h
+@@ -0,0 +1,21 @@
++#ifndef UNICODE_SUPPORT_H_INCLUDED
++#define UNICODE_SUPPORT_H_INCLUDED
++
++#include <ctype.h>
++#include <stdio.h>
++#include <stdlib.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++char *utf16_to_utf8(const wchar_t *input);
++wchar_t *utf8_to_utf16(const char *input);
++void init_commandline_arguments_utf8(int argc, char ***argv_utf8, wchar_t **argv_utf16);
++void free_commandline_arguments_utf8(int argc, char ***argv_utf8);
++FILE *fopen_utf8(const char *filename_utf8, const char *mode_utf8);
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+\ No newline at end of file
+diff --git a/include/neaacdec.h b/include/neaacdec.h
+index 610a00b..7904175 100644
+--- a/include/neaacdec.h
++++ b/include/neaacdec.h
+@@ -202,7 +202,7 @@ typedef struct NeAACDecFrameInfo
+ unsigned char ps;
+ } NeAACDecFrameInfo;
+
+-char NEAACDECAPI *NeAACDecGetErrorMessage(unsigned char errcode);
++char* NEAACDECAPI NeAACDecGetErrorMessage(unsigned char errcode);
+
+ unsigned long NEAACDECAPI NeAACDecGetCapabilities(void);
+
+@@ -235,12 +235,12 @@ void NEAACDECAPI NeAACDecPostSeekReset(NeAACDecHandle hDecoder, long frame);
+
+ void NEAACDECAPI NeAACDecClose(NeAACDecHandle hDecoder);
+
+-void NEAACDECAPI *NeAACDecDecode(NeAACDecHandle hDecoder,
++void* NEAACDECAPI NeAACDecDecode(NeAACDecHandle hDecoder,
+ NeAACDecFrameInfo *hInfo,
+ unsigned char *buffer,
+ unsigned long buffer_size);
+
+-void NEAACDECAPI *NeAACDecDecode2(NeAACDecHandle hDecoder,
++void* NEAACDECAPI NeAACDecDecode2(NeAACDecHandle hDecoder,
+ NeAACDecFrameInfo *hInfo,
+ unsigned char *buffer,
+ unsigned long buffer_size,
+diff --git a/libfaad/common.h b/libfaad/common.h
+index 897a0f0..74f4a56 100644
+--- a/libfaad/common.h
++++ b/libfaad/common.h
+@@ -316,7 +316,7 @@ char *strchr(), *strrchr();
+ #if defined(_WIN32) && !defined(_WIN64) && !defined(__MINGW32__)
+ #ifndef HAVE_LRINTF
+ #define HAS_LRINTF
+- static INLINE int lrintf(float f)
++ static INLINE int FAAD_lrintf(float f)
+ {
+ int i;
+ __asm
+@@ -332,7 +332,7 @@ char *strchr(), *strrchr();
+ #ifndef HAVE_LRINTF
+ #define HAS_LRINTF
+ // from http://www.stereopsis.com/FPU.html
+- static INLINE int lrintf(float f)
++ static INLINE int FAAD_lrintf(float f)
+ {
+ int i;
+ __asm__ __volatile__ (
+diff --git a/libfaad/decoder.c b/libfaad/decoder.c
+index 42bbc84..67feb9d 100644
+--- a/libfaad/decoder.c
++++ b/libfaad/decoder.c
+@@ -64,7 +64,7 @@ static void create_channel_config(NeAACDecStruct *hDecoder,
+ NeAACDecFrameInfo *hInfo);
+
+
+-char NEAACDECAPI *NeAACDecGetErrorMessage(unsigned char errcode)
++char* NEAACDECAPI NeAACDecGetErrorMessage(unsigned char errcode)
+ {
+ if (errcode >= NUM_ERROR_MESSAGES)
+ return NULL;
+@@ -790,7 +790,7 @@ static void create_channel_config(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *h
+ }
+ }
+
+-void NEAACDECAPI *NeAACDecDecode(NeAACDecHandle hpDecoder,
++void* NEAACDECAPI NeAACDecDecode(NeAACDecHandle hpDecoder,
+ NeAACDecFrameInfo *hInfo,
+ unsigned char *buffer,
+ unsigned long buffer_size)
+@@ -799,7 +799,7 @@ void NEAACDECAPI *NeAACDecDecode(NeAACDecHandle hpDecoder,
+ return aac_frame_decode(hDecoder, hInfo, buffer, buffer_size, NULL, 0);
+ }
+
+-void NEAACDECAPI *NeAACDecDecode2(NeAACDecHandle hpDecoder,
++void* NEAACDECAPI NeAACDecDecode2(NeAACDecHandle hpDecoder,
+ NeAACDecFrameInfo *hInfo,
+ unsigned char *buffer,
+ unsigned long buffer_size,
+diff --git a/libfaad/lt_predict.c b/libfaad/lt_predict.c
+index 2be18ae..aa02fb0 100644
+--- a/libfaad/lt_predict.c
++++ b/libfaad/lt_predict.c
+@@ -166,7 +166,7 @@ static INLINE int16_t real_to_int16(real_t sig_in)
+ return -32768;
+ }
+
+- return lrintf(sig_in);
++ return FAAD_lrintf(sig_in);
+ }
+ #endif
+
+diff --git a/libfaad/output.c b/libfaad/output.c
+index 4245627..1aeb747 100644
+--- a/libfaad/output.c
++++ b/libfaad/output.c
+@@ -103,7 +103,7 @@ static void to_PCM_16bit(NeAACDecStruct *hDecoder, real_t **input,
+
+ CLIP(inp, 32767.0f, -32768.0f);
+
+- (*sample_buffer)[i] = (int16_t)lrintf(inp);
++ (*sample_buffer)[i] = (int16_t)FAAD_lrintf(inp);
+ }
+ break;
+ case CONV(2,0):
+@@ -116,8 +116,8 @@ static void to_PCM_16bit(NeAACDecStruct *hDecoder, real_t **input,
+
+ CLIP(inp0, 32767.0f, -32768.0f);
+
+- (*sample_buffer)[(i*2)+0] = (int16_t)lrintf(inp0);
+- (*sample_buffer)[(i*2)+1] = (int16_t)lrintf(inp0);
++ (*sample_buffer)[(i*2)+0] = (int16_t)FAAD_lrintf(inp0);
++ (*sample_buffer)[(i*2)+1] = (int16_t)FAAD_lrintf(inp0);
+ }
+ } else {
+ ch = hDecoder->internal_channel[0];
+@@ -130,8 +130,8 @@ static void to_PCM_16bit(NeAACDecStruct *hDecoder, real_t **input,
+ CLIP(inp0, 32767.0f, -32768.0f);
+ CLIP(inp1, 32767.0f, -32768.0f);
+
+- (*sample_buffer)[(i*2)+0] = (int16_t)lrintf(inp0);
+- (*sample_buffer)[(i*2)+1] = (int16_t)lrintf(inp1);
++ (*sample_buffer)[(i*2)+0] = (int16_t)FAAD_lrintf(inp0);
++ (*sample_buffer)[(i*2)+1] = (int16_t)FAAD_lrintf(inp1);
+ }
+ }
+ break;
+@@ -144,7 +144,7 @@ static void to_PCM_16bit(NeAACDecStruct *hDecoder, real_t **input,
+
+ CLIP(inp, 32767.0f, -32768.0f);
+
+- (*sample_buffer)[(i*channels)+ch] = (int16_t)lrintf(inp);
++ (*sample_buffer)[(i*channels)+ch] = (int16_t)FAAD_lrintf(inp);
+ }
+ }
+ break;
+@@ -169,7 +169,7 @@ static void to_PCM_24bit(NeAACDecStruct *hDecoder, real_t **input,
+ inp *= 256.0f;
+ CLIP(inp, 8388607.0f, -8388608.0f);
+
+- (*sample_buffer)[i] = (int32_t)lrintf(inp);
++ (*sample_buffer)[i] = (int32_t)FAAD_lrintf(inp);
+ }
+ break;
+ case CONV(2,0):
+@@ -183,8 +183,8 @@ static void to_PCM_24bit(NeAACDecStruct *hDecoder, real_t **input,
+ inp0 *= 256.0f;
+ CLIP(inp0, 8388607.0f, -8388608.0f);
+
+- (*sample_buffer)[(i*2)+0] = (int32_t)lrintf(inp0);
+- (*sample_buffer)[(i*2)+1] = (int32_t)lrintf(inp0);
++ (*sample_buffer)[(i*2)+0] = (int32_t)FAAD_lrintf(inp0);
++ (*sample_buffer)[(i*2)+1] = (int32_t)FAAD_lrintf(inp0);
+ }
+ } else {
+ ch = hDecoder->internal_channel[0];
+@@ -199,8 +199,8 @@ static void to_PCM_24bit(NeAACDecStruct *hDecoder, real_t **input,
+ CLIP(inp0, 8388607.0f, -8388608.0f);
+ CLIP(inp1, 8388607.0f, -8388608.0f);
+
+- (*sample_buffer)[(i*2)+0] = (int32_t)lrintf(inp0);
+- (*sample_buffer)[(i*2)+1] = (int32_t)lrintf(inp1);
++ (*sample_buffer)[(i*2)+0] = (int32_t)FAAD_lrintf(inp0);
++ (*sample_buffer)[(i*2)+1] = (int32_t)FAAD_lrintf(inp1);
+ }
+ }
+ break;
+@@ -214,7 +214,7 @@ static void to_PCM_24bit(NeAACDecStruct *hDecoder, real_t **input,
+ inp *= 256.0f;
+ CLIP(inp, 8388607.0f, -8388608.0f);
+
+- (*sample_buffer)[(i*channels)+ch] = (int32_t)lrintf(inp);
++ (*sample_buffer)[(i*channels)+ch] = (int32_t)FAAD_lrintf(inp);
+ }
+ }
+ break;
+@@ -239,7 +239,7 @@ static void to_PCM_32bit(NeAACDecStruct *hDecoder, real_t **input,
+ inp *= 65536.0f;
+ CLIP(inp, 2147483647.0f, -2147483648.0f);
+
+- (*sample_buffer)[i] = (int32_t)lrintf(inp);
++ (*sample_buffer)[i] = (int32_t)FAAD_lrintf(inp);
+ }
+ break;
+ case CONV(2,0):
+@@ -253,8 +253,8 @@ static void to_PCM_32bit(NeAACDecStruct *hDecoder, real_t **input,
+ inp0 *= 65536.0f;
+ CLIP(inp0, 2147483647.0f, -2147483648.0f);
+
+- (*sample_buffer)[(i*2)+0] = (int32_t)lrintf(inp0);
+- (*sample_buffer)[(i*2)+1] = (int32_t)lrintf(inp0);
++ (*sample_buffer)[(i*2)+0] = (int32_t)FAAD_lrintf(inp0);
++ (*sample_buffer)[(i*2)+1] = (int32_t)FAAD_lrintf(inp0);
+ }
+ } else {
+ ch = hDecoder->internal_channel[0];
+@@ -269,8 +269,8 @@ static void to_PCM_32bit(NeAACDecStruct *hDecoder, real_t **input,
+ CLIP(inp0, 2147483647.0f, -2147483648.0f);
+ CLIP(inp1, 2147483647.0f, -2147483648.0f);
+
+- (*sample_buffer)[(i*2)+0] = (int32_t)lrintf(inp0);
+- (*sample_buffer)[(i*2)+1] = (int32_t)lrintf(inp1);
++ (*sample_buffer)[(i*2)+0] = (int32_t)FAAD_lrintf(inp0);
++ (*sample_buffer)[(i*2)+1] = (int32_t)FAAD_lrintf(inp1);
+ }
+ }
+ break;
+@@ -284,7 +284,7 @@ static void to_PCM_32bit(NeAACDecStruct *hDecoder, real_t **input,
+ inp *= 65536.0f;
+ CLIP(inp, 2147483647.0f, -2147483648.0f);
+
+- (*sample_buffer)[(i*channels)+ch] = (int32_t)lrintf(inp);
++ (*sample_buffer)[(i*channels)+ch] = (int32_t)FAAD_lrintf(inp);
+ }
+ }
+ break;