Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b91c5363 authored by Mikhail Naganov's avatar Mikhail Naganov Committed by Automerger Merge Worker
Browse files

Merge "audio: Make I/O operations in default stub more realistic" am: b862e6e2 am: 7c0a635b

parents 9f0b6d81 7c0a635b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ cc_defaults {
    shared_libs: [
        "libalsautilsv2",
        "libaudioaidlcommon",
        "libaudioutils",
        "libbase",
        "libbinder_ndk",
        "libcutils",
+22 −7
Original line number Diff line number Diff line
@@ -14,8 +14,11 @@
 * limitations under the License.
 */

#include <cmath>

#define LOG_TAG "AHAL_Stream"
#include <android-base/logging.h>
#include <audio_utils/clock.h>

#include "core-impl/Module.h"
#include "core-impl/StreamStub.h"
@@ -29,31 +32,42 @@ using aidl::android::media::audio::common::MicrophoneInfo;
namespace aidl::android::hardware::audio::core {

DriverStub::DriverStub(const StreamContext& context, bool isInput)
    : mFrameSizeBytes(context.getFrameSize()), mIsInput(isInput) {}
    : mFrameSizeBytes(context.getFrameSize()),
      mSampleRate(context.getSampleRate()),
      mIsAsynchronous(!!context.getAsyncCallback()),
      mIsInput(isInput) {}

::android::status_t DriverStub::init() {
    usleep(1000);
    usleep(500);
    return ::android::OK;
}

::android::status_t DriverStub::drain(StreamDescriptor::DrainMode) {
    usleep(1000);
    usleep(500);
    return ::android::OK;
}

::android::status_t DriverStub::flush() {
    usleep(1000);
    usleep(500);
    return ::android::OK;
}

::android::status_t DriverStub::pause() {
    usleep(1000);
    usleep(500);
    return ::android::OK;
}

::android::status_t DriverStub::transfer(void* buffer, size_t frameCount, size_t* actualFrameCount,
                                         int32_t* latencyMs) {
    usleep(3000);
    static constexpr float kMicrosPerSecond = MICROS_PER_SECOND;
    static constexpr float kScaleFactor = .8f;
    if (mIsAsynchronous) {
        usleep(500);
    } else {
        const size_t delayUs = static_cast<size_t>(
                std::roundf(kScaleFactor * frameCount * kMicrosPerSecond / mSampleRate));
        usleep(delayUs);
    }
    if (mIsInput) {
        uint8_t* byteBuffer = static_cast<uint8_t*>(buffer);
        for (size_t i = 0; i < frameCount * mFrameSizeBytes; ++i) {
@@ -66,12 +80,13 @@ DriverStub::DriverStub(const StreamContext& context, bool isInput)
}

::android::status_t DriverStub::standby() {
    usleep(1000);
    usleep(500);
    return ::android::OK;
}

::android::status_t DriverStub::setConnectedDevices(
        const std::vector<AudioDevice>& connectedDevices __unused) {
    usleep(500);
    return ::android::OK;
}

+1 −1
Original line number Diff line number Diff line
@@ -164,7 +164,7 @@ class Module : public BnModule {
    bool isMmapSupported();

    // This value is used for all AudioPatches.
    static constexpr int32_t kMinimumStreamBufferSizeFrames = 16;
    static constexpr int32_t kMinimumStreamBufferSizeFrames = 256;
    // The maximum stream buffer size is 1 GiB = 2 ** 30 bytes;
    static constexpr int32_t kMaximumStreamBufferSizeBytes = 1 << 30;

+2 −0
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@ class DriverStub : public DriverInterface {

  private:
    const size_t mFrameSizeBytes;
    const int mSampleRate;
    const bool mIsAsynchronous;
    const bool mIsInput;
};