1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/******************************************************************************* 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard File: AAC_E_SAMPLES.h 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Content: sample code for AAC encoder 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*******************************************************************************/ 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <dlfcn.h> 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <stdio.h> 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <stdlib.h> 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <string.h> 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <time.h> 28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "voAAC.h" 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "cmnMemory.h" 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define VO_AAC_E_OUTPUT 1 32b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard#define READ_SIZE (1024*8) 33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardunsigned char outBuf[1024*8]; 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardunsigned char inBuf[READ_SIZE]; 35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 36b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgardconst char* HelpString = 37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard"VisualOn AAC encoder Usage:\n" 38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard"voAACEncTest -if <inputfile.pcm> -of <outputfile.aac> -sr <samplerate> -ch <channel> -br <bitrate> -adts <adts> \n" 39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard"-if input file name \n" 40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard"-of output file name \n" 41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard"-sr input pcm samplerate, default 44100 \n" 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard"-ch input pcm channel, default 2 channel \n" 43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard"-br encoded aac bitrate, default 64000 * (samplerate/100)*channel/441(480)\n" 44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard"-adts add or no adts header, default add adts header\n" 45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard"For example: \n" 46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard"./voAACEncTest -if raw.pcm -of raw.aac -sr 44100 -ch 2 -br 128000\n"; 47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatic int parsecmdline(int argc, char **argv,char **input_filename, char **output_filename, AACENC_PARAM *param) 49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard // notice that: 51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard // bitRate/nChannels > 8000 52b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard // bitRate/nChannels < 160000 53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard // bitRate/nChannels < sampleRate*6 54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard param->adtsUsed = 1; 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard param->bitRate = 0; 56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard param->nChannels = 2; 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard param->sampleRate = 44100; 58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(argc < 5 || argc > 13) 60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return -1; 62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argc--; 65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argv++; 66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard while (argc > 0) 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if (!strcmp(*argv, "-if")) 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argv++; 71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argc--; 72b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard *input_filename = *argv; 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard else if (!strcmp(*argv, "-of")) 75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argv++; 77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argc--; 78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *output_filename = *argv; 79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard else if (!strcmp(*argv, "-sr")) 81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argv++; 83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argc--; 84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard param->sampleRate = atoi(*argv); 85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard else if (!strcmp(*argv, "-ch")) 87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argv++; 89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argc--; 90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard param->nChannels = atoi(*argv); 91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard else if (!strcmp(*argv, "-br")) 93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argv++; 95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argc--; 96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard param->bitRate = atoi(*argv); 97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard else if(!strcmp(*argv, "-adts")) 99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argv++; 101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argc--; 102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard param->adtsUsed = atoi(*argv); 103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard else 105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return -1; 107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argv++; 110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard argc--; 111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(param->bitRate == 0) 114e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int scale = 441; 116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(param->sampleRate%8000 == 0) 117e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard scale = 480; 118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard param->bitRate = 640*param->nChannels*param->sampleRate/scale; 119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return 0; 122e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardint ReadFile2Buf(FILE* infile,unsigned char* dest,int readSize) 125e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int readBytes = 0; 127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard readBytes = fread(dest, 1, readSize, infile); 128e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return readBytes; 129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 131e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardtypedef int (VO_API * VOGETAUDIODECAPI) (VO_AUDIO_CODECAPI * pDecHandle); 132e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 133e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardint main(int argc, char **argv) 134e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 135e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard FILE *infile, *outfile; 136e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int t1, t2; 137e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VO_AUDIO_CODECAPI AudioAPI; 138e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VO_MEM_OPERATOR moper; 139e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VO_CODEC_INIT_USERDATA useData; 140e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VO_HANDLE hCodec; 141e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VO_CODECBUFFER inData; 142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VO_CODECBUFFER outData; 143e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VO_AUDIO_OUTPUTINFO outInfo; 144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int firstWrite = 1; 145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int eofFile = 0; 146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int *info=(int*)inBuf; 147e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int bytesLeft, nRead; 148e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int EncoderdFrame = 0; 149e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int total = 0; 150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int isOutput = 1; 151e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard int returnCode; 152e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard AACENC_PARAM aacpara; 153e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard void *handle; 154e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard void *pfunc; 155e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VOGETAUDIODECAPI pGetAPI; 156e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard const char *infileName = NULL; 157e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard const char *outfileName = NULL; 158e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 159e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard returnCode = parsecmdline(argc,argv, &infileName, &outfileName, &aacpara); 160e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(returnCode) 161e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 162e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard printf("%s", HelpString); 163e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return 0; 164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* open input file */ 167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard infile = fopen(infileName, "rb"); 168e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if (!infile) { 169e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard printf("Open input file fail..."); 170e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return -1; 171e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 172e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 173e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard /* open output file */ 174e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(isOutput) 175e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 176e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard outfile = fopen(outfileName, "wb"); 177e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if (!outfile) { 178e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard printf("Open output file fail..."); 179e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return -1; 180e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 181e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 182e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard // set memory operators; 183e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard moper.Alloc = cmnMemAlloc; 184e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard moper.Copy = cmnMemCopy; 185e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard moper.Free = cmnMemFree; 186e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard moper.Set = cmnMemSet; 187e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard moper.Check = cmnMemCheck; 188e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard useData.memflag = VO_IMF_USERMEMOPERATOR; 189e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard useData.memData = (VO_PTR)(&moper); 190e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard // open encoder dll; 191e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard handle = dlopen("libstagefright.so", RTLD_NOW); 192e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(handle == 0) 193e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 194e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard printf("open dll error......"); 195e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return -1; 196e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 197e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard // Get API; 198e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard pfunc = dlsym(handle, "voGetAACEncAPI"); 199e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(pfunc == 0) 200e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 201e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard printf("open function error......"); 202e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return -1; 203e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 204e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard pGetAPI = (VOGETAUDIODECAPI)pfunc; 205e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard returnCode = pGetAPI(&AudioAPI); 206e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(returnCode) 207e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return -1; 208e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 209e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 210e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//####################################### Init Encoding Section ######################################### 211e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard returnCode = AudioAPI.Init(&hCodec, VO_AUDIO_CodingAAC, &useData); 212e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(returnCode < 0) 213e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 214e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard printf("#### VOI_Error2:fail to initialize the Encoderr###\n"); 215e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return -1; 216e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 217e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 218e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard returnCode = AudioAPI.SetParam(hCodec, VO_PID_AAC_ENCPARAM, &aacpara); 219e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 220e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard inData.Buffer = inBuf; 221e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard bytesLeft = ReadFile2Buf(infile,inData.Buffer,READ_SIZE); 222e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 223e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//####################################### Encoding Section ######################################### 224e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 225e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard do { 226e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 227e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard inData.Length = bytesLeft; 228e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard outData.Buffer = outBuf; 229e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard outData.Length = 1024*8; 230e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 231e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard t1 = clock(); 232e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 233e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard returnCode = AudioAPI.SetInputData(hCodec,&inData); 234e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 235e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard do { 236e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard outData.Buffer = outBuf; 237e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard outData.Length = 1024*8; 238e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 239e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard returnCode = AudioAPI.GetOutputData(hCodec,&outData, &outInfo); 240e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 241e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(returnCode == 0) 242e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard EncoderdFrame++; 243e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(returnCode == VO_ERR_LICENSE_ERROR) 244e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard break; 245e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 246e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#if VO_AAC_E_OUTPUT 247e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if (isOutput && returnCode == 0) 248e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 249e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard fwrite(outData.Buffer, 1, outData.Length, outfile); 250e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 251e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#endif 252e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } while(returnCode != (VO_ERR_INPUT_BUFFER_SMALL)); 253e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 254e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if(returnCode == VO_ERR_LICENSE_ERROR) 255e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard break; 256e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 257e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard t2 = clock(); 258e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard total += t2 - t1; 259e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 260e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if (!eofFile) { 261e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard nRead = ReadFile2Buf(infile, inBuf,READ_SIZE); 262e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard bytesLeft = nRead; 263e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard inData.Buffer = inBuf; 264e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if (feof(infile)) 265e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard eofFile = 1; 266e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 267e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 268e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } while (!eofFile && returnCode); 269e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 270e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 271e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//################################################ End Encoding Section ####################################################### 272e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard returnCode = AudioAPI.Uninit(hCodec); 273e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 274e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard fclose(infile); 275e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if (outfile) 276e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 277e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard fclose(outfile); 278e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 279e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard dlclose(handle); 280e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return 0; 281e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 282e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 283e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 284