diff --git a/api/system-current.txt b/api/system-current.txt index 2e53058f96d25..5e10e74deedd8 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5265,16 +5265,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[]); diff --git a/media/java/android/media/tv/tuner/filter/IpFilterConfiguration.java b/media/java/android/media/tv/tuner/filter/IpFilterConfiguration.java index f54b686304c10..2649fcf5a6423 100644 --- a/media/java/android/media/tv/tuner/filter/IpFilterConfiguration.java +++ b/media/java/android/media/tv/tuner/filter/IpFilterConfiguration.java @@ -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}. + * + *
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}. + * + *
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);
}
}
}
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index e0afe29de7e69..5e4cc7a52f111 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -3041,6 +3041,29 @@ static DemuxFilterSettings getFilterConfiguration(
return filterSettings;
}
+static Result configureIpFilterContextId(
+ JNIEnv *env, sp