From 50899fb2696d2bb98a4807a237e124f566293f57 Mon Sep 17 00:00:00 2001 From: Hongguang Date: Thu, 5 Aug 2021 22:51:58 -0700 Subject: [PATCH] Fix tuner example crash. Bug: 195717690 Fix: 195717690 Test: atest VtsHalTvTunerTargetTest Change-Id: Ie1ac0f12f9802ac55f1e35ff8dc7c0c34ccce086 --- tv/tuner/aidl/default/Demux.cpp | 11 +++++------ tv/tuner/aidl/default/Demux.h | 4 ++-- tv/tuner/aidl/default/Dvr.cpp | 3 +-- tv/tuner/aidl/default/Dvr.h | 5 ++--- tv/tuner/aidl/default/Filter.cpp | 2 +- tv/tuner/aidl/default/Filter.h | 6 +++--- tv/tuner/aidl/default/Frontend.cpp | 2 +- tv/tuner/aidl/default/Frontend.h | 4 ++-- tv/tuner/aidl/default/TimeFilter.cpp | 2 +- tv/tuner/aidl/default/TimeFilter.h | 4 ++-- tv/tuner/aidl/default/Tuner.cpp | 22 +++++++++++----------- 11 files changed, 31 insertions(+), 34 deletions(-) diff --git a/tv/tuner/aidl/default/Demux.cpp b/tv/tuner/aidl/default/Demux.cpp index d5a653b3e6..bdc3849e34 100644 --- a/tv/tuner/aidl/default/Demux.cpp +++ b/tv/tuner/aidl/default/Demux.cpp @@ -31,7 +31,7 @@ namespace tuner { #define WAIT_TIMEOUT 3000000000 -Demux::Demux(int32_t demuxId, std::shared_ptr tuner) { +Demux::Demux(int32_t demuxId, Tuner* tuner) { mDemuxId = demuxId; mTuner = tuner; } @@ -76,7 +76,7 @@ Demux::~Demux() { } std::shared_ptr filter = - ndk::SharedRefBase::make(in_type, filterId, in_bufferSize, in_cb, ref()); + ndk::SharedRefBase::make(in_type, filterId, in_bufferSize, in_cb, this); if (!filter->createFilterMQ()) { *_aidl_return = nullptr; return ::ndk::ScopedAStatus::fromServiceSpecificError( @@ -110,7 +110,7 @@ Demux::~Demux() { ::ndk::ScopedAStatus Demux::openTimeFilter(std::shared_ptr* _aidl_return) { ALOGV("%s", __FUNCTION__); - mTimeFilter = ndk::SharedRefBase::make(ref()); + mTimeFilter = ndk::SharedRefBase::make(this); *_aidl_return = mTimeFilter; return ::ndk::ScopedAStatus::ok(); @@ -201,8 +201,7 @@ Demux::~Demux() { set::iterator it; switch (in_type) { case DvrType::PLAYBACK: - mDvrPlayback = - ndk::SharedRefBase::make(in_type, in_bufferSize, in_cb, ref()); + mDvrPlayback = ndk::SharedRefBase::make(in_type, in_bufferSize, in_cb, this); if (!mDvrPlayback->createDvrMQ()) { mDvrPlayback = nullptr; *_aidl_return = mDvrPlayback; @@ -223,7 +222,7 @@ Demux::~Demux() { *_aidl_return = mDvrPlayback; return ::ndk::ScopedAStatus::ok(); case DvrType::RECORD: - mDvrRecord = ndk::SharedRefBase::make(in_type, in_bufferSize, in_cb, ref()); + mDvrRecord = ndk::SharedRefBase::make(in_type, in_bufferSize, in_cb, this); if (!mDvrRecord->createDvrMQ()) { mDvrRecord = nullptr; *_aidl_return = mDvrRecord; diff --git a/tv/tuner/aidl/default/Demux.h b/tv/tuner/aidl/default/Demux.h index 4d9b7fe911..4cfcaab2ac 100644 --- a/tv/tuner/aidl/default/Demux.h +++ b/tv/tuner/aidl/default/Demux.h @@ -50,7 +50,7 @@ class Tuner; class Demux : public BnDemux { public: - Demux(int32_t demuxId, std::shared_ptr tuner); + Demux(int32_t demuxId, Tuner* tuner); ~Demux(); ::ndk::ScopedAStatus setFrontendDataSource(int32_t in_frontendId) override; @@ -95,7 +95,7 @@ class Demux : public BnDemux { private: // Tuner service - std::shared_ptr mTuner; + Tuner* mTuner; // Frontend source std::shared_ptr mFrontend; diff --git a/tv/tuner/aidl/default/Dvr.cpp b/tv/tuner/aidl/default/Dvr.cpp index 9eadb8ce19..7c9c44c76f 100644 --- a/tv/tuner/aidl/default/Dvr.cpp +++ b/tv/tuner/aidl/default/Dvr.cpp @@ -31,8 +31,7 @@ namespace tuner { #define WAIT_TIMEOUT 3000000000 -Dvr::Dvr(DvrType type, uint32_t bufferSize, const std::shared_ptr& cb, - std::shared_ptr demux) { +Dvr::Dvr(DvrType type, uint32_t bufferSize, const std::shared_ptr& cb, Demux* demux) { mType = type; mBufferSize = bufferSize; mCallback = cb; diff --git a/tv/tuner/aidl/default/Dvr.h b/tv/tuner/aidl/default/Dvr.h index 68933aed70..2e964495e3 100644 --- a/tv/tuner/aidl/default/Dvr.h +++ b/tv/tuner/aidl/default/Dvr.h @@ -57,8 +57,7 @@ class Tuner; class Dvr : public BnDvr { public: - Dvr(DvrType type, uint32_t bufferSize, const std::shared_ptr& cb, - std::shared_ptr demux); + Dvr(DvrType type, uint32_t bufferSize, const std::shared_ptr& cb, Demux* demux); ~Dvr(); ::ndk::ScopedAStatus getQueueDesc( @@ -88,7 +87,7 @@ class Dvr : public BnDvr { private: // Demux service - std::shared_ptr mDemux; + Demux* mDemux; DvrType mType; uint32_t mBufferSize; diff --git a/tv/tuner/aidl/default/Filter.cpp b/tv/tuner/aidl/default/Filter.cpp index 77ca2ee62b..681eb04409 100644 --- a/tv/tuner/aidl/default/Filter.cpp +++ b/tv/tuner/aidl/default/Filter.cpp @@ -37,7 +37,7 @@ namespace tuner { Filter::Filter() {} Filter::Filter(DemuxFilterType type, int64_t filterId, uint32_t bufferSize, - const std::shared_ptr& cb, std::shared_ptr demux) { + const std::shared_ptr& cb, Demux* demux) { mType = type; mFilterId = filterId; mBufferSize = bufferSize; diff --git a/tv/tuner/aidl/default/Filter.h b/tv/tuner/aidl/default/Filter.h index 4bb1a7266b..1dbba453e5 100644 --- a/tv/tuner/aidl/default/Filter.h +++ b/tv/tuner/aidl/default/Filter.h @@ -54,7 +54,7 @@ class Filter : public BnFilter { Filter(); Filter(DemuxFilterType type, int64_t filterId, uint32_t bufferSize, - const std::shared_ptr& cb, std::shared_ptr demux); + const std::shared_ptr& cb, Demux* demux); ~Filter(); @@ -96,8 +96,8 @@ class Filter : public BnFilter { bool isRecordFilter() { return mIsRecordFilter; }; private: - // Tuner service - std::shared_ptr mDemux; + // Demux service + Demux* mDemux; // Dvr reference once the filter is attached to any std::shared_ptr mDvr = nullptr; /** diff --git a/tv/tuner/aidl/default/Frontend.cpp b/tv/tuner/aidl/default/Frontend.cpp index 438f897446..78d8279b9b 100644 --- a/tv/tuner/aidl/default/Frontend.cpp +++ b/tv/tuner/aidl/default/Frontend.cpp @@ -28,7 +28,7 @@ namespace hardware { namespace tv { namespace tuner { -Frontend::Frontend(FrontendType type, int32_t id, std::shared_ptr tuner) { +Frontend::Frontend(FrontendType type, int32_t id, Tuner* tuner) { mType = type; mId = id; mTuner = tuner; diff --git a/tv/tuner/aidl/default/Frontend.h b/tv/tuner/aidl/default/Frontend.h index 3c602cff8f..a98cc92f6d 100644 --- a/tv/tuner/aidl/default/Frontend.h +++ b/tv/tuner/aidl/default/Frontend.h @@ -33,7 +33,7 @@ class Tuner; class Frontend : public BnFrontend { public: - Frontend(FrontendType type, int32_t id, std::shared_ptr tuner); + Frontend(FrontendType type, int32_t id, Tuner* tuner); ::ndk::ScopedAStatus setCallback( const std::shared_ptr& in_callback) override; @@ -59,7 +59,7 @@ class Frontend : public BnFrontend { virtual ~Frontend(); bool supportsSatellite(); std::shared_ptr mCallback; - std::shared_ptr mTuner; + Tuner* mTuner; FrontendType mType = FrontendType::UNDEFINED; int32_t mId = 0; bool mIsLocked = false; diff --git a/tv/tuner/aidl/default/TimeFilter.cpp b/tv/tuner/aidl/default/TimeFilter.cpp index dde7be34ca..3b1edd2ba1 100644 --- a/tv/tuner/aidl/default/TimeFilter.cpp +++ b/tv/tuner/aidl/default/TimeFilter.cpp @@ -30,7 +30,7 @@ namespace tuner { TimeFilter::TimeFilter() {} -TimeFilter::TimeFilter(std::shared_ptr demux) { +TimeFilter::TimeFilter(Demux* demux) { mDemux = demux; } diff --git a/tv/tuner/aidl/default/TimeFilter.h b/tv/tuner/aidl/default/TimeFilter.h index ff35c47d70..44e941c18b 100644 --- a/tv/tuner/aidl/default/TimeFilter.h +++ b/tv/tuner/aidl/default/TimeFilter.h @@ -35,7 +35,7 @@ class Demux; class TimeFilter : public BnTimeFilter { public: TimeFilter(); - TimeFilter(std::shared_ptr demux); + TimeFilter(Demux* demux); ~TimeFilter(); ::ndk::ScopedAStatus setTimeStamp(int64_t in_timeStamp) override; @@ -45,7 +45,7 @@ class TimeFilter : public BnTimeFilter { ::ndk::ScopedAStatus close() override; private: - std::shared_ptr mDemux; + Demux* mDemux; uint64_t mTimeStamp = INVALID_TIME_STAMP; time_t mBeginTime; }; diff --git a/tv/tuner/aidl/default/Tuner.cpp b/tv/tuner/aidl/default/Tuner.cpp index 94c90a7b12..7e49660130 100644 --- a/tv/tuner/aidl/default/Tuner.cpp +++ b/tv/tuner/aidl/default/Tuner.cpp @@ -36,16 +36,16 @@ Tuner::Tuner() { // Static Frontends array to maintain local frontends information // Array index matches their FrontendId in the default impl mFrontendSize = 10; - mFrontends[0] = ndk::SharedRefBase::make(FrontendType::ISDBS, 0, ref()); - mFrontends[1] = ndk::SharedRefBase::make(FrontendType::ATSC3, 1, ref()); - mFrontends[2] = ndk::SharedRefBase::make(FrontendType::DVBC, 2, ref()); - mFrontends[3] = ndk::SharedRefBase::make(FrontendType::DVBS, 3, ref()); - mFrontends[4] = ndk::SharedRefBase::make(FrontendType::DVBT, 4, ref()); - mFrontends[5] = ndk::SharedRefBase::make(FrontendType::ISDBT, 5, ref()); - mFrontends[6] = ndk::SharedRefBase::make(FrontendType::ANALOG, 6, ref()); - mFrontends[7] = ndk::SharedRefBase::make(FrontendType::ATSC, 7, ref()); - mFrontends[8] = ndk::SharedRefBase::make(FrontendType::ISDBS3, 8, ref()); - mFrontends[9] = ndk::SharedRefBase::make(FrontendType::DTMB, 9, ref()); + mFrontends[0] = ndk::SharedRefBase::make(FrontendType::ISDBS, 0, this); + mFrontends[1] = ndk::SharedRefBase::make(FrontendType::ATSC3, 1, this); + mFrontends[2] = ndk::SharedRefBase::make(FrontendType::DVBC, 2, this); + mFrontends[3] = ndk::SharedRefBase::make(FrontendType::DVBS, 3, this); + mFrontends[4] = ndk::SharedRefBase::make(FrontendType::DVBT, 4, this); + mFrontends[5] = ndk::SharedRefBase::make(FrontendType::ISDBT, 5, this); + mFrontends[6] = ndk::SharedRefBase::make(FrontendType::ANALOG, 6, this); + mFrontends[7] = ndk::SharedRefBase::make(FrontendType::ATSC, 7, this); + mFrontends[8] = ndk::SharedRefBase::make(FrontendType::ISDBS3, 8, this); + mFrontends[9] = ndk::SharedRefBase::make(FrontendType::DTMB, 9, this); vector statusCaps; @@ -212,7 +212,7 @@ Tuner::~Tuner() {} ALOGV("%s", __FUNCTION__); mLastUsedId += 1; - mDemuxes[mLastUsedId] = ndk::SharedRefBase::make(mLastUsedId, ref()); + mDemuxes[mLastUsedId] = ndk::SharedRefBase::make(mLastUsedId, this); out_demuxId->push_back(mLastUsedId); *_aidl_return = mDemuxes[mLastUsedId];