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

Commit 43a8d489 authored by shubang's avatar shubang
Browse files

Cleanup Tuner.java

Test: make
Change-Id: Ic089bb2a38e2a46482c89e93281bb20c476f3c25
parent 3c01d0cd
Loading
Loading
Loading
Loading
+156 −21
Original line number Diff line number Diff line
@@ -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;
    }