ref: 58022a243187831963f3138251b8d578e01a0e7b
parent: 191d61422a1fdcd6423070fd2401d2d81f84d169
author: knik <knik>
date: Mon Jan 12 12:19:25 EST 2004
removed unused file
--- a/frontend/faac.c
+++ /dev/null
@@ -1,560 +1,0 @@
-/*
- * FAAC - Freeware Advanced Audio Coder
- * Copyright (C) 2001 Menno Bakker
- * Copyright (C) 2002,2003 Krzysztof Nikiel
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: faac.c,v 1.2 2003/08/23 15:02:53 knik Exp $
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#define DEFAULT_TNS 0
-
-#ifdef WIN32
-#include <windows.h>
-#include <fcntl.h>
-#endif
-
-#ifdef __unix__
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <unistd.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <math.h>
-
-#ifdef HAVE_GETOPT_H
-# include <getopt.h>
-#else
-# include "getopt.h"
-# include "getopt.c"
-#endif
-
-#include "input.h"
-
-#include <faac.h>
-
-#ifndef min
-#define min(a,b) ( (a) < (b) ? (a) : (b) )
-#endif
-
-/* globals */
-char* progName;
-
-
-static int *mkChanMap(int channels, int center, int lf)
-{
- int *map;
- int inpos;
- int outpos;
-
- if (!center && !lf)
- return NULL;
-
- if (channels < 3)
- return NULL;
-
- if (lf > 0)
- lf--;
- else
- lf = channels - 1; // default AAC position
-
- if (center > 0)
- center--;
- else
- center = 0; // default AAC position
-
- map = malloc(channels * sizeof(map[0]));
- memset(map, 0, channels * sizeof(map[0]));
-
- outpos = 0;
- if ((center >= 0) && (center < channels))
- map[outpos++] = center;
-
- inpos = 0;
- for (; outpos < (channels - 1); inpos++)
- {
- if (inpos == center)
- continue;
- if (inpos == lf)
- continue;
-
- map[outpos++] = inpos;
- }
- if (outpos < channels)
- {
- if ((lf >= 0) && (lf < channels))
- map[outpos] = lf;
- else
- map[outpos] = inpos;
- }
-
- return map;
-}
-
-int main(int argc, char *argv[])
-{
- int frames, currentFrame;
- faacEncHandle hEncoder;
- pcmfile_t *infile = NULL;
-
- unsigned long samplesInput, maxBytesOutput;
-
- faacEncConfigurationPtr myFormat;
- unsigned int mpegVersion = MPEG2;
- unsigned int objectType = LOW;
- unsigned int useMidSide = 1;
- static unsigned int useTns = DEFAULT_TNS;
- unsigned int useAdts = 1;
- int cutOff = -1;
- int bitRate = 0;
- unsigned long quantqual = 0;
- int chanC = 3;
- int chanLF = 4;
-
- char *audioFileName;
- char *aacFileName;
-
- int32_t *pcmbuf;
- int *chanmap = NULL;
-
- unsigned char *bitbuf;
- int samplesRead = 0;
- int dieUsage = 0;
-
- int rawChans = 0; // disabled by default
- int rawBits = 16;
- int rawRate = 44100;
-
- FILE *outfile;
-
- // get faac version
- hEncoder = faacEncOpen(44100, 2, &samplesInput, &maxBytesOutput);
- myFormat = faacEncGetCurrentConfiguration(hEncoder);
- if (myFormat->version == FAAC_CFG_VERSION)
- {
- fprintf(stderr, "%s(see the faac.html file for more details)\n\n",
- myFormat->copyright);
- fprintf(stderr, "libfaac version %s\n", myFormat->name);
- faacEncClose(hEncoder);
- }
- else
- {
- fprintf(stderr, __FILE__ "(%d): wrong libfaac version\n", __LINE__);
- faacEncClose(hEncoder);
- return 1;
- }
-
- /* begin process command line */
- progName = argv[0];
- while (1) {
- static struct option long_options[] = {
- { "mpeg", 0, 0, 'm' },
- { "objecttype", 0, 0, 'o' },
- { "raw", 0, 0, 'r' },
- { "nomidside", 0, 0, 'n' },
- { "tns", 0, &useTns, 1 },
- { "notns", 0, &useTns, 0 },
- { "cutoff", 1, 0, 'c' },
- { "quality", 1, 0, 'q' },
- { "pcmraw", 0, 0, 'P'},
- { "pcmsamplerate", 1, 0, 'R'},
- { "pcmsamplebits", 1, 0, 'B'},
- { "pcmchannels", 1, 0, 'C'},
- { 0, 0, 0, 0}
- };
- int c = -1;
- int option_index = 0;
-
- c = getopt_long(argc, argv, "a:m:o:rnc:q:PR:B:C:I:",
- long_options, &option_index);
-
- if (c == -1)
- break;
-
- if (!c)
- continue;
-
- switch (c) {
- case 'm':
- mpegVersion = atoi(optarg);
- switch(mpegVersion)
- {
- case 2:
- mpegVersion = MPEG2;
- break;
- case 4:
- mpegVersion = MPEG4;
- break;
- default:
- mpegVersion = MPEG4;
- }
- break;
- case 'o':
- objectType = atoi(optarg);
- switch (objectType)
- {
- case 1:
- objectType = MAIN;
- break;
- case 2:
- objectType = LTP;
- break;
- default:
- objectType = LOW;
- break;
- }
- break;
- case 'r': {
- useAdts = 0;
- break;
- }
- case 'n': {
- useMidSide = 0;
- break;
- }
- case 'c': {
- unsigned int i;
- if (sscanf(optarg, "%u", &i) > 0) {
- cutOff = i;
- }
- break;
- }
- case 'a': {
- unsigned int i;
- if (sscanf(optarg, "%u", &i) > 0)
- {
- bitRate = 1000 * i;
- }
- break;
- }
- case 'q':
- {
- unsigned int i;
- if (sscanf(optarg, "%u", &i) > 0)
- {
- if (i > 0 && i < 1000)
- quantqual = i;
- }
- break;
- }
- case 'I':
- sscanf(optarg, "%d,%d", &chanC, &chanLF);
- break;
- case 'P':
- rawChans = 2; // enable raw input
- break;
- case 'R':
- {
- unsigned int i;
- if (sscanf(optarg, "%u", &i) > 0)
- {
- rawRate = i;
- rawChans = (rawChans > 0) ? rawChans : 2;
- }
- break;
- }
- case 'B':
- {
- unsigned int i;
- if (sscanf(optarg, "%u", &i) > 0)
- {
- if (i > 32)
- i = 32;
- if (i < 8)
- i = 8;
- rawBits = i;
- rawChans = (rawChans > 0) ? rawChans : 2;
- }
- break;
- }
- case 'C':
- {
- unsigned int i;
- if (sscanf(optarg, "%u", &i) > 0)
- rawChans = i;
- break;
- }
- case '?':
- break;
- default:
- fprintf(stderr, "%s: unknown option specified, ignoring: %c\n",
- progName, c);
- }
- }
-
- /* check that we have at least two non-option arguments */
- if ((argc - optind) < 2 || dieUsage == 1)
- {
- printf("\nUsage: %s -options infile outfile\n", progName);
- printf("Options:\n");
- printf(" -a <x>\tSet average bitrate to approximately x kbps/channel.\n");
- printf(" -c <bandwidth>\tSet the bandwidth in Hz. (default=automatic)\n");
- printf(" -q <quality>\tSet quantizer quality.\n");
-#if !DEFAULT_TNS
- printf(" --tns \tEnable TNS coding.\n");
-#else
- printf(" --notns\tDisable TNS coding.\n");
-#endif
- printf(" -n Don\'t use mid/side coding.\n");
- printf(" -m X AAC MPEG version, X can be 2 or 4.\n");
- printf(" -o X AAC object type. (0=Low Complexity (default), 1=Main, 2=LTP)\n");
- printf(" -r RAW AAC output file.\n");
- printf(" -P Raw PCM input mode (default 44100Hz 16bit stereo).\n");
- printf(" -R Raw PCM input rate.\n");
- printf(" -B Raw PCM input sample size (16 default or 8bits).\n");
- printf(" -C Raw PCM input channels.\n");
- printf(" -I <C,LF> Input channel config, default is 3,4 (Center third, LF fourth)\n");
- //printf("More details on FAAC usage can be found in the faac.html file.\n");
- printf("More tips on FAAC usage can be found in Knowledge base at www.audiocoding.com\n");
-
- return 1;
- }
-
- /* point to the specified file names */
- audioFileName = argv[optind++];
- aacFileName = argv[optind++];
-
- /* open the audio input file */
- if (rawChans > 0) // use raw input
- {
- infile = wav_open_read(audioFileName, 1);
- if (infile)
- {
- infile->channels = rawChans;
- infile->samplebytes = rawBits / 8;
- infile->samplerate = rawRate;
- }
- }
- else // header input
- infile = wav_open_read(audioFileName, 0);
-
- if (infile == NULL)
- {
- fprintf(stderr, "Couldn't open input file %s\n", audioFileName);
- return 1;
- }
-
- /* open the aac output file */
- outfile = fopen(aacFileName, "wb");
- if (!outfile)
- {
- fprintf(stderr, "Couldn't create output file %s\n", aacFileName);
- return 1;
- }
-
- /* open the encoder library */
- hEncoder = faacEncOpen(infile->samplerate, infile->channels,
- &samplesInput, &maxBytesOutput);
-
- pcmbuf = (int32_t *)malloc(samplesInput*sizeof(int32_t));
- bitbuf = (unsigned char*)malloc(maxBytesOutput*sizeof(unsigned char));
- chanmap = mkChanMap(infile->channels, chanC, chanLF);
- if (chanmap)
- {
- fprintf(stderr, "Remapping input channels: Center=%d, LFE=%d\n",
- chanC, chanLF);
- }
-
- if (cutOff <= 0)
- {
- if (cutOff < 0) // default
- cutOff = 0;
- else // disabled
- cutOff = infile->samplerate / 2;
- }
- if (cutOff > (infile->samplerate / 2))
- cutOff = infile->samplerate / 2;
-
- /* put the options in the configuration struct */
- myFormat = faacEncGetCurrentConfiguration(hEncoder);
- myFormat->aacObjectType = objectType;
- myFormat->mpegVersion = mpegVersion;
- myFormat->useTns = useTns;
- myFormat->allowMidside = useMidSide;
- if (bitRate)
- myFormat->bitRate = bitRate;
- myFormat->bandWidth = cutOff;
- if (quantqual > 0)
- myFormat->quantqual = quantqual;
- myFormat->outputFormat = useAdts;
- if (!faacEncSetConfiguration(hEncoder, myFormat)) {
- fprintf(stderr, "Unsupported output format!\n");
- return 1;
- }
-
- cutOff = myFormat->bandWidth;
- quantqual = myFormat->quantqual;
- bitRate = myFormat->bitRate;
- if (bitRate)
- fprintf(stderr, "Approximate ABR: %d kbps/channel\n", bitRate/1000);
- fprintf(stderr, "Quantization quality: %ld\n", quantqual);
- fprintf(stderr, "Bandwidth: %d Hz\n", cutOff);
- fprintf(stderr, "Object type: ");
- switch(objectType)
- {
- case LOW:
- fprintf(stderr, "Low Complexity");
- break;
- case MAIN:
- fprintf(stderr, "Main");
- break;
- case LTP:
- fprintf(stderr, "LTP");
- break;
- }
- fprintf(stderr, "(MPEG-%d)", (mpegVersion == MPEG4) ? 4 : 2);
- if (myFormat->useTns)
- fprintf(stderr, " + TNS");
- if (myFormat->allowMidside)
- fprintf(stderr, " + M/S");
- fprintf(stderr, "\n");
-
- if (outfile)
- {
- int showcnt = 0;
-#ifdef _WIN32
- long begin = GetTickCount();
-#endif
- if (infile->samples)
- frames = ((infile->samples + 1023) / 1024) + 1;
- else
- frames = 0;
- currentFrame = 0;
-
- fprintf(stderr, "Encoding %s to %s\n", audioFileName, aacFileName);
- if (frames != 0)
- fprintf(stderr,
- " frame | elapsed/estim | play/CPU | ETA\n");
- else
- fprintf(stderr,
- " frame | elapsed | play/CPU\n");
- /* encoding loop */
- for ( ;; )
- {
- int bytesWritten;
-
- samplesRead = wav_read_int24(infile, pcmbuf, samplesInput, chanmap);
-
- /* call the actual encoding routine */
- bytesWritten = faacEncEncode(hEncoder,
- pcmbuf,
- samplesRead,
- bitbuf,
- maxBytesOutput);
-
- if (bytesWritten)
- {
- currentFrame++;
- showcnt--;
- }
-
- if ((showcnt <= 0) || !bytesWritten)
- {
- double timeused;
-#ifdef __unix__
- struct rusage usage;
-#endif
-#ifdef _WIN32
- char percent[MAX_PATH + 20];
- timeused = (GetTickCount() - begin) * 1e-3;
-#else
-#ifdef __unix__
- if (getrusage(RUSAGE_SELF, &usage) == 0) {
- timeused = (double)usage.ru_utime.tv_sec +
- (double)usage.ru_utime.tv_usec * 1e-6;
- }
- else
- timeused = 0;
-#else
- timeused = (double)clock() * (1.0 / CLOCKS_PER_SEC);
-#endif
-#endif
- if (currentFrame && (timeused > 0.1))
- {
-
- showcnt += 50;
-
- if (frames != 0)
- fprintf(stderr,
- "\r%5d/%-5d (%3d%%)| %6.1f/%-6.1f | %8.3f | %.1f ",
- currentFrame, frames, currentFrame*100/frames,
- timeused,
- timeused * frames / currentFrame,
- (1024.0 * currentFrame / infile->samplerate) / timeused,
- timeused * (frames - currentFrame) / currentFrame);
- else
- fprintf(stderr,
- "\r %5d | %6.1f | %8.3f ",
- currentFrame,
- timeused,
- (1024.0 * currentFrame / infile->samplerate) / timeused);
- fflush(stderr);
-#ifdef _WIN32
- if (frames != 0)
- {
- sprintf(percent, "%.2f%% encoding %s",
- 100.0 * currentFrame / frames, audioFileName);
- SetConsoleTitle(percent);
- }
-#endif
- }
- }
-
- /* all done, bail out */
- if (!samplesRead && !bytesWritten)
- break ;
-
- if (bytesWritten < 0)
- {
- fprintf(stderr, "faacEncEncode() failed\n");
- break ;
- }
-
- /* write bitstream to aac file */
- fwrite(bitbuf, 1, bytesWritten, outfile);
- }
- fprintf(stderr, "\n\n");
-
- /* clean up */
- fclose(outfile);
- }
-
- faacEncClose(hEncoder);
-
- wav_close(infile);
-
- if (pcmbuf) free(pcmbuf);
- if (bitbuf) free(bitbuf);
-
- return 0;
-}
-
-/*
-$Log: faac.c,v $
-Revision 1.2 2003/08/23 15:02:53 knik
-last frame moved back to the library
-
-Revision 1.1 2003/08/18 07:25:03 knik
-second CLI frontend cloned from main.c
-
-*/