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

Commit 2f0d67c7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix issues in Tuner Service implementation" into sc-dev

parents 6404f20e b1baabb5
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -285,6 +285,7 @@ void TunerFilter::getHidlIpSettings(
        .srcPort = static_cast<uint16_t>(ipConf.ipAddr.srcPort),
        .dstPort = static_cast<uint16_t>(ipConf.ipAddr.dstPort),
    };

    ipConf.ipAddr.srcIpAddress.isIpV6
            ? ipAddr.srcIpAddress.v6(getIpV6Address(ipConf.ipAddr.srcIpAddress))
            : ipAddr.srcIpAddress.v4(getIpV4Address(ipConf.ipAddr.srcIpAddress));
@@ -314,7 +315,7 @@ void TunerFilter::getHidlIpSettings(
}

hidl_array<uint8_t, IP_V6_LENGTH> TunerFilter::getIpV6Address(TunerDemuxIpAddress addr) {
    hidl_array<uint8_t, IP_V6_LENGTH> ip = {0};
    hidl_array<uint8_t, IP_V6_LENGTH> ip;
    if (addr.addr.size() != IP_V6_LENGTH) {
        return ip;
    }
@@ -323,7 +324,7 @@ hidl_array<uint8_t, IP_V6_LENGTH> TunerFilter::getIpV6Address(TunerDemuxIpAddres
}

hidl_array<uint8_t, IP_V4_LENGTH> TunerFilter::getIpV4Address(TunerDemuxIpAddress addr) {
    hidl_array<uint8_t, IP_V4_LENGTH> ip = {0};
    hidl_array<uint8_t, IP_V4_LENGTH> ip;
    if (addr.addr.size() != IP_V4_LENGTH) {
        return ip;
    }
@@ -620,16 +621,17 @@ void TunerFilter::FilterCallback::getAidlFilterEvent(vector<DemuxFilterEvent::Ev
        switch (eventExt.getDiscriminator()) {
            case DemuxFilterEventExt::Event::hidl_discriminator::monitorEvent: {
                getMonitorEvent(eventsExt, tunerEvent);
                break;
                return;
            }
            case DemuxFilterEventExt::Event::hidl_discriminator::startId: {
                getRestartEvent(eventsExt, tunerEvent);
                break;
                return;
            }
            default: {
                break;
            }
        }
        return;
    }

    if (!events.empty()) {
@@ -889,9 +891,6 @@ void TunerFilter::FilterCallback::getMonitorEvent(
            tunerMonitor.set<TunerFilterMonitorEvent::cid>(static_cast<int>(monitorEvent.cid()));
            break;
        }
        default: {
            break;
        }
    }

    TunerFilterEvent tunerEvent;
+3 −3
Original line number Diff line number Diff line
@@ -804,13 +804,13 @@ void TunerFrontend::getAidlFrontendStatusExt(
            case FrontendStatusExt1_1::hidl_discriminator::rollOff: {
                switch (s.rollOff().getDiscriminator()) {
                    case FrontendRollOff::hidl_discriminator::dvbs:
                        status.set<TunerFrontendStatus::interleaving>((int)s.rollOff().dvbs());
                        status.set<TunerFrontendStatus::rollOff>((int)s.rollOff().dvbs());
                        break;
                    case FrontendRollOff::hidl_discriminator::isdbs:
                        status.set<TunerFrontendStatus::interleaving>((int)s.rollOff().isdbs());
                        status.set<TunerFrontendStatus::rollOff>((int)s.rollOff().isdbs());
                        break;
                    case FrontendRollOff::hidl_discriminator::isdbs3:
                        status.set<TunerFrontendStatus::interleaving>((int)s.rollOff().isdbs3());
                        status.set<TunerFrontendStatus::rollOff>((int)s.rollOff().isdbs3());
                        break;
                }
                aidlStatus.push_back(status);
+17 −14
Original line number Diff line number Diff line
@@ -52,10 +52,10 @@ namespace android {
TunerService::TunerService() {}
TunerService::~TunerService() {}

void TunerService::instantiate() {
binder_status_t TunerService::instantiate() {
    shared_ptr<TunerService> service =
            ::ndk::SharedRefBase::make<TunerService>();
    AServiceManager_addService(service->asBinder().get(), getServiceName());
    return AServiceManager_addService(service->asBinder().get(), getServiceName());
}

bool TunerService::hasITuner() {
@@ -68,23 +68,20 @@ bool TunerService::hasITuner() {
        ALOGE("Failed to get ITuner service");
        return false;
    }
    mTunerVersion = TUNER_HAL_VERSION_1_0;
    mTuner_1_1 = ::android::hardware::tv::tuner::V1_1::ITuner::castFrom(mTuner);
    if (mTuner_1_1 != nullptr) {
        mTunerVersion = TUNER_HAL_VERSION_1_1;
    } else {
        ALOGE("Failed to get ITuner_1_1 service");
    }
    return true;
}

bool TunerService::hasITuner_1_1() {
    ALOGD("hasITuner_1_1");
    if (mTuner_1_1 != nullptr) {
        return true;
    }
    if (!hasITuner()) {
        return false;
    }
    mTuner_1_1 = ::android::hardware::tv::tuner::V1_1::ITuner::castFrom(mTuner);
    if (mTuner_1_1 == nullptr) {
        ALOGE("Failed to get ITuner_1_1 service");
        return false;
    }
    return true;
    hasITuner();
    return (mTunerVersion == TUNER_HAL_VERSION_1_1);
}

Status TunerService::openDemux(
@@ -300,6 +297,12 @@ Status TunerService::updateTunerResources() {
    return Status::ok();
}

Status TunerService::getTunerHalVersion(int* _aidl_return) {
    hasITuner();
    *_aidl_return = mTunerVersion;
    return Status::ok();
}

void TunerService::updateFrontendResources() {
    hidl_vec<FrontendId> ids;
    Result res = getHidlFrontendIds(ids);
+8 −1
Original line number Diff line number Diff line
@@ -69,6 +69,10 @@ using namespace std;

namespace android {

const static int TUNER_HAL_VERSION_UNKNOWN = 0;
const static int TUNER_HAL_VERSION_1_0 = 1 << 16;
const static int TUNER_HAL_VERSION_1_1 = (1 << 16) | 1;

typedef enum {
    FRONTEND,
    LNB,
@@ -93,7 +97,7 @@ class TunerService : public BnTunerService {

public:
    static char const *getServiceName() { return "media.tuner"; }
    static void instantiate();
    static binder_status_t instantiate();
    TunerService();
    virtual ~TunerService();

@@ -110,6 +114,7 @@ public:
    Status openDescrambler(int32_t descramblerHandle,
            std::shared_ptr<ITunerDescrambler>* _aidl_return) override;
    Status updateTunerResources() override;
    Status getTunerHalVersion(int* _aidl_return) override;

    // TODO: create a map between resource id and handles.
    static int getResourceIdFromHandle(int resourceHandle, int /*type*/) {
@@ -141,6 +146,8 @@ private:

    shared_ptr<ITunerResourceManager> mTunerResourceManager;
    int mResourceRequestCount = 0;

    int mTunerVersion = TUNER_HAL_VERSION_UNKNOWN;
};

} // namespace android
+7 −0
Original line number Diff line number Diff line
@@ -101,4 +101,11 @@ interface ITunerService {
     */
    // TODO: b/178124017 update TRM in TunerService independently.
    void updateTunerResources();

    /**
     * Get an integer that carries the Tuner HIDL version. The high 16 bits are the
     * major version number while the low 16 bits are the minor version. Default
     * value is unknown version 0.
     */
    int getTunerHalVersion();
}
Loading