mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:50:18 +00:00
Fix tuner example crash.
Bug: 195717690 Fix: 195717690 Test: atest VtsHalTvTunerTargetTest Change-Id: Ie1ac0f12f9802ac55f1e35ff8dc7c0c34ccce086
This commit is contained in:
committed by
Hongguang Chen
parent
1e23e77316
commit
50899fb269
@@ -31,7 +31,7 @@ namespace tuner {
|
||||
|
||||
#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 @@ Demux::~Demux() {
|
||||
}
|
||||
|
||||
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 @@ Demux::~Demux() {
|
||||
::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 @@ Demux::~Demux() {
|
||||
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 @@ Demux::~Demux() {
|
||||
*_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;
|
||||
|
||||
@@ -50,7 +50,7 @@ class Tuner;
|
||||
|
||||
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 @@ class Demux : public BnDemux {
|
||||
|
||||
private:
|
||||
// Tuner service
|
||||
std::shared_ptr<Tuner> mTuner;
|
||||
Tuner* mTuner;
|
||||
|
||||
// Frontend source
|
||||
std::shared_ptr<Frontend> mFrontend;
|
||||
|
||||
@@ -31,8 +31,7 @@ namespace tuner {
|
||||
|
||||
#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;
|
||||
|
||||
@@ -57,8 +57,7 @@ class Tuner;
|
||||
|
||||
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 @@ class Dvr : public BnDvr {
|
||||
|
||||
private:
|
||||
// Demux service
|
||||
std::shared_ptr<Demux> mDemux;
|
||||
Demux* mDemux;
|
||||
|
||||
DvrType mType;
|
||||
uint32_t mBufferSize;
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace tuner {
|
||||
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;
|
||||
|
||||
@@ -54,7 +54,7 @@ class Filter : public BnFilter {
|
||||
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 @@ class Filter : public BnFilter {
|
||||
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;
|
||||
/**
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace hardware {
|
||||
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;
|
||||
|
||||
@@ -33,7 +33,7 @@ class Tuner;
|
||||
|
||||
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 @@ class Frontend : public BnFrontend {
|
||||
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;
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace tuner {
|
||||
|
||||
TimeFilter::TimeFilter() {}
|
||||
|
||||
TimeFilter::TimeFilter(std::shared_ptr<Demux> demux) {
|
||||
TimeFilter::TimeFilter(Demux* demux) {
|
||||
mDemux = demux;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ class Demux;
|
||||
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 @@ class TimeFilter : public BnTimeFilter {
|
||||
::ndk::ScopedAStatus close() override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<Demux> mDemux;
|
||||
Demux* mDemux;
|
||||
uint64_t mTimeStamp = INVALID_TIME_STAMP;
|
||||
time_t mBeginTime;
|
||||
};
|
||||
|
||||
@@ -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<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 @@ Tuner::~Tuner() {}
|
||||
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];
|
||||
|
||||
Reference in New Issue
Block a user