Support standard extension frontend status

Flag: android.media.tv.flags.tuner_w_apis
Bug: 298290594
Test: atest android.media.tv.tuner.cts.TunerTest
Change-Id: Id00be92d9578da09155b04c710d653d1b86fdfea
This commit is contained in:
Ray Chin
2024-10-09 19:26:29 +08:00
parent 6a700d333d
commit 3e9405be04
9 changed files with 108 additions and 1 deletions

View File

@@ -40,5 +40,6 @@ aidl_interface {
],
},
],
frozen: false,
}

View File

@@ -0,0 +1,40 @@
/*
* Copyright 2024 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 <name>-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
union FrontendStandardExt {
android.hardware.tv.tuner.FrontendDvbsStandard dvbsStandardExt = android.hardware.tv.tuner.FrontendDvbsStandard.UNDEFINED;
android.hardware.tv.tuner.FrontendDvbtStandard dvbtStandardExt = android.hardware.tv.tuner.FrontendDvbtStandard.UNDEFINED;
}

View File

@@ -82,4 +82,5 @@ union FrontendStatus {
long iptvPacketsLost;
int iptvWorstJitterMs;
int iptvAverageJitterMs;
android.hardware.tv.tuner.FrontendStandardExt standardExt;
}

View File

@@ -82,4 +82,5 @@ enum FrontendStatusType {
IPTV_PACKETS_RECEIVED,
IPTV_WORST_JITTER_MS,
IPTV_AVERAGE_JITTER_MS,
STANDARD_EXT,
}

View File

@@ -0,0 +1,36 @@
/*
* Copyright 2024 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.FrontendDvbsStandard;
import android.hardware.tv.tuner.FrontendDvbtStandard;
/**
* @hide
*/
@VintfStability
union FrontendStandardExt {
/**
* The DVB-S standard extension after standard transition.
*/
FrontendDvbsStandard dvbsStandardExt = FrontendDvbsStandard.UNDEFINED;
/**
* The DVB-T standard extension after standard transition.
*/
FrontendDvbtStandard dvbtStandardExt = FrontendDvbtStandard.UNDEFINED;
}

View File

@@ -28,6 +28,7 @@ import android.hardware.tv.tuner.FrontendModulationStatus;
import android.hardware.tv.tuner.FrontendRollOff;
import android.hardware.tv.tuner.FrontendScanAtsc3PlpInfo;
import android.hardware.tv.tuner.FrontendSpectralInversion;
import android.hardware.tv.tuner.FrontendStandardExt;
import android.hardware.tv.tuner.FrontendStatusAtsc3PlpInfo;
import android.hardware.tv.tuner.FrontendTransmissionMode;
import android.hardware.tv.tuner.LnbVoltage;
@@ -272,4 +273,13 @@ union FrontendStatus {
* Average jitter (milliseconds).
*/
int iptvAverageJitterMs;
/**
* Standard extension.
*
* DVB-T and DVB-S can transition to another standard within the same standard series. For
* example, DVB-T can transition to DVB-T2 and back. This attribute represents the standard
* extension. Valid values include FrontendDvbtStandard.T or FrontendDvbsStandard.S2 etc.
*/
FrontendStandardExt standardExt;
}

View File

@@ -259,4 +259,9 @@ enum FrontendStatusType {
* Average jitter (milliseconds).
*/
IPTV_AVERAGE_JITTER_MS,
/**
* Standard extension.
*/
STANDARD_EXT,
}

View File

@@ -81,6 +81,7 @@ Frontend::Frontend(FrontendType type, int32_t id) {
FrontendStatusType::SIGNAL_STRENGTH, FrontendStatusType::SYMBOL_RATE,
FrontendStatusType::MODULATION, FrontendStatusType::MODULATIONS,
FrontendStatusType::ROLL_OFF, FrontendStatusType::IS_MISO,
FrontendStatusType::STANDARD_EXT,
};
break;
}
@@ -96,6 +97,7 @@ Frontend::Frontend(FrontendType type, int32_t id) {
FrontendStatusType::TRANSMISSION_MODE,
FrontendStatusType::T2_SYSTEM_ID,
FrontendStatusType::DVBT_CELL_IDS,
FrontendStatusType::STANDARD_EXT,
};
break;
}
@@ -985,6 +987,17 @@ void Frontend::scanThreadLoop() {
status.set<FrontendStatus::iptvAverageJitterMs>(5);
break;
}
case FrontendStatusType::STANDARD_EXT: {
FrontendStandardExt standardExt;
if (mType == FrontendType::DVBS) {
standardExt.set<FrontendStandardExt::dvbsStandardExt>(
FrontendDvbsStandard::S2X);
} else if (mType == FrontendType::DVBT) {
standardExt.set<FrontendStandardExt::dvbtStandardExt>(FrontendDvbtStandard::T2);
}
status.set<FrontendStatus::standardExt>(standardExt);
break;
}
default: {
continue;
}

View File

@@ -636,7 +636,7 @@ void FrontendTests::statusReadinessTest(FrontendConfig frontendConf) {
ASSERT_TRUE(tuneFrontend(frontendConf, false /*testWithDemux*/));
// TODO: find a better way to push all frontend status types
for (int32_t i = 0; i <= static_cast<int32_t>(FrontendStatusType::ATSC3_ALL_PLP_INFO); i++) {
for (int32_t i = 0; i <= static_cast<int32_t>(FrontendStatusType::STANDARD_EXT); i++) {
allTypes.push_back(static_cast<FrontendStatusType>(i));
}