diff --git a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FilterDelayHint.aidl b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FilterDelayHint.aidl new file mode 100644 index 0000000000..1fdafd2f09 --- /dev/null +++ b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FilterDelayHint.aidl @@ -0,0 +1,40 @@ +/* + * Copyright 2021 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. + */ +/////////////////////////////////////////////////////////////////////////////// +// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // +/////////////////////////////////////////////////////////////////////////////// + +// This file is a snapshot of an AIDL file. Do not edit it manually. There are +// two cases: +// 1). this is a frozen version file - do not edit this in any case. +// 2). this is a 'current' file. If you make a backwards compatible change to +// the interface (from the latest frozen version), the build system will +// prompt you to update this file with `m -update-api`. +// +// You must not make a backward incompatible change to any AIDL file built +// with the aidl_interface module type with versions property set. The module +// type is used to build AIDL files in a way that they can be used across +// independently updatable components of the system. If a device is shipped +// with such a backward incompatible change, it has a high risk of breaking +// later when a module using the interface is updated, e.g., Mainline modules. + +package android.hardware.tv.tuner; +/* @hide */ +@VintfStability +parcelable FilterDelayHint { + android.hardware.tv.tuner.FilterDelayHintType hintType = android.hardware.tv.tuner.FilterDelayHintType.INVALID; + int hintValue; +} diff --git a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FilterDelayHintType.aidl b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FilterDelayHintType.aidl new file mode 100644 index 0000000000..8c5a3f5cf1 --- /dev/null +++ b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/FilterDelayHintType.aidl @@ -0,0 +1,41 @@ +/* + * Copyright 2021 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. + */ +/////////////////////////////////////////////////////////////////////////////// +// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // +/////////////////////////////////////////////////////////////////////////////// + +// This file is a snapshot of an AIDL file. Do not edit it manually. There are +// two cases: +// 1). this is a frozen version file - do not edit this in any case. +// 2). this is a 'current' file. If you make a backwards compatible change to +// the interface (from the latest frozen version), the build system will +// prompt you to update this file with `m -update-api`. +// +// You must not make a backward incompatible change to any AIDL file built +// with the aidl_interface module type with versions property set. The module +// type is used to build AIDL files in a way that they can be used across +// independently updatable components of the system. If a device is shipped +// with such a backward incompatible change, it has a high risk of breaking +// later when a module using the interface is updated, e.g., Mainline modules. + +package android.hardware.tv.tuner; +/* @hide */ +@Backing(type="int") @VintfStability +enum FilterDelayHintType { + INVALID = 0, + TIME_DELAY_IN_MS = 1, + DATA_SIZE_DELAY_IN_BYTES = 2, +} diff --git a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/IFilter.aidl b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/IFilter.aidl index a0454f436a..32d9d64f73 100644 --- a/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/IFilter.aidl +++ b/tv/tuner/aidl/aidl_api/android.hardware.tv.tuner/current/android/hardware/tv/tuner/IFilter.aidl @@ -49,4 +49,5 @@ interface IFilter { long getId64Bit(); void releaseAvHandle(in android.hardware.common.NativeHandle avMemory, in long avDataId); void setDataSource(in android.hardware.tv.tuner.IFilter filter); + void setDelayHint(in android.hardware.tv.tuner.FilterDelayHint hint); } diff --git a/tv/tuner/aidl/android/hardware/tv/tuner/FilterDelayHint.aidl b/tv/tuner/aidl/android/hardware/tv/tuner/FilterDelayHint.aidl new file mode 100644 index 0000000000..8174a51136 --- /dev/null +++ b/tv/tuner/aidl/android/hardware/tv/tuner/FilterDelayHint.aidl @@ -0,0 +1,31 @@ +/* + * Copyright 2021 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.hardware.tv.tuner; + +import android.hardware.tv.tuner.FilterDelayHintType; + +/** + * Filter Delay Hint + * Gives information to the filter to assist in delaying / accumulating filter events. + * See FilterDelayHintType for more information regarding the hintValue units. + * @hide + */ +@VintfStability +parcelable FilterDelayHint { + FilterDelayHintType hintType = FilterDelayHintType.INVALID; + int hintValue; +} diff --git a/tv/tuner/aidl/android/hardware/tv/tuner/FilterDelayHintType.aidl b/tv/tuner/aidl/android/hardware/tv/tuner/FilterDelayHintType.aidl new file mode 100644 index 0000000000..f5b1454f46 --- /dev/null +++ b/tv/tuner/aidl/android/hardware/tv/tuner/FilterDelayHintType.aidl @@ -0,0 +1,46 @@ +/* + * Copyright 2021 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.hardware.tv.tuner; + +/** + * Filter Delay Hint Type + * Specifies the type of filter delay. + * @hide + */ +@VintfStability +@Backing(type="int") +enum FilterDelayHintType { + /** + * Invalid type to be used as default value. + */ + INVALID, + + /** + * Hint that can be used by the filter implementation to make decisions about + * delaying the filter callback until a specified amount of time has passed. + * For time delays, the hint value contains time in milliseconds. + */ + TIME_DELAY_IN_MS, + + /** + * Hint that can be used by the filter implementation to make decisions about + * delaying the filter callback until a specified amount of data has been + * accumulated. + * For data size delays, the hint value contains the data size in bytes. + */ + DATA_SIZE_DELAY_IN_BYTES, +} diff --git a/tv/tuner/aidl/android/hardware/tv/tuner/IFilter.aidl b/tv/tuner/aidl/android/hardware/tv/tuner/IFilter.aidl index 63fe1dd364..28927d1715 100644 --- a/tv/tuner/aidl/android/hardware/tv/tuner/IFilter.aidl +++ b/tv/tuner/aidl/android/hardware/tv/tuner/IFilter.aidl @@ -16,14 +16,14 @@ package android.hardware.tv.tuner; +import android.hardware.common.NativeHandle; import android.hardware.common.fmq.MQDescriptor; import android.hardware.common.fmq.SynchronizedReadWrite; -import android.hardware.common.NativeHandle; - -import android.hardware.tv.tuner.DemuxFilterSettings; -import android.hardware.tv.tuner.IFilter; import android.hardware.tv.tuner.AvStreamType; import android.hardware.tv.tuner.DemuxFilterMonitorEventType; +import android.hardware.tv.tuner.DemuxFilterSettings; +import android.hardware.tv.tuner.FilterDelayHint; +import android.hardware.tv.tuner.IFilter; /** * The Filter is used to filter wanted data according to the filter's @@ -187,4 +187,13 @@ interface IFilter { * use demux as data source if the filter instance is NULL. */ void setDataSource(in IFilter filter); + + /** + * Set a delay hint. + * + * A delay hint should be used by the filter to rate limit calls to on + * FilterCallback.onFilterEvent by aggregating data according to the hint's + * specification. + */ + void setDelayHint(in FilterDelayHint hint); } diff --git a/tv/tuner/aidl/default/Filter.cpp b/tv/tuner/aidl/default/Filter.cpp index bf89d12407..c377772d01 100644 --- a/tv/tuner/aidl/default/Filter.cpp +++ b/tv/tuner/aidl/default/Filter.cpp @@ -111,6 +111,14 @@ Filter::~Filter() { return ::ndk::ScopedAStatus::ok(); } +::ndk::ScopedAStatus Filter::setDelayHint(const FilterDelayHint& in_hint) { + ALOGV("%s", __FUNCTION__); + (void)in_hint; + // TODO: implement + + return ::ndk::ScopedAStatus::ok(); +} + ::ndk::ScopedAStatus Filter::getQueueDesc(MQDescriptor* out_queue) { ALOGV("%s", __FUNCTION__); diff --git a/tv/tuner/aidl/default/Filter.h b/tv/tuner/aidl/default/Filter.h index 2ca25afb3c..11bbc11709 100644 --- a/tv/tuner/aidl/default/Filter.h +++ b/tv/tuner/aidl/default/Filter.h @@ -78,6 +78,7 @@ class Filter : public BnFilter { ::ndk::ScopedAStatus releaseAvHandle(const NativeHandle& in_avMemory, int64_t in_avDataId) override; ::ndk::ScopedAStatus setDataSource(const std::shared_ptr& in_filter) override; + ::ndk::ScopedAStatus setDelayHint(const FilterDelayHint& in_hint) override; /** * To create a FilterMQ and its Event Flag.