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

Commit 45c1263a authored by Amy Zhang's avatar Amy Zhang
Browse files

Fix Tuner 1.0 default implementation Demux and Frontend mapping

The previous impl keeps the demux and frontend mapping in the
Tuner implementation even the instance has been closed.

Clean up the mapping and the local vectors in the Tuner impl
when Demux or Frontend is closed.

Test: atest VtsHalTvTunerV1_0TargetTest
Bug: 150952766
Change-Id: I2038e902ba7ab323c6dacc886ac6984ee7c475aa
parent 69143cc4
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -163,6 +163,7 @@ Return<Result> Demux::close() {
    mRecordFilterIds.clear();
    mFilters.clear();
    mLastUsedFilterId = -1;
    mTunerService->removeDemux(mDemuxId);

    return Result::SUCCESS;
}
@@ -318,6 +319,12 @@ void Demux::frontendInputThreadLoop() {
    std::lock_guard<std::mutex> lock(mFrontendInputThreadLock);
    mFrontendInputThreadRunning = true;

    if (!mDvrPlayback) {
        ALOGW("[Demux] No software Frontend input configured. Ending Frontend thread loop.");
        mFrontendInputThreadRunning = false;
        return;
    }

    while (mFrontendInputThreadRunning) {
        uint32_t efState = 0;
        status_t status = mDvrPlayback->getDvrEventFlag()->wait(
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ Return<Result> Frontend::close() {
    // Reset callback
    mCallback = nullptr;
    mIsLocked = false;
    mTunerService->removeFrontend(mId);

    return Result::SUCCESS;
}
+15 −2
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ Tuner::Tuner() {
    // Static Frontends array to maintain local frontends information
    // Array index matches their FrontendId in the default impl
    mFrontendSize = 8;
    mFrontends.resize(mFrontendSize);
    mFrontends[0] = new Frontend(FrontendType::DVBT, 0, this);
    mFrontends[1] = new Frontend(FrontendType::ATSC, 1, this);
    mFrontends[2] = new Frontend(FrontendType::DVBC, 2, this);
@@ -48,7 +47,6 @@ Tuner::Tuner() {
    mFrontends[7] = new Frontend(FrontendType::ATSC, 7, this);

    FrontendInfo::FrontendCapabilities caps;
    mFrontendCaps.resize(mFrontendSize);
    caps = FrontendInfo::FrontendCapabilities();
    caps.dvbtCaps(FrontendDvbtCapabilities());
    mFrontendCaps[0] = caps;
@@ -236,6 +234,21 @@ void Tuner::setFrontendAsDemuxSource(uint32_t frontendId, uint32_t demuxId) {
    }
}

void Tuner::removeDemux(uint32_t demuxId) {
    map<uint32_t, uint32_t>::iterator it;
    for (it = mFrontendToDemux.begin(); it != mFrontendToDemux.end(); it++) {
        if (it->second == demuxId) {
            it = mFrontendToDemux.erase(it);
            break;
        }
    }
    mDemuxes.erase(demuxId);
}

void Tuner::removeFrontend(uint32_t frontendId) {
    mFrontendToDemux.erase(frontendId);
}

void Tuner::frontendStopTune(uint32_t frontendId) {
    map<uint32_t, uint32_t>::iterator it = mFrontendToDemux.find(frontendId);
    uint32_t demuxId;
+6 −4
Original line number Diff line number Diff line
@@ -65,14 +65,16 @@ class Tuner : public ITuner {

    void frontendStartTune(uint32_t frontendId);
    void frontendStopTune(uint32_t frontendId);
    void removeDemux(uint32_t demuxId);
    void removeFrontend(uint32_t frontendId);

  private:
    virtual ~Tuner();
    // Static mFrontends array to maintain local frontends information
    vector<sp<Frontend>> mFrontends;
    vector<FrontendInfo::FrontendCapabilities> mFrontendCaps;
    std::map<uint32_t, uint32_t> mFrontendToDemux;
    std::map<uint32_t, sp<Demux>> mDemuxes;
    map<uint32_t, sp<Frontend>> mFrontends;
    map<uint32_t, FrontendInfo::FrontendCapabilities> mFrontendCaps;
    map<uint32_t, uint32_t> mFrontendToDemux;
    map<uint32_t, sp<Demux>> mDemuxes;
    // To maintain how many Frontends we have
    int mFrontendSize;
    // The last used demux id. Initial value is -1.