summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt3
-rw-r--r--media/java/android/media/tv/tuner/TunerVersionChecker.java4
-rw-r--r--media/java/android/media/tv/tuner/dvr/DvrPlayback.java31
-rw-r--r--media/java/android/media/tv/tuner/dvr/DvrRecorder.java31
-rw-r--r--media/jni/Android.bp2
-rw-r--r--media/jni/android_media_tv_Tuner.cpp15
-rw-r--r--media/jni/tuner/DvrClient.cpp10
-rw-r--r--media/jni/tuner/DvrClient.h5
8 files changed, 100 insertions, 1 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 87960d70fa25..5e1c2347664b 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -7132,6 +7132,7 @@ package android.media.tv.tuner {
field public static final int TUNER_VERSION_1_0 = 65536; // 0x10000
field public static final int TUNER_VERSION_1_1 = 65537; // 0x10001
field public static final int TUNER_VERSION_2_0 = 131072; // 0x20000
+ field public static final int TUNER_VERSION_3_0 = 196608; // 0x30000
field public static final int TUNER_VERSION_UNKNOWN = 0; // 0x0
}
@@ -7149,6 +7150,7 @@ package android.media.tv.tuner.dvr {
method public long read(@NonNull byte[], long, long);
method public long seek(long);
method public void setFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+ method public int setPlaybackBufferStatusCheckIntervalHint(long);
method public int start();
method public int stop();
field public static final int PLAYBACK_STATUS_ALMOST_EMPTY = 2; // 0x2
@@ -7164,6 +7166,7 @@ package android.media.tv.tuner.dvr {
method public int detachFilter(@NonNull android.media.tv.tuner.filter.Filter);
method public int flush();
method public void setFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+ method public int setRecordBufferStatusCheckIntervalHint(long);
method public int start();
method public int stop();
method public long write(long);
diff --git a/media/java/android/media/tv/tuner/TunerVersionChecker.java b/media/java/android/media/tv/tuner/TunerVersionChecker.java
index 3e13bed0afbd..f29a93cbb228 100644
--- a/media/java/android/media/tv/tuner/TunerVersionChecker.java
+++ b/media/java/android/media/tv/tuner/TunerVersionChecker.java
@@ -59,6 +59,10 @@ public final class TunerVersionChecker {
* Tuner version 2.0.
*/
public static final int TUNER_VERSION_2_0 = (2 << 16);
+ /**
+ * Tuner version 3.0.
+ */
+ public static final int TUNER_VERSION_3_0 = (3 << 16);
/**
* Get the current running Tuner version.
diff --git a/media/java/android/media/tv/tuner/dvr/DvrPlayback.java b/media/java/android/media/tv/tuner/dvr/DvrPlayback.java
index 11e699981e80..06802409baf7 100644
--- a/media/java/android/media/tv/tuner/dvr/DvrPlayback.java
+++ b/media/java/android/media/tv/tuner/dvr/DvrPlayback.java
@@ -23,6 +23,7 @@ import android.annotation.SystemApi;
import android.media.tv.tuner.Tuner;
import android.media.tv.tuner.Tuner.Result;
import android.media.tv.tuner.TunerUtils;
+import android.media.tv.tuner.TunerVersionChecker;
import android.media.tv.tuner.filter.Filter;
import android.os.ParcelFileDescriptor;
import android.os.Process;
@@ -91,6 +92,7 @@ public class DvrPlayback implements AutoCloseable {
private native int nativeAttachFilter(Filter filter);
private native int nativeDetachFilter(Filter filter);
private native int nativeConfigureDvr(DvrSettings settings);
+ private native int nativeSetStatusCheckIntervalHint(long durationInMs);
private native int nativeStartDvr();
private native int nativeStopDvr();
private native int nativeFlushDvr();
@@ -177,6 +179,35 @@ public class DvrPlayback implements AutoCloseable {
}
/**
+ * Set playback buffer status check time interval.
+ *
+ * This status check time interval will be used by the Dvr to decide how often to evaluate
+ * data. The default value will be decided by HAL if it’s not set.
+ *
+ * <p>This functionality is only available in Tuner version 3.0 and higher and will otherwise
+ * return a {@link Tuner#RESULT_UNAVAILABLE}. Use {@link TunerVersionChecker#getTunerVersion()}
+ * to get the version information.
+ *
+ * @param durationInMs specifies the duration of the delay in milliseconds.
+ *
+ * @return one of the following results:
+ * {@link Tuner#RESULT_SUCCESS} if succeed,
+ * {@link Tuner#RESULT_UNAVAILABLE} if Dvr is unavailable or unsupported HAL versions,
+ * {@link Tuner#RESULT_NOT_INITIALIZED} if Dvr is not initialized,
+ * {@link Tuner#RESULT_INVALID_STATE} if Dvr is in a wrong state,
+ * {@link Tuner#RESULT_INVALID_ARGUMENT} if the input parameter is invalid.
+ */
+ @Result
+ public int setPlaybackBufferStatusCheckIntervalHint(long durationInMs) {
+ if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
+ TunerVersionChecker.TUNER_VERSION_3_0, "Set status check interval hint")) {
+ // no-op
+ return Tuner.RESULT_UNAVAILABLE;
+ }
+ return nativeSetStatusCheckIntervalHint(durationInMs);
+ }
+
+ /**
* Starts DVR.
*
* <p>Starts consuming playback data or producing data for recording.
diff --git a/media/java/android/media/tv/tuner/dvr/DvrRecorder.java b/media/java/android/media/tv/tuner/dvr/DvrRecorder.java
index e72026aab992..1a658320a1a9 100644
--- a/media/java/android/media/tv/tuner/dvr/DvrRecorder.java
+++ b/media/java/android/media/tv/tuner/dvr/DvrRecorder.java
@@ -22,6 +22,7 @@ import android.annotation.SystemApi;
import android.media.tv.tuner.Tuner;
import android.media.tv.tuner.Tuner.Result;
import android.media.tv.tuner.TunerUtils;
+import android.media.tv.tuner.TunerVersionChecker;
import android.media.tv.tuner.filter.Filter;
import android.os.ParcelFileDescriptor;
import android.os.Process;
@@ -53,6 +54,7 @@ public class DvrRecorder implements AutoCloseable {
private native int nativeAttachFilter(Filter filter);
private native int nativeDetachFilter(Filter filter);
private native int nativeConfigureDvr(DvrSettings settings);
+ private native int nativeSetStatusCheckIntervalHint(long durationInMs);
private native int nativeStartDvr();
private native int nativeStopDvr();
private native int nativeFlushDvr();
@@ -131,6 +133,35 @@ public class DvrRecorder implements AutoCloseable {
}
/**
+ * Set record buffer status check time interval.
+ *
+ * This status check time interval will be used by the Dvr to decide how often to evaluate
+ * data. The default value will be decided by HAL if it’s not set.
+ *
+ * <p>This functionality is only available in Tuner version 3.0 and higher and will otherwise
+ * return a {@link Tuner#RESULT_UNAVAILABLE}. Use {@link TunerVersionChecker#getTunerVersion()}
+ * to get the version information.
+ *
+ * @param durationInMs specifies the duration of the delay in milliseconds.
+ *
+ * @return one of the following results:
+ * {@link Tuner#RESULT_SUCCESS} if succeed,
+ * {@link Tuner#RESULT_UNAVAILABLE} if Dvr is unavailable or unsupported HAL versions,
+ * {@link Tuner#RESULT_NOT_INITIALIZED} if Dvr is not initialized,
+ * {@link Tuner#RESULT_INVALID_STATE} if Dvr is in a wrong state,
+ * {@link Tuner#RESULT_INVALID_ARGUMENT} if the input parameter is invalid.
+ */
+ @Result
+ public int setRecordBufferStatusCheckIntervalHint(long durationInMs) {
+ if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
+ TunerVersionChecker.TUNER_VERSION_3_0, "Set status check interval hint")) {
+ // no-op
+ return Tuner.RESULT_UNAVAILABLE;
+ }
+ return nativeSetStatusCheckIntervalHint(durationInMs);
+ }
+
+ /**
* Starts DVR.
*
* <p>Starts consuming playback data or producing data for recording.
diff --git a/media/jni/Android.bp b/media/jni/Android.bp
index 96a3781af3a8..a0304bb5c04b 100644
--- a/media/jni/Android.bp
+++ b/media/jni/Android.bp
@@ -175,7 +175,7 @@ cc_library_shared {
shared_libs: [
"android.hardware.graphics.bufferqueue@2.0",
- "android.hardware.tv.tuner-V1-ndk",
+ "android.hardware.tv.tuner-V2-ndk",
"libbinder_ndk",
"libandroid_runtime",
"libcutils",
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index 244730b76df2..c18edcd8689b 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -4485,6 +4485,17 @@ static jint android_media_tv_Tuner_configure_dvr(JNIEnv *env, jobject dvr, jobje
return (jint)result;
}
+static jint android_media_tv_Tuner_set_status_check_interval_hint(JNIEnv *env, jobject dvr,
+ jlong durationInMs) {
+ sp<DvrClient> dvrClient = getDvrClient(env, dvr);
+ if (dvrClient == nullptr) {
+ ALOGD("Failed to set status check interval hint: dvr client not found");
+ return (int)Result::NOT_INITIALIZED;
+ }
+ Result result = dvrClient->setStatusCheckIntervalHint(durationInMs);
+ return (jint)result;
+}
+
static jint android_media_tv_Tuner_start_dvr(JNIEnv *env, jobject dvr) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
if (dvrClient == nullptr) {
@@ -4828,6 +4839,8 @@ static const JNINativeMethod gDvrRecorderMethods[] = {
(void *)android_media_tv_Tuner_detach_filter },
{ "nativeConfigureDvr", "(Landroid/media/tv/tuner/dvr/DvrSettings;)I",
(void *)android_media_tv_Tuner_configure_dvr },
+ { "nativeSetStatusCheckIntervalHint", "(J)I",
+ (void *)android_media_tv_Tuner_set_status_check_interval_hint},
{ "nativeStartDvr", "()I", (void *)android_media_tv_Tuner_start_dvr },
{ "nativeStopDvr", "()I", (void *)android_media_tv_Tuner_stop_dvr },
{ "nativeFlushDvr", "()I", (void *)android_media_tv_Tuner_flush_dvr },
@@ -4844,6 +4857,8 @@ static const JNINativeMethod gDvrPlaybackMethods[] = {
(void *)android_media_tv_Tuner_detach_filter},
{ "nativeConfigureDvr", "(Landroid/media/tv/tuner/dvr/DvrSettings;)I",
(void *)android_media_tv_Tuner_configure_dvr},
+ { "nativeSetStatusCheckIntervalHint", "(J)I",
+ (void *)android_media_tv_Tuner_set_status_check_interval_hint},
{ "nativeStartDvr", "()I", (void *)android_media_tv_Tuner_start_dvr},
{ "nativeStopDvr", "()I", (void *)android_media_tv_Tuner_stop_dvr},
{ "nativeFlushDvr", "()I", (void *)android_media_tv_Tuner_flush_dvr},
diff --git a/media/jni/tuner/DvrClient.cpp b/media/jni/tuner/DvrClient.cpp
index 05683b661716..6e4705251724 100644
--- a/media/jni/tuner/DvrClient.cpp
+++ b/media/jni/tuner/DvrClient.cpp
@@ -303,7 +303,17 @@ Result DvrClient::close() {
return Result::INVALID_STATE;
}
+Result DvrClient::setStatusCheckIntervalHint(int64_t durationInMs) {
+ if (mTunerDvr == nullptr) {
+ return Result::INVALID_STATE;
+ }
+ if (durationInMs < 0) {
+ return Result::INVALID_ARGUMENT;
+ }
+ Status s = mTunerDvr->setStatusCheckIntervalHint(durationInMs);
+ return ClientHelper::getServiceSpecificErrorCode(s);
+}
/////////////// TunerDvrCallback ///////////////////////
TunerDvrCallback::TunerDvrCallback(sp<DvrClientCallback> dvrClientCallback)
: mDvrClientCallback(dvrClientCallback) {}
diff --git a/media/jni/tuner/DvrClient.h b/media/jni/tuner/DvrClient.h
index 61c0325813a4..40ed75b365c3 100644
--- a/media/jni/tuner/DvrClient.h
+++ b/media/jni/tuner/DvrClient.h
@@ -126,6 +126,11 @@ public:
*/
Result close();
+ /**
+ * Set status check time interval.
+ */
+ Result setStatusCheckIntervalHint(int64_t durationInMs);
+
private:
/**
* An AIDL Tuner Dvr Singleton assigned at the first time the Tuner Client