Skip to content

Commit

Permalink
internal/oboe: bug fix: add missing files
Browse files Browse the repository at this point in the history
  • Loading branch information
hajimehoshi committed Apr 1, 2024
1 parent f11a3b4 commit 457cd3e
Show file tree
Hide file tree
Showing 4 changed files with 191 additions and 0 deletions.
55 changes: 55 additions & 0 deletions internal/oboe/oboe_flowgraph_SinkI8_24_android.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright 2023 The Android Open Source Project
*
* 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.
*/

#include "oboe_flowgraph_FlowGraphNode_android.h"
#include "oboe_flowgraph_FlowgraphUtilities_android.h"
#include "oboe_flowgraph_SinkI8_24_android.h"

#if FLOWGRAPH_ANDROID_INTERNAL
#include <audio_utils/primitives.h>
#endif

using namespace FLOWGRAPH_OUTER_NAMESPACE::flowgraph;

SinkI8_24::SinkI8_24(int32_t channelCount)
: FlowGraphSink(channelCount) {}

int32_t SinkI8_24::read(void *data, int32_t numFrames) {
int32_t *intData = (int32_t *) data;
const int32_t channelCount = input.getSamplesPerFrame();

int32_t framesLeft = numFrames;
while (framesLeft > 0) {
// Run the graph and pull data through the input port.
int32_t framesRead = pullData(framesLeft);
if (framesRead <= 0) {
break;
}
const float *signal = input.getBuffer();
int32_t numSamples = framesRead * channelCount;
#if FLOWGRAPH_ANDROID_INTERNAL
memcpy_to_q8_23_from_float_with_clamp(intData, signal, numSamples);
intData += numSamples;
signal += numSamples;
#else
for (int i = 0; i < numSamples; i++) {
*intData++ = FlowgraphUtilities::clamp24FromFloat(*signal++);
}
#endif
framesLeft -= framesRead;
}
return numFrames - framesLeft;
}
40 changes: 40 additions & 0 deletions internal/oboe/oboe_flowgraph_SinkI8_24_android.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* Copyright 2023 The Android Open Source Project
*
* 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.
*/

#ifndef FLOWGRAPH_SINK_I8_24_H
#define FLOWGRAPH_SINK_I8_24_H

#include <stdint.h>

#include "oboe_flowgraph_FlowGraphNode_android.h"

namespace FLOWGRAPH_OUTER_NAMESPACE::flowgraph {

class SinkI8_24 : public FlowGraphSink {
public:
explicit SinkI8_24(int32_t channelCount);
~SinkI8_24() override = default;

int32_t read(void *data, int32_t numFrames) override;

const char *getName() override {
return "SinkI8_24";
}
};

} /* namespace FLOWGRAPH_OUTER_NAMESPACE::flowgraph */

#endif //FLOWGRAPH_SINK_I8_24_H
54 changes: 54 additions & 0 deletions internal/oboe/oboe_flowgraph_SourceI8_24_android.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* Copyright 2023 The Android Open Source Project
*
* 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.
*/

#include <algorithm>
#include <unistd.h>

#include "oboe_flowgraph_FlowGraphNode_android.h"
#include "oboe_flowgraph_SourceI8_24_android.h"

#if FLOWGRAPH_ANDROID_INTERNAL
#include <audio_utils/primitives.h>
#endif

using namespace FLOWGRAPH_OUTER_NAMESPACE::flowgraph;

SourceI8_24::SourceI8_24(int32_t channelCount)
: FlowGraphSourceBuffered(channelCount) {
}

int32_t SourceI8_24::onProcess(int32_t numFrames) {
float *floatData = output.getBuffer();
const int32_t channelCount = output.getSamplesPerFrame();

const int32_t framesLeft = mSizeInFrames - mFrameIndex;
const int32_t framesToProcess = std::min(numFrames, framesLeft);
const int32_t numSamples = framesToProcess * channelCount;

const int32_t *intBase = static_cast<const int32_t *>(mData);
const int32_t *intData = &intBase[mFrameIndex * channelCount];

#if FLOWGRAPH_ANDROID_INTERNAL
memcpy_to_float_from_q8_23(floatData, intData, numSamples);
#else
for (int i = 0; i < numSamples; i++) {
*floatData++ = *intData++ * kScale;
}
#endif

mFrameIndex += framesToProcess;
return framesToProcess;
}
42 changes: 42 additions & 0 deletions internal/oboe/oboe_flowgraph_SourceI8_24_android.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Copyright 2023 The Android Open Source Project
*
* 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.
*/

#ifndef FLOWGRAPH_SOURCE_I8_24_H
#define FLOWGRAPH_SOURCE_I8_24_H

#include <stdint.h>

#include "oboe_flowgraph_FlowGraphNode_android.h"

namespace FLOWGRAPH_OUTER_NAMESPACE::flowgraph {

class SourceI8_24 : public FlowGraphSourceBuffered {
public:
explicit SourceI8_24(int32_t channelCount);
~SourceI8_24() override = default;

int32_t onProcess(int32_t numFrames) override;

const char *getName() override {
return "SourceI8_24";
}
private:
static constexpr float kScale = 1.0 / (1UL << 23);
};

} /* namespace FLOWGRAPH_OUTER_NAMESPACE::flowgraph */

#endif //FLOWGRAPH_SOURCE_I8_24_H

0 comments on commit 457cd3e

Please sign in to comment.