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

Commit 273b25cd authored by Mikhail Naganov's avatar Mikhail Naganov Committed by Gerrit Code Review
Browse files

Merge changes from topic "cuttlefish_aidl_audio-3" into main

* changes:
  audiorecord_test: Improve logging
  libaudioclient: Temporarily disable audioeffect_analysis
  Enable AIDL HAL support in the framework
parents 7a4a0fc5 24bd914c
Loading
Loading
Loading
Loading
+6 −5
Original line number Original line Diff line number Diff line
@@ -41,10 +41,11 @@
        }
        }
      ]
      ]
    }
    }
  ],
  "postsubmit": [
    {
       "name": "audioeffect_analysis"
    }
  ]
  ]
  // TODO(b/302036943): Enable once we make it pass with AIDL HAL on CF.
  // "postsubmit": [
  //   {
  //      "name": "audioeffect_analysis"
  //   }
  // ]
}
}
+74 −17
Original line number Original line Diff line number Diff line
@@ -14,9 +14,13 @@
 * limitations under the License.
 * limitations under the License.
 */
 */


#include <sstream>

//#define LOG_NDEBUG 0
//#define LOG_NDEBUG 0
#define LOG_TAG "AudioRecordTest"
#define LOG_TAG "AudioRecordTest"


#include <android-base/logging.h>
#include <binder/ProcessState.h>
#include <gtest/gtest.h>
#include <gtest/gtest.h>


#include "audio_test_utils.h"
#include "audio_test_utils.h"
@@ -25,32 +29,40 @@ using namespace android;


class AudioRecordTest : public ::testing::Test {
class AudioRecordTest : public ::testing::Test {
  public:
  public:
    virtual void SetUp() override {
    void SetUp() override {
        mAC = new AudioCapture(AUDIO_SOURCE_DEFAULT, 44100, AUDIO_FORMAT_PCM_16_BIT,
        mAC = new AudioCapture(AUDIO_SOURCE_DEFAULT, 44100, AUDIO_FORMAT_PCM_16_BIT,
                               AUDIO_CHANNEL_IN_FRONT);
                               AUDIO_CHANNEL_IN_FRONT);
        ASSERT_NE(nullptr, mAC);
        ASSERT_NE(nullptr, mAC);
        ASSERT_EQ(OK, mAC->create()) << "record creation failed";
        ASSERT_EQ(OK, mAC->create()) << "record creation failed";
    }
    }


    virtual void TearDown() override {
    void TearDown() override {
        if (mAC) ASSERT_EQ(OK, mAC->stop());
        if (mAC) ASSERT_EQ(OK, mAC->stop());
    }
    }


    sp<AudioCapture> mAC;
    sp<AudioCapture> mAC;
};
};


class AudioRecordCreateTest
using RecordCreateTestParam = std::tuple<uint32_t, audio_format_t, audio_channel_mask_t,
    : public ::testing::TestWithParam<
                                         audio_input_flags_t, audio_session_t, audio_source_t>;
              std::tuple<uint32_t, audio_format_t, audio_channel_mask_t, audio_input_flags_t,
enum {
                         audio_session_t, audio_source_t>> {
    RECORD_PARAM_SAMPLE_RATE,
    RECORD_PARAM_FORMAT,
    RECORD_PARAM_CHANNEL_MASK,
    RECORD_PARAM_FLAGS,
    RECORD_PARAM_SESSION_ID,
    RECORD_PARAM_INPUT_SOURCE
};

class AudioRecordCreateTest : public ::testing::TestWithParam<RecordCreateTestParam> {
  public:
  public:
    AudioRecordCreateTest()
    AudioRecordCreateTest()
        : mSampleRate(std::get<0>(GetParam())),
        : mSampleRate(std::get<RECORD_PARAM_SAMPLE_RATE>(GetParam())),
          mFormat(std::get<1>(GetParam())),
          mFormat(std::get<RECORD_PARAM_FORMAT>(GetParam())),
          mChannelMask(std::get<2>(GetParam())),
          mChannelMask(std::get<RECORD_PARAM_CHANNEL_MASK>(GetParam())),
          mFlags(std::get<3>(GetParam())),
          mFlags(std::get<RECORD_PARAM_FLAGS>(GetParam())),
          mSessionId(std::get<4>(GetParam())),
          mSessionId(std::get<RECORD_PARAM_SESSION_ID>(GetParam())),
          mInputSource(std::get<5>(GetParam())){};
          mInputSource(std::get<RECORD_PARAM_INPUT_SOURCE>(GetParam())){};


    const uint32_t mSampleRate;
    const uint32_t mSampleRate;
    const audio_format_t mFormat;
    const audio_format_t mFormat;
@@ -62,14 +74,14 @@ class AudioRecordCreateTest


    sp<AudioCapture> mAC;
    sp<AudioCapture> mAC;


    virtual void SetUp() override {
    void SetUp() override {
        mAC = new AudioCapture(mInputSource, mSampleRate, mFormat, mChannelMask, mFlags, mSessionId,
        mAC = new AudioCapture(mInputSource, mSampleRate, mFormat, mChannelMask, mFlags, mSessionId,
                               mTransferType);
                               mTransferType);
        ASSERT_NE(nullptr, mAC);
        ASSERT_NE(nullptr, mAC);
        ASSERT_EQ(OK, mAC->create()) << "record creation failed";
        ASSERT_EQ(OK, mAC->create()) << "record creation failed";
    }
    }


    virtual void TearDown() override {
    void TearDown() override {
        if (mAC) ASSERT_EQ(OK, mAC->stop());
        if (mAC) ASSERT_EQ(OK, mAC->stop());
    }
    }
};
};
@@ -197,6 +209,18 @@ TEST_P(AudioRecordCreateTest, TestCreateRecord) {
    EXPECT_EQ(OK, mAC->audioProcess()) << "audioProcess failed";
    EXPECT_EQ(OK, mAC->audioProcess()) << "audioProcess failed";
}
}


static std::string GetRecordTestName(const testing::TestParamInfo<RecordCreateTestParam>& info) {
    const auto& p = info.param;
    std::ostringstream s;
    s << std::get<RECORD_PARAM_SAMPLE_RATE>(p) << "_"
      << audio_format_to_string(std::get<RECORD_PARAM_FORMAT>(p)) << "__"
      << audio_channel_mask_to_string(std::get<RECORD_PARAM_CHANNEL_MASK>(p)) << "__"
      << "Flags_0x" << std::hex << std::get<RECORD_PARAM_FLAGS>(p) << std::dec << "__"
      << "Session_" << std::get<RECORD_PARAM_SESSION_ID>(p) << "__"
      << audio_source_to_string(std::get<RECORD_PARAM_INPUT_SOURCE>(p));
    return s.str();
}

// for port primary input
// for port primary input
INSTANTIATE_TEST_SUITE_P(AudioRecordPrimaryInput, AudioRecordCreateTest,
INSTANTIATE_TEST_SUITE_P(AudioRecordPrimaryInput, AudioRecordCreateTest,
                         ::testing::Combine(::testing::Values(8000, 11025, 12000, 16000, 22050,
                         ::testing::Combine(::testing::Values(8000, 11025, 12000, 16000, 22050,
@@ -207,7 +231,8 @@ INSTANTIATE_TEST_SUITE_P(AudioRecordPrimaryInput, AudioRecordCreateTest,
                                                              AUDIO_CHANNEL_IN_FRONT_BACK),
                                                              AUDIO_CHANNEL_IN_FRONT_BACK),
                                            ::testing::Values(AUDIO_INPUT_FLAG_NONE),
                                            ::testing::Values(AUDIO_INPUT_FLAG_NONE),
                                            ::testing::Values(AUDIO_SESSION_NONE),
                                            ::testing::Values(AUDIO_SESSION_NONE),
                                            ::testing::Values(AUDIO_SOURCE_DEFAULT)));
                                            ::testing::Values(AUDIO_SOURCE_DEFAULT)),
                         GetRecordTestName);


// for port fast input
// for port fast input
INSTANTIATE_TEST_SUITE_P(AudioRecordFastInput, AudioRecordCreateTest,
INSTANTIATE_TEST_SUITE_P(AudioRecordFastInput, AudioRecordCreateTest,
@@ -219,7 +244,8 @@ INSTANTIATE_TEST_SUITE_P(AudioRecordFastInput, AudioRecordCreateTest,
                                                              AUDIO_CHANNEL_IN_FRONT_BACK),
                                                              AUDIO_CHANNEL_IN_FRONT_BACK),
                                            ::testing::Values(AUDIO_INPUT_FLAG_FAST),
                                            ::testing::Values(AUDIO_INPUT_FLAG_FAST),
                                            ::testing::Values(AUDIO_SESSION_NONE),
                                            ::testing::Values(AUDIO_SESSION_NONE),
                                            ::testing::Values(AUDIO_SOURCE_DEFAULT)));
                                            ::testing::Values(AUDIO_SOURCE_DEFAULT)),
                         GetRecordTestName);


// misc
// misc
INSTANTIATE_TEST_SUITE_P(AudioRecordMiscInput, AudioRecordCreateTest,
INSTANTIATE_TEST_SUITE_P(AudioRecordMiscInput, AudioRecordCreateTest,
@@ -232,4 +258,35 @@ INSTANTIATE_TEST_SUITE_P(AudioRecordMiscInput, AudioRecordCreateTest,
                                                              AUDIO_SOURCE_CAMCORDER,
                                                              AUDIO_SOURCE_CAMCORDER,
                                                              AUDIO_SOURCE_VOICE_RECOGNITION,
                                                              AUDIO_SOURCE_VOICE_RECOGNITION,
                                                              AUDIO_SOURCE_VOICE_COMMUNICATION,
                                                              AUDIO_SOURCE_VOICE_COMMUNICATION,
                                                              AUDIO_SOURCE_UNPROCESSED)));
                                                              AUDIO_SOURCE_UNPROCESSED)),
                         GetRecordTestName);

namespace {

class TestExecutionTracer : public ::testing::EmptyTestEventListener {
  public:
    void OnTestStart(const ::testing::TestInfo& test_info) override {
        TraceTestState("Started", test_info);
    }
    void OnTestEnd(const ::testing::TestInfo& test_info) override {
        TraceTestState("Finished", test_info);
    }
    void OnTestPartResult(const ::testing::TestPartResult& result) override { LOG(INFO) << result; }

  private:
    static void TraceTestState(const std::string& state, const ::testing::TestInfo& test_info) {
        LOG(INFO) << state << " " << test_info.test_suite_name() << "::" << test_info.name();
    }
};

}  // namespace

int main(int argc, char** argv) {
    ::testing::InitGoogleTest(&argc, argv);
    ::testing::UnitTest::GetInstance()->listeners().Append(new TestExecutionTracer());
    android::base::SetMinimumLogSeverity(::android::base::DEBUG);
    // This is for death handlers instantiated by the framework code.
    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
    android::ProcessState::self()->startThreadPool();
    return RUN_ALL_TESTS();
}
+2 −3
Original line number Original line Diff line number Diff line
@@ -50,9 +50,8 @@ using InterfaceName = std::pair<std::string, std::string>;
 * This list need to keep sync with AudioHalVersionInfo.VERSIONS in
 * This list need to keep sync with AudioHalVersionInfo.VERSIONS in
 * media/java/android/media/AudioHalVersionInfo.java.
 * media/java/android/media/AudioHalVersionInfo.java.
 */
 */
static const std::array<AudioHalVersionInfo, 5> sAudioHALVersions = {
static const std::array<AudioHalVersionInfo, 6> sAudioHALVersions = {
    // TODO: remove this comment to get AIDL
    AudioHalVersionInfo(AudioHalVersionInfo::Type::AIDL, 1, 0),
    // AudioHalVersionInfo(AudioHalVersionInfo::Type::AIDL, 1, 0),
    AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, 7, 1),
    AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, 7, 1),
    AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, 7, 0),
    AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, 7, 0),
    AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, 6, 0),
    AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, 6, 0),