Add DvrSettings
Test: make; cuttlefish; Change-Id: Ia7e3199a4aa794dc41bf5d10f09fbf82b41b512f
This commit is contained in:
124
media/java/android/media/tv/tuner/DvrSettings.java
Normal file
124
media/java/android/media/tv/tuner/DvrSettings.java
Normal file
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright 2019 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.media.tv.tuner;
|
||||
|
||||
import android.media.tv.tuner.TunerConstants.DataFormat;
|
||||
import android.media.tv.tuner.TunerConstants.DvrSettingsType;
|
||||
|
||||
/**
|
||||
* DVR settings.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public class DvrSettings {
|
||||
private int mStatusMask;
|
||||
private int mLowThreshold;
|
||||
private int mHighThreshold;
|
||||
private int mPacketSize;
|
||||
|
||||
@DataFormat
|
||||
private int mDataFormat;
|
||||
@DvrSettingsType
|
||||
private int mType;
|
||||
|
||||
private DvrSettings(int statusMask, int lowThreshold, int highThreshold, int packetSize,
|
||||
@DataFormat int dataFormat, @DvrSettingsType int type) {
|
||||
mStatusMask = statusMask;
|
||||
mLowThreshold = lowThreshold;
|
||||
mHighThreshold = highThreshold;
|
||||
mPacketSize = packetSize;
|
||||
mDataFormat = dataFormat;
|
||||
mType = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new builder.
|
||||
*/
|
||||
public static Builder newBuilder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Builder for DvrSettings.
|
||||
*/
|
||||
public static final class Builder {
|
||||
private int mStatusMask;
|
||||
private int mLowThreshold;
|
||||
private int mHighThreshold;
|
||||
private int mPacketSize;
|
||||
@DataFormat
|
||||
private int mDataFormat;
|
||||
@DvrSettingsType
|
||||
private int mType;
|
||||
|
||||
/**
|
||||
* Sets status mask.
|
||||
*/
|
||||
public Builder setStatusMask(int statusMask) {
|
||||
this.mStatusMask = statusMask;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets low threshold.
|
||||
*/
|
||||
public Builder setLowThreshold(int lowThreshold) {
|
||||
this.mLowThreshold = lowThreshold;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets high threshold.
|
||||
*/
|
||||
public Builder setHighThreshold(int highThreshold) {
|
||||
this.mHighThreshold = highThreshold;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets packet size.
|
||||
*/
|
||||
public Builder setPacketSize(int packetSize) {
|
||||
this.mPacketSize = packetSize;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets data format.
|
||||
*/
|
||||
public Builder setDataFormat(@DataFormat int dataFormat) {
|
||||
this.mDataFormat = dataFormat;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets settings type.
|
||||
*/
|
||||
public Builder setType(@DvrSettingsType int type) {
|
||||
this.mType = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a DvrSettings instance.
|
||||
*/
|
||||
public DvrSettings build() {
|
||||
return new DvrSettings(
|
||||
mStatusMask, mLowThreshold, mHighThreshold, mPacketSize, mDataFormat, mType);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -368,6 +368,7 @@ public final class Tuner implements AutoCloseable {
|
||||
|
||||
private native boolean nativeAttachFilter(Filter filter);
|
||||
private native boolean nativeDetachFilter(Filter filter);
|
||||
private native int nativeConfigureDvr(DvrSettings settings);
|
||||
private native boolean nativeStartDvr();
|
||||
private native boolean nativeStopDvr();
|
||||
private native boolean nativeFlushDvr();
|
||||
@@ -380,6 +381,9 @@ public final class Tuner implements AutoCloseable {
|
||||
public boolean detachFilter(Filter filter) {
|
||||
return nativeDetachFilter(filter);
|
||||
}
|
||||
public int configure(DvrSettings settings) {
|
||||
return nativeConfigureDvr(settings);
|
||||
}
|
||||
public boolean start() {
|
||||
return nativeStartDvr();
|
||||
}
|
||||
|
||||
@@ -101,6 +101,13 @@ final class TunerConstants {
|
||||
public static final int FILTER_SETTINGS_TLV = Constants.DemuxFilterMainType.TLV;
|
||||
public static final int FILTER_SETTINGS_ALP = Constants.DemuxFilterMainType.ALP;
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({DVR_SETTINGS_RECORD, DVR_SETTINGS_PLAYBACK})
|
||||
public @interface DvrSettingsType {}
|
||||
|
||||
public static final int DVR_SETTINGS_RECORD = Constants.DvrType.RECORD;
|
||||
public static final int DVR_SETTINGS_PLAYBACK = Constants.DvrType.PLAYBACK;
|
||||
|
||||
private TunerConstants() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
using ::android::hardware::Void;
|
||||
using ::android::hardware::hidl_vec;
|
||||
using ::android::hardware::tv::tuner::V1_0::DataFormat;
|
||||
using ::android::hardware::tv::tuner::V1_0::DemuxFilterMainType;
|
||||
using ::android::hardware::tv::tuner::V1_0::DemuxFilterPesDataSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::DemuxFilterSettings;
|
||||
@@ -35,10 +36,13 @@ using ::android::hardware::tv::tuner::V1_0::DemuxQueueNotifyBits;
|
||||
using ::android::hardware::tv::tuner::V1_0::DemuxTpid;
|
||||
using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterType;
|
||||
using ::android::hardware::tv::tuner::V1_0::DvrSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType;
|
||||
using ::android::hardware::tv::tuner::V1_0::ITuner;
|
||||
using ::android::hardware::tv::tuner::V1_0::PlaybackSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::RecordSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::Result;
|
||||
|
||||
struct fields_t {
|
||||
@@ -485,6 +489,49 @@ static sp<Filter> getFilter(JNIEnv *env, jobject filter) {
|
||||
return (Filter *)env->GetLongField(filter, gFields.filterContext);
|
||||
}
|
||||
|
||||
static DvrSettings getDvrSettings(JNIEnv *env, jobject settings) {
|
||||
DvrSettings dvrSettings;
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/DvrSettings");
|
||||
uint32_t statusMask =
|
||||
static_cast<uint32_t>(env->GetIntField(
|
||||
settings, env->GetFieldID(clazz, "mStatusMask", "I")));
|
||||
uint32_t lowThreshold =
|
||||
static_cast<uint32_t>(env->GetIntField(
|
||||
settings, env->GetFieldID(clazz, "mLowThreshold", "I")));
|
||||
uint32_t highThreshold =
|
||||
static_cast<uint32_t>(env->GetIntField(
|
||||
settings, env->GetFieldID(clazz, "mHighThreshold", "I")));
|
||||
uint8_t packetSize =
|
||||
static_cast<uint8_t>(env->GetIntField(
|
||||
settings, env->GetFieldID(clazz, "mPacketSize", "I")));
|
||||
DataFormat dataFormat =
|
||||
static_cast<DataFormat>(env->GetIntField(
|
||||
settings, env->GetFieldID(clazz, "mDataFormat", "I")));
|
||||
DvrType type =
|
||||
static_cast<DvrType>(env->GetIntField(
|
||||
settings, env->GetFieldID(clazz, "mType", "I")));
|
||||
if (type == DvrType::RECORD) {
|
||||
RecordSettings recordSettings {
|
||||
.statusMask = static_cast<unsigned char>(statusMask),
|
||||
.lowThreshold = lowThreshold,
|
||||
.highThreshold = highThreshold,
|
||||
.dataFormat = dataFormat,
|
||||
.packetSize = packetSize,
|
||||
};
|
||||
dvrSettings.record(recordSettings);
|
||||
} else if (type == DvrType::PLAYBACK) {
|
||||
PlaybackSettings PlaybackSettings {
|
||||
.statusMask = statusMask,
|
||||
.lowThreshold = lowThreshold,
|
||||
.highThreshold = highThreshold,
|
||||
.dataFormat = dataFormat,
|
||||
.packetSize = packetSize,
|
||||
};
|
||||
dvrSettings.playback(PlaybackSettings);
|
||||
}
|
||||
return dvrSettings;
|
||||
}
|
||||
|
||||
static sp<IDvr> getDvr(JNIEnv *env, jobject dvr) {
|
||||
return (IDvr *)env->GetLongField(dvr, gFields.dvrContext);
|
||||
}
|
||||
@@ -749,6 +796,16 @@ static bool android_media_tv_Tuner_detach_filter(JNIEnv *env, jobject dvr, jobje
|
||||
return result == Result::SUCCESS;
|
||||
}
|
||||
|
||||
static int android_media_tv_Tuner_configure_dvr(JNIEnv *env, jobject dvr, jobject settings) {
|
||||
sp<IDvr> dvrSp = getDvr(env, dvr);
|
||||
if (dvrSp == NULL) {
|
||||
ALOGD("Failed to configure dvr: dvr not found");
|
||||
return (int)Result::INVALID_STATE;
|
||||
}
|
||||
Result result = dvrSp->configure(getDvrSettings(env, settings));
|
||||
return (int)result;
|
||||
}
|
||||
|
||||
static bool android_media_tv_Tuner_start_dvr(JNIEnv *env, jobject dvr) {
|
||||
sp<IDvr> dvrSp = getDvr(env, dvr);
|
||||
if (dvrSp == NULL) {
|
||||
@@ -818,6 +875,8 @@ static const JNINativeMethod gDvrMethods[] = {
|
||||
(void *)android_media_tv_Tuner_attach_filter },
|
||||
{ "nativeDetachFilter", "(Landroid/media/tv/tuner/Tuner$Filter;)Z",
|
||||
(void *)android_media_tv_Tuner_detach_filter },
|
||||
{ "nativeConfigureDvr", "(Landroid/media/tv/tuner/DvrSettings;)I",
|
||||
(void *)android_media_tv_Tuner_configure_dvr },
|
||||
{ "nativeStartDvr", "()Z", (void *)android_media_tv_Tuner_start_dvr },
|
||||
{ "nativeStopDvr", "()Z", (void *)android_media_tv_Tuner_stop_dvr },
|
||||
{ "nativeFlushDvr", "()Z", (void *)android_media_tv_Tuner_flush_dvr },
|
||||
|
||||
Reference in New Issue
Block a user