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

Commit 39a3fa46 authored by Amy Zhang's avatar Amy Zhang
Browse files

Move Tuner resource updating from Tuner java into Tuner client

Note that the main goal of this CL is to
move the resource updating with TunerResourceManager
from Tuner java into Tuner native client library.

This requires TunerResourceManager aidl interface to generate
both ndk and java library.

Also this CL removes the previously manually defined
TunerResourceManager java interface and use the automatically
generated java lib instead.

Some Android Services, such as MediaCase/TIF, that previously used the
manually defined TRM java APIs are changed to use the auto gen APIs
in this CL.

Test: atest android.media.tv.tuner.cts on Cuttlefish
Bug: 174095851
Change-Id: I46acdd2f118d5b082aa162c680661a304b4f628b
parent cb3903f6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -223,6 +223,9 @@ filegroup {
        "media/java/**/*.java",
        "media/java/**/*.aidl",
    ],
    exclude_srcs: [
        ":framework-media-tv-tunerresourcemanager-sources-aidl",
    ],
    path: "media/java",
}

@@ -630,6 +633,7 @@ java_defaults {
        // in favor of an API stubs dependency in java_library "framework" below.
        "mimemap",
        "av-types-aidl-java",
        "tv_tuner_resource_manager_aidl_interface-java",
        "soundtrigger_middleware-aidl-java",
        "modules-utils-os",
    ],
+6 −3
Original line number Diff line number Diff line
@@ -716,8 +716,9 @@ public final class MediaCas implements AutoCloseable {
            context.getSystemService(Context.TV_TUNER_RESOURCE_MGR_SERVICE);
        if (mTunerResourceManager != null) {
            int[] clientId = new int[1];
            ResourceClientProfile profile =
                    new ResourceClientProfile(tvInputServiceSessionId, priorityHint);
            ResourceClientProfile profile = new ResourceClientProfile();
            profile.tvInputSessionId = tvInputServiceSessionId;
            profile.useCase = priorityHint;
            mTunerResourceManager.registerClientProfile(
                    profile, context.getMainExecutor(), mResourceListener, clientId);
            mClientId = clientId[0];
@@ -921,7 +922,9 @@ public final class MediaCas implements AutoCloseable {
        int[] sessionResourceHandle = new int[1];
        sessionResourceHandle[0] = -1;
        if (mTunerResourceManager != null) {
            CasSessionRequest casSessionRequest = new CasSessionRequest(mClientId, mCasSystemId);
            CasSessionRequest casSessionRequest = new CasSessionRequest();
            casSessionRequest.clientId = mClientId;
            casSessionRequest.casSystemId = mCasSystemId;
            if (!mTunerResourceManager
                    .requestCasSession(casSessionRequest, sessionResourceHandle)) {
                throw new MediaCasException.InsufficientResourceException(
+12 −27
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ import android.media.tv.tuner.frontend.ScanCallback;
import android.media.tv.tunerresourcemanager.ResourceClientProfile;
import android.media.tv.tunerresourcemanager.TunerDemuxRequest;
import android.media.tv.tunerresourcemanager.TunerDescramblerRequest;
import android.media.tv.tunerresourcemanager.TunerFrontendInfo;
import android.media.tv.tunerresourcemanager.TunerFrontendRequest;
import android.media.tv.tunerresourcemanager.TunerLnbRequest;
import android.media.tv.tunerresourcemanager.TunerResourceManager;
@@ -343,33 +342,14 @@ public class Tuner implements AutoCloseable {

        mHandler = createEventHandler();
        int[] clientId = new int[1];
        ResourceClientProfile profile = new ResourceClientProfile(tvInputSessionId, useCase);
        ResourceClientProfile profile = new ResourceClientProfile();
        profile.tvInputSessionId = tvInputSessionId;
        profile.useCase = useCase;
        mTunerResourceManager.registerClientProfile(
                profile, new HandlerExecutor(mHandler), mResourceListener, clientId);
        mClientId = clientId[0];

        mUserId = ActivityManager.getCurrentUser();

        setFrontendInfoList();
    }

    private void setFrontendInfoList() {
        List<Integer> ids = getFrontendIds();
        if (ids == null) {
            return;
        }
        TunerFrontendInfo[] infos = new TunerFrontendInfo[ids.size()];
        for (int i = 0; i < ids.size(); i++) {
            int id = ids.get(i);
            FrontendInfo frontendInfo = getFrontendInfoById(id);
            if (frontendInfo == null) {
                continue;
            }
            TunerFrontendInfo tunerFrontendInfo = new TunerFrontendInfo(
                    id, frontendInfo.getType(), frontendInfo.getExclusiveGroupId());
            infos[i] = tunerFrontendInfo;
        }
        mTunerResourceManager.setFrontendInfoList(infos);
    }

    /**
@@ -804,7 +784,9 @@ public class Tuner implements AutoCloseable {

    private boolean requestFrontend() {
        int[] feHandle = new int[1];
        TunerFrontendRequest request = new TunerFrontendRequest(mClientId, mFrontendType);
        TunerFrontendRequest request = new TunerFrontendRequest();
        request.clientId = mClientId;
        request.frontendType = mFrontendType;
        boolean granted = mTunerResourceManager.requestFrontend(request, feHandle);
        if (granted) {
            mFrontendHandle = feHandle[0];
@@ -1258,7 +1240,8 @@ public class Tuner implements AutoCloseable {

    private boolean requestLnb() {
        int[] lnbHandle = new int[1];
        TunerLnbRequest request = new TunerLnbRequest(mClientId);
        TunerLnbRequest request = new TunerLnbRequest();
        request.clientId = mClientId;
        boolean granted = mTunerResourceManager.requestLnb(request, lnbHandle);
        if (granted) {
            mLnbHandle = lnbHandle[0];
@@ -1346,7 +1329,8 @@ public class Tuner implements AutoCloseable {

    private boolean requestDemux() {
        int[] demuxHandle = new int[1];
        TunerDemuxRequest request = new TunerDemuxRequest(mClientId);
        TunerDemuxRequest request = new TunerDemuxRequest();
        request.clientId = mClientId;
        boolean granted = mTunerResourceManager.requestDemux(request, demuxHandle);
        if (granted) {
            mDemuxHandle = demuxHandle[0];
@@ -1357,7 +1341,8 @@ public class Tuner implements AutoCloseable {

    private Descrambler requestDescrambler() {
        int[] descramblerHandle = new int[1];
        TunerDescramblerRequest request = new TunerDescramblerRequest(mClientId);
        TunerDescramblerRequest request = new TunerDescramblerRequest();
        request.clientId = mClientId;
        boolean granted = mTunerResourceManager.requestDescrambler(request, descramblerHandle);
        if (!granted) {
            return null;
+29 −11
Original line number Diff line number Diff line
filegroup {
    name: "framework-media-tv-tunerresourcemanager-sources",
    name: "framework-media-tv-tunerresourcemanager-sources-aidl",
    srcs: [
        "*.java",
        "*.aidl",
        "aidl/android/media/tv/tunerresourcemanager/CasSessionRequest.aidl",
        "aidl/android/media/tv/tunerresourcemanager/IResourcesReclaimListener.aidl",
        "aidl/android/media/tv/tunerresourcemanager/ResourceClientProfile.aidl",
        "aidl/android/media/tv/tunerresourcemanager/TunerDemuxRequest.aidl",
        "aidl/android/media/tv/tunerresourcemanager/TunerDescramblerRequest.aidl",
        "aidl/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl",
        "aidl/android/media/tv/tunerresourcemanager/TunerFrontendRequest.aidl",
        "aidl/android/media/tv/tunerresourcemanager/TunerLnbRequest.aidl",
        "aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl",
    ],
    path: ".",
    path: "aidl",
}

java_library {
    name: "framework-media-tv-trm-sources",
    srcs: [":framework-media-tv-tunerresourcemanager-sources"],
    installable: true,
    visibility: [
        "//frameworks/base",
aidl_interface {
    name: "tv_tuner_resource_manager_aidl_interface",
    unstable: true,
    local_include_dir: "aidl",
    backend: {
        java: {
            sdk_version: "current",
        },
        cpp: {
            enabled: true,
        },
        ndk: {
            enabled: true,
        },
    },
    srcs: [
        ":framework-media-tv-tunerresourcemanager-sources-aidl",
    ],
}
+0 −114
Original line number Diff line number Diff line
/*
 * Copyright 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.media.tv.tunerresourcemanager;

import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;

/**
 * Information required to request a Cas Session.
 *
 * @hide
 */
public final class CasSessionRequest implements Parcelable {
    static final String TAG = "CasSessionRequest";

    public static final
                @NonNull
                Parcelable.Creator<CasSessionRequest> CREATOR =
                new Parcelable.Creator<CasSessionRequest>() {
                @Override
                public CasSessionRequest createFromParcel(Parcel source) {
                    try {
                        return new CasSessionRequest(source);
                    } catch (Exception e) {
                        Log.e(TAG, "Exception creating CasSessionRequest from parcel", e);
                        return null;
                    }
                }

                @Override
                public CasSessionRequest[] newArray(int size) {
                    return new CasSessionRequest[size];
                }
            };

    /**
     * Client id of the client that sends the request.
     */
    private final int mClientId;

    /**
     * System id of the requested cas.
     */
    private final int mCasSystemId;

    private CasSessionRequest(@NonNull Parcel source) {
        mClientId = source.readInt();
        mCasSystemId = source.readInt();
    }

    /**
     * Constructs a new {@link CasSessionRequest} with the given parameters.
     *
     * @param clientId id of the client.
     * @param casSystemId the cas system id that the client is requesting.
     */
    public CasSessionRequest(int clientId,
                             int casSystemId) {
        mClientId = clientId;
        mCasSystemId = casSystemId;
    }

    /**
     * Returns the id of the client.
     */
    public int getClientId() {
        return mClientId;
    }

    /**
     * Returns the cas system id requested.
     */
    public int getCasSystemId() {
        return mCasSystemId;
    }

    // Parcelable
    @Override
    public int describeContents() {
        return 0;
    }

    @NonNull
    @Override
    public String toString() {
        StringBuilder b = new StringBuilder(128);
        b.append("CasSessionRequest {clientId=").append(mClientId);
        b.append(", casSystemId=").append(mCasSystemId);
        b.append("}");
        return b.toString();
    }

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeInt(mClientId);
        dest.writeInt(mCasSystemId);
    }
}
Loading