diff options
Diffstat (limited to 'media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c')
-rw-r--r-- | media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c | 566 |
1 files changed, 283 insertions, 283 deletions
diff --git a/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c b/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c index 774da7b..2ea9449 100644 --- a/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c +++ b/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c @@ -1,283 +1,283 @@ -/*
- ** Copyright 2003-2010, VisualOn, Inc.
- **
- ** 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.
- */
-/*******************************************************************************
- File: AAC_E_SAMPLES.h
-
- Content: sample code for AAC encoder
-
-*******************************************************************************/
-
-#include <dlfcn.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include "voAAC.h"
-#include "cmnMemory.h"
-
-#define VO_AAC_E_OUTPUT 1
-#define READ_SIZE (1024*8)
-unsigned char outBuf[1024*8];
-unsigned char inBuf[READ_SIZE];
-
-const char* HelpString =
-"VisualOn AAC encoder Usage:\n"
-"voAACEncTest -if <inputfile.pcm> -of <outputfile.aac> -sr <samplerate> -ch <channel> -br <bitrate> -adts <adts> \n"
-"-if input file name \n"
-"-of output file name \n"
-"-sr input pcm samplerate, default 44100 \n"
-"-ch input pcm channel, default 2 channel \n"
-"-br encoded aac bitrate, default 64000 * (samplerate/100)*channel/441(480)\n"
-"-adts add or no adts header, default add adts header\n"
-"For example: \n"
-"./voAACEncTest -if raw.pcm -of raw.aac -sr 44100 -ch 2 -br 128000\n";
-
-static int parsecmdline(int argc, char **argv,char **input_filename, char **output_filename, AACENC_PARAM *param)
-{
- // notice that:
- // bitRate/nChannels > 8000
- // bitRate/nChannels < 160000
- // bitRate/nChannels < sampleRate*6
- param->adtsUsed = 1;
- param->bitRate = 0;
- param->nChannels = 2;
- param->sampleRate = 44100;
-
- if(argc < 5 || argc > 13)
- {
- return -1;
- }
-
- argc--;
- argv++;
- while (argc > 0)
- {
- if (!strcmp(*argv, "-if"))
- {
- argv++;
- argc--;
- *input_filename = *argv;
- }
- else if (!strcmp(*argv, "-of"))
- {
- argv++;
- argc--;
- *output_filename = *argv;
- }
- else if (!strcmp(*argv, "-sr"))
- {
- argv++;
- argc--;
- param->sampleRate = atoi(*argv);
- }
- else if (!strcmp(*argv, "-ch"))
- {
- argv++;
- argc--;
- param->nChannels = atoi(*argv);
- }
- else if (!strcmp(*argv, "-br"))
- {
- argv++;
- argc--;
- param->bitRate = atoi(*argv);
- }
- else if(!strcmp(*argv, "-adts"))
- {
- argv++;
- argc--;
- param->adtsUsed = atoi(*argv);
- }
- else
- {
- return -1;
- }
-
- argv++;
- argc--;
- }
-
- if(param->bitRate == 0)
- {
- int scale = 441;
- if(param->sampleRate%8000 == 0)
- scale = 480;
- param->bitRate = 640*param->nChannels*param->sampleRate/scale;
- }
-
- return 0;
-}
-
-int ReadFile2Buf(FILE* infile,unsigned char* dest,int readSize)
-{
- int readBytes = 0;
- readBytes = fread(dest, 1, readSize, infile);
- return readBytes;
-}
-
-typedef int (VO_API * VOGETAUDIODECAPI) (VO_AUDIO_CODECAPI * pDecHandle);
-
-int main(int argc, char **argv)
-{
- FILE *infile, *outfile;
- int t1, t2;
- VO_AUDIO_CODECAPI AudioAPI;
- VO_MEM_OPERATOR moper;
- VO_CODEC_INIT_USERDATA useData;
- VO_HANDLE hCodec;
- VO_CODECBUFFER inData;
- VO_CODECBUFFER outData;
- VO_AUDIO_OUTPUTINFO outInfo;
- int firstWrite = 1;
- int eofFile = 0;
- int *info=(int*)inBuf;
- int bytesLeft, nRead;
- int EncoderdFrame = 0;
- int total = 0;
- int isOutput = 1;
- int returnCode;
- AACENC_PARAM aacpara;
- void *handle;
- void *pfunc;
- VOGETAUDIODECAPI pGetAPI;
- const char *infileName = NULL;
- const char *outfileName = NULL;
-
- returnCode = parsecmdline(argc,argv, &infileName, &outfileName, &aacpara);
- if(returnCode)
- {
- printf("%s", HelpString);
- return 0;
- }
-
- /* open input file */
- infile = fopen(infileName, "rb");
- if (!infile) {
- printf("Open input file fail...");
- return -1;
- }
-
- /* open output file */
- if(isOutput)
- {
- outfile = fopen(outfileName, "wb");
- if (!outfile) {
- printf("Open output file fail...");
- return -1;
- }
- }
- // set memory operators;
- moper.Alloc = cmnMemAlloc;
- moper.Copy = cmnMemCopy;
- moper.Free = cmnMemFree;
- moper.Set = cmnMemSet;
- moper.Check = cmnMemCheck;
- useData.memflag = VO_IMF_USERMEMOPERATOR;
- useData.memData = (VO_PTR)(&moper);
- // open encoder dll;
- handle = dlopen("libstagefright.so", RTLD_NOW);
- if(handle == 0)
- {
- printf("open dll error......");
- return -1;
- }
- // Get API;
- pfunc = dlsym(handle, "voGetAACEncAPI");
- if(pfunc == 0)
- {
- printf("open function error......");
- return -1;
- }
- pGetAPI = (VOGETAUDIODECAPI)pfunc;
- returnCode = pGetAPI(&AudioAPI);
- if(returnCode)
- return -1;
-
-
-//####################################### Init Encoding Section #########################################
- returnCode = AudioAPI.Init(&hCodec, VO_AUDIO_CodingAAC, &useData);
- if(returnCode < 0)
- {
- printf("#### VOI_Error2:fail to initialize the Encoderr###\n");
- return -1;
- }
-
- returnCode = AudioAPI.SetParam(hCodec, VO_PID_AAC_ENCPARAM, &aacpara);
-
- inData.Buffer = inBuf;
- bytesLeft = ReadFile2Buf(infile,inData.Buffer,READ_SIZE);
-
-//####################################### Encoding Section #########################################
-
- do {
-
- inData.Length = bytesLeft;
- outData.Buffer = outBuf;
- outData.Length = 1024*8;
-
- t1 = clock();
-
- returnCode = AudioAPI.SetInputData(hCodec,&inData);
-
- do {
- outData.Buffer = outBuf;
- outData.Length = 1024*8;
-
- returnCode = AudioAPI.GetOutputData(hCodec,&outData, &outInfo);
-
- if(returnCode == 0)
- EncoderdFrame++;
- if(returnCode == VO_ERR_LICENSE_ERROR)
- break;
-
-#if VO_AAC_E_OUTPUT
- if (isOutput && returnCode == 0)
- {
- fwrite(outData.Buffer, 1, outData.Length, outfile);
- }
-#endif
- } while(returnCode != (VO_ERR_INPUT_BUFFER_SMALL));
-
- if(returnCode == VO_ERR_LICENSE_ERROR)
- break;
-
- t2 = clock();
- total += t2 - t1;
-
- if (!eofFile) {
- nRead = ReadFile2Buf(infile, inBuf,READ_SIZE);
- bytesLeft = nRead;
- inData.Buffer = inBuf;
- if (feof(infile))
- eofFile = 1;
- }
-
- } while (!eofFile && returnCode);
-
-
-//################################################ End Encoding Section #######################################################
- returnCode = AudioAPI.Uninit(hCodec);
-
- fclose(infile);
- if (outfile)
- {
- fclose(outfile);
- }
- dlclose(handle);
- return 0;
-}
-
-
+/* + ** Copyright 2003-2010, VisualOn, Inc. + ** + ** 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. + */ +/******************************************************************************* + File: AAC_E_SAMPLES.h + + Content: sample code for AAC encoder + +*******************************************************************************/ + +#include <dlfcn.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include "voAAC.h" +#include "cmnMemory.h" + +#define VO_AAC_E_OUTPUT 1 +#define READ_SIZE (1024*8) +unsigned char outBuf[1024*8]; +unsigned char inBuf[READ_SIZE]; + +const char* HelpString = +"VisualOn AAC encoder Usage:\n" +"voAACEncTest -if <inputfile.pcm> -of <outputfile.aac> -sr <samplerate> -ch <channel> -br <bitrate> -adts <adts> \n" +"-if input file name \n" +"-of output file name \n" +"-sr input pcm samplerate, default 44100 \n" +"-ch input pcm channel, default 2 channel \n" +"-br encoded aac bitrate, default 64000 * (samplerate/100)*channel/441(480)\n" +"-adts add or no adts header, default add adts header\n" +"For example: \n" +"./voAACEncTest -if raw.pcm -of raw.aac -sr 44100 -ch 2 -br 128000\n"; + +static int parsecmdline(int argc, char **argv,char **input_filename, char **output_filename, AACENC_PARAM *param) +{ + // notice that: + // bitRate/nChannels > 8000 + // bitRate/nChannels < 160000 + // bitRate/nChannels < sampleRate*6 + param->adtsUsed = 1; + param->bitRate = 0; + param->nChannels = 2; + param->sampleRate = 44100; + + if(argc < 5 || argc > 13) + { + return -1; + } + + argc--; + argv++; + while (argc > 0) + { + if (!strcmp(*argv, "-if")) + { + argv++; + argc--; + *input_filename = *argv; + } + else if (!strcmp(*argv, "-of")) + { + argv++; + argc--; + *output_filename = *argv; + } + else if (!strcmp(*argv, "-sr")) + { + argv++; + argc--; + param->sampleRate = atoi(*argv); + } + else if (!strcmp(*argv, "-ch")) + { + argv++; + argc--; + param->nChannels = atoi(*argv); + } + else if (!strcmp(*argv, "-br")) + { + argv++; + argc--; + param->bitRate = atoi(*argv); + } + else if(!strcmp(*argv, "-adts")) + { + argv++; + argc--; + param->adtsUsed = atoi(*argv); + } + else + { + return -1; + } + + argv++; + argc--; + } + + if(param->bitRate == 0) + { + int scale = 441; + if(param->sampleRate%8000 == 0) + scale = 480; + param->bitRate = 640*param->nChannels*param->sampleRate/scale; + } + + return 0; +} + +int ReadFile2Buf(FILE* infile,unsigned char* dest,int readSize) +{ + int readBytes = 0; + readBytes = fread(dest, 1, readSize, infile); + return readBytes; +} + +typedef int (VO_API * VOGETAUDIODECAPI) (VO_AUDIO_CODECAPI * pDecHandle); + +int main(int argc, char **argv) +{ + FILE *infile, *outfile; + int t1, t2; + VO_AUDIO_CODECAPI AudioAPI; + VO_MEM_OPERATOR moper; + VO_CODEC_INIT_USERDATA useData; + VO_HANDLE hCodec; + VO_CODECBUFFER inData; + VO_CODECBUFFER outData; + VO_AUDIO_OUTPUTINFO outInfo; + int firstWrite = 1; + int eofFile = 0; + int *info=(int*)inBuf; + int bytesLeft, nRead; + int EncoderdFrame = 0; + int total = 0; + int isOutput = 1; + int returnCode; + AACENC_PARAM aacpara; + void *handle; + void *pfunc; + VOGETAUDIODECAPI pGetAPI; + const char *infileName = NULL; + const char *outfileName = NULL; + + returnCode = parsecmdline(argc,argv, &infileName, &outfileName, &aacpara); + if(returnCode) + { + printf("%s", HelpString); + return 0; + } + + /* open input file */ + infile = fopen(infileName, "rb"); + if (!infile) { + printf("Open input file fail..."); + return -1; + } + + /* open output file */ + if(isOutput) + { + outfile = fopen(outfileName, "wb"); + if (!outfile) { + printf("Open output file fail..."); + return -1; + } + } + // set memory operators; + moper.Alloc = cmnMemAlloc; + moper.Copy = cmnMemCopy; + moper.Free = cmnMemFree; + moper.Set = cmnMemSet; + moper.Check = cmnMemCheck; + useData.memflag = VO_IMF_USERMEMOPERATOR; + useData.memData = (VO_PTR)(&moper); + // open encoder dll; + handle = dlopen("libstagefright.so", RTLD_NOW); + if(handle == 0) + { + printf("open dll error......"); + return -1; + } + // Get API; + pfunc = dlsym(handle, "voGetAACEncAPI"); + if(pfunc == 0) + { + printf("open function error......"); + return -1; + } + pGetAPI = (VOGETAUDIODECAPI)pfunc; + returnCode = pGetAPI(&AudioAPI); + if(returnCode) + return -1; + + +//####################################### Init Encoding Section ######################################### + returnCode = AudioAPI.Init(&hCodec, VO_AUDIO_CodingAAC, &useData); + if(returnCode < 0) + { + printf("#### VOI_Error2:fail to initialize the Encoderr###\n"); + return -1; + } + + returnCode = AudioAPI.SetParam(hCodec, VO_PID_AAC_ENCPARAM, &aacpara); + + inData.Buffer = inBuf; + bytesLeft = ReadFile2Buf(infile,inData.Buffer,READ_SIZE); + +//####################################### Encoding Section ######################################### + + do { + + inData.Length = bytesLeft; + outData.Buffer = outBuf; + outData.Length = 1024*8; + + t1 = clock(); + + returnCode = AudioAPI.SetInputData(hCodec,&inData); + + do { + outData.Buffer = outBuf; + outData.Length = 1024*8; + + returnCode = AudioAPI.GetOutputData(hCodec,&outData, &outInfo); + + if(returnCode == 0) + EncoderdFrame++; + if(returnCode == VO_ERR_LICENSE_ERROR) + break; + +#if VO_AAC_E_OUTPUT + if (isOutput && returnCode == 0) + { + fwrite(outData.Buffer, 1, outData.Length, outfile); + } +#endif + } while(returnCode != (VO_ERR_INPUT_BUFFER_SMALL)); + + if(returnCode == VO_ERR_LICENSE_ERROR) + break; + + t2 = clock(); + total += t2 - t1; + + if (!eofFile) { + nRead = ReadFile2Buf(infile, inBuf,READ_SIZE); + bytesLeft = nRead; + inData.Buffer = inBuf; + if (feof(infile)) + eofFile = 1; + } + + } while (!eofFile && returnCode); + + +//################################################ End Encoding Section ####################################################### + returnCode = AudioAPI.Uninit(hCodec); + + fclose(infile); + if (outfile) + { + fclose(outfile); + } + dlclose(handle); + return 0; +} + + |