diff options
| author | 2020-01-14 13:56:03 -0800 | |
|---|---|---|
| committer | 2020-01-16 12:55:27 -0800 | |
| commit | 43a8d489421f61ed0cdafc6470c076ff76efb9e8 (patch) | |
| tree | 9e3abe2c59ede59ee0fc67c7ea576a6faf82486d | |
| parent | 3c01d0cdfe6464191a4cb0350c7e4bf2181d63b4 (diff) | |
Cleanup Tuner.java
Test: make
Change-Id: Ic089bb2a38e2a46482c89e93281bb20c476f3c25
| -rw-r--r-- | media/java/android/media/tv/tuner/Tuner.java | 177 |
1 files changed, 156 insertions, 21 deletions
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index 5a72b221ce08..18969ae3279c 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -16,6 +16,7 @@ package android.media.tv.tuner; +import android.annotation.BytesLong; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; @@ -27,6 +28,8 @@ import android.media.tv.tuner.TunerConstants.FilterSubtype; import android.media.tv.tuner.TunerConstants.FrontendScanType; import android.media.tv.tuner.TunerConstants.Result; import android.media.tv.tuner.dvr.Dvr; +import android.media.tv.tuner.dvr.DvrCallback; +import android.media.tv.tuner.dvr.DvrSettings; import android.media.tv.tuner.filter.FilterConfiguration.FilterType; import android.media.tv.tuner.filter.FilterEvent; import android.media.tv.tuner.filter.TimeFilter; @@ -88,6 +91,31 @@ public final class Tuner implements AutoCloseable { nativeSetup(); } + /** + * Constructs a Tuner instance. + * + * @param context the context of the caller. + * @param tvInputSessionId the session ID of the TV input. + * @param useCase the use case of this Tuner instance. + * + * @hide + * TODO: replace the other constructor + */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + public Tuner(@NonNull Context context, @NonNull String tvInputSessionId, int useCase) { + mContext = context; + } + + /** + * Shares the frontend resource with another Tuner instance + * + * @param tuner the Tuner instance to share frontend resource with. + * + * @hide + */ + public void shareFrontend(@NonNull Tuner tuner) { } + + private long mNativeContext; // used by native jMediaTuner /** @hide */ @@ -125,7 +153,7 @@ public final class Tuner implements AutoCloseable { private native int nativeConnectCiCam(int ciCamId); private native int nativeDisconnectCiCam(); private native FrontendInfo nativeGetFrontendInfo(int id); - private native Filter nativeOpenFilter(int type, int subType, int bufferSize); + private native Filter nativeOpenFilter(int type, int subType, long bufferSize); private native TimeFilter nativeOpenTimeFilter(); private native List<Integer> nativeGetLnbIds(); @@ -133,7 +161,7 @@ public final class Tuner implements AutoCloseable { private native Descrambler nativeOpenDescrambler(); - private native Dvr nativeOpenDvr(int type, int bufferSize); + private native Dvr nativeOpenDvr(int type, long bufferSize); private static native DemuxCapabilities nativeGetDemuxCapabilities(); @@ -159,6 +187,21 @@ public final class Tuner implements AutoCloseable { void onFilterStatusChanged(@NonNull Filter filter, @FilterStatus int status); } + + /** + * Listener for resource lost. + * + * @hide + */ + public interface OnResourceLostListener { + /** + * Invoked when resource lost. + * + * @param tuner the tuner instance whose resource is being reclaimed. + */ + void onResourceLost(@NonNull Tuner tuner); + } + @Nullable private EventHandler createEventHandler() { Looper looper; @@ -221,23 +264,32 @@ public final class Tuner implements AutoCloseable { /** * Stops a previous tuning. * - * If the method completes successfully the frontend is no longer tuned and no data + * <p>If the method completes successfully, the frontend is no longer tuned and no data * will be sent to attached filters. * * @return result status of the operation. + * * @hide */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + @Result public int stopTune() { + TunerUtils.checkTunerPermission(mContext); return nativeStopTune(); } /** * Scan channels. + * + * @param settings A {@link FrontendSettings} to configure the frontend. + * @param scanType The scan type. + * * @hide */ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int scan(@NonNull FrontendSettings settings, @FrontendScanType int scanType, @NonNull @CallbackExecutor Executor executor, @NonNull ScanCallback scanCallback) { + TunerUtils.checkTunerPermission(mContext); mScanCallback = scanCallback; mScanCallbackExecutor = executor; return nativeScan(settings.getType(), settings, scanType); @@ -255,6 +307,7 @@ public final class Tuner implements AutoCloseable { * @hide */ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + @Result public int stopScan() { TunerUtils.checkTunerPermission(mContext); int retVal = nativeStopScan(); @@ -266,37 +319,44 @@ public final class Tuner implements AutoCloseable { /** * Sets Low-Noise Block downconverter (LNB) for satellite frontend. * - * This assigns a hardware LNB resource to the satellite tuner. It can be + * <p>This assigns a hardware LNB resource to the satellite tuner. It can be * called multiple times to update LNB assignment. * * @param lnb the LNB instance. * * @return result status of the operation. + * * @hide */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + @Result public int setLnb(@NonNull Lnb lnb) { + TunerUtils.checkTunerPermission(mContext); return nativeSetLnb(lnb.mId); } /** * Enable or Disable Low Noise Amplifier (LNA). * - * @param enable true to activate LNA module; false to deactivate LNA + * @param enable {@code true} to activate LNA module; {@code false} to deactivate LNA. * * @return result status of the operation. + * * @hide */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + @Result public int setLna(boolean enable) { + TunerUtils.checkTunerPermission(mContext); return nativeSetLna(enable); } /** * Gets the statuses of the frontend. * - * This retrieve the statuses of the frontend for given status types. - * - * @param statusTypes an array of status type which the caller request. + * <p>This retrieve the statuses of the frontend for given status types. * + * @param statusTypes an array of status types which the caller requests. * @return statuses which response the caller's requests. * @hide */ @@ -310,59 +370,77 @@ public final class Tuner implements AutoCloseable { * * @param filter the filter instance for the hardware sync ID. * @return the id of hardware A/V sync. + * * @hide */ - public int getAvSyncHwId(Filter filter) { + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + public int getAvSyncHwId(@NonNull Filter filter) { + TunerUtils.checkTunerPermission(mContext); return nativeGetAvSyncHwId(filter); } + /** - * Gets the current timestamp for A/V sync + * Gets the current timestamp for Audio/Video sync * - * The timestamp is maintained by hardware. The timestamp based on 90KHz, and it's format is the - * same as PTS (Presentation Time Stamp). + * <p>The timestamp is maintained by hardware. The timestamp based on 90KHz, and it's format is + * the same as PTS (Presentation Time Stamp). * * @param avSyncHwId the hardware id of A/V sync. * @return the current timestamp of hardware A/V sync. + * * @hide */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public long getAvSyncTime(int avSyncHwId) { + TunerUtils.checkTunerPermission(mContext); return nativeGetAvSyncTime(avSyncHwId); } - /** * Connects Conditional Access Modules (CAM) through Common Interface (CI) * - * The demux uses the output from the frontend as the input by default, and must change to use - * the output from CI-CAM as the input after this call. + * <p>The demux uses the output from the frontend as the input by default, and must change to + * use the output from CI-CAM as the input after this call. * * @param ciCamId specify CI-CAM Id to connect. * @return result status of the operation. + * * @hide */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Result public int connectCiCam(int ciCamId) { + TunerUtils.checkTunerPermission(mContext); return nativeConnectCiCam(ciCamId); } /** * Disconnects Conditional Access Modules (CAM) * - * The demux will use the output from the frontend as the input after this call. + * <p>The demux will use the output from the frontend as the input after this call. * * @return result status of the operation. + * * @hide */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Result public int disconnectCiCam() { + TunerUtils.checkTunerPermission(mContext); return nativeDisconnectCiCam(); } /** - * Retrieve the frontend information. + * Gets the frontend information. + * + * @return The frontend information. {@code null} if the operation failed. + * * @hide */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + @Nullable public FrontendInfo getFrontendInfo() { + TunerUtils.checkTunerPermission(mContext); if (mFrontend == null) { throw new IllegalStateException("frontend is not initialized"); } @@ -370,10 +448,13 @@ public final class Tuner implements AutoCloseable { } /** - * Gets frontend ID. + * Gets the frontend ID. + * * @hide */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int getFrontendId() { + TunerUtils.checkTunerPermission(mContext); if (mFrontend == null) { throw new IllegalStateException("frontend is not initialized"); } @@ -382,6 +463,7 @@ public final class Tuner implements AutoCloseable { /** * Gets Demux capabilities. + * * @hide */ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @@ -424,8 +506,26 @@ public final class Tuner implements AutoCloseable { private Filter() {} } - private Filter openFilter(@FilterType int mainType, @FilterSubtype int subType, int bufferSize, - FilterCallback cb) { + /** + * Opens a filter object based on the given types and buffer size. + * + * @param mainType the main type of the filter. + * @param subType the subtype of the filter. + * @param bufferSize the buffer size of the filter to be opened in bytes. The buffer holds the + * data output from the filter. + * @param cb the callback to receive notifications from filter. + * @param executor the executor on which callback will be invoked. The default event handler + * executor is used if it's {@code null}. + * @return the opened filter. {@code null} if the operation failed. + * + * @hide + */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + @Nullable + public Filter openFilter(@FilterType int mainType, @FilterSubtype int subType, + @BytesLong long bufferSize, @Nullable FilterCallback cb, + @CallbackExecutor @Nullable Executor executor) { + TunerUtils.checkTunerPermission(mContext); Filter filter = nativeOpenFilter( mainType, TunerUtils.getFilterSubtype(mainType, subType), bufferSize); if (filter != null) { @@ -437,6 +537,24 @@ public final class Tuner implements AutoCloseable { return filter; } + /** + * Opens an LNB (low-noise block downconverter) object. + * + * @param cb the callback to receive notifications from LNB. + * @param executor the executor on which callback will be invoked. The default event handler + * executor is used if it's {@code null}. + * @return the opened LNB object. {@code null} if the operation failed. + * + * @hide + */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + @Nullable + public Lnb openLnb(LnbCallback cb, @CallbackExecutor @Nullable Executor executor) { + TunerUtils.checkTunerPermission(mContext); + // TODO: use resource manager to get LNB ID. + return new Lnb(0); + } + private List<Integer> getLnbIds() { mLnbIds = nativeGetLnbIds(); return mLnbIds; @@ -484,7 +602,24 @@ public final class Tuner implements AutoCloseable { return nativeOpenDescrambler(); } - private Dvr openDvr(int type, int bufferSize) { + /** + * Open a DVR (Digital Video Record) instance. + * + * @param type the DVR type to be opened. + * @param bufferSize the buffer size of the output in bytes. It's used to hold output data of + * the attached filters. + * @param cb the callback to receive notifications from DVR. + * @param executor the executor on which callback will be invoked. The default event handler + * executor is used if it's {@code null}. + * @return the opened DVR object. {@code null} if the operation failed. + * + * @hide + */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + @Nullable + public Dvr openDvr(@DvrSettings.Type int type, @BytesLong long bufferSize, DvrCallback cb, + @CallbackExecutor @Nullable Executor executor) { + TunerUtils.checkTunerPermission(mContext); Dvr dvr = nativeOpenDvr(type, bufferSize); return dvr; } |