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

Commit f731834f authored by Ray Essick's avatar Ray Essick Committed by android-build-merger
Browse files

Merge "C2SoftOpusEnc: Fix mono encoding" into qt-dev

am: 46238cd0

Change-Id: I758d7cf85cd772de2b2e4c799d43a0dc505c68aa
parents ba66226b 46238cd0
Loading
Loading
Loading
Loading
+10 −8
Original line number Original line Diff line number Diff line
@@ -38,6 +38,8 @@ constexpr char COMPONENT_NAME[] = "c2.android.opus.encoder";


}  // namespace
}  // namespace


static const int kMaxNumChannelsSupported = 2;

class C2SoftOpusEnc::IntfImpl : public SimpleInterface<void>::BaseParams {
class C2SoftOpusEnc::IntfImpl : public SimpleInterface<void>::BaseParams {
public:
public:
    explicit IntfImpl(const std::shared_ptr<C2ReflectorHelper> &helper)
    explicit IntfImpl(const std::shared_ptr<C2ReflectorHelper> &helper)
@@ -71,7 +73,7 @@ public:
        addParameter(
        addParameter(
                DefineParam(mChannelCount, C2_PARAMKEY_CHANNEL_COUNT)
                DefineParam(mChannelCount, C2_PARAMKEY_CHANNEL_COUNT)
                .withDefault(new C2StreamChannelCountInfo::input(0u, 1))
                .withDefault(new C2StreamChannelCountInfo::input(0u, 1))
                .withFields({C2F(mChannelCount, value).inRange(1, 8)})
                .withFields({C2F(mChannelCount, value).inRange(1, kMaxNumChannelsSupported)})
                .withSetter((Setter<decltype(*mChannelCount)>::StrictValueWithNoDeps))
                .withSetter((Setter<decltype(*mChannelCount)>::StrictValueWithNoDeps))
                .build());
                .build());


@@ -128,9 +130,8 @@ c2_status_t C2SoftOpusEnc::onInit() {
}
}


c2_status_t C2SoftOpusEnc::configureEncoder() {
c2_status_t C2SoftOpusEnc::configureEncoder() {
    unsigned char mono_mapping[256] = {0};
    static const unsigned char mono_mapping[256] = {0};
    unsigned char stereo_mapping[256] = {0, 1};
    static const unsigned char stereo_mapping[256] = {0, 1};
    unsigned char surround_mapping[256] = {0, 1, 255};
    mSampleRate = mIntf->getSampleRate();
    mSampleRate = mIntf->getSampleRate();
    mChannelCount = mIntf->getChannelCount();
    mChannelCount = mIntf->getChannelCount();
    uint32_t bitrate = mIntf->getBitrate();
    uint32_t bitrate = mIntf->getBitrate();
@@ -140,13 +141,14 @@ c2_status_t C2SoftOpusEnc::configureEncoder() {
        mChannelCount * mNumSamplesPerFrame * sizeof(int16_t);
        mChannelCount * mNumSamplesPerFrame * sizeof(int16_t);
    int err = C2_OK;
    int err = C2_OK;


    unsigned char* mapping;
    const unsigned char* mapping;
    if (mChannelCount < 2) {
    if (mChannelCount == 1) {
        mapping = mono_mapping;
        mapping = mono_mapping;
    } else if (mChannelCount == 2) {
    } else if (mChannelCount == 2) {
        mapping = stereo_mapping;
        mapping = stereo_mapping;
    } else {
    } else {
        mapping = surround_mapping;
        ALOGE("Number of channels (%d) is not supported", mChannelCount);
        return C2_BAD_VALUE;
    }
    }


    if (mEncoder != nullptr) {
    if (mEncoder != nullptr) {
@@ -154,7 +156,7 @@ c2_status_t C2SoftOpusEnc::configureEncoder() {
    }
    }


    mEncoder = opus_multistream_encoder_create(mSampleRate, mChannelCount,
    mEncoder = opus_multistream_encoder_create(mSampleRate, mChannelCount,
        1, 1, mapping, OPUS_APPLICATION_AUDIO, &err);
        1, mChannelCount - 1, mapping, OPUS_APPLICATION_AUDIO, &err);
    if (err) {
    if (err) {
        ALOGE("Could not create libopus encoder. Error code: %i", err);
        ALOGE("Could not create libopus encoder. Error code: %i", err);
        return C2_CORRUPTED;
        return C2_CORRUPTED;