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

Commit a0267d54 authored by Amy Zhang's avatar Amy Zhang Committed by Android (Google) Code Review
Browse files

Merge "Add context id setter in the IpFilterConfiguration"

parents fe75fc56 de5715ea
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -5268,16 +5268,19 @@ package android.media.tv.tuner.filter {
    method @NonNull public static android.media.tv.tuner.filter.IpFilterConfiguration.Builder builder();
    method @NonNull @Size(min=4, max=16) public byte[] getDstIpAddress();
    method public int getDstPort();
    method public int getIpFilterContextId();
    method @NonNull @Size(min=4, max=16) public byte[] getSrcIpAddress();
    method public int getSrcPort();
    method public int getType();
    method public boolean isPassthrough();
    field public static final int INVALID_IP_FILTER_CONTEXT_ID = -1; // 0xffffffff
  }
  public static final class IpFilterConfiguration.Builder {
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration build();
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstIpAddress(@NonNull byte[]);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstPort(int);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setIpFilterContextId(int);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setPassthrough(boolean);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSrcIpAddress(@NonNull byte[]);
+37 −3
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Size;
import android.annotation.SystemApi;
import android.media.tv.tuner.TunerVersionChecker;

/**
 * Filter configuration for a IP filter.
@@ -28,20 +29,28 @@ import android.annotation.SystemApi;
 */
@SystemApi
public final class IpFilterConfiguration extends FilterConfiguration {
    /**
     * Undefined filter type.
     */
    public static final int INVALID_IP_FILTER_CONTEXT_ID =
            android.hardware.tv.tuner.V1_1.Constants.Constant.INVALID_IP_FILTER_CONTEXT_ID;

    private final byte[] mSrcIpAddress;
    private final byte[] mDstIpAddress;
    private final int mSrcPort;
    private final int mDstPort;
    private final boolean mPassthrough;
    private final int mIpFilterContextId;

    private IpFilterConfiguration(Settings settings, byte[] srcAddr, byte[] dstAddr, int srcPort,
            int dstPort, boolean passthrough) {
            int dstPort, boolean passthrough, int ipCid) {
        super(settings);
        mSrcIpAddress = srcAddr;
        mDstIpAddress = dstAddr;
        mSrcPort = srcPort;
        mDstPort = dstPort;
        mPassthrough = passthrough;
        mIpFilterContextId = ipCid;
    }

    @Override
@@ -86,6 +95,15 @@ public final class IpFilterConfiguration extends FilterConfiguration {
    public boolean isPassthrough() {
        return mPassthrough;
    }
    /**
     * Gets the ip filter context id. Default value is {@link #INVALID_IP_FILTER_CONTEXT_ID}.
     *
     * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would return
     * default value. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
     */
    public int getIpFilterContextId() {
        return mIpFilterContextId;
    }

    /**
     * Creates a builder for {@link IpFilterConfiguration}.
@@ -105,6 +123,7 @@ public final class IpFilterConfiguration extends FilterConfiguration {
        private int mDstPort = 0;
        private boolean mPassthrough = false;
        private Settings mSettings;
        private int mIpCid = INVALID_IP_FILTER_CONTEXT_ID;

        private Builder() {
        }
@@ -169,6 +188,21 @@ public final class IpFilterConfiguration extends FilterConfiguration {
            return this;
        }

        /**
         * Sets the ip filter context id. Default value is {@link #INVALID_IP_FILTER_CONTEXT_ID}.
         *
         * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause
         * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
         */
        @NonNull
        public Builder setIpFilterContextId(int ipContextId) {
            if (TunerVersionChecker.checkHigherOrEqualVersionTo(
                        TunerVersionChecker.TUNER_VERSION_1_1, "setIpFilterContextId")) {
                mIpCid = ipContextId;
            }
            return this;
        }

        /**
         * Builds a {@link IpFilterConfiguration} object.
         */
@@ -180,8 +214,8 @@ public final class IpFilterConfiguration extends FilterConfiguration {
                    "The lengths of src and dst IP address must be 4 or 16 and must be the same."
                            + "srcLength=" + ipAddrLength + ", dstLength=" + mDstIpAddress.length);
            }
            return new IpFilterConfiguration(
                    mSettings, mSrcIpAddress, mDstIpAddress, mSrcPort, mDstPort, mPassthrough);
            return new IpFilterConfiguration(mSettings, mSrcIpAddress, mDstIpAddress, mSrcPort,
                    mDstPort, mPassthrough, mIpCid);
        }
    }
}
+30 −0
Original line number Diff line number Diff line
@@ -3149,6 +3149,29 @@ static DemuxFilterSettings getFilterConfiguration(
    return filterSettings;
}

static Result configureIpFilterContextId(
        JNIEnv *env, sp<IFilter> iFilterSp, jobject ipFilterConfigObj) {
    jclass clazz = env->FindClass(
            "android/media/tv/tuner/filter/IpFilterConfiguration");
    uint32_t cid = env->GetIntField(ipFilterConfigObj, env->GetFieldID(
            clazz, "mIpFilterContextId", "I"));
    Result res = Result::SUCCESS;
    if (cid != static_cast<uint32_t>(Constant::INVALID_IP_FILTER_CONTEXT_ID)) {
        sp<::android::hardware::tv::tuner::V1_1::IFilter> iFilterSp_1_1;
        iFilterSp_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(iFilterSp);

        if (iFilterSp_1_1 != NULL) {
            res = iFilterSp_1_1->configureIpCid(cid);
            if (res != Result::SUCCESS) {
                return res;
            }
        } else {
            ALOGW("configureIpCid is not supported with the current HAL implementation.");
        }
    }
    return res;
}

static jint copyData(JNIEnv *env, std::unique_ptr<MQ>& mq, EventFlag* flag, jbyteArray buffer,
        jlong offset, jlong size) {
    ALOGD("copyData, size=%ld, offset=%ld", (long) size, (long) offset);
@@ -3192,6 +3215,13 @@ static jint android_media_tv_Tuner_configure_filter(
        return (jint) res;
    }

    if (static_cast<DemuxFilterMainType>(type) == DemuxFilterMainType::IP) {
        res = configureIpFilterContextId(env, iFilterSp, settings);
        if (res != Result::SUCCESS) {
            return (jint) res;
        }
    }

    MQDescriptorSync<uint8_t> filterMQDesc;
    Result getQueueDescResult = Result::UNKNOWN_ERROR;
    if (filterSp->mFilterMQ == NULL) {
+3 −0
Original line number Diff line number Diff line
@@ -5208,16 +5208,19 @@ package android.media.tv.tuner.filter {
    method @NonNull public static android.media.tv.tuner.filter.IpFilterConfiguration.Builder builder();
    method @NonNull @Size(min=4, max=16) public byte[] getDstIpAddress();
    method public int getDstPort();
    method public int getIpFilterContextId();
    method @NonNull @Size(min=4, max=16) public byte[] getSrcIpAddress();
    method public int getSrcPort();
    method public int getType();
    method public boolean isPassthrough();
    field public static final int INVALID_IP_FILTER_CONTEXT_ID = -1; // 0xffffffff
  }
  public static final class IpFilterConfiguration.Builder {
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration build();
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstIpAddress(@NonNull byte[]);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstPort(int);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setIpFilterContextId(int);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setPassthrough(boolean);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSrcIpAddress(@NonNull byte[]);