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

Commit 2358ad8f authored by Venkatarama Avadhani's avatar Venkatarama Avadhani Committed by Yixiao Luo
Browse files

ResourceHandle : Refactor resourceHandle data type to long

Add missing method to add session to map.
Existing resource handle doesn't retain the value of resource id
which can be 32 bits. Widening the resource handle to 64 bits so
that it retains the resource id as well as resource type.

Bug: 319372054
Test: atest TunerResourceManagerServiceTest MediaCasTest
Flag: EXEMPT bugfix

Change-Id: Ie726a642fba48f83281b003e6f921687de8d96e7
parent 2ec87b11
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -134,7 +134,7 @@ public final class MediaCas implements AutoCloseable {
    private int mCasSystemId;
    private int mUserId;
    private TunerResourceManager mTunerResourceManager = null;
    private final Map<Session, Integer> mSessionMap = new HashMap<>();
    private final Map<Session, Long> mSessionMap = new HashMap<>();

    /**
     * Scrambling modes used to open cas sessions.
@@ -1150,10 +1150,10 @@ public final class MediaCas implements AutoCloseable {
        }
    }

    private int getSessionResourceHandle() throws MediaCasException {
    private long getSessionResourceHandle() throws MediaCasException {
        validateInternalStates();

        int[] sessionResourceHandle = new int[1];
        long[] sessionResourceHandle = new long[1];
        sessionResourceHandle[0] = -1;
        if (mTunerResourceManager != null) {
            CasSessionRequest casSessionRequest = new CasSessionRequest();
@@ -1168,8 +1168,7 @@ public final class MediaCas implements AutoCloseable {
        return sessionResourceHandle[0];
    }

    private void addSessionToResourceMap(Session session, int sessionResourceHandle) {

    private void addSessionToResourceMap(Session session, long sessionResourceHandle) {
        if (sessionResourceHandle != TunerResourceManager.INVALID_RESOURCE_HANDLE) {
            synchronized (mSessionMap) {
                mSessionMap.put(session, sessionResourceHandle);
@@ -1202,13 +1201,14 @@ public final class MediaCas implements AutoCloseable {
     * @throws MediaCasStateException for CAS-specific state exceptions.
     */
    public Session openSession() throws MediaCasException {
        int sessionResourceHandle = getSessionResourceHandle();
        long sessionResourceHandle = getSessionResourceHandle();

        try {
            if (mICas != null) {
                try {
                    byte[] sessionId = mICas.openSessionDefault();
                    Session session = createFromSessionId(sessionId);
                    addSessionToResourceMap(session, sessionResourceHandle);
                    Log.d(TAG, "Write Stats Log for succeed to Open Session.");
                    FrameworkStatsLog.write(
                            FrameworkStatsLog.TV_CAS_SESSION_OPEN_STATUS,
@@ -1262,7 +1262,7 @@ public final class MediaCas implements AutoCloseable {
    @Nullable
    public Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode)
            throws MediaCasException {
        int sessionResourceHandle = getSessionResourceHandle();
        long sessionResourceHandle = getSessionResourceHandle();

        if (mICas != null) {
            try {
+19 −19
Original line number Diff line number Diff line
@@ -295,13 +295,13 @@ public class Tuner implements AutoCloseable {
    private EventHandler mHandler;
    @Nullable
    private FrontendInfo mFrontendInfo;
    private Integer mFrontendHandle;
    private Long mFrontendHandle;
    private Tuner mFeOwnerTuner = null;
    private int mFrontendType = FrontendSettings.TYPE_UNDEFINED;
    private Integer mDesiredFrontendId = null;
    private int mUserId;
    private Lnb mLnb;
    private Integer mLnbHandle;
    private Long mLnbHandle;
    @Nullable
    private OnTuneEventListener mOnTuneEventListener;
    @Nullable
@@ -324,10 +324,10 @@ public class Tuner implements AutoCloseable {
    private final ReentrantLock mDemuxLock = new ReentrantLock();
    private int mRequestedCiCamId;

    private Integer mDemuxHandle;
    private Integer mFrontendCiCamHandle;
    private Long mDemuxHandle;
    private Long mFrontendCiCamHandle;
    private Integer mFrontendCiCamId;
    private Map<Integer, WeakReference<Descrambler>> mDescramblers = new HashMap<>();
    private Map<Long, WeakReference<Descrambler>> mDescramblers = new HashMap<>();
    private List<WeakReference<Filter>> mFilters = new ArrayList<WeakReference<Filter>>();

    private final TunerResourceManager.ResourcesReclaimListener mResourceListener =
@@ -949,7 +949,7 @@ public class Tuner implements AutoCloseable {
    private void releaseDescramblers() {
        synchronized (mDescramblers) {
            if (!mDescramblers.isEmpty()) {
                for (Map.Entry<Integer, WeakReference<Descrambler>> d : mDescramblers.entrySet()) {
                for (Map.Entry<Long, WeakReference<Descrambler>> d : mDescramblers.entrySet()) {
                    Descrambler descrambler = d.getValue().get();
                    if (descrambler != null) {
                        descrambler.close();
@@ -1010,7 +1010,7 @@ public class Tuner implements AutoCloseable {
    /**
     * Native method to open frontend of the given ID.
     */
    private native Frontend nativeOpenFrontendByHandle(int handle);
    private native Frontend nativeOpenFrontendByHandle(long handle);
    private native int nativeShareFrontend(int id);
    private native int nativeUnshareFrontend();
    private native void nativeRegisterFeCbListener(long nativeContext);
@@ -1039,21 +1039,21 @@ public class Tuner implements AutoCloseable {
    private native int nativeSetMaxNumberOfFrontends(int frontendType, int maxNumber);
    private native int nativeGetMaxNumberOfFrontends(int frontendType);
    private native int nativeRemoveOutputPid(int pid);
    private native Lnb nativeOpenLnbByHandle(int handle);
    private native Lnb nativeOpenLnbByHandle(long handle);
    private native Lnb nativeOpenLnbByName(String name);
    private native FrontendStatusReadiness[] nativeGetFrontendStatusReadiness(int[] statusTypes);

    private native Descrambler nativeOpenDescramblerByHandle(int handle);
    private native int nativeOpenDemuxByhandle(int handle);
    private native Descrambler nativeOpenDescramblerByHandle(long handle);
    private native int nativeOpenDemuxByhandle(long handle);

    private native DvrRecorder nativeOpenDvrRecorder(long bufferSize);
    private native DvrPlayback nativeOpenDvrPlayback(long bufferSize);

    private native DemuxCapabilities nativeGetDemuxCapabilities();
    private native DemuxInfo nativeGetDemuxInfo(int demuxHandle);
    private native DemuxInfo nativeGetDemuxInfo(long demuxHandle);

    private native int nativeCloseDemux(int handle);
    private native int nativeCloseFrontend(int handle);
    private native int nativeCloseDemux(long handle);
    private native int nativeCloseFrontend(long handle);
    private native int nativeClose();

    private static native SharedFilter nativeOpenSharedFilter(String token);
@@ -1371,7 +1371,7 @@ public class Tuner implements AutoCloseable {
    }

    private boolean requestFrontend() {
        int[] feHandle = new int[1];
        long[] feHandle = new long[1];
        boolean granted = false;
        try {
            TunerFrontendRequest request = new TunerFrontendRequest();
@@ -2379,7 +2379,7 @@ public class Tuner implements AutoCloseable {
    }

    private boolean requestLnb() {
        int[] lnbHandle = new int[1];
        long[] lnbHandle = new long[1];
        TunerLnbRequest request = new TunerLnbRequest();
        request.clientId = mClientId;
        boolean granted = mTunerResourceManager.requestLnb(request, lnbHandle);
@@ -2709,7 +2709,7 @@ public class Tuner implements AutoCloseable {
    }

    private boolean requestDemux() {
        int[] demuxHandle = new int[1];
        long[] demuxHandle = new long[1];
        TunerDemuxRequest request = new TunerDemuxRequest();
        request.clientId = mClientId;
        request.desiredFilterTypes = mDesiredDemuxInfo.getFilterTypes();
@@ -2722,14 +2722,14 @@ public class Tuner implements AutoCloseable {
    }

    private Descrambler requestDescrambler() {
        int[] descramblerHandle = new int[1];
        long[] descramblerHandle = new long[1];
        TunerDescramblerRequest request = new TunerDescramblerRequest();
        request.clientId = mClientId;
        boolean granted = mTunerResourceManager.requestDescrambler(request, descramblerHandle);
        if (!granted) {
            return null;
        }
        int handle = descramblerHandle[0];
        long handle = descramblerHandle[0];
        Descrambler descrambler = nativeOpenDescramblerByHandle(handle);
        if (descrambler != null) {
            synchronized (mDescramblers) {
@@ -2743,7 +2743,7 @@ public class Tuner implements AutoCloseable {
    }

    private boolean requestFrontendCiCam(int ciCamId) {
        int[] ciCamHandle = new int[1];
        long[] ciCamHandle = new long[1];
        TunerCiCamRequest request = new TunerCiCamRequest();
        request.clientId = mClientId;
        request.ciCamId = ciCamId;
+20 −20
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ public class TunerResourceManager {
    private static final String TAG = "TunerResourceManager";
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

    public static final int INVALID_RESOURCE_HANDLE = -1;
    public static final long INVALID_RESOURCE_HANDLE = -1;
    public static final int INVALID_OWNER_ID = -1;
    /**
     * Tuner resource type to help generate resource handle
@@ -275,7 +275,7 @@ public class TunerResourceManager {
     * Updates the current TRM of the TunerHAL Frontend information.
     *
     * <p><strong>Note:</strong> This update must happen before the first
     * {@link #requestFrontend(TunerFrontendRequest, int[])} and
     * {@link #requestFrontend(TunerFrontendRequest, long[])} and
     * {@link #releaseFrontend(int, int)} call.
     *
     * @param infos an array of the available {@link TunerFrontendInfo} information.
@@ -331,7 +331,7 @@ public class TunerResourceManager {
     *
     * @param lnbIds ids of the updating lnbs.
     */
    public void setLnbInfoList(int[] lnbIds) {
    public void setLnbInfoList(long[] lnbIds) {
        try {
            mService.setLnbInfoList(lnbIds);
        } catch (RemoteException e) {
@@ -406,8 +406,8 @@ public class TunerResourceManager {
     *
     * @return true if there is frontend granted.
     */
    public boolean requestFrontend(@NonNull TunerFrontendRequest request,
                @Nullable int[] frontendHandle) {
    public boolean requestFrontend(
            @NonNull TunerFrontendRequest request, @Nullable long[] frontendHandle) {
        boolean result = false;
        try {
            result = mService.requestFrontend(request, frontendHandle);
@@ -511,7 +511,7 @@ public class TunerResourceManager {
     *
     * @return true if there is Demux granted.
     */
    public boolean requestDemux(@NonNull TunerDemuxRequest request, @NonNull int[] demuxHandle) {
    public boolean requestDemux(@NonNull TunerDemuxRequest request, @NonNull long[] demuxHandle) {
        boolean result = false;
        try {
            result = mService.requestDemux(request, demuxHandle);
@@ -544,8 +544,8 @@ public class TunerResourceManager {
     *
     * @return true if there is Descrambler granted.
     */
    public boolean requestDescrambler(@NonNull TunerDescramblerRequest request,
                @NonNull int[] descramblerHandle) {
    public boolean requestDescrambler(
            @NonNull TunerDescramblerRequest request, @NonNull long[] descramblerHandle) {
        boolean result = false;
        try {
            result = mService.requestDescrambler(request, descramblerHandle);
@@ -577,8 +577,8 @@ public class TunerResourceManager {
     *
     * @return true if there is CAS session granted.
     */
    public boolean requestCasSession(@NonNull CasSessionRequest request,
                @NonNull int[] casSessionHandle) {
    public boolean requestCasSession(
            @NonNull CasSessionRequest request, @NonNull long[] casSessionHandle) {
        boolean result = false;
        try {
            result = mService.requestCasSession(request, casSessionHandle);
@@ -610,7 +610,7 @@ public class TunerResourceManager {
     *
     * @return true if there is ciCam granted.
     */
    public boolean requestCiCam(TunerCiCamRequest request, int[] ciCamHandle) {
    public boolean requestCiCam(TunerCiCamRequest request, long[] ciCamHandle) {
        boolean result = false;
        try {
            result = mService.requestCiCam(request, ciCamHandle);
@@ -635,7 +635,7 @@ public class TunerResourceManager {
     * <li>If no Lnb system can be granted, the API would return false.
     * <ul>
     *
     * <p><strong>Note:</strong> {@link #setLnbInfoList(int[])} must be called before this request.
     * <p><strong>Note:</strong> {@link #setLnbInfoList(long[])} must be called before this request.
     *
     * @param request {@link TunerLnbRequest} information of the current request.
     * @param lnbHandle a one-element array to return the granted Lnb handle.
@@ -643,7 +643,7 @@ public class TunerResourceManager {
     *
     * @return true if there is Lnb granted.
     */
    public boolean requestLnb(@NonNull TunerLnbRequest request, @NonNull int[] lnbHandle) {
    public boolean requestLnb(@NonNull TunerLnbRequest request, @NonNull long[] lnbHandle) {
        boolean result = false;
        try {
            result = mService.requestLnb(request, lnbHandle);
@@ -664,7 +664,7 @@ public class TunerResourceManager {
     * @param frontendHandle the handle of the released frontend.
     * @param clientId the id of the client that is releasing the frontend.
     */
    public void releaseFrontend(int frontendHandle, int clientId) {
    public void releaseFrontend(long frontendHandle, int clientId) {
        try {
            mService.releaseFrontend(frontendHandle, clientId);
        } catch (RemoteException e) {
@@ -680,7 +680,7 @@ public class TunerResourceManager {
     * @param demuxHandle the handle of the released Tuner Demux.
     * @param clientId the id of the client that is releasing the demux.
     */
    public void releaseDemux(int demuxHandle, int clientId) {
    public void releaseDemux(long demuxHandle, int clientId) {
        try {
            mService.releaseDemux(demuxHandle, clientId);
        } catch (RemoteException e) {
@@ -696,7 +696,7 @@ public class TunerResourceManager {
     * @param descramblerHandle the handle of the released Tuner Descrambler.
     * @param clientId the id of the client that is releasing the descrambler.
     */
    public void releaseDescrambler(int descramblerHandle, int clientId) {
    public void releaseDescrambler(long descramblerHandle, int clientId) {
        try {
            mService.releaseDescrambler(descramblerHandle, clientId);
        } catch (RemoteException e) {
@@ -715,7 +715,7 @@ public class TunerResourceManager {
     * @param casSessionHandle the handle of the released CAS session.
     * @param clientId the id of the client that is releasing the cas session.
     */
    public void releaseCasSession(int casSessionHandle, int clientId) {
    public void releaseCasSession(long casSessionHandle, int clientId) {
        try {
            mService.releaseCasSession(casSessionHandle, clientId);
        } catch (RemoteException e) {
@@ -734,7 +734,7 @@ public class TunerResourceManager {
     * @param ciCamHandle the handle of the releasing CiCam.
     * @param clientId the id of the client that is releasing the CiCam.
     */
    public void releaseCiCam(int ciCamHandle, int clientId) {
    public void releaseCiCam(long ciCamHandle, int clientId) {
        try {
            mService.releaseCiCam(ciCamHandle, clientId);
        } catch (RemoteException e) {
@@ -747,12 +747,12 @@ public class TunerResourceManager {
     *
     * <p>Client must call this whenever it releases an Lnb.
     *
     * <p><strong>Note:</strong> {@link #setLnbInfoList(int[])} must be called before this release.
     * <p><strong>Note:</strong> {@link #setLnbInfoList(long[])} must be called before this release.
     *
     * @param lnbHandle the handle of the released Tuner Lnb.
     * @param clientId the id of the client that is releasing the lnb.
     */
    public void releaseLnb(int lnbHandle, int clientId) {
    public void releaseLnb(long lnbHandle, int clientId) {
        try {
            mService.releaseLnb(lnbHandle, clientId);
        } catch (RemoteException e) {
+13 −13
Original line number Diff line number Diff line
@@ -149,7 +149,7 @@ interface ITunerResourceManager {
     *
     * @param lnbIds ids of the updating lnbs.
     */
    void setLnbInfoList(in int[] lnbIds);
    void setLnbInfoList(in long[] lnbIds);

    /*
     * This API is used by the Tuner framework to request a frontend from the TunerHAL.
@@ -185,7 +185,7 @@ interface ITunerResourceManager {
     *
     * @return true if there is frontend granted.
     */
    boolean requestFrontend(in TunerFrontendRequest request, out int[] frontendHandle);
    boolean requestFrontend(in TunerFrontendRequest request, out long[] frontendHandle);

    /*
     * Sets the maximum usable frontends number of a given frontend type. It is used to enable or
@@ -253,7 +253,7 @@ interface ITunerResourceManager {
     *
     * @return true if there is demux granted.
     */
    boolean requestDemux(in TunerDemuxRequest request, out int[] demuxHandle);
    boolean requestDemux(in TunerDemuxRequest request, out long[] demuxHandle);

    /*
     * This API is used by the Tuner framework to request an available descrambler from the
@@ -277,7 +277,7 @@ interface ITunerResourceManager {
     *
     * @return true if there is Descrambler granted.
     */
    boolean requestDescrambler(in TunerDescramblerRequest request, out int[] descramblerHandle);
    boolean requestDescrambler(in TunerDescramblerRequest request, out long[] descramblerHandle);

    /*
     * This API is used by the Tuner framework to request an available Cas session. This session
@@ -303,7 +303,7 @@ interface ITunerResourceManager {
     *
     * @return true if there is CAS session granted.
     */
    boolean requestCasSession(in CasSessionRequest request, out int[] casSessionHandle);
    boolean requestCasSession(in CasSessionRequest request, out long[] casSessionHandle);

    /*
     * This API is used by the Tuner framework to request an available CuCam.
@@ -328,7 +328,7 @@ interface ITunerResourceManager {
     *
     * @return true if there is CiCam granted.
     */
    boolean requestCiCam(in TunerCiCamRequest request, out int[] ciCamHandle);
    boolean requestCiCam(in TunerCiCamRequest request, out long[] ciCamHandle);

    /*
     * This API is used by the Tuner framework to request an available Lnb from the TunerHAL.
@@ -352,7 +352,7 @@ interface ITunerResourceManager {
     *
     * @return true if there is Lnb granted.
     */
    boolean requestLnb(in TunerLnbRequest request, out int[] lnbHandle);
    boolean requestLnb(in TunerLnbRequest request, out long[] lnbHandle);

    /*
     * Notifies the TRM that the given frontend has been released.
@@ -365,7 +365,7 @@ interface ITunerResourceManager {
     * @param frontendHandle the handle of the released frontend.
     * @param clientId the id of the client that is releasing the frontend.
     */
    void releaseFrontend(in int frontendHandle, int clientId);
    void releaseFrontend(in long frontendHandle, int clientId);

    /*
     * Notifies the TRM that the Demux with the given handle was released.
@@ -375,7 +375,7 @@ interface ITunerResourceManager {
     * @param demuxHandle the handle of the released Tuner Demux.
     * @param clientId the id of the client that is releasing the demux.
     */
    void releaseDemux(in int demuxHandle, int clientId);
    void releaseDemux(in long demuxHandle, int clientId);

    /*
     * Notifies the TRM that the Descrambler with the given handle was released.
@@ -385,7 +385,7 @@ interface ITunerResourceManager {
     * @param descramblerHandle the handle of the released Tuner Descrambler.
     * @param clientId the id of the client that is releasing the descrambler.
     */
    void releaseDescrambler(in int descramblerHandle, int clientId);
    void releaseDescrambler(in long descramblerHandle, int clientId);

    /*
     * Notifies the TRM that the given Cas session has been released.
@@ -397,7 +397,7 @@ interface ITunerResourceManager {
     * @param casSessionHandle the handle of the released CAS session.
     * @param clientId the id of the client that is releasing the cas session.
     */
    void releaseCasSession(in int casSessionHandle, int clientId);
    void releaseCasSession(in long casSessionHandle, int clientId);

    /**
     * Notifies the TRM that the given CiCam has been released.
@@ -410,7 +410,7 @@ interface ITunerResourceManager {
     * @param ciCamHandle the handle of the releasing CiCam.
     * @param clientId the id of the client that is releasing the CiCam.
     */
    void releaseCiCam(in int ciCamHandle, int clientId);
    void releaseCiCam(in long ciCamHandle, int clientId);

    /*
     * Notifies the TRM that the Lnb with the given handle was released.
@@ -422,7 +422,7 @@ interface ITunerResourceManager {
     * @param lnbHandle the handle of the released Tuner Lnb.
     * @param clientId the id of the client that is releasing the lnb.
     */
    void releaseLnb(in int lnbHandle, int clientId);
    void releaseLnb(in long lnbHandle, int clientId);

    /*
     * Compare two clients' priority.
+1 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ parcelable TunerDemuxInfo {
    /**
     * Demux handle
     */
    int handle;
    long handle;

    /**
     * Supported filter types (defined in {@link android.media.tv.tuner.filter.Filter})
Loading