Fix tuner example crash.
Bug: 195717690
Fix: 195717690
Test: atest VtsHalTvTunerTargetTest
Change-Id: Ie1ac0f12f9802ac55f1e35ff8dc7c0c34ccce086
diff --git a/tv/tuner/aidl/default/Demux.cpp b/tv/tuner/aidl/default/Demux.cpp
index d5a653b..bdc3849 100644
--- a/tv/tuner/aidl/default/Demux.cpp
+++ b/tv/tuner/aidl/default/Demux.cpp
@@ -31,7 +31,7 @@
#define WAIT_TIMEOUT 3000000000
-Demux::Demux(int32_t demuxId, std::shared_ptr<Tuner> tuner) {
+Demux::Demux(int32_t demuxId, Tuner* tuner) {
mDemuxId = demuxId;
mTuner = tuner;
}
@@ -76,7 +76,7 @@
}
std::shared_ptr<Filter> filter =
- ndk::SharedRefBase::make<Filter>(in_type, filterId, in_bufferSize, in_cb, ref<Demux>());
+ ndk::SharedRefBase::make<Filter>(in_type, filterId, in_bufferSize, in_cb, this);
if (!filter->createFilterMQ()) {
*_aidl_return = nullptr;
return ::ndk::ScopedAStatus::fromServiceSpecificError(
@@ -110,7 +110,7 @@
::ndk::ScopedAStatus Demux::openTimeFilter(std::shared_ptr<ITimeFilter>* _aidl_return) {
ALOGV("%s", __FUNCTION__);
- mTimeFilter = ndk::SharedRefBase::make<TimeFilter>(ref<Demux>());
+ mTimeFilter = ndk::SharedRefBase::make<TimeFilter>(this);
*_aidl_return = mTimeFilter;
return ::ndk::ScopedAStatus::ok();
@@ -201,8 +201,7 @@
set<int64_t>::iterator it;
switch (in_type) {
case DvrType::PLAYBACK:
- mDvrPlayback =
- ndk::SharedRefBase::make<Dvr>(in_type, in_bufferSize, in_cb, ref<Demux>());
+ mDvrPlayback = ndk::SharedRefBase::make<Dvr>(in_type, in_bufferSize, in_cb, this);
if (!mDvrPlayback->createDvrMQ()) {
mDvrPlayback = nullptr;
*_aidl_return = mDvrPlayback;
@@ -223,7 +222,7 @@
*_aidl_return = mDvrPlayback;
return ::ndk::ScopedAStatus::ok();
case DvrType::RECORD:
- mDvrRecord = ndk::SharedRefBase::make<Dvr>(in_type, in_bufferSize, in_cb, ref<Demux>());
+ mDvrRecord = ndk::SharedRefBase::make<Dvr>(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 4d9b7fe..4cfcaab 100644
--- a/tv/tuner/aidl/default/Demux.h
+++ b/tv/tuner/aidl/default/Demux.h
@@ -50,7 +50,7 @@
class Demux : public BnDemux {
public:
- Demux(int32_t demuxId, std::shared_ptr<Tuner> tuner);
+ Demux(int32_t demuxId, Tuner* tuner);
~Demux();
::ndk::ScopedAStatus setFrontendDataSource(int32_t in_frontendId) override;
@@ -95,7 +95,7 @@
private:
// Tuner service
- std::shared_ptr<Tuner> mTuner;
+ Tuner* mTuner;
// Frontend source
std::shared_ptr<Frontend> mFrontend;
diff --git a/tv/tuner/aidl/default/Dvr.cpp b/tv/tuner/aidl/default/Dvr.cpp
index 9eadb8c..7c9c44c 100644
--- a/tv/tuner/aidl/default/Dvr.cpp
+++ b/tv/tuner/aidl/default/Dvr.cpp
@@ -31,8 +31,7 @@
#define WAIT_TIMEOUT 3000000000
-Dvr::Dvr(DvrType type, uint32_t bufferSize, const std::shared_ptr<IDvrCallback>& cb,
- std::shared_ptr<Demux> demux) {
+Dvr::Dvr(DvrType type, uint32_t bufferSize, const std::shared_ptr<IDvrCallback>& 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 68933ae..2e96449 100644
--- a/tv/tuner/aidl/default/Dvr.h
+++ b/tv/tuner/aidl/default/Dvr.h
@@ -57,8 +57,7 @@
class Dvr : public BnDvr {
public:
- Dvr(DvrType type, uint32_t bufferSize, const std::shared_ptr<IDvrCallback>& cb,
- std::shared_ptr<Demux> demux);
+ Dvr(DvrType type, uint32_t bufferSize, const std::shared_ptr<IDvrCallback>& cb, Demux* demux);
~Dvr();
::ndk::ScopedAStatus getQueueDesc(
@@ -88,7 +87,7 @@
private:
// Demux service
- std::shared_ptr<Demux> 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 77ca2ee..681eb04 100644
--- a/tv/tuner/aidl/default/Filter.cpp
+++ b/tv/tuner/aidl/default/Filter.cpp
@@ -37,7 +37,7 @@
Filter::Filter() {}
Filter::Filter(DemuxFilterType type, int64_t filterId, uint32_t bufferSize,
- const std::shared_ptr<IFilterCallback>& cb, std::shared_ptr<Demux> demux) {
+ const std::shared_ptr<IFilterCallback>& 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 4bb1a72..1dbba45 100644
--- a/tv/tuner/aidl/default/Filter.h
+++ b/tv/tuner/aidl/default/Filter.h
@@ -54,7 +54,7 @@
Filter();
Filter(DemuxFilterType type, int64_t filterId, uint32_t bufferSize,
- const std::shared_ptr<IFilterCallback>& cb, std::shared_ptr<Demux> demux);
+ const std::shared_ptr<IFilterCallback>& cb, Demux* demux);
~Filter();
@@ -96,8 +96,8 @@
bool isRecordFilter() { return mIsRecordFilter; };
private:
- // Tuner service
- std::shared_ptr<Demux> mDemux;
+ // Demux service
+ Demux* mDemux;
// Dvr reference once the filter is attached to any
std::shared_ptr<Dvr> mDvr = nullptr;
/**
diff --git a/tv/tuner/aidl/default/Frontend.cpp b/tv/tuner/aidl/default/Frontend.cpp
index 438f897..78d8279 100644
--- a/tv/tuner/aidl/default/Frontend.cpp
+++ b/tv/tuner/aidl/default/Frontend.cpp
@@ -28,7 +28,7 @@
namespace tv {
namespace tuner {
-Frontend::Frontend(FrontendType type, int32_t id, std::shared_ptr<Tuner> 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 3c602cf..a98cc92 100644
--- a/tv/tuner/aidl/default/Frontend.h
+++ b/tv/tuner/aidl/default/Frontend.h
@@ -33,7 +33,7 @@
class Frontend : public BnFrontend {
public:
- Frontend(FrontendType type, int32_t id, std::shared_ptr<Tuner> tuner);
+ Frontend(FrontendType type, int32_t id, Tuner* tuner);
::ndk::ScopedAStatus setCallback(
const std::shared_ptr<IFrontendCallback>& in_callback) override;
@@ -59,7 +59,7 @@
virtual ~Frontend();
bool supportsSatellite();
std::shared_ptr<IFrontendCallback> mCallback;
- std::shared_ptr<Tuner> 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 dde7be3..3b1edd2 100644
--- a/tv/tuner/aidl/default/TimeFilter.cpp
+++ b/tv/tuner/aidl/default/TimeFilter.cpp
@@ -30,7 +30,7 @@
TimeFilter::TimeFilter() {}
-TimeFilter::TimeFilter(std::shared_ptr<Demux> demux) {
+TimeFilter::TimeFilter(Demux* demux) {
mDemux = demux;
}
diff --git a/tv/tuner/aidl/default/TimeFilter.h b/tv/tuner/aidl/default/TimeFilter.h
index ff35c47..44e941c 100644
--- a/tv/tuner/aidl/default/TimeFilter.h
+++ b/tv/tuner/aidl/default/TimeFilter.h
@@ -35,7 +35,7 @@
class TimeFilter : public BnTimeFilter {
public:
TimeFilter();
- TimeFilter(std::shared_ptr<Demux> demux);
+ TimeFilter(Demux* demux);
~TimeFilter();
::ndk::ScopedAStatus setTimeStamp(int64_t in_timeStamp) override;
@@ -45,7 +45,7 @@
::ndk::ScopedAStatus close() override;
private:
- std::shared_ptr<Demux> 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 94c90a7..7e49660 100644
--- a/tv/tuner/aidl/default/Tuner.cpp
+++ b/tv/tuner/aidl/default/Tuner.cpp
@@ -36,16 +36,16 @@
// Static Frontends array to maintain local frontends information
// Array index matches their FrontendId in the default impl
mFrontendSize = 10;
- mFrontends[0] = ndk::SharedRefBase::make<Frontend>(FrontendType::ISDBS, 0, ref<Tuner>());
- mFrontends[1] = ndk::SharedRefBase::make<Frontend>(FrontendType::ATSC3, 1, ref<Tuner>());
- mFrontends[2] = ndk::SharedRefBase::make<Frontend>(FrontendType::DVBC, 2, ref<Tuner>());
- mFrontends[3] = ndk::SharedRefBase::make<Frontend>(FrontendType::DVBS, 3, ref<Tuner>());
- mFrontends[4] = ndk::SharedRefBase::make<Frontend>(FrontendType::DVBT, 4, ref<Tuner>());
- mFrontends[5] = ndk::SharedRefBase::make<Frontend>(FrontendType::ISDBT, 5, ref<Tuner>());
- mFrontends[6] = ndk::SharedRefBase::make<Frontend>(FrontendType::ANALOG, 6, ref<Tuner>());
- mFrontends[7] = ndk::SharedRefBase::make<Frontend>(FrontendType::ATSC, 7, ref<Tuner>());
- mFrontends[8] = ndk::SharedRefBase::make<Frontend>(FrontendType::ISDBS3, 8, ref<Tuner>());
- mFrontends[9] = ndk::SharedRefBase::make<Frontend>(FrontendType::DTMB, 9, ref<Tuner>());
+ mFrontends[0] = ndk::SharedRefBase::make<Frontend>(FrontendType::ISDBS, 0, this);
+ mFrontends[1] = ndk::SharedRefBase::make<Frontend>(FrontendType::ATSC3, 1, this);
+ mFrontends[2] = ndk::SharedRefBase::make<Frontend>(FrontendType::DVBC, 2, this);
+ mFrontends[3] = ndk::SharedRefBase::make<Frontend>(FrontendType::DVBS, 3, this);
+ mFrontends[4] = ndk::SharedRefBase::make<Frontend>(FrontendType::DVBT, 4, this);
+ mFrontends[5] = ndk::SharedRefBase::make<Frontend>(FrontendType::ISDBT, 5, this);
+ mFrontends[6] = ndk::SharedRefBase::make<Frontend>(FrontendType::ANALOG, 6, this);
+ mFrontends[7] = ndk::SharedRefBase::make<Frontend>(FrontendType::ATSC, 7, this);
+ mFrontends[8] = ndk::SharedRefBase::make<Frontend>(FrontendType::ISDBS3, 8, this);
+ mFrontends[9] = ndk::SharedRefBase::make<Frontend>(FrontendType::DTMB, 9, this);
vector<FrontendStatusType> statusCaps;
@@ -212,7 +212,7 @@
ALOGV("%s", __FUNCTION__);
mLastUsedId += 1;
- mDemuxes[mLastUsedId] = ndk::SharedRefBase::make<Demux>(mLastUsedId, ref<Tuner>());
+ mDemuxes[mLastUsedId] = ndk::SharedRefBase::make<Demux>(mLastUsedId, this);
out_demuxId->push_back(mLastUsedId);
*_aidl_return = mDemuxes[mLastUsedId];