Loading media/java/android/media/tv/tuner/Tuner.java +43 −45 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.media.tv.tuner.frontend.FrontendStatus.FrontendStatusType; import android.media.tv.tuner.frontend.OnTuneEventListener; import android.media.tv.tuner.frontend.ScanCallback; import android.media.tv.tunerresourcemanager.ResourceClientProfile; import android.media.tv.tunerresourcemanager.TunerFrontendRequest; import android.media.tv.tunerresourcemanager.TunerLnbRequest; import android.media.tv.tunerresourcemanager.TunerResourceManager; import android.os.Handler; Loading Loading @@ -195,15 +196,15 @@ public class Tuner implements AutoCloseable { private final TunerResourceManager mTunerResourceManager; private final int mClientId; private List<Integer> mFrontendIds; private Frontend mFrontend; private EventHandler mHandler; @Nullable private FrontendInfo mFrontendInfo; private Integer mFrontendHandle; private int mFrontendType = FrontendSettings.TYPE_UNDEFINED; private List<Integer> mLnbIds; private Lnb mLnb; private Integer mLnbId; private Integer mLnbHandle; @Nullable private OnTuneEventListener mOnTuneEventListener; @Nullable Loading Loading @@ -327,7 +328,7 @@ public class Tuner implements AutoCloseable { /** * Native method to open frontend of the given ID. */ private native Frontend nativeOpenFrontendById(int id); private native Frontend nativeOpenFrontendByHandle(int handle); private native int nativeTune(int type, FrontendSettings settings); private native int nativeStopTune(); private native int nativeScan(int settingsType, FrontendSettings settings, int scanType); Loading @@ -344,7 +345,7 @@ public class Tuner implements AutoCloseable { private native TimeFilter nativeOpenTimeFilter(); private native List<Integer> nativeGetLnbIds(); private native Lnb nativeOpenLnbById(int id); private native Lnb nativeOpenLnbByHandle(int handle); private native Lnb nativeOpenLnbByName(String name); private native Descrambler nativeOpenDescrambler(); Loading Loading @@ -476,7 +477,8 @@ public class Tuner implements AutoCloseable { @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Result public int tune(@NonNull FrontendSettings settings) { TunerUtils.checkTunerPermission(mContext); mFrontendType = settings.getType(); checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND); mFrontendInfo = null; return nativeTune(settings.getType(), settings); } Loading Loading @@ -511,12 +513,13 @@ public class Tuner implements AutoCloseable { @Result public int scan(@NonNull FrontendSettings settings, @ScanType int scanType, @NonNull @CallbackExecutor Executor executor, @NonNull ScanCallback scanCallback) { TunerUtils.checkTunerPermission(mContext); if (mScanCallback != null || mScanCallbackExecutor != null) { throw new IllegalStateException( "Scan already in progress. stopScan must be called before a new scan can be " + "started."); } mFrontendType = settings.getType(); checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND); mScanCallback = scanCallback; mScanCallbackExecutor = executor; mFrontendInfo = null; Loading Loading @@ -544,6 +547,16 @@ public class Tuner implements AutoCloseable { return retVal; } private boolean requestFrontend() { int[] feId = new int[1]; TunerFrontendRequest request = new TunerFrontendRequest(mClientId, mFrontendType); boolean granted = mTunerResourceManager.requestFrontend(request, feId); if (granted) { mFrontendHandle = feId[0]; } return granted; } /** * Sets Low-Noise Block downconverter (LNB) for satellite frontend. * Loading Loading @@ -677,22 +690,6 @@ public class Tuner implements AutoCloseable { return nativeGetDemuxCapabilities(); } private List<Integer> getFrontendIds() { mFrontendIds = nativeGetFrontendIds(); return mFrontendIds; } private Frontend openFrontendById(int id) { if (mFrontendIds == null) { mFrontendIds = getFrontendIds(); } if (!mFrontendIds.contains(id)) { return null; } mFrontend = nativeOpenFrontendById(id); return mFrontend; } private void onFrontendEvent(int eventType) { if (mOnTunerEventExecutor != null && mOnTuneEventListener != null) { mOnTunerEventExecutor.execute(() -> mOnTuneEventListener.onTuneEvent(eventType)); Loading Loading @@ -829,11 +826,9 @@ public class Tuner implements AutoCloseable { public Lnb openLnb(@CallbackExecutor @NonNull Executor executor, @NonNull LnbCallback cb) { Objects.requireNonNull(executor, "executor must not be null"); Objects.requireNonNull(cb, "LnbCallback must not be null"); TunerUtils.checkTunerPermission(mContext); if (mLnbId == null && !requestLnb()) { return null; } return nativeOpenLnbById(mLnbId); checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_LNB); // TODO: update JNI code for LNB handle, return nativeOpenLnbByHandle(mLnbHandle); } /** Loading Loading @@ -861,7 +856,7 @@ public class Tuner implements AutoCloseable { TunerLnbRequest request = new TunerLnbRequest(mClientId); boolean granted = mTunerResourceManager.requestLnb(request, lnbId); if (granted) { mLnbId = lnbId[0]; mLnbHandle = lnbId[0]; } return granted; } Loading @@ -876,22 +871,6 @@ public class Tuner implements AutoCloseable { return nativeOpenTimeFilter(); } private List<Integer> getLnbIds() { mLnbIds = nativeGetLnbIds(); return mLnbIds; } private Lnb openLnbById(int id) { if (mLnbIds == null) { mLnbIds = getLnbIds(); } if (!mLnbIds.contains(id)) { return null; } mLnb = nativeOpenLnbById(id); return mLnb; } private void onLnbEvent(int eventType) { if (mHandler != null) { mHandler.sendMessage(mHandler.obtainMessage(MSG_ON_LNB_EVENT, eventType, 0)); Loading Loading @@ -955,4 +934,23 @@ public class Tuner implements AutoCloseable { DvrPlayback dvr = nativeOpenDvrPlayback(bufferSize); return dvr; } private boolean checkResource(int resourceType) { // TODO: demux and descrambler switch (resourceType) { case TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND: { if (mFrontendHandle == null && !requestFrontend()) { return false; } break; } case TunerResourceManager.TUNER_RESOURCE_TYPE_LNB: { if (mLnbHandle == null && !requestLnb()) { return false; } break; } } return true; } } media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java +21 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.media.tv.tunerresourcemanager; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresFeature; Loading @@ -27,6 +28,8 @@ import android.os.Binder; import android.os.RemoteException; import android.util.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.concurrent.Executor; /** Loading Loading @@ -61,6 +64,24 @@ public class TunerResourceManager { private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); public static final int INVALID_RESOURCE_HANDLE = -1; /** * Tuner resource type to help generate resource handle */ @IntDef({ TUNER_RESOURCE_TYPE_FRONTEND, TUNER_RESOURCE_TYPE_DEMUX, TUNER_RESOURCE_TYPE_DESCRAMBLER, TUNER_RESOURCE_TYPE_LNB, TUNER_RESOURCE_TYPE_CAS_SESSION, }) @Retention(RetentionPolicy.SOURCE) public @interface TunerResourceType {} public static final int TUNER_RESOURCE_TYPE_FRONTEND = 0; public static final int TUNER_RESOURCE_TYPE_DEMUX = 1; public static final int TUNER_RESOURCE_TYPE_DESCRAMBLER = 2; public static final int TUNER_RESOURCE_TYPE_LNB = 3; public static final int TUNER_RESOURCE_TYPE_CAS_SESSION = 4; private final ITunerResourceManager mService; private final int mUserId; Loading media/jni/android_media_tv_Tuner.cpp +13 −6 Original line number Diff line number Diff line Loading @@ -1410,6 +1410,10 @@ static sp<IDescrambler> getDescrambler(JNIEnv *env, jobject descrambler) { return (IDescrambler *)env->GetLongField(descrambler, gFields.descramblerContext); } static uint32_t getResourceIdFromHandle(jint handle) { return (handle & 0x00ff0000) >> 16; } static DemuxPid getDemuxPid(int pidType, int pid) { DemuxPid demuxPid; if ((int)pidType == 1) { Loading Loading @@ -1968,8 +1972,10 @@ 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_id(JNIEnv *env, jobject thiz, jint id) { static jobject android_media_tv_Tuner_open_frontend_by_handle( JNIEnv *env, jobject thiz, jint handle) { sp<JTuner> tuner = getTuner(env, thiz); uint32_t id = getResourceIdFromHandle(handle); return tuner->openFrontendById(id); } Loading Loading @@ -2045,8 +2051,9 @@ static jobject android_media_tv_Tuner_get_lnb_ids(JNIEnv *env, jobject thiz) { return tuner->getLnbIds(); } static jobject android_media_tv_Tuner_open_lnb_by_id(JNIEnv *env, jobject thiz, jint id) { static jobject android_media_tv_Tuner_open_lnb_by_handle(JNIEnv *env, jobject thiz, jint handle) { sp<JTuner> tuner = getTuner(env, thiz); uint32_t id = getResourceIdFromHandle(handle); return tuner->openLnbById(id); } Loading Loading @@ -2924,8 +2931,8 @@ static const JNINativeMethod gTunerMethods[] = { { "nativeSetup", "()V", (void *)android_media_tv_Tuner_native_setup }, { "nativeGetFrontendIds", "()Ljava/util/List;", (void *)android_media_tv_Tuner_get_frontend_ids }, { "nativeOpenFrontendById", "(I)Landroid/media/tv/tuner/Tuner$Frontend;", (void *)android_media_tv_Tuner_open_frontend_by_id }, { "nativeOpenFrontendByHandle", "(I)Landroid/media/tv/tuner/Tuner$Frontend;", (void *)android_media_tv_Tuner_open_frontend_by_handle }, { "nativeTune", "(ILandroid/media/tv/tuner/frontend/FrontendSettings;)I", (void *)android_media_tv_Tuner_tune }, { "nativeStopTune", "()I", (void *)android_media_tv_Tuner_stop_tune }, Loading @@ -2950,8 +2957,8 @@ static const JNINativeMethod gTunerMethods[] = { (void *)android_media_tv_Tuner_open_time_filter }, { "nativeGetLnbIds", "()Ljava/util/List;", (void *)android_media_tv_Tuner_get_lnb_ids }, { "nativeOpenLnbById", "(I)Landroid/media/tv/tuner/Lnb;", (void *)android_media_tv_Tuner_open_lnb_by_id }, { "nativeOpenLnbByHandle", "(I)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 }, { "nativeOpenDescrambler", "()Landroid/media/tv/tuner/Descrambler;", Loading services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java +7 −27 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.tv.tunerresourcemanager; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; Loading @@ -41,8 +40,6 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.server.SystemService; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.HashMap; import java.util.HashSet; import java.util.Map; Loading Loading @@ -79,25 +76,6 @@ public class TunerResourceManagerService extends SystemService { // Used to synchronize the access to the service. private final Object mLock = new Object(); /** * Tuner resource type to help generate resource handle */ @IntDef({ TUNER_RESOURCE_TYPE_FRONTEND, TUNER_RESOURCE_TYPE_DEMUX, TUNER_RESOURCE_TYPE_DESCRAMBLER, TUNER_RESOURCE_TYPE_LNB, TUNER_RESOURCE_TYPE_CAS_SESSION, }) @Retention(RetentionPolicy.SOURCE) public @interface TunerResourceType {} public static final int TUNER_RESOURCE_TYPE_FRONTEND = 0; public static final int TUNER_RESOURCE_TYPE_DEMUX = 1; public static final int TUNER_RESOURCE_TYPE_DESCRAMBLER = 2; public static final int TUNER_RESOURCE_TYPE_LNB = 3; public static final int TUNER_RESOURCE_TYPE_CAS_SESSION = 4; public TunerResourceManagerService(@Nullable Context context) { super(context); } Loading Loading @@ -465,7 +443,7 @@ public class TunerResourceManagerService extends SystemService { // Grant frontend when there is unused resource. if (grantingFrontendId > -1) { frontendHandle[0] = generateResourceHandle( TUNER_RESOURCE_TYPE_FRONTEND, grantingFrontendId); TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND, grantingFrontendId); updateFrontendClientMappingOnNewGrant(grantingFrontendId, request.getClientId()); return true; } Loading @@ -474,7 +452,7 @@ public class TunerResourceManagerService extends SystemService { // request client has higher priority. if (inUseLowestPriorityFrId > -1 && (requestClient.getPriority() > currentLowestPriority)) { frontendHandle[0] = generateResourceHandle( TUNER_RESOURCE_TYPE_FRONTEND, inUseLowestPriorityFrId); TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND, inUseLowestPriorityFrId); reclaimFrontendResource(getFrontendResource( inUseLowestPriorityFrId).getOwnerClientId()); updateFrontendClientMappingOnNewGrant(inUseLowestPriorityFrId, request.getClientId()); Loading @@ -489,7 +467,7 @@ public class TunerResourceManagerService extends SystemService { if (DEBUG) { Slog.d(TAG, "requestDemux(request=" + request + ")"); } demuxHandle[0] = generateResourceHandle(TUNER_RESOURCE_TYPE_DEMUX, 0); demuxHandle[0] = generateResourceHandle(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX, 0); return true; } Loading @@ -498,7 +476,8 @@ public class TunerResourceManagerService extends SystemService { if (DEBUG) { Slog.d(TAG, "requestDescrambler(request=" + request + ")"); } descramblerHandle[0] = generateResourceHandle(TUNER_RESOURCE_TYPE_DESCRAMBLER, 0); descramblerHandle[0] = generateResourceHandle(TunerResourceManager.TUNER_RESOURCE_TYPE_DESCRAMBLER, 0); return true; } Loading Loading @@ -664,7 +643,8 @@ public class TunerResourceManagerService extends SystemService { return mClientProfiles.keySet().contains(clientId); } private int generateResourceHandle(@TunerResourceType int resourceType, int resourceId) { private int generateResourceHandle( @TunerResourceManager.TunerResourceType int resourceType, int resourceId) { return (resourceType & 0x000000ff) << 24 | (resourceId << 16) | (mResourceRequestCount++ & 0xffff); Loading Loading
media/java/android/media/tv/tuner/Tuner.java +43 −45 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.media.tv.tuner.frontend.FrontendStatus.FrontendStatusType; import android.media.tv.tuner.frontend.OnTuneEventListener; import android.media.tv.tuner.frontend.ScanCallback; import android.media.tv.tunerresourcemanager.ResourceClientProfile; import android.media.tv.tunerresourcemanager.TunerFrontendRequest; import android.media.tv.tunerresourcemanager.TunerLnbRequest; import android.media.tv.tunerresourcemanager.TunerResourceManager; import android.os.Handler; Loading Loading @@ -195,15 +196,15 @@ public class Tuner implements AutoCloseable { private final TunerResourceManager mTunerResourceManager; private final int mClientId; private List<Integer> mFrontendIds; private Frontend mFrontend; private EventHandler mHandler; @Nullable private FrontendInfo mFrontendInfo; private Integer mFrontendHandle; private int mFrontendType = FrontendSettings.TYPE_UNDEFINED; private List<Integer> mLnbIds; private Lnb mLnb; private Integer mLnbId; private Integer mLnbHandle; @Nullable private OnTuneEventListener mOnTuneEventListener; @Nullable Loading Loading @@ -327,7 +328,7 @@ public class Tuner implements AutoCloseable { /** * Native method to open frontend of the given ID. */ private native Frontend nativeOpenFrontendById(int id); private native Frontend nativeOpenFrontendByHandle(int handle); private native int nativeTune(int type, FrontendSettings settings); private native int nativeStopTune(); private native int nativeScan(int settingsType, FrontendSettings settings, int scanType); Loading @@ -344,7 +345,7 @@ public class Tuner implements AutoCloseable { private native TimeFilter nativeOpenTimeFilter(); private native List<Integer> nativeGetLnbIds(); private native Lnb nativeOpenLnbById(int id); private native Lnb nativeOpenLnbByHandle(int handle); private native Lnb nativeOpenLnbByName(String name); private native Descrambler nativeOpenDescrambler(); Loading Loading @@ -476,7 +477,8 @@ public class Tuner implements AutoCloseable { @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Result public int tune(@NonNull FrontendSettings settings) { TunerUtils.checkTunerPermission(mContext); mFrontendType = settings.getType(); checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND); mFrontendInfo = null; return nativeTune(settings.getType(), settings); } Loading Loading @@ -511,12 +513,13 @@ public class Tuner implements AutoCloseable { @Result public int scan(@NonNull FrontendSettings settings, @ScanType int scanType, @NonNull @CallbackExecutor Executor executor, @NonNull ScanCallback scanCallback) { TunerUtils.checkTunerPermission(mContext); if (mScanCallback != null || mScanCallbackExecutor != null) { throw new IllegalStateException( "Scan already in progress. stopScan must be called before a new scan can be " + "started."); } mFrontendType = settings.getType(); checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND); mScanCallback = scanCallback; mScanCallbackExecutor = executor; mFrontendInfo = null; Loading Loading @@ -544,6 +547,16 @@ public class Tuner implements AutoCloseable { return retVal; } private boolean requestFrontend() { int[] feId = new int[1]; TunerFrontendRequest request = new TunerFrontendRequest(mClientId, mFrontendType); boolean granted = mTunerResourceManager.requestFrontend(request, feId); if (granted) { mFrontendHandle = feId[0]; } return granted; } /** * Sets Low-Noise Block downconverter (LNB) for satellite frontend. * Loading Loading @@ -677,22 +690,6 @@ public class Tuner implements AutoCloseable { return nativeGetDemuxCapabilities(); } private List<Integer> getFrontendIds() { mFrontendIds = nativeGetFrontendIds(); return mFrontendIds; } private Frontend openFrontendById(int id) { if (mFrontendIds == null) { mFrontendIds = getFrontendIds(); } if (!mFrontendIds.contains(id)) { return null; } mFrontend = nativeOpenFrontendById(id); return mFrontend; } private void onFrontendEvent(int eventType) { if (mOnTunerEventExecutor != null && mOnTuneEventListener != null) { mOnTunerEventExecutor.execute(() -> mOnTuneEventListener.onTuneEvent(eventType)); Loading Loading @@ -829,11 +826,9 @@ public class Tuner implements AutoCloseable { public Lnb openLnb(@CallbackExecutor @NonNull Executor executor, @NonNull LnbCallback cb) { Objects.requireNonNull(executor, "executor must not be null"); Objects.requireNonNull(cb, "LnbCallback must not be null"); TunerUtils.checkTunerPermission(mContext); if (mLnbId == null && !requestLnb()) { return null; } return nativeOpenLnbById(mLnbId); checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_LNB); // TODO: update JNI code for LNB handle, return nativeOpenLnbByHandle(mLnbHandle); } /** Loading Loading @@ -861,7 +856,7 @@ public class Tuner implements AutoCloseable { TunerLnbRequest request = new TunerLnbRequest(mClientId); boolean granted = mTunerResourceManager.requestLnb(request, lnbId); if (granted) { mLnbId = lnbId[0]; mLnbHandle = lnbId[0]; } return granted; } Loading @@ -876,22 +871,6 @@ public class Tuner implements AutoCloseable { return nativeOpenTimeFilter(); } private List<Integer> getLnbIds() { mLnbIds = nativeGetLnbIds(); return mLnbIds; } private Lnb openLnbById(int id) { if (mLnbIds == null) { mLnbIds = getLnbIds(); } if (!mLnbIds.contains(id)) { return null; } mLnb = nativeOpenLnbById(id); return mLnb; } private void onLnbEvent(int eventType) { if (mHandler != null) { mHandler.sendMessage(mHandler.obtainMessage(MSG_ON_LNB_EVENT, eventType, 0)); Loading Loading @@ -955,4 +934,23 @@ public class Tuner implements AutoCloseable { DvrPlayback dvr = nativeOpenDvrPlayback(bufferSize); return dvr; } private boolean checkResource(int resourceType) { // TODO: demux and descrambler switch (resourceType) { case TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND: { if (mFrontendHandle == null && !requestFrontend()) { return false; } break; } case TunerResourceManager.TUNER_RESOURCE_TYPE_LNB: { if (mLnbHandle == null && !requestLnb()) { return false; } break; } } return true; } }
media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java +21 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.media.tv.tunerresourcemanager; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresFeature; Loading @@ -27,6 +28,8 @@ import android.os.Binder; import android.os.RemoteException; import android.util.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.concurrent.Executor; /** Loading Loading @@ -61,6 +64,24 @@ public class TunerResourceManager { private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); public static final int INVALID_RESOURCE_HANDLE = -1; /** * Tuner resource type to help generate resource handle */ @IntDef({ TUNER_RESOURCE_TYPE_FRONTEND, TUNER_RESOURCE_TYPE_DEMUX, TUNER_RESOURCE_TYPE_DESCRAMBLER, TUNER_RESOURCE_TYPE_LNB, TUNER_RESOURCE_TYPE_CAS_SESSION, }) @Retention(RetentionPolicy.SOURCE) public @interface TunerResourceType {} public static final int TUNER_RESOURCE_TYPE_FRONTEND = 0; public static final int TUNER_RESOURCE_TYPE_DEMUX = 1; public static final int TUNER_RESOURCE_TYPE_DESCRAMBLER = 2; public static final int TUNER_RESOURCE_TYPE_LNB = 3; public static final int TUNER_RESOURCE_TYPE_CAS_SESSION = 4; private final ITunerResourceManager mService; private final int mUserId; Loading
media/jni/android_media_tv_Tuner.cpp +13 −6 Original line number Diff line number Diff line Loading @@ -1410,6 +1410,10 @@ static sp<IDescrambler> getDescrambler(JNIEnv *env, jobject descrambler) { return (IDescrambler *)env->GetLongField(descrambler, gFields.descramblerContext); } static uint32_t getResourceIdFromHandle(jint handle) { return (handle & 0x00ff0000) >> 16; } static DemuxPid getDemuxPid(int pidType, int pid) { DemuxPid demuxPid; if ((int)pidType == 1) { Loading Loading @@ -1968,8 +1972,10 @@ 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_id(JNIEnv *env, jobject thiz, jint id) { static jobject android_media_tv_Tuner_open_frontend_by_handle( JNIEnv *env, jobject thiz, jint handle) { sp<JTuner> tuner = getTuner(env, thiz); uint32_t id = getResourceIdFromHandle(handle); return tuner->openFrontendById(id); } Loading Loading @@ -2045,8 +2051,9 @@ static jobject android_media_tv_Tuner_get_lnb_ids(JNIEnv *env, jobject thiz) { return tuner->getLnbIds(); } static jobject android_media_tv_Tuner_open_lnb_by_id(JNIEnv *env, jobject thiz, jint id) { static jobject android_media_tv_Tuner_open_lnb_by_handle(JNIEnv *env, jobject thiz, jint handle) { sp<JTuner> tuner = getTuner(env, thiz); uint32_t id = getResourceIdFromHandle(handle); return tuner->openLnbById(id); } Loading Loading @@ -2924,8 +2931,8 @@ static const JNINativeMethod gTunerMethods[] = { { "nativeSetup", "()V", (void *)android_media_tv_Tuner_native_setup }, { "nativeGetFrontendIds", "()Ljava/util/List;", (void *)android_media_tv_Tuner_get_frontend_ids }, { "nativeOpenFrontendById", "(I)Landroid/media/tv/tuner/Tuner$Frontend;", (void *)android_media_tv_Tuner_open_frontend_by_id }, { "nativeOpenFrontendByHandle", "(I)Landroid/media/tv/tuner/Tuner$Frontend;", (void *)android_media_tv_Tuner_open_frontend_by_handle }, { "nativeTune", "(ILandroid/media/tv/tuner/frontend/FrontendSettings;)I", (void *)android_media_tv_Tuner_tune }, { "nativeStopTune", "()I", (void *)android_media_tv_Tuner_stop_tune }, Loading @@ -2950,8 +2957,8 @@ static const JNINativeMethod gTunerMethods[] = { (void *)android_media_tv_Tuner_open_time_filter }, { "nativeGetLnbIds", "()Ljava/util/List;", (void *)android_media_tv_Tuner_get_lnb_ids }, { "nativeOpenLnbById", "(I)Landroid/media/tv/tuner/Lnb;", (void *)android_media_tv_Tuner_open_lnb_by_id }, { "nativeOpenLnbByHandle", "(I)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 }, { "nativeOpenDescrambler", "()Landroid/media/tv/tuner/Descrambler;", Loading
services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java +7 −27 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.tv.tunerresourcemanager; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; Loading @@ -41,8 +40,6 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.server.SystemService; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.HashMap; import java.util.HashSet; import java.util.Map; Loading Loading @@ -79,25 +76,6 @@ public class TunerResourceManagerService extends SystemService { // Used to synchronize the access to the service. private final Object mLock = new Object(); /** * Tuner resource type to help generate resource handle */ @IntDef({ TUNER_RESOURCE_TYPE_FRONTEND, TUNER_RESOURCE_TYPE_DEMUX, TUNER_RESOURCE_TYPE_DESCRAMBLER, TUNER_RESOURCE_TYPE_LNB, TUNER_RESOURCE_TYPE_CAS_SESSION, }) @Retention(RetentionPolicy.SOURCE) public @interface TunerResourceType {} public static final int TUNER_RESOURCE_TYPE_FRONTEND = 0; public static final int TUNER_RESOURCE_TYPE_DEMUX = 1; public static final int TUNER_RESOURCE_TYPE_DESCRAMBLER = 2; public static final int TUNER_RESOURCE_TYPE_LNB = 3; public static final int TUNER_RESOURCE_TYPE_CAS_SESSION = 4; public TunerResourceManagerService(@Nullable Context context) { super(context); } Loading Loading @@ -465,7 +443,7 @@ public class TunerResourceManagerService extends SystemService { // Grant frontend when there is unused resource. if (grantingFrontendId > -1) { frontendHandle[0] = generateResourceHandle( TUNER_RESOURCE_TYPE_FRONTEND, grantingFrontendId); TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND, grantingFrontendId); updateFrontendClientMappingOnNewGrant(grantingFrontendId, request.getClientId()); return true; } Loading @@ -474,7 +452,7 @@ public class TunerResourceManagerService extends SystemService { // request client has higher priority. if (inUseLowestPriorityFrId > -1 && (requestClient.getPriority() > currentLowestPriority)) { frontendHandle[0] = generateResourceHandle( TUNER_RESOURCE_TYPE_FRONTEND, inUseLowestPriorityFrId); TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND, inUseLowestPriorityFrId); reclaimFrontendResource(getFrontendResource( inUseLowestPriorityFrId).getOwnerClientId()); updateFrontendClientMappingOnNewGrant(inUseLowestPriorityFrId, request.getClientId()); Loading @@ -489,7 +467,7 @@ public class TunerResourceManagerService extends SystemService { if (DEBUG) { Slog.d(TAG, "requestDemux(request=" + request + ")"); } demuxHandle[0] = generateResourceHandle(TUNER_RESOURCE_TYPE_DEMUX, 0); demuxHandle[0] = generateResourceHandle(TunerResourceManager.TUNER_RESOURCE_TYPE_DEMUX, 0); return true; } Loading @@ -498,7 +476,8 @@ public class TunerResourceManagerService extends SystemService { if (DEBUG) { Slog.d(TAG, "requestDescrambler(request=" + request + ")"); } descramblerHandle[0] = generateResourceHandle(TUNER_RESOURCE_TYPE_DESCRAMBLER, 0); descramblerHandle[0] = generateResourceHandle(TunerResourceManager.TUNER_RESOURCE_TYPE_DESCRAMBLER, 0); return true; } Loading Loading @@ -664,7 +643,8 @@ public class TunerResourceManagerService extends SystemService { return mClientProfiles.keySet().contains(clientId); } private int generateResourceHandle(@TunerResourceType int resourceType, int resourceId) { private int generateResourceHandle( @TunerResourceManager.TunerResourceType int resourceType, int resourceId) { return (resourceType & 0x000000ff) << 24 | (resourceId << 16) | (mResourceRequestCount++ & 0xffff); Loading