ref: 89b2c57b8b3ca8e3b0118db62c439d8605b3b5f7
parent: fbc0f3f60fb0e8e8621910623a77233763ad8c5e
author: lenox <lenox>
date: Sat Feb 19 07:51:08 EST 2000
added faac.c
--- /dev/null
+++ b/faac.c
@@ -1,0 +1,314 @@
+#ifdef WIN32
+#include <windows.h>
+#else
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#endif
+
+#include "aacenc.h"
+
+#ifdef FAAC_DLL
+
+BOOL APIENTRY DllMain(HANDLE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved)
+{
+ return TRUE;
+}
+
+#else // Not dll
+
+char *get_filename(char *pPath)
+{
+ char *pT;
+
+ for (pT = pPath; *pPath; pPath++) {
+ if ((pPath[0] == '\\' || pPath[0] == ':') && pPath[1] && (pPath[1] != '\\'))
+ pT = pPath + 1;
+ }
+
+ return pT;
+}
+
+void combine_path(char *path, char *dir, char *file)
+{
+ /* Should be a bit more sophisticated
+ This code assumes that the path exists */
+
+ /* Assume dir is allocated big enough */
+ if (dir[strlen(dir)-1] != '\\')
+ strcat(dir, "\\");
+ strcat(dir, get_filename(file));
+ strcpy(path, dir);
+}
+
+void usage(void)
+{
+ printf("Usage:\n");
+ printf("faac.exe -options file ...\n");
+ printf("Options:\n");
+ printf(" -? Shows this help screen.\n");
+ printf(" -pX AAC profile (X can be LOW, or MAIN (default).\n");
+ printf(" -bX Bitrate in kbps (in steps of 1kbps, min. 16kbps)\n");
+ printf(" -pns Use PNS (Perceptual Noise Substitution).\n");
+ printf(" -tns Use TNS (Temporal Noise Shaping).\n");
+ printf(" -is Use intensity stereo coding.\n");
+ printf(" -ms Use mid/side stereo coding.\n");
+ printf(" -nm Don't use mid/side stereo coding.\n");
+ printf(" The default for MS is intelligent switching.\n");
+ printf(" -np Don't use LTP (Long Term Prediction).\n");
+ printf(" -oX Set output directory.\n");
+ printf(" -sX Set output sampling rate.\n");
+ printf(" -cX Set cut-off frequency.\n");
+ printf(" -r Use raw data input file.\n");
+ printf(" -hN No header will be written to the AAC file.\n");
+ printf(" -hS ADTS headers will be written to the AAC file(default).\n");
+ printf(" -hI ADIF header will be written to the AAC file.\n");
+ printf(" file Multiple files can be given as well as wild cards.\n");
+ printf(" Can be any of the filetypes supported by libsndfile\n");
+ printf(" (http://www.zip.com.au/~erikd/libsndfile/).\n");
+ printf("Example:\n");
+ printf(" faac.exe -b96 -oc:\\aac\\ *.wav\n");
+ return;
+}
+
+int parse_arg(int argc, char *argv[],faacAACStream *as, char *InFileNames[100], char *OutFileNames[100])
+{
+ int i, out_dir_set=0, FileCount=0;
+ char *argp, *fnp, out_dir[255];
+
+ faac_InitParams(as);
+ if (argc == 1) {
+ usage();
+ return -1;
+ }
+
+ for (i = 1; i < argc; i++) {
+ if ((argv[i][0] != '-')&&(argv[i][0] != '/')) {
+ if (strchr("-/", argv[i][0]))
+ argp = &argv[i][1];
+ else
+ argp = argv[i];
+
+ if (!strchr(argp, '*') && !strchr(argp, '?')) {
+ InFileNames[FileCount] = (char*) malloc((strlen(argv[i])+1)*sizeof(char));
+ OutFileNames[FileCount] = (char*) malloc((strlen(argv[i])+1)*sizeof(char));
+ strcpy(InFileNames[FileCount], argv[i]);
+ FileCount++;
+ }
+ else {
+#ifdef WIN32
+ HANDLE hFindFile;
+ WIN32_FIND_DATA fd;
+
+ char path[255], *p;
+
+ if (NULL == (p = strrchr(argp, '\\')))
+ p = strrchr(argp, '/');
+ if (p) {
+ char ch = *p;
+
+ *p = 0;
+ strcat(strcpy(path, argp), "\\");
+ *p = ch;
+ }
+ else
+ *path = 0;
+
+ if (INVALID_HANDLE_VALUE != (hFindFile = FindFirstFile(argp, &fd))) {
+ do {
+ InFileNames[FileCount] = (char*) malloc((strlen(fd.cFileName) + strlen(path) + 2)*sizeof(char));
+ strcat(strcpy(InFileNames[FileCount], path), fd.cFileName);
+ FileCount++;
+ }
+ while (FindNextFile(hFindFile, &fd));
+ FindClose(hFindFile);
+ }
+#else
+ printf("Wildcards not yet supported on systems other than WIN32\n");
+#endif
+ }
+ }
+ else {
+ switch(argv[i][1]) {
+ case 'p': case 'P':
+ if ((argv[i][2] == 'n') || (argv[i][2] == 'N'))
+ faac_SetParam(as,PNS,USE_PNS);
+ else if ((argv[i][2] == 'l') || (argv[i][2] == 'L'))
+ faac_SetParam(as,PROFILE,LOW_PROFILE);
+ else
+ faac_SetParam(as,PROFILE,MAIN_PROFILE);
+ break;
+ case 'n': case 'N':
+ if ((argv[i][2] == 'm') || (argv[i][2] == 'M'))
+ faac_SetParam(as,MS_STEREO,NO_MS);
+ else if ((argv[i][2] == 'p') || (argv[i][2] == 'P'))
+ faac_SetParam(as,LTP,NO_LTP);
+ break;
+ case 'h': case 'H':
+ if ((argv[i][2] == 'i') || (argv[i][2] == 'I'))
+ faac_SetParam(as,HEADER_TYPE,ADIF_HEADER);
+ else if ((argv[i][2] == 's') || (argv[i][2] == 'S'))
+ faac_SetParam(as,HEADER_TYPE,ADTS_HEADER);
+ else if ((argv[i][2] == 'n') || (argv[i][2] == 'N'))
+ faac_SetParam(as,HEADER_TYPE,NO_HEADER);
+ break;
+ case 'm': case 'M':
+ faac_SetParam(as,MS_STEREO,FORCE_MS);
+ break;
+ case 'i': case 'I':
+ faac_SetParam(as,IS_STEREO,USE_IS);
+ break;
+ case 'r': case 'R':
+ faac_SetParam(as,RAW_AUDIO,USE_RAW_AUDIO);
+ break;
+ case 't': case 'T':
+ faac_SetParam(as,TNS,USE_TNS);
+ break;
+ case 'b': case 'B':
+ faac_SetParam(as,BITRATE,atoi(&argv[i][2]));
+ break;
+ case 's': case 'S':
+ faac_SetParam(as,OUT_SAMPLING_RATE,atoi(&argv[i][2]));
+ break;
+ case 'c': case 'C':
+ faac_SetParam(as,CUT_OFF,atoi(&argv[i][2]));
+ break;
+ case 'o': case 'O':
+ out_dir_set = 1;
+ strcpy(out_dir, &argv[i][2]);
+ break;
+ case '?':
+ usage();
+ return 1;
+ }
+ } // else of: if ((argv[i][0] != '-')&&(argv[i][0] != '/')) {
+ } // for (i = 1; i < argc; i++) {
+
+ if (FileCount == 0)
+ return -1;
+ else {
+ for (i = 0; i < FileCount; i++){
+ if (out_dir_set)
+ combine_path(OutFileNames[i], out_dir, InFileNames[i]);
+ else
+ strcpy(OutFileNames[i], InFileNames[i]);
+ fnp = strrchr(OutFileNames[i],'.');
+ fnp[0] = '\0';
+ strcat(OutFileNames[i],".aac");
+ }
+ }
+ return FileCount;
+}
+
+void printVersion(void)
+{
+ faacVersion *faacv;
+ faacv = faac_Version();
+ printf("FAAC cl (Freeware AAC Encoder)\n");
+ printf("FAAC homepage: %s\n", faacv->HomePage);
+ printf("Encoder engine version: %d.%d\n\n",
+ faacv->MajorVersion, faacv->MinorVersion);
+ if (faacv)
+ free(faacv);
+}
+
+void printConf(faacAACStream *as)
+{
+ printf("AAC configuration:\n");
+ printf("----------------------------------------------\n");
+ printf("AAC profile: %s.\n", (as->profile==MAIN_PROFILE)?"MAIN":"LOW");
+ printf("Bitrate: %dkbps.\n", as->bit_rate);
+ printf("Mid/Side (MS) stereo coding: %s.\n",
+ (as->use_MS==1)?"Always":((as->use_MS==0)?"Switching":"Off"));
+ printf("Intensity stereo (IS) coding: %s.\n", as->use_IS?"On":"Off");
+ printf("Temporal Noise Shaping: %s.\n", as->use_TNS?"On":"Off");
+ printf("Long Term Prediction: %s.\n", as->use_LTP?"On":"Off");
+ printf("Perceptual Noise Substitution: %s.\n", as->use_PNS?"On":"Off");
+ if (as->out_sampling_rate)
+ printf("Output sampling rate: %dHz.\n", as->out_sampling_rate);
+ if (as->cut_off)
+ printf("Cut-off frequency: %dHz.\n", as->cut_off);
+ if (as->header_type == ADIF_HEADER)
+ printf("Header info: ADIF header (seeking disabled)\n");
+ else if (as->header_type == ADTS_HEADER)
+ printf("Header info: ADTS headers (seeking enabled)\n");
+ else
+ printf("Header info: no headers (seeking disabled)\n");
+ printf("----------------------------------------------\n");
+}
+
+int main(int argc, char *argv[])
+{
+ int i, frames, currentFrame, result, FileCount;
+ char *InFileNames[100];
+ char *OutFileNames[100];
+
+ faacAACStream *as;
+
+ /* timing vars */
+ long begin, end;
+ int nTotSecs, nSecs;
+ int nMins;
+
+ /* create main aacstream object */
+ as =(faacAACStream *) malloc(sizeof(faacAACStream));
+
+ /* Print version of FAAC */
+ printVersion();
+
+ /* Process command line params */
+ if ((FileCount=parse_arg(argc, argv, as, InFileNames, OutFileNames))<0) return 0;
+
+ /* Print configuration */
+ printConf(as);
+
+ /* Process input files */
+ for (i = 0; i < FileCount; i++) {
+ printf("0%\tBusy encoding %s.\r", InFileNames[i]);
+#ifdef WIN32
+ begin = GetTickCount();
+#else
+ begin = clock();
+#endif
+ /* Init encoder core and retrieve number of frames */
+ if ((frames=faac_EncodeInit(as, InFileNames[i], OutFileNames[i])) < 0) {
+ printf("Error %d while encoding %s.\n",-frames,InFileNames[i]);
+ continue;
+ }
+ currentFrame = 0;
+ // Keep encoding frames until the end of the audio file
+ do {
+ currentFrame++;
+ result = faac_EncodeFrame(as);
+ if (result == FERROR) {
+ printf("Error while encoding %s.\n", InFileNames[i]);
+ break;
+ }
+ printf("%.2f%%\tBusy encoding %s.\r", min(((double)currentFrame/(double)frames)*100,100),InFileNames[i]);
+
+ } while (result != F_FINISH);
+
+ /* finishing last frames and destroying internal data */
+ faac_EncodeFinish(as);
+ faac_EncodeFree(as);
+#ifdef WIN32
+ end = GetTickCount();
+#else
+ end = clock();
+#endif
+ nTotSecs = (end-begin)/1000;
+ nMins = nTotSecs / 60;
+ nSecs = nTotSecs - (60*nMins);
+ printf("Encoding %s took:\t%d:%.2d\t\n", InFileNames[i], nMins, nSecs);
+ if(InFileNames[i]) free(InFileNames[i]);
+ if(OutFileNames[i]) free(OutFileNames[i]);
+ }
+ if (as) free (as);
+ return FNO_ERROR;
+}
+
+#endif // end of not dll
+
+
\ No newline at end of file
--- a/faac.dsp
+++ b/faac.dsp
@@ -154,6 +154,10 @@
SOURCE=.\winswitch.c
# End Source File
+# Begin Source File
+
+SOURCE=.\faac.c
+# End Source File
# End Group
# End Target
# End Project
--- a/faac_dll.dsp
+++ b/faac_dll.dsp
@@ -158,6 +158,10 @@
SOURCE=.\winswitch.c
# End Source File
+# Begin Source File
+
+SOURCE=.\faac.c
+# End Source File
# End Group
# Begin Group "Resource Files"