diff options
| author | 2024-08-13 01:29:07 +0000 | |
|---|---|---|
| committer | 2024-08-13 01:38:20 +0000 | |
| commit | d83e076c464ef1fce10a15709ffaed5704e08b24 (patch) | |
| tree | b2e0d86b71c526cd61a54fd981a5d3b0c2f90512 | |
| parent | cca31ca5f7e31f5faaf0e9e0d1a4b78d2c6e737d (diff) | |
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
(cherry picked from https://partner-android-review.googlesource.com/q/commit:fca0899a0e0cf742c9893c684a5d8bcbcf4f1f42)
Merged-In: Iff5c71447144361312c341101e23355ce00723d4
Change-Id: Iff5c71447144361312c341101e23355ce00723d4
17 files changed, 279 insertions, 292 deletions
diff --git a/media/java/android/media/MediaCas.java b/media/java/android/media/MediaCas.java index 2d7db5e6ed94..9896f6404cda 100644 --- a/media/java/android/media/MediaCas.java +++ b/media/java/android/media/MediaCas.java @@ -131,7 +131,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. @@ -1126,10 +1126,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(); @@ -1144,8 +1144,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); @@ -1178,13 +1177,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, @@ -1238,7 +1238,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 { diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index 2c71ee01b3f1..300ae5d9a26b 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -293,13 +293,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 @@ -322,10 +322,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 = @@ -947,7 +947,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(); @@ -1008,7 +1008,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); @@ -1037,21 +1037,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); @@ -1369,7 +1369,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(); @@ -2377,7 +2377,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); @@ -2660,7 +2660,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(); @@ -2673,14 +2673,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) { @@ -2694,7 +2694,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; diff --git a/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java b/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java index d268aeba8011..bb581ebe1778 100644 --- a/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java +++ b/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java @@ -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) { diff --git a/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl b/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl index 539969762a82..109c791c1748 100644 --- a/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl +++ b/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl @@ -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. diff --git a/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerDemuxInfo.aidl b/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerDemuxInfo.aidl index c14caf50fa14..7984c38d33ab 100644 --- a/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerDemuxInfo.aidl +++ b/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerDemuxInfo.aidl @@ -26,7 +26,7 @@ parcelable TunerDemuxInfo { /** * Demux handle */ - int handle; + long handle; /** * Supported filter types (defined in {@link android.media.tv.tuner.filter.Filter}) diff --git a/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl b/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl index 8981ce00d509..274367e9aeb6 100644 --- a/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl +++ b/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl @@ -26,7 +26,7 @@ parcelable TunerFrontendInfo { /** * Frontend Handle */ - int handle; + long handle; /** * Frontend Type diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 00b0e57c09ea..5eb2485b8dd6 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -1448,7 +1448,7 @@ jobject JTuner::getFrontendIds() { return obj; } -jobject JTuner::openFrontendByHandle(int feHandle) { +jobject JTuner::openFrontendByHandle(jlong feHandle) { // TODO: Handle reopening frontend with different handle sp<FrontendClient> feClient = sTunerClient->openFrontend(feHandle); if (feClient == nullptr) { @@ -1824,7 +1824,7 @@ jobjectArray JTuner::getFrontendStatusReadiness(jintArray types) { return valObj; } -jobject JTuner::openLnbByHandle(int handle) { +jobject JTuner::openLnbByHandle(jlong handle) { if (sTunerClient == nullptr) { return nullptr; } @@ -1833,7 +1833,7 @@ jobject JTuner::openLnbByHandle(int handle) { sp<LnbClientCallbackImpl> callback = new LnbClientCallbackImpl(); lnbClient = sTunerClient->openLnb(handle); if (lnbClient == nullptr) { - ALOGD("Failed to open lnb, handle = %d", handle); + ALOGD("Failed to open lnb, handle = %ld", handle); return nullptr; } @@ -1947,7 +1947,7 @@ int JTuner::setLna(bool enable) { return (int)result; } -Result JTuner::openDemux(int handle) { +Result JTuner::openDemux(jlong handle) { if (sTunerClient == nullptr) { return Result::NOT_INITIALIZED; } @@ -2215,7 +2215,7 @@ jobject JTuner::getDemuxCaps() { numBytesInSectionFilter, filterCaps, filterCapsList, linkCaps, bTimeFilter); } -jobject JTuner::getDemuxInfo(int handle) { +jobject JTuner::getDemuxInfo(jlong handle) { if (sTunerClient == nullptr) { ALOGE("tuner is not initialized"); return nullptr; @@ -3768,8 +3768,8 @@ static jobject android_media_tv_Tuner_get_frontend_ids(JNIEnv *env, jobject thiz return tuner->getFrontendIds(); } -static jobject android_media_tv_Tuner_open_frontend_by_handle( - JNIEnv *env, jobject thiz, jint handle) { +static jobject android_media_tv_Tuner_open_frontend_by_handle(JNIEnv *env, jobject thiz, + jlong handle) { sp<JTuner> tuner = getTuner(env, thiz); return tuner->openFrontendByHandle(handle); } @@ -3901,7 +3901,7 @@ static jobject android_media_tv_Tuner_get_frontend_info(JNIEnv *env, jobject thi return tuner->getFrontendInfo(id); } -static jobject android_media_tv_Tuner_open_lnb_by_handle(JNIEnv *env, jobject thiz, jint handle) { +static jobject android_media_tv_Tuner_open_lnb_by_handle(JNIEnv *env, jobject thiz, jlong handle) { sp<JTuner> tuner = getTuner(env, thiz); return tuner->openLnbByHandle(handle); } @@ -4622,7 +4622,7 @@ static int android_media_tv_Tuner_time_filter_close(JNIEnv *env, jobject filter) return (int)r; } -static jobject android_media_tv_Tuner_open_descrambler(JNIEnv *env, jobject thiz, jint) { +static jobject android_media_tv_Tuner_open_descrambler(JNIEnv *env, jobject thiz, jlong) { sp<JTuner> tuner = getTuner(env, thiz); return tuner->openDescrambler(); } @@ -4690,12 +4690,12 @@ static jobject android_media_tv_Tuner_get_demux_caps(JNIEnv* env, jobject thiz) return tuner->getDemuxCaps(); } -static jobject android_media_tv_Tuner_get_demux_info(JNIEnv* env, jobject thiz, jint handle) { +static jobject android_media_tv_Tuner_get_demux_info(JNIEnv *env, jobject thiz, jlong handle) { sp<JTuner> tuner = getTuner(env, thiz); return tuner->getDemuxInfo(handle); } -static jint android_media_tv_Tuner_open_demux(JNIEnv* env, jobject thiz, jint handle) { +static jint android_media_tv_Tuner_open_demux(JNIEnv *env, jobject thiz, jlong handle) { sp<JTuner> tuner = getTuner(env, thiz); return (jint)tuner->openDemux(handle); } @@ -4706,7 +4706,7 @@ static jint android_media_tv_Tuner_close_tuner(JNIEnv* env, jobject thiz) { return (jint)tuner->close(); } -static jint android_media_tv_Tuner_close_demux(JNIEnv* env, jobject thiz, jint /* handle */) { +static jint android_media_tv_Tuner_close_demux(JNIEnv *env, jobject thiz, jlong /* handle */) { sp<JTuner> tuner = getTuner(env, thiz); return tuner->closeDemux(); } @@ -4766,7 +4766,7 @@ static jobjectArray android_media_tv_Tuner_get_frontend_status_readiness(JNIEnv return tuner->getFrontendStatusReadiness(types); } -static jint android_media_tv_Tuner_close_frontend(JNIEnv* env, jobject thiz, jint /* handle */) { +static jint android_media_tv_Tuner_close_frontend(JNIEnv *env, jobject thiz, jlong /* handle */) { sp<JTuner> tuner = getTuner(env, thiz); return tuner->closeFrontend(); } @@ -5035,7 +5035,7 @@ static const JNINativeMethod gTunerMethods[] = { { "nativeGetTunerVersion", "()I", (void *)android_media_tv_Tuner_native_get_tuner_version }, { "nativeGetFrontendIds", "()Ljava/util/List;", (void *)android_media_tv_Tuner_get_frontend_ids }, - { "nativeOpenFrontendByHandle", "(I)Landroid/media/tv/tuner/Tuner$Frontend;", + { "nativeOpenFrontendByHandle", "(J)Landroid/media/tv/tuner/Tuner$Frontend;", (void *)android_media_tv_Tuner_open_frontend_by_handle }, { "nativeShareFrontend", "(I)I", (void *)android_media_tv_Tuner_share_frontend }, @@ -5074,11 +5074,11 @@ static const JNINativeMethod gTunerMethods[] = { (void *)android_media_tv_Tuner_open_filter }, { "nativeOpenTimeFilter", "()Landroid/media/tv/tuner/filter/TimeFilter;", (void *)android_media_tv_Tuner_open_time_filter }, - { "nativeOpenLnbByHandle", "(I)Landroid/media/tv/tuner/Lnb;", + { "nativeOpenLnbByHandle", "(J)Landroid/media/tv/tuner/Lnb;", (void *)android_media_tv_Tuner_open_lnb_by_handle }, { "nativeOpenLnbByName", "(Ljava/lang/String;)Landroid/media/tv/tuner/Lnb;", (void *)android_media_tv_Tuner_open_lnb_by_name }, - { "nativeOpenDescramblerByHandle", "(I)Landroid/media/tv/tuner/Descrambler;", + { "nativeOpenDescramblerByHandle", "(J)Landroid/media/tv/tuner/Descrambler;", (void *)android_media_tv_Tuner_open_descrambler }, { "nativeOpenDvrRecorder", "(J)Landroid/media/tv/tuner/dvr/DvrRecorder;", (void *)android_media_tv_Tuner_open_dvr_recorder }, @@ -5086,12 +5086,12 @@ static const JNINativeMethod gTunerMethods[] = { (void *)android_media_tv_Tuner_open_dvr_playback }, { "nativeGetDemuxCapabilities", "()Landroid/media/tv/tuner/DemuxCapabilities;", (void *)android_media_tv_Tuner_get_demux_caps }, - { "nativeGetDemuxInfo", "(I)Landroid/media/tv/tuner/DemuxInfo;", + { "nativeGetDemuxInfo", "(J)Landroid/media/tv/tuner/DemuxInfo;", (void *)android_media_tv_Tuner_get_demux_info }, - { "nativeOpenDemuxByhandle", "(I)I", (void *)android_media_tv_Tuner_open_demux }, + { "nativeOpenDemuxByhandle", "(J)I", (void *)android_media_tv_Tuner_open_demux }, { "nativeClose", "()I", (void *)android_media_tv_Tuner_close_tuner }, - { "nativeCloseFrontend", "(I)I", (void *)android_media_tv_Tuner_close_frontend }, - { "nativeCloseDemux", "(I)I", (void *)android_media_tv_Tuner_close_demux }, + { "nativeCloseFrontend", "(J)I", (void *)android_media_tv_Tuner_close_frontend }, + { "nativeCloseDemux", "(J)I", (void *)android_media_tv_Tuner_close_demux }, { "nativeOpenSharedFilter", "(Ljava/lang/String;)Landroid/media/tv/tuner/filter/SharedFilter;", (void *)android_media_tv_Tuner_open_shared_filter}, diff --git a/media/jni/android_media_tv_Tuner.h b/media/jni/android_media_tv_Tuner.h index 3de3ab91326c..7af2cd7bd5b7 100644 --- a/media/jni/android_media_tv_Tuner.h +++ b/media/jni/android_media_tv_Tuner.h @@ -206,7 +206,7 @@ struct JTuner : public RefBase { int disconnectCiCam(); int unlinkCiCam(jint id); jobject getFrontendIds(); - jobject openFrontendByHandle(int feHandle); + jobject openFrontendByHandle(jlong feHandle); int shareFrontend(int feId); int unshareFrontend(); void registerFeCbListener(JTuner* jtuner); @@ -221,16 +221,16 @@ struct JTuner : public RefBase { int setLnb(sp<LnbClient> lnbClient); bool isLnaSupported(); int setLna(bool enable); - jobject openLnbByHandle(int handle); + jobject openLnbByHandle(jlong handle); jobject openLnbByName(jstring name); jobject openFilter(DemuxFilterType type, int bufferSize); jobject openTimeFilter(); jobject openDescrambler(); jobject openDvr(DvrType type, jlong bufferSize); jobject getDemuxCaps(); - jobject getDemuxInfo(int handle); + jobject getDemuxInfo(jlong handle); jobject getFrontendStatus(jintArray types); - Result openDemux(int handle); + Result openDemux(jlong handle); jint close(); jint closeFrontend(); jint closeDemux(); diff --git a/media/jni/tuner/TunerClient.cpp b/media/jni/tuner/TunerClient.cpp index ea623d97a394..0097710f5c64 100644 --- a/media/jni/tuner/TunerClient.cpp +++ b/media/jni/tuner/TunerClient.cpp @@ -56,7 +56,7 @@ vector<int32_t> TunerClient::getFrontendIds() { return ids; } -sp<FrontendClient> TunerClient::openFrontend(int32_t frontendHandle) { +sp<FrontendClient> TunerClient::openFrontend(int64_t frontendHandle) { if (mTunerService != nullptr) { shared_ptr<ITunerFrontend> tunerFrontend; Status s = mTunerService->openFrontend(frontendHandle, &tunerFrontend); @@ -94,7 +94,7 @@ shared_ptr<FrontendInfo> TunerClient::getFrontendInfo(int32_t id) { return nullptr; } -sp<DemuxClient> TunerClient::openDemux(int32_t demuxHandle) { +sp<DemuxClient> TunerClient::openDemux(int64_t demuxHandle) { if (mTunerService != nullptr) { shared_ptr<ITunerDemux> tunerDemux; Status s = mTunerService->openDemux(demuxHandle, &tunerDemux); @@ -107,7 +107,7 @@ sp<DemuxClient> TunerClient::openDemux(int32_t demuxHandle) { return nullptr; } -shared_ptr<DemuxInfo> TunerClient::getDemuxInfo(int32_t demuxHandle) { +shared_ptr<DemuxInfo> TunerClient::getDemuxInfo(int64_t demuxHandle) { if (mTunerService != nullptr) { DemuxInfo aidlDemuxInfo; Status s = mTunerService->getDemuxInfo(demuxHandle, &aidlDemuxInfo); @@ -141,7 +141,7 @@ shared_ptr<DemuxCapabilities> TunerClient::getDemuxCaps() { return nullptr; } -sp<DescramblerClient> TunerClient::openDescrambler(int32_t descramblerHandle) { +sp<DescramblerClient> TunerClient::openDescrambler(int64_t descramblerHandle) { if (mTunerService != nullptr) { shared_ptr<ITunerDescrambler> tunerDescrambler; Status s = mTunerService->openDescrambler(descramblerHandle, &tunerDescrambler); @@ -154,7 +154,7 @@ sp<DescramblerClient> TunerClient::openDescrambler(int32_t descramblerHandle) { return nullptr; } -sp<LnbClient> TunerClient::openLnb(int32_t lnbHandle) { +sp<LnbClient> TunerClient::openLnb(int64_t lnbHandle) { if (mTunerService != nullptr) { shared_ptr<ITunerLnb> tunerLnb; Status s = mTunerService->openLnb(lnbHandle, &tunerLnb); diff --git a/media/jni/tuner/TunerClient.h b/media/jni/tuner/TunerClient.h index 6ab120b56d97..a348586454b8 100644 --- a/media/jni/tuner/TunerClient.h +++ b/media/jni/tuner/TunerClient.h @@ -65,7 +65,7 @@ public: * @param frontendHandle the handle of the frontend granted by TRM. * @return a newly created FrontendClient interface. */ - sp<FrontendClient> openFrontend(int32_t frontendHandle); + sp<FrontendClient> openFrontend(int64_t frontendHandle); /** * Retrieve the granted frontend's information. @@ -81,7 +81,7 @@ public: * @param demuxHandle the handle of the demux granted by TRM. * @return a newly created DemuxClient interface. */ - sp<DemuxClient> openDemux(int32_t demuxHandle); + sp<DemuxClient> openDemux(int64_t demuxHandle); /** * Retrieve the DemuxInfo of a specific demux @@ -89,7 +89,7 @@ public: * @param demuxHandle the handle of the demux to query demux info for * @return the demux info */ - shared_ptr<DemuxInfo> getDemuxInfo(int32_t demuxHandle); + shared_ptr<DemuxInfo> getDemuxInfo(int64_t demuxHandle); /** * Retrieve a list of demux info @@ -111,7 +111,7 @@ public: * @param descramblerHandle the handle of the descrambler granted by TRM. * @return a newly created DescramblerClient interface. */ - sp<DescramblerClient> openDescrambler(int32_t descramblerHandle); + sp<DescramblerClient> openDescrambler(int64_t descramblerHandle); /** * Open a new interface of LnbClient given an lnbHandle. @@ -119,7 +119,7 @@ public: * @param lnbHandle the handle of the LNB granted by TRM. * @return a newly created LnbClient interface. */ - sp<LnbClient> openLnb(int32_t lnbHandle); + sp<LnbClient> openLnb(int64_t lnbHandle); /** * Open a new interface of LnbClient given a LNB name. diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/ClientProfile.java b/services/core/java/com/android/server/tv/tunerresourcemanager/ClientProfile.java index 8e375275d080..096231910e6e 100644 --- a/services/core/java/com/android/server/tv/tunerresourcemanager/ClientProfile.java +++ b/services/core/java/com/android/server/tv/tunerresourcemanager/ClientProfile.java @@ -67,19 +67,19 @@ public final class ClientProfile { /** * The handle of the primary frontend resource */ - private int mPrimaryUsingFrontendHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; + private long mPrimaryUsingFrontendHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; /** * List of the frontend handles that are used by the current client. */ - private Set<Integer> mUsingFrontendHandles = new HashSet<>(); + private Set<Long> mUsingFrontendHandles = new HashSet<>(); /** * List of the client ids that share frontend with the current client. */ private Set<Integer> mShareFeClientIds = new HashSet<>(); - private Set<Integer> mUsingDemuxHandles = new HashSet<>(); + private Set<Long> mUsingDemuxHandles = new HashSet<>(); /** * Client id sharee that has shared frontend with the current client. @@ -89,7 +89,7 @@ public final class ClientProfile { /** * List of the Lnb handles that are used by the current client. */ - private Set<Integer> mUsingLnbHandles = new HashSet<>(); + private Set<Long> mUsingLnbHandles = new HashSet<>(); /** * List of the Cas system ids that are used by the current client. @@ -184,7 +184,7 @@ public final class ClientProfile { * * @param frontendHandle being used. */ - public void useFrontend(int frontendHandle) { + public void useFrontend(long frontendHandle) { mUsingFrontendHandles.add(frontendHandle); } @@ -193,14 +193,14 @@ public final class ClientProfile { * * @param frontendHandle being used. */ - public void setPrimaryFrontend(int frontendHandle) { + public void setPrimaryFrontend(long frontendHandle) { mPrimaryUsingFrontendHandle = frontendHandle; } /** * Get the primary frontend used by the client */ - public int getPrimaryFrontend() { + public long getPrimaryFrontend() { return mPrimaryUsingFrontendHandle; } @@ -222,7 +222,7 @@ public final class ClientProfile { mShareFeClientIds.remove(clientId); } - public Set<Integer> getInUseFrontendHandles() { + public Set<Long> getInUseFrontendHandles() { return mUsingFrontendHandles; } @@ -253,14 +253,14 @@ public final class ClientProfile { * * @param demuxHandle the demux being used. */ - public void useDemux(int demuxHandle) { + public void useDemux(long demuxHandle) { mUsingDemuxHandles.add(demuxHandle); } /** * Get the set of demux handles in use. */ - public Set<Integer> getInUseDemuxHandles() { + public Set<Long> getInUseDemuxHandles() { return mUsingDemuxHandles; } @@ -269,7 +269,7 @@ public final class ClientProfile { * * @param demuxHandle the demux handl being released. */ - public void releaseDemux(int demuxHandle) { + public void releaseDemux(long demuxHandle) { mUsingDemuxHandles.remove(demuxHandle); } @@ -278,11 +278,11 @@ public final class ClientProfile { * * @param lnbHandle being used. */ - public void useLnb(int lnbHandle) { + public void useLnb(long lnbHandle) { mUsingLnbHandles.add(lnbHandle); } - public Set<Integer> getInUseLnbHandles() { + public Set<Long> getInUseLnbHandles() { return mUsingLnbHandles; } @@ -291,7 +291,7 @@ public final class ClientProfile { * * @param lnbHandle being released. */ - public void releaseLnb(int lnbHandle) { + public void releaseLnb(long lnbHandle) { mUsingLnbHandles.remove(lnbHandle); } diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/DemuxResource.java b/services/core/java/com/android/server/tv/tunerresourcemanager/DemuxResource.java index df735659c0fe..14bc216d03ef 100644 --- a/services/core/java/com/android/server/tv/tunerresourcemanager/DemuxResource.java +++ b/services/core/java/com/android/server/tv/tunerresourcemanager/DemuxResource.java @@ -69,7 +69,7 @@ public final class DemuxResource extends TunerResourceBasic { public static class Builder extends TunerResourceBasic.Builder { private int mFilterTypes; - Builder(int handle) { + Builder(long handle) { super(handle); } diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/FrontendResource.java b/services/core/java/com/android/server/tv/tunerresourcemanager/FrontendResource.java index 7ef75e3120c5..953d97499c41 100644 --- a/services/core/java/com/android/server/tv/tunerresourcemanager/FrontendResource.java +++ b/services/core/java/com/android/server/tv/tunerresourcemanager/FrontendResource.java @@ -42,7 +42,7 @@ public final class FrontendResource extends TunerResourceBasic { /** * An array to save all the FE handles under the same exclisive group. */ - private Set<Integer> mExclusiveGroupMemberHandles = new HashSet<>(); + private Set<Long> mExclusiveGroupMemberHandles = new HashSet<>(); private FrontendResource(Builder builder) { super(builder); @@ -58,7 +58,7 @@ public final class FrontendResource extends TunerResourceBasic { return mExclusiveGroupId; } - public Set<Integer> getExclusiveGroupMemberFeHandles() { + public Set<Long> getExclusiveGroupMemberFeHandles() { return mExclusiveGroupMemberHandles; } @@ -67,7 +67,7 @@ public final class FrontendResource extends TunerResourceBasic { * * @param handle the handle to be added. */ - public void addExclusiveGroupMemberFeHandle(int handle) { + public void addExclusiveGroupMemberFeHandle(long handle) { mExclusiveGroupMemberHandles.add(handle); } @@ -76,7 +76,7 @@ public final class FrontendResource extends TunerResourceBasic { * * @param handles the handle collection to be added. */ - public void addExclusiveGroupMemberFeHandles(Collection<Integer> handles) { + public void addExclusiveGroupMemberFeHandles(Collection<Long> handles) { mExclusiveGroupMemberHandles.addAll(handles); } @@ -85,7 +85,7 @@ public final class FrontendResource extends TunerResourceBasic { * * @param id the id to be removed. */ - public void removeExclusiveGroupMemberFeId(int handle) { + public void removeExclusiveGroupMemberFeId(long handle) { mExclusiveGroupMemberHandles.remove(handle); } @@ -104,7 +104,7 @@ public final class FrontendResource extends TunerResourceBasic { @Type private int mType; private int mExclusiveGroupId; - Builder(int handle) { + Builder(long handle) { super(handle); } diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/LnbResource.java b/services/core/java/com/android/server/tv/tunerresourcemanager/LnbResource.java index 41cacea5f09e..ab283713b15a 100644 --- a/services/core/java/com/android/server/tv/tunerresourcemanager/LnbResource.java +++ b/services/core/java/com/android/server/tv/tunerresourcemanager/LnbResource.java @@ -37,8 +37,7 @@ public final class LnbResource extends TunerResourceBasic { * Builder class for {@link LnbResource}. */ public static class Builder extends TunerResourceBasic.Builder { - - Builder(int handle) { + Builder(long handle) { super(handle); } diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceBasic.java b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceBasic.java index 07853fc69055..d2ff8fa7c2e8 100644 --- a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceBasic.java +++ b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceBasic.java @@ -28,7 +28,7 @@ public class TunerResourceBasic { * Handle of the current resource. Should not be changed and should be aligned with the driver * level implementation. */ - final int mHandle; + final long mHandle; /** * If the current resource is in use. @@ -44,7 +44,7 @@ public class TunerResourceBasic { this.mHandle = builder.mHandle; } - public int getHandle() { + public long getHandle() { return mHandle; } @@ -78,9 +78,9 @@ public class TunerResourceBasic { * Builder class for {@link TunerResourceBasic}. */ public static class Builder { - private final int mHandle; + private final long mHandle; - Builder(int handle) { + Builder(long handle) { this.mHandle = handle; } diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java index 0afb049d31c7..45a40edfaf41 100644 --- a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java +++ b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java @@ -78,12 +78,18 @@ public class TunerResourceManagerService extends SystemService implements IBinde private static final int INVALID_FE_COUNT = -1; + private static final int RESOURCE_ID_SHIFT = 24; + private static final int RESOURCE_TYPE_SHIFT = 56; + private static final long RESOURCE_COUNT_MASK = 0xffffff; + private static final long RESOURCE_ID_MASK = 0xffffffff; + private static final long RESOURCE_TYPE_MASK = 0xff; + // Map of the registered client profiles private Map<Integer, ClientProfile> mClientProfiles = new HashMap<>(); private int mNextUnusedClientId = 0; // Map of the current available frontend resources - private Map<Integer, FrontendResource> mFrontendResources = new HashMap<>(); + private Map<Long, FrontendResource> mFrontendResources = new HashMap<>(); // SparseIntArray of the max usable number for each frontend resource type private SparseIntArray mFrontendMaxUsableNums = new SparseIntArray(); // SparseIntArray of the currently used number for each frontend resource type @@ -93,15 +99,15 @@ public class TunerResourceManagerService extends SystemService implements IBinde // Backups for the frontend resource maps for enabling testing with custom resource maps // such as TunerTest.testHasUnusedFrontend1() - private Map<Integer, FrontendResource> mFrontendResourcesBackup = new HashMap<>(); + private Map<Long, FrontendResource> mFrontendResourcesBackup = new HashMap<>(); private SparseIntArray mFrontendMaxUsableNumsBackup = new SparseIntArray(); private SparseIntArray mFrontendUsedNumsBackup = new SparseIntArray(); private SparseIntArray mFrontendExistingNumsBackup = new SparseIntArray(); // Map of the current available demux resources - private Map<Integer, DemuxResource> mDemuxResources = new HashMap<>(); + private Map<Long, DemuxResource> mDemuxResources = new HashMap<>(); // Map of the current available lnb resources - private Map<Integer, LnbResource> mLnbResources = new HashMap<>(); + private Map<Long, LnbResource> mLnbResources = new HashMap<>(); // Map of the current available Cas resources private Map<Integer, CasResource> mCasResources = new HashMap<>(); // Map of the current available CiCam resources @@ -272,7 +278,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public void setLnbInfoList(int[] lnbHandles) throws RemoteException { + public void setLnbInfoList(long[] lnbHandles) throws RemoteException { enforceTrmAccessPermission("setLnbInfoList"); if (lnbHandles == null) { throw new RemoteException("Lnb handle list can't be null"); @@ -283,8 +289,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public boolean requestFrontend(@NonNull TunerFrontendRequest request, - @NonNull int[] frontendHandle) { + public boolean requestFrontend( + @NonNull TunerFrontendRequest request, @NonNull long[] frontendHandle) { enforceTunerAccessPermission("requestFrontend"); enforceTrmAccessPermission("requestFrontend"); if (frontendHandle == null) { @@ -369,8 +375,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public boolean requestDemux(@NonNull TunerDemuxRequest request, - @NonNull int[] demuxHandle) throws RemoteException { + public boolean requestDemux(@NonNull TunerDemuxRequest request, @NonNull long[] demuxHandle) + throws RemoteException { enforceTunerAccessPermission("requestDemux"); enforceTrmAccessPermission("requestDemux"); if (demuxHandle == null) { @@ -387,7 +393,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde @Override public boolean requestDescrambler(@NonNull TunerDescramblerRequest request, - @NonNull int[] descramblerHandle) throws RemoteException { + @NonNull long[] descramblerHandle) throws RemoteException { enforceDescramblerAccessPermission("requestDescrambler"); enforceTrmAccessPermission("requestDescrambler"); if (descramblerHandle == null) { @@ -404,7 +410,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde @Override public boolean requestCasSession(@NonNull CasSessionRequest request, - @NonNull int[] casSessionHandle) throws RemoteException { + @NonNull long[] casSessionHandle) throws RemoteException { enforceTrmAccessPermission("requestCasSession"); if (casSessionHandle == null) { throw new RemoteException("casSessionHandle can't be null"); @@ -419,8 +425,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public boolean requestCiCam(@NonNull TunerCiCamRequest request, - @NonNull int[] ciCamHandle) throws RemoteException { + public boolean requestCiCam(@NonNull TunerCiCamRequest request, @NonNull long[] ciCamHandle) + throws RemoteException { enforceTrmAccessPermission("requestCiCam"); if (ciCamHandle == null) { throw new RemoteException("ciCamHandle can't be null"); @@ -435,7 +441,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public boolean requestLnb(@NonNull TunerLnbRequest request, @NonNull int[] lnbHandle) + public boolean requestLnb(@NonNull TunerLnbRequest request, @NonNull long[] lnbHandle) throws RemoteException { enforceTunerAccessPermission("requestLnb"); enforceTrmAccessPermission("requestLnb"); @@ -452,7 +458,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public void releaseFrontend(int frontendHandle, int clientId) throws RemoteException { + public void releaseFrontend(long frontendHandle, int clientId) throws RemoteException { enforceTunerAccessPermission("releaseFrontend"); enforceTrmAccessPermission("releaseFrontend"); if (!validateResourceHandle(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND, @@ -481,7 +487,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public void releaseDemux(int demuxHandle, int clientId) throws RemoteException { + public void releaseDemux(long demuxHandle, int clientId) throws RemoteException { enforceTunerAccessPermission("releaseDemux"); enforceTrmAccessPermission("releaseDemux"); if (DEBUG) { @@ -512,7 +518,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public void releaseDescrambler(int descramblerHandle, int clientId) { + public void releaseDescrambler(long descramblerHandle, int clientId) { enforceTunerAccessPermission("releaseDescrambler"); enforceTrmAccessPermission("releaseDescrambler"); if (DEBUG) { @@ -521,7 +527,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public void releaseCasSession(int casSessionHandle, int clientId) throws RemoteException { + public void releaseCasSession(long casSessionHandle, int clientId) throws RemoteException { enforceTrmAccessPermission("releaseCasSession"); if (!validateResourceHandle( TunerResourceManager.TUNER_RESOURCE_TYPE_CAS_SESSION, casSessionHandle)) { @@ -545,7 +551,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public void releaseCiCam(int ciCamHandle, int clientId) throws RemoteException { + public void releaseCiCam(long ciCamHandle, int clientId) throws RemoteException { enforceTrmAccessPermission("releaseCiCam"); if (!validateResourceHandle( TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND_CICAM, ciCamHandle)) { @@ -573,7 +579,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @Override - public void releaseLnb(int lnbHandle, int clientId) throws RemoteException { + public void releaseLnb(long lnbHandle, int clientId) throws RemoteException { enforceTunerAccessPermission("releaseLnb"); enforceTrmAccessPermission("releaseLnb"); if (!validateResourceHandle(TunerResourceManager.TUNER_RESOURCE_TYPE_LNB, lnbHandle)) { @@ -871,7 +877,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde // A set to record the frontends pending on updating. Ids will be removed // from this set once its updating finished. Any frontend left in this set when all // the updates are done will be removed from mFrontendResources. - Set<Integer> updatingFrontendHandles = new HashSet<>(getFrontendResources().keySet()); + Set<Long> updatingFrontendHandles = new HashSet<>(getFrontendResources().keySet()); // Update frontendResources map and other mappings accordingly for (int i = 0; i < infos.length; i++) { @@ -890,7 +896,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } } - for (int removingHandle : updatingFrontendHandles) { + for (long removingHandle : updatingFrontendHandles) { // update the exclusive group id member list removeFrontendResource(removingHandle); } @@ -908,7 +914,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde // A set to record the demuxes pending on updating. Ids will be removed // from this set once its updating finished. Any demux left in this set when all // the updates are done will be removed from mDemuxResources. - Set<Integer> updatingDemuxHandles = new HashSet<>(getDemuxResources().keySet()); + Set<Long> updatingDemuxHandles = new HashSet<>(getDemuxResources().keySet()); // Update demuxResources map and other mappings accordingly for (int i = 0; i < infos.length; i++) { @@ -926,13 +932,13 @@ public class TunerResourceManagerService extends SystemService implements IBinde } } - for (int removingHandle : updatingDemuxHandles) { + for (long removingHandle : updatingDemuxHandles) { // update the exclusive group id member list removeDemuxResource(removingHandle); } } @VisibleForTesting - protected void setLnbInfoListInternal(int[] lnbHandles) { + protected void setLnbInfoListInternal(long[] lnbHandles) { if (DEBUG) { for (int i = 0; i < lnbHandles.length; i++) { Slog.d(TAG, "updateLnbInfo(lnbHanle=" + lnbHandles[i] + ")"); @@ -942,7 +948,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde // A set to record the Lnbs pending on updating. Handles will be removed // from this set once its updating finished. Any lnb left in this set when all // the updates are done will be removed from mLnbResources. - Set<Integer> updatingLnbHandles = new HashSet<>(getLnbResources().keySet()); + Set<Long> updatingLnbHandles = new HashSet<>(getLnbResources().keySet()); // Update lnbResources map and other mappings accordingly for (int i = 0; i < lnbHandles.length; i++) { @@ -958,7 +964,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } } - for (int removingHandle : updatingLnbHandles) { + for (long removingHandle : updatingLnbHandles) { removeLnbResource(removingHandle); } } @@ -1003,7 +1009,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @VisibleForTesting - protected boolean requestFrontendInternal(TunerFrontendRequest request, int[] frontendHandle) { + protected boolean requestFrontendInternal(TunerFrontendRequest request, long[] frontendHandle) { if (DEBUG) { Slog.d(TAG, "requestFrontend(request=" + request + ")"); } @@ -1015,8 +1021,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde return false; } clientPriorityUpdateOnRequest(requestClient); - int grantingFrontendHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; - int inUseLowestPriorityFrHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; + long grantingFrontendHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; + long inUseLowestPriorityFrHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; // Priority max value is 1000 int currentLowestPriority = MAX_CLIENT_PRIORITY + 1; boolean isRequestFromSameProcess = false; @@ -1050,7 +1056,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde // we need to check the max used num if the target frontend type is not // currently in primary use (and simply blocked due to exclusive group) ClientProfile targetOwnerProfile = getClientProfile(fr.getOwnerClientId()); - int primaryFeId = targetOwnerProfile.getPrimaryFrontend(); + long primaryFeId = targetOwnerProfile.getPrimaryFrontend(); FrontendResource primaryFe = getFrontendResource(primaryFeId); if (fr.getType() != primaryFe.getType() && isFrontendMaxNumUseReached(fr.getType())) { @@ -1102,7 +1108,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde getClientProfile(shareeFeClientId).stopSharingFrontend(selfClientId); getClientProfile(selfClientId).releaseFrontend(); } - for (int feId : getClientProfile(targetClientId).getInUseFrontendHandles()) { + for (long feId : getClientProfile(targetClientId).getInUseFrontendHandles()) { getClientProfile(selfClientId).useFrontend(feId); } getClientProfile(selfClientId).setShareeFeClientId(targetClientId); @@ -1117,14 +1123,14 @@ public class TunerResourceManagerService extends SystemService implements IBinde currentOwnerProfile.stopSharingFrontend(newOwnerId); newOwnerProfile.setShareeFeClientId(ClientProfile.INVALID_RESOURCE_ID); currentOwnerProfile.setShareeFeClientId(newOwnerId); - for (int inUseHandle : newOwnerProfile.getInUseFrontendHandles()) { + for (long inUseHandle : newOwnerProfile.getInUseFrontendHandles()) { getFrontendResource(inUseHandle).setOwner(newOwnerId); } // change the primary frontend newOwnerProfile.setPrimaryFrontend(currentOwnerProfile.getPrimaryFrontend()); currentOwnerProfile.setPrimaryFrontend(TunerResourceManager.INVALID_RESOURCE_HANDLE); // double check there is no other resources tied to the previous owner - for (int inUseHandle : currentOwnerProfile.getInUseFrontendHandles()) { + for (long inUseHandle : currentOwnerProfile.getInUseFrontendHandles()) { int ownerId = getFrontendResource(inUseHandle).getOwnerClientId(); if (ownerId != newOwnerId) { Slog.e(TAG, "something is wrong in transferFeOwner:" + inUseHandle @@ -1156,8 +1162,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde ClientProfile currentOwnerProfile = getClientProfile(currentOwnerId); ClientProfile newOwnerProfile = getClientProfile(newOwnerId); - Set<Integer> inUseLnbHandles = new HashSet<>(); - for (Integer lnbHandle : currentOwnerProfile.getInUseLnbHandles()) { + Set<Long> inUseLnbHandles = new HashSet<>(); + for (Long lnbHandle : currentOwnerProfile.getInUseLnbHandles()) { // link lnb handle to the new profile newOwnerProfile.useLnb(lnbHandle); @@ -1169,7 +1175,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } // unlink lnb handles from the original owner - for (Integer lnbHandle : inUseLnbHandles) { + for (Long lnbHandle : inUseLnbHandles) { currentOwnerProfile.releaseLnb(lnbHandle); } @@ -1192,7 +1198,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @VisibleForTesting - protected boolean requestLnbInternal(TunerLnbRequest request, int[] lnbHandle) { + protected boolean requestLnbInternal(TunerLnbRequest request, long[] lnbHandle) { if (DEBUG) { Slog.d(TAG, "requestLnb(request=" + request + ")"); } @@ -1200,8 +1206,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde lnbHandle[0] = TunerResourceManager.INVALID_RESOURCE_HANDLE; ClientProfile requestClient = getClientProfile(request.clientId); clientPriorityUpdateOnRequest(requestClient); - int grantingLnbHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; - int inUseLowestPriorityLnbHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; + long grantingLnbHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; + long inUseLowestPriorityLnbHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; // Priority max value is 1000 int currentLowestPriority = MAX_CLIENT_PRIORITY + 1; boolean isRequestFromSameProcess = false; @@ -1248,7 +1254,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @VisibleForTesting - protected boolean requestCasSessionInternal(CasSessionRequest request, int[] casSessionHandle) { + protected boolean requestCasSessionInternal( + CasSessionRequest request, long[] casSessionHandle) { if (DEBUG) { Slog.d(TAG, "requestCasSession(request=" + request + ")"); } @@ -1301,7 +1308,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @VisibleForTesting - protected boolean requestCiCamInternal(TunerCiCamRequest request, int[] ciCamHandle) { + protected boolean requestCiCamInternal(TunerCiCamRequest request, long[] ciCamHandle) { if (DEBUG) { Slog.d(TAG, "requestCiCamInternal(TunerCiCamRequest=" + request + ")"); } @@ -1324,6 +1331,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde ciCamHandle[0] = generateResourceHandle( TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND_CICAM, ciCam.getCiCamId()); updateCiCamClientMappingOnNewGrant(request.ciCamId, request.clientId); + Slog.e(TAG, "requestCiCamInternal(ciCamHandle=" + ciCamHandle[0] + ")"); return true; } for (int ownerId : ciCam.getOwnerClientIds()) { @@ -1349,6 +1357,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde ciCamHandle[0] = generateResourceHandle( TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND_CICAM, ciCam.getCiCamId()); updateCiCamClientMappingOnNewGrant(request.ciCamId, request.clientId); + Slog.e(TAG, "requestCiCamInternal(ciCamHandle=" + ciCamHandle[0] + ")"); return true; } return false; @@ -1432,7 +1441,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } @VisibleForTesting - protected boolean requestDemuxInternal(TunerDemuxRequest request, int[] demuxHandle) { + protected boolean requestDemuxInternal(TunerDemuxRequest request, long[] demuxHandle) { if (DEBUG) { Slog.d(TAG, "requestDemux(request=" + request + ")"); } @@ -1455,8 +1464,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde } clientPriorityUpdateOnRequest(requestClient); - int grantingDemuxHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; - int inUseLowestPriorityDrHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; + long grantingDemuxHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; + long inUseLowestPriorityDrHandle = TunerResourceManager.INVALID_RESOURCE_HANDLE; // Priority max value is 1000 int currentLowestPriority = MAX_CLIENT_PRIORITY + 1; boolean isRequestFromSameProcess = false; @@ -1550,7 +1559,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde @VisibleForTesting protected boolean requestDescramblerInternal( - TunerDescramblerRequest request, int[] descramblerHandle) { + TunerDescramblerRequest request, long[] descramblerHandle) { if (DEBUG) { Slog.d(TAG, "requestDescrambler(request=" + request + ")"); } @@ -1869,20 +1878,20 @@ public class TunerResourceManagerService extends SystemService implements IBinde return false; } - private void updateFrontendClientMappingOnNewGrant(int grantingHandle, int ownerClientId) { + private void updateFrontendClientMappingOnNewGrant(long grantingHandle, int ownerClientId) { FrontendResource grantingFrontend = getFrontendResource(grantingHandle); ClientProfile ownerProfile = getClientProfile(ownerClientId); grantingFrontend.setOwner(ownerClientId); increFrontendNum(mFrontendUsedNums, grantingFrontend.getType()); ownerProfile.useFrontend(grantingHandle); - for (int exclusiveGroupMember : grantingFrontend.getExclusiveGroupMemberFeHandles()) { + for (long exclusiveGroupMember : grantingFrontend.getExclusiveGroupMemberFeHandles()) { getFrontendResource(exclusiveGroupMember).setOwner(ownerClientId); ownerProfile.useFrontend(exclusiveGroupMember); } ownerProfile.setPrimaryFrontend(grantingHandle); } - private void updateDemuxClientMappingOnNewGrant(int grantingHandle, int ownerClientId) { + private void updateDemuxClientMappingOnNewGrant(long grantingHandle, int ownerClientId) { DemuxResource grantingDemux = getDemuxResource(grantingHandle); if (grantingDemux != null) { ClientProfile ownerProfile = getClientProfile(ownerClientId); @@ -1897,7 +1906,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde ownerProfile.releaseDemux(releasingDemux.getHandle()); } - private void updateLnbClientMappingOnNewGrant(int grantingHandle, int ownerClientId) { + private void updateLnbClientMappingOnNewGrant(long grantingHandle, int ownerClientId) { LnbResource grantingLnb = getLnbResource(grantingHandle); ClientProfile ownerProfile = getClientProfile(ownerClientId); grantingLnb.setOwner(ownerClientId); @@ -1981,23 +1990,23 @@ public class TunerResourceManagerService extends SystemService implements IBinde @VisibleForTesting @Nullable - protected FrontendResource getFrontendResource(int frontendHandle) { + protected FrontendResource getFrontendResource(long frontendHandle) { return mFrontendResources.get(frontendHandle); } @VisibleForTesting - protected Map<Integer, FrontendResource> getFrontendResources() { + protected Map<Long, FrontendResource> getFrontendResources() { return mFrontendResources; } @VisibleForTesting @Nullable - protected DemuxResource getDemuxResource(int demuxHandle) { + protected DemuxResource getDemuxResource(long demuxHandle) { return mDemuxResources.get(demuxHandle); } @VisibleForTesting - protected Map<Integer, DemuxResource> getDemuxResources() { + protected Map<Long, DemuxResource> getDemuxResources() { return mDemuxResources; } @@ -2056,8 +2065,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde } } - private void replaceFeResourceMap(Map<Integer, FrontendResource> srcMap, Map<Integer, - FrontendResource> dstMap) { + private void replaceFeResourceMap( + Map<Long, FrontendResource> srcMap, Map<Long, FrontendResource> dstMap) { if (dstMap != null) { dstMap.clear(); if (srcMap != null && srcMap.size() > 0) { @@ -2110,7 +2119,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde if (fe.getExclusiveGroupId() == newFe.getExclusiveGroupId()) { newFe.addExclusiveGroupMemberFeHandle(fe.getHandle()); newFe.addExclusiveGroupMemberFeHandles(fe.getExclusiveGroupMemberFeHandles()); - for (int excGroupmemberFeHandle : fe.getExclusiveGroupMemberFeHandles()) { + for (long excGroupmemberFeHandle : fe.getExclusiveGroupMemberFeHandles()) { getFrontendResource(excGroupmemberFeHandle) .addExclusiveGroupMemberFeHandle(newFe.getHandle()); } @@ -2128,7 +2137,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde mDemuxResources.put(newDemux.getHandle(), newDemux); } - private void removeFrontendResource(int removingHandle) { + private void removeFrontendResource(long removingHandle) { FrontendResource fe = getFrontendResource(removingHandle); if (fe == null) { return; @@ -2140,7 +2149,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde } clearFrontendAndClientMapping(ownerClient); } - for (int excGroupmemberFeHandle : fe.getExclusiveGroupMemberFeHandles()) { + for (long excGroupmemberFeHandle : fe.getExclusiveGroupMemberFeHandles()) { getFrontendResource(excGroupmemberFeHandle) .removeExclusiveGroupMemberFeId(fe.getHandle()); } @@ -2148,7 +2157,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde mFrontendResources.remove(removingHandle); } - private void removeDemuxResource(int removingHandle) { + private void removeDemuxResource(long removingHandle) { DemuxResource demux = getDemuxResource(removingHandle); if (demux == null) { return; @@ -2161,12 +2170,12 @@ public class TunerResourceManagerService extends SystemService implements IBinde @VisibleForTesting @Nullable - protected LnbResource getLnbResource(int lnbHandle) { + protected LnbResource getLnbResource(long lnbHandle) { return mLnbResources.get(lnbHandle); } @VisibleForTesting - protected Map<Integer, LnbResource> getLnbResources() { + protected Map<Long, LnbResource> getLnbResources() { return mLnbResources; } @@ -2175,7 +2184,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde mLnbResources.put(newLnb.getHandle(), newLnb); } - private void removeLnbResource(int removingHandle) { + private void removeLnbResource(long removingHandle) { LnbResource lnb = getLnbResource(removingHandle); if (lnb == null) { return; @@ -2279,7 +2288,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde if (profile == null) { return; } - for (Integer feId : profile.getInUseFrontendHandles()) { + for (Long feId : profile.getInUseFrontendHandles()) { FrontendResource fe = getFrontendResource(feId); int ownerClientId = fe.getOwnerClientId(); if (ownerClientId == profile.getId()) { @@ -2290,10 +2299,9 @@ public class TunerResourceManagerService extends SystemService implements IBinde if (ownerClientProfile != null) { ownerClientProfile.stopSharingFrontend(profile.getId()); } - } - int primaryFeId = profile.getPrimaryFrontend(); + long primaryFeId = profile.getPrimaryFrontend(); if (primaryFeId != TunerResourceManager.INVALID_RESOURCE_HANDLE) { FrontendResource primaryFe = getFrontendResource(primaryFeId); if (primaryFe != null) { @@ -2310,7 +2318,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde return; } // Clear Lnb - for (Integer lnbHandle : profile.getInUseLnbHandles()) { + for (Long lnbHandle : profile.getInUseLnbHandles()) { getLnbResource(lnbHandle).removeOwner(); } // Clear Cas @@ -2322,7 +2330,7 @@ public class TunerResourceManagerService extends SystemService implements IBinde getCiCamResource(profile.getInUseCiCamId()).removeOwner(profile.getId()); } // Clear Demux - for (Integer demuxHandle : profile.getInUseDemuxHandles()) { + for (Long demuxHandle : profile.getInUseDemuxHandles()) { getDemuxResource(demuxHandle).removeOwner(); } // Clear Frontend @@ -2335,24 +2343,31 @@ public class TunerResourceManagerService extends SystemService implements IBinde return mClientProfiles.keySet().contains(clientId); } - private int generateResourceHandle( + /** + * Generate resource handle for resourceType and resourceId + * Resource Handle Allotment : 64 bits (long) + * 8 bits - resourceType + * 32 bits - resourceId + * 24 bits - resourceRequestCount + */ + private long generateResourceHandle( @TunerResourceManager.TunerResourceType int resourceType, int resourceId) { - return (resourceType & 0x000000ff) << 24 - | (resourceId << 16) - | (mResourceRequestCount++ & 0xffff); + return (resourceType & RESOURCE_TYPE_MASK) << RESOURCE_TYPE_SHIFT + | (resourceId & RESOURCE_ID_MASK) << RESOURCE_ID_SHIFT + | (mResourceRequestCount++ & RESOURCE_COUNT_MASK); } @VisibleForTesting - protected int getResourceIdFromHandle(int resourceHandle) { + protected int getResourceIdFromHandle(long resourceHandle) { if (resourceHandle == TunerResourceManager.INVALID_RESOURCE_HANDLE) { - return resourceHandle; + return (int) resourceHandle; } - return (resourceHandle & 0x00ff0000) >> 16; + return (int) ((resourceHandle >> RESOURCE_ID_SHIFT) & RESOURCE_ID_MASK); } - private boolean validateResourceHandle(int resourceType, int resourceHandle) { + private boolean validateResourceHandle(int resourceType, long resourceHandle) { if (resourceHandle == TunerResourceManager.INVALID_RESOURCE_HANDLE - || ((resourceHandle & 0xff000000) >> 24) != resourceType) { + || ((resourceHandle >> RESOURCE_TYPE_SHIFT) & RESOURCE_TYPE_MASK) != resourceType) { return false; } return true; diff --git a/services/tests/servicestests/src/com/android/server/tv/tunerresourcemanager/TunerResourceManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/tv/tunerresourcemanager/TunerResourceManagerServiceTest.java index 963b27e010fa..8e3633509cd3 100644 --- a/services/tests/servicestests/src/com/android/server/tv/tunerresourcemanager/TunerResourceManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/tv/tunerresourcemanager/TunerResourceManagerServiceTest.java @@ -119,8 +119,7 @@ public class TunerResourceManagerServiceTest { tunerFrontendInfo(1 /*handle*/, FrontendSettings.TYPE_DVBT, 1 /*exclusiveGroupId*/); mTunerResourceManagerService.setFrontendInfoListInternal(infos); - Map<Integer, FrontendResource> resources = - mTunerResourceManagerService.getFrontendResources(); + Map<Long, FrontendResource> resources = mTunerResourceManagerService.getFrontendResources(); for (int id = 0; id < infos.length; id++) { assertThat(resources.get(infos[id].handle) .getExclusiveGroupMemberFeHandles().size()).isEqualTo(0); @@ -147,15 +146,14 @@ public class TunerResourceManagerServiceTest { tunerFrontendInfo(3 /*handle*/, FrontendSettings.TYPE_ATSC, 1 /*exclusiveGroupId*/); mTunerResourceManagerService.setFrontendInfoListInternal(infos); - Map<Integer, FrontendResource> resources = - mTunerResourceManagerService.getFrontendResources(); + Map<Long, FrontendResource> resources = mTunerResourceManagerService.getFrontendResources(); assertThat(resources.values()).comparingElementsUsing(FR_TFI_COMPARE) .containsExactlyElementsIn(Arrays.asList(infos)); - assertThat(resources.get(0).getExclusiveGroupMemberFeHandles()).isEmpty(); - assertThat(resources.get(1).getExclusiveGroupMemberFeHandles()).containsExactly(2, 3); - assertThat(resources.get(2).getExclusiveGroupMemberFeHandles()).containsExactly(1, 3); - assertThat(resources.get(3).getExclusiveGroupMemberFeHandles()).containsExactly(1, 2); + assertThat(resources.get(0L).getExclusiveGroupMemberFeHandles()).isEmpty(); + assertThat(resources.get(1L).getExclusiveGroupMemberFeHandles()).containsExactly(2L, 3L); + assertThat(resources.get(2L).getExclusiveGroupMemberFeHandles()).containsExactly(1L, 3L); + assertThat(resources.get(3L).getExclusiveGroupMemberFeHandles()).containsExactly(1L, 2L); } @Test @@ -168,11 +166,11 @@ public class TunerResourceManagerServiceTest { tunerFrontendInfo(1 /*handle*/, FrontendSettings.TYPE_DVBS, 1 /*exclusiveGroupId*/); mTunerResourceManagerService.setFrontendInfoListInternal(infos); - Map<Integer, FrontendResource> resources0 = + Map<Long, FrontendResource> resources0 = mTunerResourceManagerService.getFrontendResources(); mTunerResourceManagerService.setFrontendInfoListInternal(infos); - Map<Integer, FrontendResource> resources1 = + Map<Long, FrontendResource> resources1 = mTunerResourceManagerService.getFrontendResources(); assertThat(resources0).isEqualTo(resources1); @@ -195,8 +193,7 @@ public class TunerResourceManagerServiceTest { tunerFrontendInfo(1 /*handle*/, FrontendSettings.TYPE_DVBT, 1 /*exclusiveGroupId*/); mTunerResourceManagerService.setFrontendInfoListInternal(infos1); - Map<Integer, FrontendResource> resources = - mTunerResourceManagerService.getFrontendResources(); + Map<Long, FrontendResource> resources = mTunerResourceManagerService.getFrontendResources(); for (int id = 0; id < infos1.length; id++) { assertThat(resources.get(infos1[id].handle) .getExclusiveGroupMemberFeHandles().size()).isEqualTo(0); @@ -222,8 +219,7 @@ public class TunerResourceManagerServiceTest { tunerFrontendInfo(1 /*handle*/, FrontendSettings.TYPE_DVBT, 1 /*exclusiveGroupId*/); mTunerResourceManagerService.setFrontendInfoListInternal(infos1); - Map<Integer, FrontendResource> resources = - mTunerResourceManagerService.getFrontendResources(); + Map<Long, FrontendResource> resources = mTunerResourceManagerService.getFrontendResources(); for (int id = 0; id < infos1.length; id++) { assertThat(resources.get(infos1[id].handle) .getExclusiveGroupMemberFeHandles().size()).isEqualTo(0); @@ -240,7 +236,7 @@ public class TunerResourceManagerServiceTest { mTunerResourceManagerService.setFrontendInfoListInternal(infos0); TunerFrontendRequest request = tunerFrontendRequest(0 /*clientId*/, FrontendSettings.TYPE_DVBT); - int[] frontendHandle = new int[1]; + long[] frontendHandle = new long[1]; assertThat(mTunerResourceManagerService .requestFrontendInternal(request, frontendHandle)).isFalse(); assertThat(frontendHandle[0]).isEqualTo(TunerResourceManager.INVALID_RESOURCE_HANDLE); @@ -263,7 +259,7 @@ public class TunerResourceManagerServiceTest { TunerFrontendRequest request = tunerFrontendRequest(clientId[0] /*clientId*/, FrontendSettings.TYPE_DVBT); - int[] frontendHandle = new int[1]; + long[] frontendHandle = new long[1]; assertThat(mTunerResourceManagerService .requestFrontendInternal(request, frontendHandle)).isFalse(); assertThat(frontendHandle[0]).isEqualTo(TunerResourceManager.INVALID_RESOURCE_HANDLE); @@ -296,7 +292,7 @@ public class TunerResourceManagerServiceTest { TunerFrontendRequest request = tunerFrontendRequest(clientId[0] /*clientId*/, FrontendSettings.TYPE_DVBT); - int[] frontendHandle = new int[1]; + long[] frontendHandle = new long[1]; assertThat(mTunerResourceManagerService .requestFrontendInternal(request, frontendHandle)).isTrue(); assertThat(frontendHandle[0]).isEqualTo(0); @@ -333,7 +329,7 @@ public class TunerResourceManagerServiceTest { 1 /*exclusiveGroupId*/); mTunerResourceManagerService.setFrontendInfoListInternal(infos); - int[] frontendHandle = new int[1]; + long[] frontendHandle = new long[1]; TunerFrontendRequest request = tunerFrontendRequest(clientId1[0] /*clientId*/, FrontendSettings.TYPE_DVBT); assertThat(mTunerResourceManagerService @@ -385,7 +381,7 @@ public class TunerResourceManagerServiceTest { TunerFrontendRequest request = tunerFrontendRequest(clientId0[0] /*clientId*/, FrontendSettings.TYPE_DVBT); - int[] frontendHandle = new int[1]; + long[] frontendHandle = new long[1]; assertThat(mTunerResourceManagerService .requestFrontendInternal(request, frontendHandle)).isTrue(); @@ -435,13 +431,13 @@ public class TunerResourceManagerServiceTest { TunerFrontendRequest request = tunerFrontendRequest(clientId0[0] /*clientId*/, FrontendSettings.TYPE_DVBT); - int[] frontendHandle = new int[1]; + long[] frontendHandle = new long[1]; assertThat(mTunerResourceManagerService .requestFrontendInternal(request, frontendHandle)).isTrue(); assertThat(frontendHandle[0]).isEqualTo(infos[0].handle); assertThat(mTunerResourceManagerService.getClientProfile(clientId0[0]) - .getInUseFrontendHandles()).isEqualTo(new HashSet<Integer>(Arrays.asList( - infos[0].handle, infos[1].handle))); + .getInUseFrontendHandles()) + .isEqualTo(new HashSet<Long>(Arrays.asList(infos[0].handle, infos[1].handle))); request = tunerFrontendRequest(clientId1[0] /*clientId*/, FrontendSettings.TYPE_DVBS); @@ -480,7 +476,7 @@ public class TunerResourceManagerServiceTest { TunerFrontendRequest request = tunerFrontendRequest(clientId[0] /*clientId*/, FrontendSettings.TYPE_DVBT); - int[] frontendHandle = new int[1]; + long[] frontendHandle = new long[1]; assertThat(mTunerResourceManagerService .requestFrontendInternal(request, frontendHandle)).isTrue(); assertThat(frontendHandle[0]).isEqualTo(infos[0].handle); @@ -525,7 +521,7 @@ public class TunerResourceManagerServiceTest { mTunerResourceManagerService.updateCasInfoInternal(1 /*casSystemId*/, 2 /*maxSessionNum*/); CasSessionRequest request = casSessionRequest(clientId0[0], 1 /*casSystemId*/); - int[] casSessionHandle = new int[1]; + long[] casSessionHandle = new long[1]; // Request for 2 cas sessions. assertThat(mTunerResourceManagerService .requestCasSessionInternal(request, casSessionHandle)).isTrue(); @@ -581,7 +577,7 @@ public class TunerResourceManagerServiceTest { mTunerResourceManagerService.updateCasInfoInternal(1 /*casSystemId*/, 2 /*maxSessionNum*/); TunerCiCamRequest request = tunerCiCamRequest(clientId0[0], 1 /*ciCamId*/); - int[] ciCamHandle = new int[1]; + long[] ciCamHandle = new long[1]; // Request for 2 ciCam sessions. assertThat(mTunerResourceManagerService .requestCiCamInternal(request, ciCamHandle)).isTrue(); @@ -625,7 +621,7 @@ public class TunerResourceManagerServiceTest { mTunerResourceManagerService.updateCasInfoInternal(1 /*casSystemId*/, 2 /*maxSessionNum*/); CasSessionRequest request = casSessionRequest(clientId[0], 1 /*casSystemId*/); - int[] casSessionHandle = new int[1]; + long[] casSessionHandle = new long[1]; // Request for 1 cas sessions. assertThat(mTunerResourceManagerService .requestCasSessionInternal(request, casSessionHandle)).isTrue(); @@ -662,7 +658,7 @@ public class TunerResourceManagerServiceTest { mTunerResourceManagerService.updateCasInfoInternal(1 /*casSystemId*/, 2 /*maxSessionNum*/); TunerCiCamRequest request = tunerCiCamRequest(clientId[0], 1 /*ciCamId*/); - int[] ciCamHandle = new int[1]; + long[] ciCamHandle = new long[1]; // Request for 1 ciCam sessions. assertThat(mTunerResourceManagerService .requestCiCamInternal(request, ciCamHandle)).isTrue(); @@ -708,17 +704,17 @@ public class TunerResourceManagerServiceTest { clientId1[0], clientPriorities[1], 0/*niceValue*/); // Init lnb resources. - int[] lnbHandles = {1}; + long[] lnbHandles = {1}; mTunerResourceManagerService.setLnbInfoListInternal(lnbHandles); TunerLnbRequest request = new TunerLnbRequest(); request.clientId = clientId0[0]; - int[] lnbHandle = new int[1]; + long[] lnbHandle = new long[1]; assertThat(mTunerResourceManagerService .requestLnbInternal(request, lnbHandle)).isTrue(); assertThat(lnbHandle[0]).isEqualTo(lnbHandles[0]); assertThat(mTunerResourceManagerService.getClientProfile(clientId0[0]).getInUseLnbHandles()) - .isEqualTo(new HashSet<Integer>(Arrays.asList(lnbHandles[0]))); + .isEqualTo(new HashSet<Long>(Arrays.asList(lnbHandles[0]))); request = new TunerLnbRequest(); request.clientId = clientId1[0]; @@ -747,12 +743,12 @@ public class TunerResourceManagerServiceTest { assertThat(clientId[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID); // Init lnb resources. - int[] lnbHandles = {0}; + long[] lnbHandles = {0}; mTunerResourceManagerService.setLnbInfoListInternal(lnbHandles); TunerLnbRequest request = new TunerLnbRequest(); request.clientId = clientId[0]; - int[] lnbHandle = new int[1]; + long[] lnbHandle = new long[1]; assertThat(mTunerResourceManagerService .requestLnbInternal(request, lnbHandle)).isTrue(); assertThat(lnbHandle[0]).isEqualTo(lnbHandles[0]); @@ -786,7 +782,7 @@ public class TunerResourceManagerServiceTest { TunerFrontendRequest request = tunerFrontendRequest(clientId[0] /*clientId*/, FrontendSettings.TYPE_DVBT); - int[] frontendHandle = new int[1]; + long[] frontendHandle = new long[1]; assertThat(mTunerResourceManagerService .requestFrontendInternal(request, frontendHandle)).isTrue(); assertThat(frontendHandle[0]).isEqualTo(infos[0].handle); @@ -823,12 +819,12 @@ public class TunerResourceManagerServiceTest { infos[2] = tunerDemuxInfo(2 /* handle */, Filter.TYPE_TS); mTunerResourceManagerService.setDemuxInfoListInternal(infos); - int[] demuxHandle0 = new int[1]; + long[] demuxHandle0 = new long[1]; // first with undefined type (should be the first one with least # of caps) TunerDemuxRequest request = tunerDemuxRequest(clientId0[0], Filter.TYPE_UNDEFINED); assertThat(mTunerResourceManagerService.requestDemuxInternal(request, demuxHandle0)) .isTrue(); - assertThat(demuxHandle0[0]).isEqualTo(1); + assertThat(demuxHandle0[0]).isEqualTo(1L); DemuxResource dr = mTunerResourceManagerService.getDemuxResource(demuxHandle0[0]); mTunerResourceManagerService.releaseDemuxInternal(dr); @@ -837,20 +833,20 @@ public class TunerResourceManagerServiceTest { demuxHandle0[0] = -1; assertThat(mTunerResourceManagerService.requestDemuxInternal(request, demuxHandle0)) .isFalse(); - assertThat(demuxHandle0[0]).isEqualTo(-1); + assertThat(demuxHandle0[0]).isEqualTo(-1L); // now with TS (should be the one with least # of caps that supports TS) request.desiredFilterTypes = Filter.TYPE_TS; assertThat(mTunerResourceManagerService.requestDemuxInternal(request, demuxHandle0)) .isTrue(); - assertThat(demuxHandle0[0]).isEqualTo(2); + assertThat(demuxHandle0[0]).isEqualTo(2L); // request for another TS int[] clientId1 = new int[1]; mTunerResourceManagerService.registerClientProfileInternal( profile1, null /*listener*/, clientId1); assertThat(clientId1[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID); - int[] demuxHandle1 = new int[1]; + long[] demuxHandle1 = new long[1]; TunerDemuxRequest request1 = tunerDemuxRequest(clientId1[0], Filter.TYPE_TS); assertThat(mTunerResourceManagerService.requestDemuxInternal(request1, demuxHandle1)) .isTrue(); @@ -899,14 +895,14 @@ public class TunerResourceManagerServiceTest { // let clientId0(prio:100) request for IP - should succeed TunerDemuxRequest request0 = tunerDemuxRequest(clientId0[0], Filter.TYPE_IP); - int[] demuxHandle0 = new int[1]; + long[] demuxHandle0 = new long[1]; assertThat(mTunerResourceManagerService .requestDemuxInternal(request0, demuxHandle0)).isTrue(); assertThat(demuxHandle0[0]).isEqualTo(0); // let clientId1(prio:50) request for IP - should fail TunerDemuxRequest request1 = tunerDemuxRequest(clientId1[0], Filter.TYPE_IP); - int[] demuxHandle1 = new int[1]; + long[] demuxHandle1 = new long[1]; demuxHandle1[0] = -1; assertThat(mTunerResourceManagerService .requestDemuxInternal(request1, demuxHandle1)).isFalse(); @@ -926,7 +922,7 @@ public class TunerResourceManagerServiceTest { // let clientId2(prio:50) request for TS - should succeed TunerDemuxRequest request2 = tunerDemuxRequest(clientId2[0], Filter.TYPE_TS); - int[] demuxHandle2 = new int[1]; + long[] demuxHandle2 = new long[1]; assertThat(mTunerResourceManagerService .requestDemuxInternal(request2, demuxHandle2)).isTrue(); assertThat(demuxHandle2[0]).isEqualTo(0); @@ -951,7 +947,7 @@ public class TunerResourceManagerServiceTest { profile, null /*listener*/, clientId); assertThat(clientId[0]).isNotEqualTo(TunerResourceManagerService.INVALID_CLIENT_ID); - int[] desHandle = new int[1]; + long[] desHandle = new long[1]; TunerDescramblerRequest request = new TunerDescramblerRequest(); request.clientId = clientId[0]; assertThat(mTunerResourceManagerService.requestDescramblerInternal(request, desHandle)) @@ -1061,7 +1057,7 @@ public class TunerResourceManagerServiceTest { 1 /*exclusiveGroupId*/); /**** Init Lnb Resources ****/ - int[] lnbHandles = {1}; + long[] lnbHandles = {1}; mTunerResourceManagerService.setLnbInfoListInternal(lnbHandles); // Update frontend list in TRM @@ -1070,7 +1066,7 @@ public class TunerResourceManagerServiceTest { /**** Request Frontend ****/ // Predefined frontend request and array to save returned frontend handle - int[] frontendHandle = new int[1]; + long[] frontendHandle = new long[1]; TunerFrontendRequest request = tunerFrontendRequest( ownerClientId0[0] /*clientId*/, FrontendSettings.TYPE_DVBT); @@ -1080,12 +1076,9 @@ public class TunerResourceManagerServiceTest { .requestFrontendInternal(request, frontendHandle)) .isTrue(); assertThat(frontendHandle[0]).isEqualTo(infos[0].handle); - assertThat(mTunerResourceManagerService - .getClientProfile(ownerClientId0[0]) - .getInUseFrontendHandles()) - .isEqualTo(new HashSet<Integer>(Arrays.asList( - infos[0].handle, - infos[1].handle))); + assertThat(mTunerResourceManagerService.getClientProfile(ownerClientId0[0]) + .getInUseFrontendHandles()) + .isEqualTo(new HashSet<Long>(Arrays.asList(infos[0].handle, infos[1].handle))); /**** Share Frontend ****/ @@ -1113,24 +1106,15 @@ public class TunerResourceManagerServiceTest { shareClientId0[0], shareClientId1[0]))); // Verify in use frontend list in all the primary owner and share owner clients - assertThat(mTunerResourceManagerService - .getClientProfile(ownerClientId0[0]) - .getInUseFrontendHandles()) - .isEqualTo(new HashSet<Integer>(Arrays.asList( - infos[0].handle, - infos[1].handle))); - assertThat(mTunerResourceManagerService - .getClientProfile(shareClientId0[0]) - .getInUseFrontendHandles()) - .isEqualTo(new HashSet<Integer>(Arrays.asList( - infos[0].handle, - infos[1].handle))); - assertThat(mTunerResourceManagerService - .getClientProfile(shareClientId1[0]) - .getInUseFrontendHandles()) - .isEqualTo(new HashSet<Integer>(Arrays.asList( - infos[0].handle, - infos[1].handle))); + assertThat(mTunerResourceManagerService.getClientProfile(ownerClientId0[0]) + .getInUseFrontendHandles()) + .isEqualTo(new HashSet<Long>(Arrays.asList(infos[0].handle, infos[1].handle))); + assertThat(mTunerResourceManagerService.getClientProfile(shareClientId0[0]) + .getInUseFrontendHandles()) + .isEqualTo(new HashSet<Long>(Arrays.asList(infos[0].handle, infos[1].handle))); + assertThat(mTunerResourceManagerService.getClientProfile(shareClientId1[0]) + .getInUseFrontendHandles()) + .isEqualTo(new HashSet<Long>(Arrays.asList(infos[0].handle, infos[1].handle))); /**** Remove Frontend Share Owner ****/ @@ -1142,18 +1126,12 @@ public class TunerResourceManagerServiceTest { .getShareFeClientIds()) .isEqualTo(new HashSet<Integer>(Arrays.asList( shareClientId0[0]))); - assertThat(mTunerResourceManagerService - .getClientProfile(ownerClientId0[0]) - .getInUseFrontendHandles()) - .isEqualTo(new HashSet<Integer>(Arrays.asList( - infos[0].handle, - infos[1].handle))); - assertThat(mTunerResourceManagerService - .getClientProfile(shareClientId0[0]) - .getInUseFrontendHandles()) - .isEqualTo(new HashSet<Integer>(Arrays.asList( - infos[0].handle, - infos[1].handle))); + assertThat(mTunerResourceManagerService.getClientProfile(ownerClientId0[0]) + .getInUseFrontendHandles()) + .isEqualTo(new HashSet<Long>(Arrays.asList(infos[0].handle, infos[1].handle))); + assertThat(mTunerResourceManagerService.getClientProfile(shareClientId0[0]) + .getInUseFrontendHandles()) + .isEqualTo(new HashSet<Long>(Arrays.asList(infos[0].handle, infos[1].handle))); /**** Request Shared Frontend with Higher Priority Client ****/ @@ -1173,12 +1151,9 @@ public class TunerResourceManagerServiceTest { .getOwnerClientId()).isEqualTo(ownerClientId1[0]); assertThat(mTunerResourceManagerService.getFrontendResource(infos[1].handle) .getOwnerClientId()).isEqualTo(ownerClientId1[0]); - assertThat(mTunerResourceManagerService - .getClientProfile(ownerClientId1[0]) - .getInUseFrontendHandles()) - .isEqualTo(new HashSet<Integer>(Arrays.asList( - infos[0].handle, - infos[1].handle))); + assertThat(mTunerResourceManagerService.getClientProfile(ownerClientId1[0]) + .getInUseFrontendHandles()) + .isEqualTo(new HashSet<Long>(Arrays.asList(infos[0].handle, infos[1].handle))); assertThat(mTunerResourceManagerService .getClientProfile(ownerClientId0[0]) .getInUseFrontendHandles() @@ -1235,7 +1210,7 @@ public class TunerResourceManagerServiceTest { // Predefined Lnb request and handle array TunerLnbRequest requestLnb = new TunerLnbRequest(); requestLnb.clientId = shareClientId0[0]; - int[] lnbHandle = new int[1]; + long[] lnbHandle = new long[1]; // Request for an Lnb assertThat(mTunerResourceManagerService @@ -1264,15 +1239,13 @@ public class TunerResourceManagerServiceTest { .getInUseFrontendHandles() .isEmpty()) .isTrue(); - assertThat(mTunerResourceManagerService - .getClientProfile(shareClientId0[0]) - .getInUseLnbHandles()) - .isEqualTo(new HashSet<Integer>(Arrays.asList( - lnbHandles[0]))); + assertThat(mTunerResourceManagerService.getClientProfile(shareClientId0[0]) + .getInUseLnbHandles()) + .isEqualTo(new HashSet<Long>(Arrays.asList(lnbHandles[0]))); } private TunerFrontendInfo tunerFrontendInfo( - int handle, int frontendType, int exclusiveGroupId) { + long handle, int frontendType, int exclusiveGroupId) { TunerFrontendInfo info = new TunerFrontendInfo(); info.handle = handle; info.type = frontendType; |