Loading api/system-current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -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[]); Loading media/java/android/media/tv/tuner/filter/IpFilterConfiguration.java +37 −3 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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 Loading Loading @@ -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}. Loading @@ -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() { } Loading Loading @@ -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. */ Loading @@ -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); } } } media/jni/android_media_tv_Tuner.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) { Loading non-updatable-api/system-current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -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[]); Loading Loading
api/system-current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -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[]); Loading
media/java/android/media/tv/tuner/filter/IpFilterConfiguration.java +37 −3 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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 Loading Loading @@ -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}. Loading @@ -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() { } Loading Loading @@ -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. */ Loading @@ -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); } } }
media/jni/android_media_tv_Tuner.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) { Loading
non-updatable-api/system-current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -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[]); Loading