Merge "Add FilterDelayHint to Tuner JNI"
This commit is contained in:
@@ -6701,6 +6701,8 @@ package android.media.tv.tuner.filter {
|
||||
method @Nullable public String acquireSharedFilterToken();
|
||||
method public void close();
|
||||
method public int configure(@NonNull android.media.tv.tuner.filter.FilterConfiguration);
|
||||
method public int delayCallbackUntilBufferFilled(int);
|
||||
method public int delayCallbackUntilTimeMillis(long);
|
||||
method public int flush();
|
||||
method public void freeSharedFilterToken(@NonNull String);
|
||||
method @Deprecated public int getId();
|
||||
|
||||
@@ -254,6 +254,8 @@ public class Filter implements AutoCloseable {
|
||||
private native int nativeClose();
|
||||
private native String nativeAcquireSharedFilterToken();
|
||||
private native void nativeFreeSharedFilterToken(String token);
|
||||
private native int nativeSetTimeDelayHint(int timeDelayInMs);
|
||||
private native int nativeSetDataSizeDelayHint(int dataSizeDelayInBytes);
|
||||
|
||||
// Called by JNI
|
||||
private Filter(long id) {
|
||||
@@ -599,4 +601,52 @@ public class Filter implements AutoCloseable {
|
||||
mIsShared = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set filter time delay.
|
||||
*
|
||||
* <p> Setting a time delay instructs the filter to delay its event callback invocation until
|
||||
* the specified amount of time has passed. The default value (delay disabled) is {@code 0}.
|
||||
*
|
||||
* <p>This functionality is only available in Tuner version 2.0 and higher and will otherwise
|
||||
* be a no-op. Use {@link TunerVersionChecker#getTunerVersion()} to get the version information.
|
||||
*
|
||||
* @param delayInMs specifies the duration of the delay in milliseconds.
|
||||
*/
|
||||
public int delayCallbackUntilTimeMillis(long delayInMs) {
|
||||
if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
|
||||
TunerVersionChecker.TUNER_VERSION_2_0, "setTimeDelayHint")) {
|
||||
return Tuner.RESULT_UNAVAILABLE;
|
||||
}
|
||||
|
||||
if (delayInMs >= 0 && delayInMs <= Integer.MAX_VALUE) {
|
||||
synchronized (mLock) {
|
||||
return nativeSetTimeDelayHint((int) delayInMs);
|
||||
}
|
||||
}
|
||||
return Tuner.RESULT_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set filter data size delay.
|
||||
*
|
||||
* <p> Setting a data size delay instructs the filter to delay its event callback invocation
|
||||
* until a specified amount of data has accumulated. The default value (delay disabled) is
|
||||
* {@code 0}.
|
||||
*
|
||||
* <p>This functionality is only available in Tuner version 2.0 and higher and will otherwise
|
||||
* be a no-op. Use {@link TunerVersionChecker#getTunerVersion()} to get the version information.
|
||||
*
|
||||
* @param delayInBytes specifies the duration of the delay in bytes.
|
||||
*/
|
||||
public int delayCallbackUntilBufferFilled(int delayInBytes) {
|
||||
if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
|
||||
TunerVersionChecker.TUNER_VERSION_2_0, "setTimeDelayHint")) {
|
||||
return Tuner.RESULT_UNAVAILABLE;
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
return nativeSetDataSizeDelayHint(delayInBytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,6 +62,8 @@
|
||||
#include <aidl/android/hardware/tv/tuner/DemuxTsFilterType.h>
|
||||
#include <aidl/android/hardware/tv/tuner/DemuxTsIndex.h>
|
||||
#include <aidl/android/hardware/tv/tuner/DvrSettings.h>
|
||||
#include <aidl/android/hardware/tv/tuner/FilterDelayHint.h>
|
||||
#include <aidl/android/hardware/tv/tuner/FilterDelayHintType.h>
|
||||
#include <aidl/android/hardware/tv/tuner/FrontendAnalogAftFlag.h>
|
||||
#include <aidl/android/hardware/tv/tuner/FrontendAnalogSettings.h>
|
||||
#include <aidl/android/hardware/tv/tuner/FrontendAnalogSifStandard.h>
|
||||
@@ -210,6 +212,8 @@ using ::aidl::android::hardware::tv::tuner::DemuxTsFilterSettingsFilterSettings;
|
||||
using ::aidl::android::hardware::tv::tuner::DemuxTsFilterType;
|
||||
using ::aidl::android::hardware::tv::tuner::DemuxTsIndex;
|
||||
using ::aidl::android::hardware::tv::tuner::DvrSettings;
|
||||
using ::aidl::android::hardware::tv::tuner::FilterDelayHint;
|
||||
using ::aidl::android::hardware::tv::tuner::FilterDelayHintType;
|
||||
using ::aidl::android::hardware::tv::tuner::FrontendAnalogAftFlag;
|
||||
using ::aidl::android::hardware::tv::tuner::FrontendAnalogSettings;
|
||||
using ::aidl::android::hardware::tv::tuner::FrontendAnalogSifStandard;
|
||||
@@ -4058,6 +4062,36 @@ static void android_media_tv_Tuner_free_shared_filter_token(
|
||||
filterClient->freeSharedFilterToken(filterToken);
|
||||
}
|
||||
|
||||
static jint android_media_tv_Tuner_set_filter_time_delay_hint(
|
||||
JNIEnv *env, jobject filter, int timeDelayInMs) {
|
||||
sp<FilterClient> filterClient = getFilterClient(env, filter);
|
||||
if (filterClient == nullptr) {
|
||||
jniThrowException(env, "java/lang/IllegalStateException",
|
||||
"Failed to set filter delay: filter client not found");
|
||||
}
|
||||
|
||||
FilterDelayHint delayHint {
|
||||
.hintType = FilterDelayHintType::TIME_DELAY_IN_MS,
|
||||
.hintValue = timeDelayInMs,
|
||||
};
|
||||
return static_cast<jint>(filterClient->setDelayHint(delayHint));
|
||||
}
|
||||
|
||||
static jint android_media_tv_Tuner_set_filter_data_size_delay_hint(
|
||||
JNIEnv *env, jobject filter, int dataSizeDelayInBytes) {
|
||||
sp<FilterClient> filterClient = getFilterClient(env, filter);
|
||||
if (filterClient == nullptr) {
|
||||
jniThrowException(env, "java/lang/IllegalStateException",
|
||||
"Failed to set filter delay: filter client not found");
|
||||
}
|
||||
|
||||
FilterDelayHint delayHint {
|
||||
.hintType = FilterDelayHintType::DATA_SIZE_DELAY_IN_BYTES,
|
||||
.hintValue = dataSizeDelayInBytes,
|
||||
};
|
||||
return static_cast<jint>(filterClient->setDelayHint(delayHint));
|
||||
}
|
||||
|
||||
static sp<TimeFilterClient> getTimeFilterClient(JNIEnv *env, jobject filter) {
|
||||
return (TimeFilterClient *)env->GetLongField(filter, gFields.timeFilterContext);
|
||||
}
|
||||
@@ -4578,6 +4612,10 @@ static const JNINativeMethod gFilterMethods[] = {
|
||||
(void *)android_media_tv_Tuner_acquire_shared_filter_token},
|
||||
{ "nativeFreeSharedFilterToken", "(Ljava/lang/String;)V",
|
||||
(void *)android_media_tv_Tuner_free_shared_filter_token},
|
||||
{"nativeSetTimeDelayHint", "(I)I",
|
||||
(void *)android_media_tv_Tuner_set_filter_time_delay_hint},
|
||||
{"nativeSetDataSizeDelayHint", "(I)I",
|
||||
(void *)android_media_tv_Tuner_set_filter_data_size_delay_hint},
|
||||
};
|
||||
|
||||
static const JNINativeMethod gSharedFilterMethods[] = {
|
||||
|
||||
Reference in New Issue
Block a user