Add context id setter in the IpFilterConfiguration
Test: make dist Bug: 153595125 Change-Id: Ie949ea0c108cb020f028cf0ce24020235762d0cb
This commit is contained in:
@@ -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[]);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3041,6 +3041,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);
|
||||
@@ -3084,6 +3107,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) {
|
||||
|
||||
@@ -5205,16 +5205,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[]);
|
||||
|
||||
Reference in New Issue
Block a user