Merge changes from topic "trm-demux-des" into rvc-dev
* changes: Add Descrambler resource management in Tuner Resource Manager Add demux resource management into Tuner Resource Manager
This commit is contained in:
@@ -19,6 +19,8 @@ package android.media.tv.tunerresourcemanager;
|
||||
import android.media.tv.tunerresourcemanager.CasSessionRequest;
|
||||
import android.media.tv.tunerresourcemanager.IResourcesReclaimListener;
|
||||
import android.media.tv.tunerresourcemanager.ResourceClientProfile;
|
||||
import android.media.tv.tunerresourcemanager.TunerDemuxRequest;
|
||||
import android.media.tv.tunerresourcemanager.TunerDescramblerRequest;
|
||||
import android.media.tv.tunerresourcemanager.TunerFrontendInfo;
|
||||
import android.media.tv.tunerresourcemanager.TunerFrontendRequest;
|
||||
import android.media.tv.tunerresourcemanager.TunerLnbRequest;
|
||||
@@ -147,6 +149,53 @@ interface ITunerResourceManager {
|
||||
*/
|
||||
void shareFrontend(in int selfClientId, in int targetClientId);
|
||||
|
||||
/*
|
||||
* This API is used by the Tuner framework to request an available demux from the TunerHAL.
|
||||
*
|
||||
* <p>There are three possible scenarios:
|
||||
* <ul>
|
||||
* <li>If there is demux available, the API would send the handle back.
|
||||
*
|
||||
* <li>If no Demux is available but the current request info can show higher priority than
|
||||
* other uses of demuxes, the API will send
|
||||
* {@link IResourcesReclaimListener#onReclaimResources()} to the {@link Tuner}. Tuner would
|
||||
* handle the resource reclaim on the holder of lower priority and notify the holder of its
|
||||
* resource loss.
|
||||
*
|
||||
* <li>If no demux can be granted, the API would return false.
|
||||
* <ul>
|
||||
*
|
||||
* @param request {@link TunerDemuxRequest} information of the current request.
|
||||
* @param demuxHandle a one-element array to return the granted demux handle.
|
||||
*
|
||||
* @return true if there is demux granted.
|
||||
*/
|
||||
boolean requestDemux(in TunerDemuxRequest request, out int[] demuxHandle);
|
||||
|
||||
/*
|
||||
* This API is used by the Tuner framework to request an available descrambler from the
|
||||
* TunerHAL.
|
||||
*
|
||||
* <p>There are three possible scenarios:
|
||||
* <ul>
|
||||
* <li>If there is descrambler available, the API would send the handle back.
|
||||
*
|
||||
* <li>If no Descrambler is available but the current request info can show higher priority than
|
||||
* other uses of Descrambler, the API will send
|
||||
* {@link IResourcesReclaimListener#onReclaimResources()} to the {@link Tuner}. Tuner would
|
||||
* handle the resource reclaim on the holder of lower priority and notify the holder of its
|
||||
* resource loss.
|
||||
*
|
||||
* <li>If no Descrambler can be granted, the API would return false.
|
||||
* <ul>
|
||||
*
|
||||
* @param request {@link TunerDescramblerRequest} information of the current request.
|
||||
* @param descramblerHandle a one-element array to return the granted descrambler handle.
|
||||
*
|
||||
* @return true if there is Descrambler granted.
|
||||
*/
|
||||
boolean requestDescrambler(in TunerDescramblerRequest request, out int[] descramblerHandle);
|
||||
|
||||
/*
|
||||
* This API is used by the Tuner framework to request an available Cas session. This session
|
||||
* needs to be under the CAS system with the id indicated in the {@code request}.
|
||||
@@ -209,6 +258,24 @@ interface ITunerResourceManager {
|
||||
*/
|
||||
void releaseFrontend(in int frontendId);
|
||||
|
||||
/*
|
||||
* Notifies the TRM that the Demux with the given handle was released.
|
||||
*
|
||||
* <p>Client must call this whenever it releases a demux.
|
||||
*
|
||||
* @param demuxHandle the handle of the released Tuner Demux.
|
||||
*/
|
||||
void releaseDemux(in int demuxHandle);
|
||||
|
||||
/*
|
||||
* Notifies the TRM that the Descrambler with the given handle was released.
|
||||
*
|
||||
* <p>Client must call this whenever it releases a descrambler.
|
||||
*
|
||||
* @param demuxHandle the handle of the released Tuner Descrambler.
|
||||
*/
|
||||
void releaseDescrambler(in int descramblerHandle);
|
||||
|
||||
/*
|
||||
* Notifies the TRM that the given Cas session has been released.
|
||||
*
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.media.tv.tunerresourcemanager;
|
||||
|
||||
/**
|
||||
* Information required to request a Tuner Demux.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
parcelable TunerDemuxRequest;
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.media.tv.tunerresourcemanager;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* Information required to request a Tuner Demux.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public final class TunerDemuxRequest implements Parcelable {
|
||||
static final String TAG = "TunerDemuxRequest";
|
||||
|
||||
public static final
|
||||
@NonNull
|
||||
Parcelable.Creator<TunerDemuxRequest> CREATOR =
|
||||
new Parcelable.Creator<TunerDemuxRequest>() {
|
||||
@Override
|
||||
public TunerDemuxRequest createFromParcel(Parcel source) {
|
||||
try {
|
||||
return new TunerDemuxRequest(source);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Exception creating TunerDemuxRequest from parcel", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public TunerDemuxRequest[] newArray(int size) {
|
||||
return new TunerDemuxRequest[size];
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Client id of the client that sends the request.
|
||||
*/
|
||||
private final int mClientId;
|
||||
|
||||
private TunerDemuxRequest(@NonNull Parcel source) {
|
||||
mClientId = source.readInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new {@link TunerDemuxRequest} with the given parameters.
|
||||
*
|
||||
* @param clientId id of the client.
|
||||
*/
|
||||
public TunerDemuxRequest(int clientId) {
|
||||
mClientId = clientId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the id of the client.
|
||||
*/
|
||||
public int getClientId() {
|
||||
return mClientId;
|
||||
}
|
||||
|
||||
// Parcelable
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder b = new StringBuilder(128);
|
||||
b.append("TunerDemuxRequest {clientId=").append(mClientId);
|
||||
b.append("}");
|
||||
return b.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||||
dest.writeInt(mClientId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.media.tv.tunerresourcemanager;
|
||||
|
||||
/**
|
||||
* Information required to request a Tuner Descrambler.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
parcelable TunerDescramblerRequest;
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.media.tv.tunerresourcemanager;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* Information required to request a Tuner Descrambler.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public final class TunerDescramblerRequest implements Parcelable {
|
||||
static final String TAG = "TunerDescramblerRequest";
|
||||
|
||||
public static final
|
||||
@NonNull
|
||||
Parcelable.Creator<TunerDescramblerRequest> CREATOR =
|
||||
new Parcelable.Creator<TunerDescramblerRequest>() {
|
||||
@Override
|
||||
public TunerDescramblerRequest createFromParcel(Parcel source) {
|
||||
try {
|
||||
return new TunerDescramblerRequest(source);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Exception creating TunerDescramblerRequest from parcel", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public TunerDescramblerRequest[] newArray(int size) {
|
||||
return new TunerDescramblerRequest[size];
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Client id of the client that sends the request.
|
||||
*/
|
||||
private final int mClientId;
|
||||
|
||||
private TunerDescramblerRequest(@NonNull Parcel source) {
|
||||
mClientId = source.readInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new {@link TunerDescramblerRequest} with the given parameters.
|
||||
*
|
||||
* @param clientId id of the client.
|
||||
*/
|
||||
public TunerDescramblerRequest(int clientId) {
|
||||
mClientId = clientId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the id of the client.
|
||||
*/
|
||||
public int getClientId() {
|
||||
return mClientId;
|
||||
}
|
||||
|
||||
// Parcelable
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder b = new StringBuilder(128);
|
||||
b.append("TunerDescramblerRequest {clientId=").append(mClientId);
|
||||
b.append("}");
|
||||
return b.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||||
dest.writeInt(mClientId);
|
||||
}
|
||||
}
|
||||
@@ -65,6 +65,7 @@ public class TunerResourceManager {
|
||||
public static final int INVALID_LNB_ID = -1;
|
||||
public static final int INVALID_TV_INPUT_DEVICE_ID = -1;
|
||||
public static final int INVALID_TV_INPUT_PORT_ID = -1;
|
||||
public static final int INVALID_RESOURCE_HANDLE = -1;
|
||||
|
||||
private final ITunerResourceManager mService;
|
||||
private final int mUserId;
|
||||
@@ -259,6 +260,71 @@ public class TunerResourceManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests a Tuner Demux resource.
|
||||
*
|
||||
* <p>There are three possible scenarios:
|
||||
* <ul>
|
||||
* <li>If there is Demux available, the API would send the handle back.
|
||||
*
|
||||
* <li>If no Demux is available but the current request has a higher priority than other uses of
|
||||
* demuxes, the API will send {@link IResourcesReclaimListener#onReclaimResources()} to the
|
||||
* {@link Tuner}. Tuner would handle the resource reclaim on the holder of lower priority and
|
||||
* notify the holder of its resource loss.
|
||||
*
|
||||
* <li>If no Demux system can be granted, the API would return false.
|
||||
* <ul>
|
||||
*
|
||||
* @param request {@link TunerDemuxRequest} information of the current request.
|
||||
* @param demuxHandle a one-element array to return the granted Demux handle.
|
||||
* If no Demux granted, this will return {@link #INVALID_RESOURCE_HANDLE}.
|
||||
*
|
||||
* @return true if there is Demux granted.
|
||||
*/
|
||||
public boolean requestDemux(@NonNull TunerDemuxRequest request, @NonNull int[] demuxHandle) {
|
||||
boolean result = false;
|
||||
try {
|
||||
result = mService.requestDemux(request, demuxHandle);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests a Tuner Descrambler resource.
|
||||
*
|
||||
* <p>There are three possible scenarios:
|
||||
* <ul>
|
||||
* <li>If there is Descrambler available, the API would send the handle back.
|
||||
*
|
||||
* <li>If no Descrambler is available but the current request has a higher priority than other
|
||||
* uses of descramblers, the API will send
|
||||
* {@link IResourcesReclaimListener#onReclaimResources()} to the {@link Tuner}. Tuner would
|
||||
* handle the resource reclaim on the holder of lower priority and notify the holder of its
|
||||
* resource loss.
|
||||
*
|
||||
* <li>If no Descrambler system can be granted, the API would return false.
|
||||
* <ul>
|
||||
*
|
||||
* @param request {@link TunerDescramblerRequest} information of the current request.
|
||||
* @param descramblerHandle a one-element array to return the granted Descrambler handle.
|
||||
* If no Descrambler granted, this will return
|
||||
* {@link #INVALID_RESOURCE_HANDLE}.
|
||||
*
|
||||
* @return true if there is Descrambler granted.
|
||||
*/
|
||||
public boolean requestDescrambler(@NonNull TunerDescramblerRequest request,
|
||||
@NonNull int[] descramblerHandle) {
|
||||
boolean result = false;
|
||||
try {
|
||||
result = mService.requestDescrambler(request, descramblerHandle);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests a CAS session resource.
|
||||
*
|
||||
@@ -344,6 +410,36 @@ public class TunerResourceManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies the TRM that the Demux with the given handle has been released.
|
||||
*
|
||||
* <p>Client must call this whenever it releases an Demux.
|
||||
*
|
||||
* @param demuxHandle the handle of the released Tuner Demux.
|
||||
*/
|
||||
public void releaseDemux(int demuxHandle) {
|
||||
try {
|
||||
mService.releaseDemux(demuxHandle);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies the TRM that the Descrambler with the given handle has been released.
|
||||
*
|
||||
* <p>Client must call this whenever it releases an Descrambler.
|
||||
*
|
||||
* @param descramblerHandle the handle of the released Tuner Descrambler.
|
||||
*/
|
||||
public void releaseDescrambler(int descramblerHandle) {
|
||||
try {
|
||||
mService.releaseDescrambler(descramblerHandle);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies the TRM that the given Cas session has been released.
|
||||
*
|
||||
|
||||
@@ -24,6 +24,8 @@ import android.media.tv.tunerresourcemanager.CasSessionRequest;
|
||||
import android.media.tv.tunerresourcemanager.IResourcesReclaimListener;
|
||||
import android.media.tv.tunerresourcemanager.ITunerResourceManager;
|
||||
import android.media.tv.tunerresourcemanager.ResourceClientProfile;
|
||||
import android.media.tv.tunerresourcemanager.TunerDemuxRequest;
|
||||
import android.media.tv.tunerresourcemanager.TunerDescramblerRequest;
|
||||
import android.media.tv.tunerresourcemanager.TunerFrontendInfo;
|
||||
import android.media.tv.tunerresourcemanager.TunerFrontendRequest;
|
||||
import android.media.tv.tunerresourcemanager.TunerLnbRequest;
|
||||
@@ -188,6 +190,24 @@ public class TunerResourceManagerService extends SystemService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean requestDemux(@NonNull TunerDemuxRequest request,
|
||||
@NonNull int[] demuxHandle) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "requestDemux(request=" + request + ")");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean requestDescrambler(@NonNull TunerDescramblerRequest request,
|
||||
@NonNull int[] descrambleHandle) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "requestDescrambler(request=" + request + ")");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean requestCasSession(
|
||||
@NonNull CasSessionRequest request, @NonNull int[] sessionResourceId) {
|
||||
@@ -213,6 +233,20 @@ public class TunerResourceManagerService extends SystemService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseDemux(int demuxHandle) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "releaseDemux(demuxHandle=" + demuxHandle + ")");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseDescrambler(int descramblerHandle) {
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "releaseDescrambler(descramblerHandle=" + descramblerHandle + ")");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseCasSession(int sessionResourceId) {
|
||||
if (DEBUG) {
|
||||
|
||||
Reference in New Issue
Block a user