1 /* 2 * Copyright 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <algorithm> 18 #include <unistd.h> 19 #include "flowgraph/FlowGraphNode.h" 20 #include "SourceI16Caller.h" 21 22 #if FLOWGRAPH_ANDROID_INTERNAL 23 #include <audio_utils/primitives.h> 24 #endif 25 26 using namespace oboe; 27 using namespace flowgraph; 28 onProcess(int32_t numFrames)29int32_t SourceI16Caller::onProcess(int32_t numFrames) { 30 int32_t numBytes = mStream->getBytesPerFrame() * numFrames; 31 int32_t bytesRead = mBlockReader.read((uint8_t *) mConversionBuffer.get(), numBytes); 32 int32_t framesRead = bytesRead / mStream->getBytesPerFrame(); 33 34 float *floatData = output.getBuffer(); 35 const int16_t *shortData = mConversionBuffer.get(); 36 int32_t numSamples = framesRead * output.getSamplesPerFrame(); 37 38 #if FLOWGRAPH_ANDROID_INTERNAL 39 memcpy_to_float_from_i16(floatData, shortData, numSamples); 40 #else 41 for (int i = 0; i < numSamples; i++) { 42 *floatData++ = *shortData++ * (1.0f / 32768); 43 } 44 #endif 45 46 return framesRead; 47 } 48