Files
2026-08-24 10:03:24 +08:00

68 lines
1.7 KiB
C++

#include "TunerService.h"
namespace aml_mp {
TunerService* TunerService::sTunerService = nullptr;
TunerService::TunerService() {
mTuner = ITuner::getService();
memset(&mDemuxCapabilities, 0, sizeof(mDemuxCapabilities));
mTuner->getDemuxCaps([&](Result r, DemuxCapabilities caps) {
if (r == Result::SUCCESS) {
mDemuxCapabilities = caps;
}
});
}
TunerService::~TunerService() {
}
TunerService& TunerService::instance() {
static std::once_flag s_onceFlag;
std::call_once(s_onceFlag, [] {
sTunerService = new TunerService();
});
sTunerService->checkAvailable();
return *sTunerService;
}
void TunerService::checkAvailable() {
Result res;
mTuner->getDemuxCaps([&](Result r, DemuxCapabilities caps __unused) {
res = r;
});
if (res != Result::SUCCESS) {
// TunerService may be crashed, retry to get TunerService
mTuner = ITuner::getService();
memset(&mDemuxCapabilities, 0, sizeof(mDemuxCapabilities));
mTuner->getDemuxCaps([&](Result r, DemuxCapabilities caps) {
if (r == Result::SUCCESS) {
mDemuxCapabilities = caps;
}
});
}
}
sptr<TunerDemux> TunerService::openDemux() {
Result res;
uint32_t id;
sp<IDemux> demuxSp = nullptr;
sptr<TunerDemux> tunerDemux = nullptr;
mTuner->openDemux([&](Result r, uint32_t demuxId, const sp<IDemux>& demux) {
demuxSp = demux;
id = demuxId;
res = r;
});
if (res != Result::SUCCESS) {
return nullptr;
}
tunerDemux = new TunerDemux(demuxSp);
return tunerDemux;
}
DemuxCapabilities TunerService::getDemuxCaps() {
return mDemuxCapabilities;
}
} // namespace aml_mp