mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Allow users to switch between FE source and DVR source when testing
record/descrambling/broadcast Test: atest VtsHalTvTunerV1_0TargetTest Test: atest VtsHalTvTunerV1_1TargetTest Bug: 182519645 CTS-Coverage-Bug: 184077478 Change-Id: I6c57657ac3539d6a6fb3f63d2ecc9af7f6b9e2dc
This commit is contained in:
@@ -56,9 +56,6 @@ void TunerFilterHidlTest::configSingleFilterInDemuxTest(FilterConfig filterConf,
|
||||
}
|
||||
|
||||
void TunerFilterHidlTest::testTimeFilter(TimeFilterConfig filterConf) {
|
||||
if (!timeFilter.support) {
|
||||
return;
|
||||
}
|
||||
uint32_t demuxId;
|
||||
sp<IDemux> demux;
|
||||
DemuxCapabilities caps;
|
||||
@@ -161,27 +158,36 @@ void TunerPlaybackHidlTest::playbackSingleFilterTest(FilterConfig filterConf, Dv
|
||||
|
||||
void TunerRecordHidlTest::recordSingleFilterTest(FilterConfig filterConf,
|
||||
FrontendConfig frontendConf, DvrConfig dvrConf) {
|
||||
uint32_t feId;
|
||||
uint32_t demuxId;
|
||||
sp<IDemux> demux;
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
mDvrTests.setDemux(demux);
|
||||
|
||||
DvrConfig dvrSourceConfig;
|
||||
if (mLnbId || record.hasFrontendConnection) {
|
||||
uint32_t feId;
|
||||
mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
|
||||
ASSERT_TRUE(feId != INVALID_ID);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
if (mLnbId) {
|
||||
ASSERT_TRUE(mFrontendTests.setLnb(*mLnbId));
|
||||
}
|
||||
if (frontendConf.isSoftwareFe) {
|
||||
mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[record.dvrSoftwareFeId]);
|
||||
}
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
mFrontendTests.setDvrTests(mDvrTests);
|
||||
} else {
|
||||
dvrSourceConfig = dvrMap[record.dvrSourceId];
|
||||
ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrSourceConfig.type, dvrSourceConfig.bufferSize));
|
||||
ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrSourceConfig.settings));
|
||||
ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
|
||||
}
|
||||
|
||||
uint32_t filterId;
|
||||
sp<IFilter> filter;
|
||||
|
||||
mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
|
||||
ASSERT_TRUE(feId != INVALID_ID);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
if (mLnbId) {
|
||||
ASSERT_TRUE(mFrontendTests.setLnb(*mLnbId));
|
||||
}
|
||||
if (frontendConf.isSoftwareFe) {
|
||||
mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[record.dvrSoftwareFeId]);
|
||||
}
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
mFilterTests.setDemux(demux);
|
||||
mDvrTests.setDemux(demux);
|
||||
mFrontendTests.setDvrTests(mDvrTests);
|
||||
ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrConf.type, dvrConf.bufferSize));
|
||||
ASSERT_TRUE(mDvrTests.configDvrRecord(dvrConf.settings));
|
||||
ASSERT_TRUE(mDvrTests.getDvrRecordMQDescriptor());
|
||||
@@ -195,17 +201,39 @@ void TunerRecordHidlTest::recordSingleFilterTest(FilterConfig filterConf,
|
||||
ASSERT_TRUE(mDvrTests.attachFilterToDvr(filter));
|
||||
ASSERT_TRUE(mDvrTests.startDvrRecord());
|
||||
ASSERT_TRUE(mFilterTests.startFilter(filterId));
|
||||
ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
|
||||
|
||||
if (mLnbId || record.hasFrontendConnection) {
|
||||
ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
|
||||
} else {
|
||||
// Start DVR Source
|
||||
mDvrTests.startPlaybackInputThread(dvrSourceConfig.playbackInputFile,
|
||||
dvrSourceConfig.settings.playback());
|
||||
ASSERT_TRUE(mDvrTests.startDvrPlayback());
|
||||
}
|
||||
|
||||
mDvrTests.testRecordOutput();
|
||||
mDvrTests.stopRecordThread();
|
||||
ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
|
||||
|
||||
if (mLnbId || record.hasFrontendConnection) {
|
||||
ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
|
||||
} else {
|
||||
mDvrTests.stopPlaybackThread();
|
||||
ASSERT_TRUE(mDvrTests.stopDvrPlayback());
|
||||
}
|
||||
|
||||
ASSERT_TRUE(mFilterTests.stopFilter(filterId));
|
||||
ASSERT_TRUE(mDvrTests.stopDvrRecord());
|
||||
ASSERT_TRUE(mDvrTests.detachFilterToDvr(filter));
|
||||
ASSERT_TRUE(mFilterTests.closeFilter(filterId));
|
||||
mDvrTests.closeDvrRecord();
|
||||
|
||||
if (mLnbId || record.hasFrontendConnection) {
|
||||
ASSERT_TRUE(mFrontendTests.closeFrontend());
|
||||
} else {
|
||||
mDvrTests.closeDvrPlayback();
|
||||
}
|
||||
|
||||
ASSERT_TRUE(mDemuxTests.closeDemux());
|
||||
ASSERT_TRUE(mFrontendTests.closeFrontend());
|
||||
}
|
||||
|
||||
void TunerRecordHidlTest::recordSingleFilterTestWithLnb(FilterConfig filterConf,
|
||||
@@ -236,23 +264,28 @@ void TunerRecordHidlTest::recordSingleFilterTestWithLnb(FilterConfig filterConf,
|
||||
void TunerRecordHidlTest::attachSingleFilterToRecordDvrTest(FilterConfig filterConf,
|
||||
FrontendConfig frontendConf,
|
||||
DvrConfig dvrConf) {
|
||||
uint32_t feId;
|
||||
uint32_t demuxId;
|
||||
sp<IDemux> demux;
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
|
||||
if (record.hasFrontendConnection) {
|
||||
uint32_t feId;
|
||||
mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
|
||||
ASSERT_TRUE(feId != INVALID_ID);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
}
|
||||
|
||||
uint32_t filterId;
|
||||
sp<IFilter> filter;
|
||||
|
||||
mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
|
||||
ASSERT_TRUE(feId != INVALID_ID);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
mFilterTests.setDemux(demux);
|
||||
|
||||
mDvrTests.setDemux(demux);
|
||||
ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrConf.type, dvrConf.bufferSize));
|
||||
ASSERT_TRUE(mDvrTests.configDvrRecord(dvrConf.settings));
|
||||
ASSERT_TRUE(mDvrTests.getDvrRecordMQDescriptor());
|
||||
|
||||
ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
|
||||
ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(filterId));
|
||||
ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
|
||||
@@ -268,30 +301,42 @@ void TunerRecordHidlTest::attachSingleFilterToRecordDvrTest(FilterConfig filterC
|
||||
ASSERT_TRUE(mFilterTests.closeFilter(filterId));
|
||||
mDvrTests.closeDvrRecord();
|
||||
ASSERT_TRUE(mDemuxTests.closeDemux());
|
||||
ASSERT_TRUE(mFrontendTests.closeFrontend());
|
||||
|
||||
if (record.hasFrontendConnection) {
|
||||
ASSERT_TRUE(mFrontendTests.closeFrontend());
|
||||
}
|
||||
}
|
||||
|
||||
void TunerDescramblerHidlTest::scrambledBroadcastTest(set<struct FilterConfig> mediaFilterConfs,
|
||||
FrontendConfig frontendConf,
|
||||
DescramblerConfig descConfig) {
|
||||
uint32_t feId;
|
||||
uint32_t demuxId;
|
||||
sp<IDemux> demux;
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
|
||||
DvrConfig dvrSourceConfig;
|
||||
if (descrambling.hasFrontendConnection) {
|
||||
uint32_t feId;
|
||||
mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
if (frontendConf.isSoftwareFe) {
|
||||
mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[descrambling.dvrSoftwareFeId]);
|
||||
}
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
mFrontendTests.setDemux(demux);
|
||||
} else {
|
||||
dvrSourceConfig = dvrMap[descrambling.dvrSourceId];
|
||||
ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrSourceConfig.type, dvrSourceConfig.bufferSize));
|
||||
ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrSourceConfig.settings));
|
||||
ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
|
||||
}
|
||||
|
||||
set<uint32_t> filterIds;
|
||||
uint32_t filterId;
|
||||
set<struct FilterConfig>::iterator config;
|
||||
set<uint32_t>::iterator id;
|
||||
|
||||
mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
if (frontendConf.isSoftwareFe) {
|
||||
mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[descrambling.dvrSoftwareFeId]);
|
||||
}
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
mFilterTests.setDemux(demux);
|
||||
mFrontendTests.setDemux(demux);
|
||||
for (config = mediaFilterConfs.begin(); config != mediaFilterConfs.end(); config++) {
|
||||
ASSERT_TRUE(mFilterTests.openFilterInDemux((*config).type, (*config).bufferSize));
|
||||
ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(filterId));
|
||||
@@ -314,10 +359,26 @@ void TunerDescramblerHidlTest::scrambledBroadcastTest(set<struct FilterConfig> m
|
||||
for (id = filterIds.begin(); id != filterIds.end(); id++) {
|
||||
ASSERT_TRUE(mFilterTests.startFilter(*id));
|
||||
}
|
||||
// tune test
|
||||
ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
|
||||
|
||||
if (descrambling.hasFrontendConnection) {
|
||||
// tune test
|
||||
ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
|
||||
} else {
|
||||
// Start DVR Source
|
||||
mDvrTests.startPlaybackInputThread(dvrSourceConfig.playbackInputFile,
|
||||
dvrSourceConfig.settings.playback());
|
||||
ASSERT_TRUE(mDvrTests.startDvrPlayback());
|
||||
}
|
||||
|
||||
ASSERT_TRUE(filterDataOutputTest());
|
||||
ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
|
||||
|
||||
if (descrambling.hasFrontendConnection) {
|
||||
ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
|
||||
} else {
|
||||
mDvrTests.stopPlaybackThread();
|
||||
ASSERT_TRUE(mDvrTests.stopDvrPlayback());
|
||||
}
|
||||
|
||||
for (id = filterIds.begin(); id != filterIds.end(); id++) {
|
||||
ASSERT_TRUE(mFilterTests.stopFilter(*id));
|
||||
}
|
||||
@@ -328,27 +389,45 @@ void TunerDescramblerHidlTest::scrambledBroadcastTest(set<struct FilterConfig> m
|
||||
for (id = filterIds.begin(); id != filterIds.end(); id++) {
|
||||
ASSERT_TRUE(mFilterTests.closeFilter(*id));
|
||||
}
|
||||
|
||||
if (descrambling.hasFrontendConnection) {
|
||||
ASSERT_TRUE(mFrontendTests.closeFrontend());
|
||||
} else {
|
||||
mDvrTests.closeDvrPlayback();
|
||||
}
|
||||
|
||||
ASSERT_TRUE(mDemuxTests.closeDemux());
|
||||
ASSERT_TRUE(mFrontendTests.closeFrontend());
|
||||
}
|
||||
|
||||
TEST_P(TunerFrontendHidlTest, TuneFrontend) {
|
||||
description("Tune one Frontend with specific setting and check Lock event");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
mFrontendTests.tuneTest(frontendMap[live.frontendId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerFrontendHidlTest, AutoScanFrontend) {
|
||||
description("Run an auto frontend scan with specific setting and check lock scanMessage");
|
||||
if (!scan.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
mFrontendTests.scanTest(frontendMap[scan.frontendId], FrontendScanType::SCAN_AUTO);
|
||||
}
|
||||
|
||||
TEST_P(TunerFrontendHidlTest, BlindScanFrontend) {
|
||||
description("Run an blind frontend scan with specific setting and check lock scanMessage");
|
||||
if (!scan.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
mFrontendTests.scanTest(frontendMap[scan.frontendId], FrontendScanType::SCAN_BLIND);
|
||||
}
|
||||
|
||||
TEST_P(TunerLnbHidlTest, SendDiseqcMessageToLnb) {
|
||||
description("Open and configure an Lnb with specific settings then send a diseqc msg to it.");
|
||||
if (!lnbLive.support) {
|
||||
return;
|
||||
}
|
||||
if (lnbMap[lnbLive.lnbId].name.compare(emptyHardwareId) == 0) {
|
||||
vector<uint32_t> ids;
|
||||
ASSERT_TRUE(mLnbTests.getLnbIds(ids));
|
||||
@@ -370,6 +449,9 @@ TEST_P(TunerLnbHidlTest, SendDiseqcMessageToLnb) {
|
||||
|
||||
TEST_P(TunerDemuxHidlTest, openDemux) {
|
||||
description("Open and close a Demux.");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
uint32_t feId;
|
||||
uint32_t demuxId;
|
||||
sp<IDemux> demux;
|
||||
@@ -385,6 +467,9 @@ TEST_P(TunerDemuxHidlTest, openDemux) {
|
||||
|
||||
TEST_P(TunerDemuxHidlTest, getAvSyncTime) {
|
||||
description("Get the A/V sync time from a PCR filter.");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
if (live.pcrFilterId.compare(emptyHardwareId) == 0) {
|
||||
return;
|
||||
}
|
||||
@@ -423,6 +508,9 @@ TEST_P(TunerDemuxHidlTest, getAvSyncTime) {
|
||||
|
||||
TEST_P(TunerFilterHidlTest, StartFilterInDemux) {
|
||||
description("Open and start a filter in Demux.");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
// TODO use paramterized tests
|
||||
configSingleFilterInDemuxTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
|
||||
}
|
||||
@@ -457,22 +545,34 @@ TEST_P(TunerFilterHidlTest, SetFilterLinkage) {
|
||||
|
||||
TEST_P(TunerFilterHidlTest, testTimeFilter) {
|
||||
description("Open a timer filter in Demux and set time stamp.");
|
||||
if (!timeFilter.support) {
|
||||
return;
|
||||
}
|
||||
// TODO use paramterized tests
|
||||
testTimeFilter(timeFilterMap[timeFilter.timeFilterId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerBroadcastHidlTest, BroadcastDataFlowVideoFilterTest) {
|
||||
description("Test Video Filter functionality in Broadcast use case.");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
broadcastSingleFilterTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerBroadcastHidlTest, BroadcastDataFlowAudioFilterTest) {
|
||||
description("Test Audio Filter functionality in Broadcast use case.");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
broadcastSingleFilterTest(filterMap[live.audioFilterId], frontendMap[live.frontendId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerBroadcastHidlTest, BroadcastDataFlowSectionFilterTest) {
|
||||
description("Test Section Filter functionality in Broadcast use case.");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
if (live.sectionFilterId.compare(emptyHardwareId) == 0) {
|
||||
return;
|
||||
}
|
||||
@@ -481,6 +581,9 @@ TEST_P(TunerBroadcastHidlTest, BroadcastDataFlowSectionFilterTest) {
|
||||
|
||||
TEST_P(TunerBroadcastHidlTest, IonBufferTest) {
|
||||
description("Test the av filter data bufferring.");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
broadcastSingleFilterTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
|
||||
}
|
||||
|
||||
@@ -501,6 +604,22 @@ TEST_P(TunerPlaybackHidlTest, PlaybackDataFlowWithTsSectionFilterTest) {
|
||||
playbackSingleFilterTest(filterMap[playback.sectionFilterId], dvrMap[playback.dvrId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerPlaybackHidlTest, PlaybackDataFlowWithTsAudioFilterTest) {
|
||||
description("Feed ts data from playback and configure Ts audio filter to get output");
|
||||
if (!playback.support) {
|
||||
return;
|
||||
}
|
||||
playbackSingleFilterTest(filterMap[playback.audioFilterId], dvrMap[playback.dvrId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerPlaybackHidlTest, PlaybackDataFlowWithTsVideoFilterTest) {
|
||||
description("Feed ts data from playback and configure Ts video filter to get output");
|
||||
if (!playback.support) {
|
||||
return;
|
||||
}
|
||||
playbackSingleFilterTest(filterMap[playback.videoFilterId], dvrMap[playback.dvrId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerRecordHidlTest, AttachFiltersToRecordTest) {
|
||||
description("Attach a single filter to the record dvr test.");
|
||||
// TODO use paramterized tests
|
||||
@@ -535,19 +654,26 @@ TEST_P(TunerDescramblerHidlTest, CreateDescrambler) {
|
||||
if (descrambling.support) {
|
||||
return;
|
||||
}
|
||||
uint32_t feId;
|
||||
uint32_t demuxId;
|
||||
sp<IDemux> demux;
|
||||
mFrontendTests.getFrontendIdByType(frontendMap[descrambling.frontendId].type, feId);
|
||||
ASSERT_TRUE(feId != INVALID_ID);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
|
||||
if (descrambling.hasFrontendConnection) {
|
||||
uint32_t feId;
|
||||
mFrontendTests.getFrontendIdByType(frontendMap[descrambling.frontendId].type, feId);
|
||||
ASSERT_TRUE(feId != INVALID_ID);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
}
|
||||
|
||||
ASSERT_TRUE(mDescramblerTests.openDescrambler(demuxId));
|
||||
ASSERT_TRUE(mDescramblerTests.closeDescrambler());
|
||||
ASSERT_TRUE(mDemuxTests.closeDemux());
|
||||
ASSERT_TRUE(mFrontendTests.closeFrontend());
|
||||
|
||||
if (descrambling.hasFrontendConnection) {
|
||||
ASSERT_TRUE(mFrontendTests.closeFrontend());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_P(TunerDescramblerHidlTest, ScrambledBroadcastDataFlowMediaFiltersTest) {
|
||||
|
||||
@@ -150,10 +150,32 @@ inline void connectHardwaresToTestCases() {
|
||||
};
|
||||
|
||||
inline bool validateConnections() {
|
||||
bool feIsValid = frontendMap.find(live.frontendId) != frontendMap.end() &&
|
||||
frontendMap.find(scan.frontendId) != frontendMap.end();
|
||||
feIsValid &= record.support ? frontendMap.find(record.frontendId) != frontendMap.end() : true;
|
||||
feIsValid &= descrambling.support
|
||||
if ((!live.hasFrontendConnection || !scan.hasFrontendConnection) && !playback.support) {
|
||||
ALOGW("[vts config] VTS must support either a DVR source or a Frontend source.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (record.support && !record.hasFrontendConnection &&
|
||||
record.dvrSourceId.compare(emptyHardwareId) == 0) {
|
||||
ALOGW("[vts config] Record must support either a DVR source or a Frontend source.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (descrambling.support && !descrambling.hasFrontendConnection &&
|
||||
descrambling.dvrSourceId.compare(emptyHardwareId) == 0) {
|
||||
ALOGW("[vts config] Descrambling must support either a DVR source or a Frontend source.");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool feIsValid = live.hasFrontendConnection
|
||||
? frontendMap.find(live.frontendId) != frontendMap.end()
|
||||
: true;
|
||||
feIsValid &= scan.hasFrontendConnection ? frontendMap.find(scan.frontendId) != frontendMap.end()
|
||||
: true;
|
||||
feIsValid &= record.support && record.hasFrontendConnection
|
||||
? frontendMap.find(record.frontendId) != frontendMap.end()
|
||||
: true;
|
||||
feIsValid &= (descrambling.support && descrambling.hasFrontendConnection)
|
||||
? frontendMap.find(descrambling.frontendId) != frontendMap.end()
|
||||
: true;
|
||||
feIsValid &= lnbLive.support ? frontendMap.find(lnbLive.frontendId) != frontendMap.end() : true;
|
||||
@@ -165,18 +187,28 @@ inline bool validateConnections() {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dvrIsValid = frontendMap[live.frontendId].isSoftwareFe
|
||||
bool dvrIsValid = (live.hasFrontendConnection && frontendMap[live.frontendId].isSoftwareFe)
|
||||
? dvrMap.find(live.dvrSoftwareFeId) != dvrMap.end()
|
||||
: true;
|
||||
dvrIsValid &= playback.support ? dvrMap.find(playback.dvrId) != dvrMap.end() : true;
|
||||
if (record.support) {
|
||||
if (frontendMap[record.frontendId].isSoftwareFe) {
|
||||
dvrIsValid &= dvrMap.find(record.dvrSoftwareFeId) != dvrMap.end();
|
||||
if (record.hasFrontendConnection) {
|
||||
if (frontendMap[record.frontendId].isSoftwareFe) {
|
||||
dvrIsValid &= dvrMap.find(record.dvrSoftwareFeId) != dvrMap.end();
|
||||
}
|
||||
} else {
|
||||
dvrIsValid &= dvrMap.find(record.dvrSourceId) != dvrMap.end();
|
||||
}
|
||||
dvrIsValid &= dvrMap.find(record.dvrRecordId) != dvrMap.end();
|
||||
}
|
||||
if (descrambling.support && frontendMap[descrambling.frontendId].isSoftwareFe) {
|
||||
dvrIsValid &= dvrMap.find(descrambling.dvrSoftwareFeId) != dvrMap.end();
|
||||
if (descrambling.support) {
|
||||
if (descrambling.hasFrontendConnection) {
|
||||
if (frontendMap[descrambling.frontendId].isSoftwareFe) {
|
||||
dvrIsValid &= dvrMap.find(descrambling.dvrSoftwareFeId) != dvrMap.end();
|
||||
}
|
||||
} else {
|
||||
dvrIsValid &= dvrMap.find(descrambling.dvrSourceId) != dvrMap.end();
|
||||
}
|
||||
}
|
||||
|
||||
if (!dvrIsValid) {
|
||||
|
||||
@@ -392,6 +392,10 @@ void Demux::setIsRecording(bool isRecording) {
|
||||
mIsRecording = isRecording;
|
||||
}
|
||||
|
||||
bool Demux::isRecording() {
|
||||
return mIsRecording;
|
||||
}
|
||||
|
||||
bool Demux::attachRecordFilter(uint64_t filterId) {
|
||||
if (mFilters[filterId] == nullptr || mDvrRecord == nullptr ||
|
||||
!mFilters[filterId]->isRecordFilter()) {
|
||||
|
||||
@@ -85,6 +85,7 @@ class Demux : public IDemux {
|
||||
void updateMediaFilterOutput(uint64_t filterId, vector<uint8_t> data, uint64_t pts);
|
||||
uint16_t getFilterTpid(uint64_t filterId);
|
||||
void setIsRecording(bool isRecording);
|
||||
bool isRecording();
|
||||
void startFrontendInputLoop();
|
||||
|
||||
/**
|
||||
|
||||
@@ -218,19 +218,26 @@ void Dvr::playbackThreadLoop() {
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the both dvr playback and dvr record are created, the playback will be treated as
|
||||
// the source of the record. isVirtualFrontend set to true would direct the dvr playback
|
||||
// input to the demux record filters or live broadcast filters.
|
||||
bool isRecording = mDemux->isRecording();
|
||||
bool isVirtualFrontend = isRecording;
|
||||
|
||||
if (mDvrSettings.playback().dataFormat == DataFormat::ES) {
|
||||
if (!processEsDataOnPlayback(false /*isVirtualFrontend*/, false /*isRecording*/)) {
|
||||
if (!processEsDataOnPlayback(isVirtualFrontend, isRecording)) {
|
||||
ALOGE("[Dvr] playback es data failed to be filtered. Ending thread");
|
||||
break;
|
||||
}
|
||||
maySendPlaybackStatusCallback();
|
||||
continue;
|
||||
}
|
||||
|
||||
// Our current implementation filter the data and write it into the filter FMQ immediately
|
||||
// after the DATA_READY from the VTS/framework
|
||||
// This is for the non-ES data source, real playback use case handling.
|
||||
if (!readPlaybackFMQ(false /*isVirtualFrontend*/, false /*isRecording*/) ||
|
||||
!startFilterDispatcher(false /*isVirtualFrontend*/, false /*isRecording*/)) {
|
||||
if (!readPlaybackFMQ(isVirtualFrontend, isRecording) ||
|
||||
!startFilterDispatcher(isVirtualFrontend, isRecording)) {
|
||||
ALOGE("[Dvr] playback data failed to be filtered. Ending thread");
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -22,10 +22,6 @@ AssertionResult TunerBroadcastHidlTest::filterDataOutputTest() {
|
||||
return filterDataOutputTestBase(mFilterTests);
|
||||
}
|
||||
|
||||
AssertionResult TunerRecordHidlTest::filterDataOutputTest() {
|
||||
return filterDataOutputTestBase(mFilterTests);
|
||||
}
|
||||
|
||||
void TunerFilterHidlTest::configSingleFilterInDemuxTest(FilterConfig1_1 filterConf,
|
||||
FrontendConfig1_1 frontendConf) {
|
||||
uint32_t feId;
|
||||
@@ -70,6 +66,9 @@ void TunerFilterHidlTest::reconfigSingleFilterInDemuxTest(FilterConfig1_1 filter
|
||||
ASSERT_TRUE(feId != INVALID_ID);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
if (frontendConf.config1_0.isSoftwareFe) {
|
||||
mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[live.dvrSoftwareFeId]);
|
||||
}
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
mFrontendTests.setDemux(demux);
|
||||
@@ -103,6 +102,9 @@ void TunerBroadcastHidlTest::mediaFilterUsingSharedMemoryTest(FilterConfig1_1 fi
|
||||
ASSERT_TRUE(feId != INVALID_ID);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
if (frontendConf.config1_0.isSoftwareFe) {
|
||||
mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[live.dvrSoftwareFeId]);
|
||||
}
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
mFrontendTests.setDemux(demux);
|
||||
@@ -129,21 +131,33 @@ void TunerBroadcastHidlTest::mediaFilterUsingSharedMemoryTest(FilterConfig1_1 fi
|
||||
void TunerRecordHidlTest::recordSingleFilterTest(FilterConfig1_1 filterConf,
|
||||
FrontendConfig1_1 frontendConf,
|
||||
DvrConfig dvrConf) {
|
||||
uint32_t feId;
|
||||
uint32_t demuxId;
|
||||
sp<IDemux> demux;
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
mDvrTests.setDemux(demux);
|
||||
|
||||
DvrConfig dvrSourceConfig;
|
||||
if (record.hasFrontendConnection) {
|
||||
uint32_t feId;
|
||||
mFrontendTests.getFrontendIdByType(frontendConf.config1_0.type, feId);
|
||||
ASSERT_TRUE(feId != INVALID_ID);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
if (frontendConf.config1_0.isSoftwareFe) {
|
||||
mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[record.dvrSoftwareFeId]);
|
||||
}
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
mFrontendTests.setDvrTests(mDvrTests);
|
||||
} else {
|
||||
dvrSourceConfig = dvrMap[record.dvrSourceId];
|
||||
ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrSourceConfig.type, dvrSourceConfig.bufferSize));
|
||||
ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrSourceConfig.settings));
|
||||
ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
|
||||
}
|
||||
|
||||
uint64_t filterId;
|
||||
sp<IFilter> filter;
|
||||
|
||||
mFrontendTests.getFrontendIdByType(frontendConf.config1_0.type, feId);
|
||||
ASSERT_TRUE(feId != INVALID_ID);
|
||||
ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
|
||||
ASSERT_TRUE(mFrontendTests.setFrontendCallback());
|
||||
ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
|
||||
ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
|
||||
mFilterTests.setDemux(demux);
|
||||
mDvrTests.setDemux(demux);
|
||||
mFrontendTests.setDvrTests(mDvrTests);
|
||||
ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrConf.type, dvrConf.bufferSize));
|
||||
ASSERT_TRUE(mDvrTests.configDvrRecord(dvrConf.settings));
|
||||
ASSERT_TRUE(mDvrTests.getDvrRecordMQDescriptor());
|
||||
@@ -158,22 +172,46 @@ void TunerRecordHidlTest::recordSingleFilterTest(FilterConfig1_1 filterConf,
|
||||
ASSERT_TRUE(mDvrTests.attachFilterToDvr(filter));
|
||||
ASSERT_TRUE(mDvrTests.startDvrRecord());
|
||||
ASSERT_TRUE(mFilterTests.startFilter(filterId));
|
||||
ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
|
||||
|
||||
if (record.hasFrontendConnection) {
|
||||
ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
|
||||
} else {
|
||||
// Start DVR Source
|
||||
mDvrTests.startPlaybackInputThread(dvrSourceConfig.playbackInputFile,
|
||||
dvrSourceConfig.settings.playback());
|
||||
ASSERT_TRUE(mDvrTests.startDvrPlayback());
|
||||
}
|
||||
|
||||
mDvrTests.testRecordOutput();
|
||||
ASSERT_TRUE(filterDataOutputTest());
|
||||
mDvrTests.stopRecordThread();
|
||||
ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
|
||||
|
||||
if (record.hasFrontendConnection) {
|
||||
ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
|
||||
} else {
|
||||
mDvrTests.stopPlaybackThread();
|
||||
ASSERT_TRUE(mDvrTests.stopDvrPlayback());
|
||||
}
|
||||
|
||||
ASSERT_TRUE(mFilterTests.stopFilter(filterId));
|
||||
ASSERT_TRUE(mDvrTests.stopDvrRecord());
|
||||
ASSERT_TRUE(mDvrTests.detachFilterToDvr(filter));
|
||||
ASSERT_TRUE(mFilterTests.closeFilter(filterId));
|
||||
mDvrTests.closeDvrRecord();
|
||||
|
||||
if (record.hasFrontendConnection) {
|
||||
ASSERT_TRUE(mFrontendTests.closeFrontend());
|
||||
} else {
|
||||
mDvrTests.closeDvrPlayback();
|
||||
}
|
||||
|
||||
ASSERT_TRUE(mDemuxTests.closeDemux());
|
||||
ASSERT_TRUE(mFrontendTests.closeFrontend());
|
||||
}
|
||||
|
||||
TEST_P(TunerFilterHidlTest, StartFilterInDemux) {
|
||||
description("Open and start a filter in Demux.");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
// TODO use parameterized tests
|
||||
configSingleFilterInDemuxTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
|
||||
}
|
||||
@@ -181,6 +219,9 @@ TEST_P(TunerFilterHidlTest, StartFilterInDemux) {
|
||||
TEST_P(TunerFilterHidlTest, ConfigIpFilterInDemuxWithCid) {
|
||||
description("Open and configure an ip filter in Demux.");
|
||||
// TODO use parameterized tests
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
if (live.ipFilterId.compare(emptyHardwareId) == 0) {
|
||||
return;
|
||||
}
|
||||
@@ -189,6 +230,9 @@ TEST_P(TunerFilterHidlTest, ConfigIpFilterInDemuxWithCid) {
|
||||
|
||||
TEST_P(TunerFilterHidlTest, ReconfigFilterToReceiveStartId) {
|
||||
description("Recofigure and restart a filter to test start id.");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
// TODO use parameterized tests
|
||||
reconfigSingleFilterInDemuxTest(filterMap[live.videoFilterId], filterMap[live.videoFilterId],
|
||||
frontendMap[live.frontendId]);
|
||||
@@ -205,16 +249,25 @@ TEST_P(TunerRecordHidlTest, RecordDataFlowWithTsRecordFilterTest) {
|
||||
|
||||
TEST_P(TunerFrontendHidlTest, TuneFrontendWithFrontendSettingsExt1_1) {
|
||||
description("Tune one Frontend with v1_1 extended setting and check Lock event");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
mFrontendTests.tuneTest(frontendMap[live.frontendId]);
|
||||
}
|
||||
|
||||
TEST_P(TunerFrontendHidlTest, BlindScanFrontendWithEndFrequency) {
|
||||
description("Run an blind frontend scan with v1_1 extended setting and check lock scanMessage");
|
||||
if (!scan.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
mFrontendTests.scanTest(frontendMap[scan.frontendId], FrontendScanType::SCAN_BLIND);
|
||||
}
|
||||
|
||||
TEST_P(TunerBroadcastHidlTest, MediaFilterWithSharedMemoryHandle) {
|
||||
description("Test the Media Filter with shared memory handle");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
mediaFilterUsingSharedMemoryTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
|
||||
}
|
||||
|
||||
@@ -225,6 +278,9 @@ TEST_P(TunerFrontendHidlTest, GetFrontendDtmbCaps) {
|
||||
|
||||
TEST_P(TunerFrontendHidlTest, LinkToCiCam) {
|
||||
description("Test Frontend link to CiCam");
|
||||
if (!live.hasFrontendConnection) {
|
||||
return;
|
||||
}
|
||||
if (!frontendMap[live.frontendId].canConnectToCiCam) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -97,7 +97,6 @@ class TunerRecordHidlTest : public testing::TestWithParam<std::string> {
|
||||
|
||||
void recordSingleFilterTest(FilterConfig1_1 filterConf, FrontendConfig1_1 frontendConf,
|
||||
DvrConfig dvrConf);
|
||||
AssertionResult filterDataOutputTest();
|
||||
|
||||
sp<ITuner> mService;
|
||||
FrontendTests mFrontendTests;
|
||||
|
||||
@@ -148,6 +148,11 @@ inline void connectHardwaresToTestCases() {
|
||||
};
|
||||
|
||||
inline bool validateConnections() {
|
||||
if (record.support && !record.hasFrontendConnection &&
|
||||
record.dvrSourceId.compare(emptyHardwareId) == 0) {
|
||||
ALOGW("[vts config] Record must support either a DVR source or a Frontend source.");
|
||||
return false;
|
||||
}
|
||||
bool feIsValid = frontendMap.find(live.frontendId) != frontendMap.end() &&
|
||||
frontendMap.find(scan.frontendId) != frontendMap.end();
|
||||
feIsValid &= record.support ? frontendMap.find(record.frontendId) != frontendMap.end() : true;
|
||||
@@ -160,9 +165,14 @@ inline bool validateConnections() {
|
||||
bool dvrIsValid = frontendMap[live.frontendId].config1_0.isSoftwareFe
|
||||
? dvrMap.find(live.dvrSoftwareFeId) != dvrMap.end()
|
||||
: true;
|
||||
|
||||
if (record.support) {
|
||||
if (frontendMap[record.frontendId].config1_0.isSoftwareFe) {
|
||||
dvrIsValid &= dvrMap.find(record.dvrSoftwareFeId) != dvrMap.end();
|
||||
if (record.hasFrontendConnection) {
|
||||
if (frontendMap[record.frontendId].config1_0.isSoftwareFe) {
|
||||
dvrIsValid &= dvrMap.find(record.dvrSoftwareFeId) != dvrMap.end();
|
||||
}
|
||||
} else {
|
||||
dvrIsValid &= dvrMap.find(record.dvrSourceId) != dvrMap.end();
|
||||
}
|
||||
dvrIsValid &= dvrMap.find(record.dvrRecordId) != dvrMap.end();
|
||||
}
|
||||
|
||||
@@ -123,6 +123,7 @@ struct DescramblerConfig {
|
||||
};
|
||||
|
||||
struct LiveBroadcastHardwareConnections {
|
||||
bool hasFrontendConnection;
|
||||
string frontendId;
|
||||
string dvrSoftwareFeId;
|
||||
string audioFilterId;
|
||||
@@ -134,6 +135,7 @@ struct LiveBroadcastHardwareConnections {
|
||||
};
|
||||
|
||||
struct ScanHardwareConnections {
|
||||
bool hasFrontendConnection;
|
||||
string frontendId;
|
||||
};
|
||||
|
||||
@@ -149,19 +151,23 @@ struct DvrPlaybackHardwareConnections {
|
||||
|
||||
struct DvrRecordHardwareConnections {
|
||||
bool support;
|
||||
bool hasFrontendConnection;
|
||||
string frontendId;
|
||||
string dvrRecordId;
|
||||
string dvrSoftwareFeId;
|
||||
string recordFilterId;
|
||||
string dvrSourceId;
|
||||
};
|
||||
|
||||
struct DescramblingHardwareConnections {
|
||||
bool support;
|
||||
bool hasFrontendConnection;
|
||||
string frontendId;
|
||||
string dvrSoftwareFeId;
|
||||
string audioFilterId;
|
||||
string videoFilterId;
|
||||
string descramblerId;
|
||||
string dvrSourceId;
|
||||
/* list string of extra filters; */
|
||||
};
|
||||
|
||||
@@ -402,7 +408,14 @@ struct TunerTestingConfigReader1_0 {
|
||||
}
|
||||
|
||||
static void connectLiveBroadcast(LiveBroadcastHardwareConnections& live) {
|
||||
auto liveConfig = *getDataFlowConfiguration().getFirstClearLiveBroadcast();
|
||||
auto dataFlow = getDataFlowConfiguration();
|
||||
if (dataFlow.hasClearLiveBroadcast()) {
|
||||
live.hasFrontendConnection = true;
|
||||
} else {
|
||||
live.hasFrontendConnection = false;
|
||||
return;
|
||||
}
|
||||
auto liveConfig = *dataFlow.getFirstClearLiveBroadcast();
|
||||
live.frontendId = liveConfig.getFrontendConnection();
|
||||
|
||||
live.audioFilterId = liveConfig.getAudioFilterConnection();
|
||||
@@ -428,8 +441,15 @@ struct TunerTestingConfigReader1_0 {
|
||||
}
|
||||
|
||||
static void connectScan(ScanHardwareConnections& scan) {
|
||||
auto scanConfig = getDataFlowConfiguration().getFirstScan();
|
||||
scan.frontendId = scanConfig->getFrontendConnection();
|
||||
auto dataFlow = getDataFlowConfiguration();
|
||||
if (dataFlow.hasScan()) {
|
||||
scan.hasFrontendConnection = true;
|
||||
} else {
|
||||
scan.hasFrontendConnection = false;
|
||||
return;
|
||||
}
|
||||
auto scanConfig = *dataFlow.getFirstScan();
|
||||
scan.frontendId = scanConfig.getFrontendConnection();
|
||||
}
|
||||
|
||||
static void connectDvrPlayback(DvrPlaybackHardwareConnections& playback) {
|
||||
@@ -437,6 +457,7 @@ struct TunerTestingConfigReader1_0 {
|
||||
if (dataFlow.hasDvrPlayback()) {
|
||||
playback.support = true;
|
||||
} else {
|
||||
playback.support = false;
|
||||
return;
|
||||
}
|
||||
auto playbackConfig = *dataFlow.getFirstDvrPlayback();
|
||||
@@ -455,6 +476,7 @@ struct TunerTestingConfigReader1_0 {
|
||||
if (dataFlow.hasDvrRecord()) {
|
||||
record.support = true;
|
||||
} else {
|
||||
record.support = false;
|
||||
return;
|
||||
}
|
||||
auto recordConfig = *dataFlow.getFirstDvrRecord();
|
||||
@@ -464,6 +486,13 @@ struct TunerTestingConfigReader1_0 {
|
||||
if (recordConfig.hasDvrSoftwareFeConnection()) {
|
||||
record.dvrSoftwareFeId = recordConfig.getDvrSoftwareFeConnection();
|
||||
}
|
||||
if (recordConfig.getHasFrontendConnection()) {
|
||||
record.hasFrontendConnection = true;
|
||||
record.dvrSourceId = emptyHardwareId;
|
||||
} else {
|
||||
record.hasFrontendConnection = false;
|
||||
record.dvrSourceId = recordConfig.getDvrSourceConnection();
|
||||
}
|
||||
}
|
||||
|
||||
static void connectDescrambling(DescramblingHardwareConnections& descrambling) {
|
||||
@@ -471,6 +500,7 @@ struct TunerTestingConfigReader1_0 {
|
||||
if (dataFlow.hasDescrambling()) {
|
||||
descrambling.support = true;
|
||||
} else {
|
||||
descrambling.support = false;
|
||||
return;
|
||||
}
|
||||
auto descConfig = *dataFlow.getFirstDescrambling();
|
||||
@@ -481,6 +511,13 @@ struct TunerTestingConfigReader1_0 {
|
||||
if (descConfig.hasDvrSoftwareFeConnection()) {
|
||||
descrambling.dvrSoftwareFeId = descConfig.getDvrSoftwareFeConnection();
|
||||
}
|
||||
if (descConfig.getHasFrontendConnection()) {
|
||||
descrambling.hasFrontendConnection = true;
|
||||
descrambling.dvrSourceId = emptyHardwareId;
|
||||
} else {
|
||||
descrambling.hasFrontendConnection = false;
|
||||
descrambling.dvrSourceId = descConfig.getDvrSourceConnection();
|
||||
}
|
||||
}
|
||||
|
||||
static void connectLnbLive(LnbLiveHardwareConnections& lnbLive) {
|
||||
@@ -488,6 +525,7 @@ struct TunerTestingConfigReader1_0 {
|
||||
if (dataFlow.hasLnbLive()) {
|
||||
lnbLive.support = true;
|
||||
} else {
|
||||
lnbLive.support = false;
|
||||
return;
|
||||
}
|
||||
auto lnbLiveConfig = *dataFlow.getFirstLnbLive();
|
||||
@@ -507,6 +545,7 @@ struct TunerTestingConfigReader1_0 {
|
||||
if (dataFlow.hasLnbRecord()) {
|
||||
lnbRecord.support = true;
|
||||
} else {
|
||||
lnbRecord.support = false;
|
||||
return;
|
||||
}
|
||||
auto lnbRecordConfig = *dataFlow.getFirstLnbRecord();
|
||||
@@ -526,6 +565,7 @@ struct TunerTestingConfigReader1_0 {
|
||||
if (dataFlow.hasTimeFilter()) {
|
||||
timeFilter.support = true;
|
||||
} else {
|
||||
timeFilter.support = false;
|
||||
return;
|
||||
}
|
||||
auto timeFilterConfig = *dataFlow.getFirstTimeFilter();
|
||||
|
||||
@@ -54,12 +54,16 @@ package android.media.tuner.testing.configuration.V1_0 {
|
||||
method @Nullable public String getAudioFilterConnection();
|
||||
method @Nullable public String getDescramblerConnection();
|
||||
method @Nullable public String getDvrSoftwareFeConnection();
|
||||
method @Nullable public String getDvrSourceConnection();
|
||||
method @Nullable public String getFrontendConnection();
|
||||
method @Nullable public boolean getHasFrontendConnection();
|
||||
method @Nullable public String getVideoFilterConnection();
|
||||
method public void setAudioFilterConnection(@Nullable String);
|
||||
method public void setDescramblerConnection(@Nullable String);
|
||||
method public void setDvrSoftwareFeConnection(@Nullable String);
|
||||
method public void setDvrSourceConnection(@Nullable String);
|
||||
method public void setFrontendConnection(@Nullable String);
|
||||
method public void setHasFrontendConnection(@Nullable boolean);
|
||||
method public void setVideoFilterConnection(@Nullable String);
|
||||
}
|
||||
|
||||
@@ -79,11 +83,15 @@ package android.media.tuner.testing.configuration.V1_0 {
|
||||
ctor public DataFlowConfiguration.DvrRecord();
|
||||
method @Nullable public String getDvrRecordConnection();
|
||||
method @Nullable public String getDvrSoftwareFeConnection();
|
||||
method @Nullable public String getDvrSourceConnection();
|
||||
method @Nullable public String getFrontendConnection();
|
||||
method @Nullable public boolean getHasFrontendConnection();
|
||||
method @Nullable public String getRecordFilterConnection();
|
||||
method public void setDvrRecordConnection(@Nullable String);
|
||||
method public void setDvrSoftwareFeConnection(@Nullable String);
|
||||
method public void setDvrSourceConnection(@Nullable String);
|
||||
method public void setFrontendConnection(@Nullable String);
|
||||
method public void setHasFrontendConnection(@Nullable boolean);
|
||||
method public void setRecordFilterConnection(@Nullable String);
|
||||
}
|
||||
|
||||
|
||||
@@ -196,7 +196,8 @@
|
||||
sectionFilterConnection="FILTER_TS_SECTION_0"
|
||||
dvrSoftwareFeConnection="DVR_PLAYBACK_0"/>
|
||||
<scan frontendConnection="FE_DEFAULT"/>
|
||||
<descrambling frontendConnection="FE_DEFAULT"
|
||||
<descrambling hasFrontendConnection="true"
|
||||
frontendConnection="FE_DEFAULT"
|
||||
descramblerConnection="DESCRAMBLER_0"
|
||||
audioFilterConnection="FILTER_AUDIO_DEFAULT"
|
||||
videoFilterConnection="FILTER_VIDEO_DEFAULT"
|
||||
@@ -205,7 +206,8 @@
|
||||
audioFilterConnection="FILTER_AUDIO_DEFAULT"
|
||||
videoFilterConnection="FILTER_VIDEO_DEFAULT"
|
||||
sectionFilterConnection="FILTER_TS_SECTION_0"/>
|
||||
<dvrRecord frontendConnection="FE_DEFAULT"
|
||||
<dvrRecord hasFrontendConnection="true"
|
||||
frontendConnection="FE_DEFAULT"
|
||||
recordFilterConnection="FILTER_TS_RECORD_0"
|
||||
dvrRecordConnection="DVR_RECORD_0"
|
||||
dvrSoftwareFeConnection="DVR_PLAYBACK_0"/>
|
||||
|
||||
@@ -145,14 +145,15 @@
|
||||
audioFilterConnection="FILTER_AUDIO_DEFAULT"
|
||||
videoFilterConnection="FILTER_VIDEO_DEFAULT"
|
||||
ipFilterConnection="FILTER_IP_IP_0"
|
||||
dvrSoftwareFeConnection="DVR_PLAYBACK_0"/>
|
||||
dvrSoftwareFeConnection="DVR_PLAYBACK_1"/>
|
||||
<scan frontendConnection="FE_DEFAULT"/>
|
||||
<dvrPlayback dvrConnection="DVR_PLAYBACK_0"
|
||||
<dvrPlayback dvrConnection="DVR_PLAYBACK_1"
|
||||
audioFilterConnection="FILTER_AUDIO_DEFAULT"
|
||||
videoFilterConnection="FILTER_VIDEO_DEFAULT"/>
|
||||
<dvrRecord frontendConnection="FE_DEFAULT"
|
||||
<dvrRecord hasFrontendConnection="true"
|
||||
frontendConnection="FE_DEFAULT"
|
||||
recordFilterConnection="FILTER_TS_RECORD_0"
|
||||
dvrRecordConnection="DVR_RECORD_0"
|
||||
dvrSoftwareFeConnection="DVR_PLAYBACK_0"/>
|
||||
dvrSoftwareFeConnection="DVR_PLAYBACK_1"/>
|
||||
</dataFlowConfiguration>
|
||||
</TunerConfiguration>
|
||||
|
||||
@@ -587,7 +587,9 @@
|
||||
<!-- DATA FLOW CONFIGURATION SESSION -->
|
||||
<xs:complexType name="dataFlowConfiguration">
|
||||
<xs:sequence>
|
||||
<xs:element name="clearLiveBroadcast" minOccurs="1" maxOccurs="1">
|
||||
<!-- clearLiveBroadcast is only optional when there is no physical frontend. In this
|
||||
case, the dvrPlayback config is required. -->
|
||||
<xs:element name="clearLiveBroadcast" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="frontendConnection" type="frontendId" use="required"/>
|
||||
<xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
|
||||
@@ -600,20 +602,27 @@
|
||||
<xs:attribute name="dvrSoftwareFeConnection" type="dvrId" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="scan" minOccurs="1" maxOccurs="1">
|
||||
<!-- scan is only optional when there is no physical frontend. In this case, the
|
||||
dvrPlayback config is required. -->
|
||||
<xs:element name="scan" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="frontendConnection" type="frontendId" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="descrambling" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<!-- If there is a software or hardware frontend connection or not. If false,
|
||||
dvrSourceConnection config is required when testing dvrRecord. -->
|
||||
<xs:attribute name="hasFrontendConnection" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="frontendConnection" type="frontendId" use="required"/>
|
||||
<xs:attribute name="descramblerConnection" type="descramblerId" use="required"/>
|
||||
<xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
|
||||
<xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
|
||||
<!-- TODO: b/182519645 allow the users to insert extra filters -->
|
||||
<!-- DVR is only required when the frontend is using the software input -->
|
||||
<!-- This DVR is only required when the frontend is using the software input -->
|
||||
<xs:attribute name="dvrSoftwareFeConnection" type="dvrId" use="optional"/>
|
||||
<!-- This Dvr is only required when there's no frontend(sw or hw) connection -->
|
||||
<xs:attribute name="dvrSourceConnection" type="dvrId" use="optional"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="dvrPlayback" minOccurs="0" maxOccurs="1">
|
||||
@@ -627,10 +636,15 @@
|
||||
</xs:element>
|
||||
<xs:element name="dvrRecord" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="frontendConnection" type="frontendId" use="required"/>
|
||||
<!-- If there is a software or hardware frontend connection or not. If false,
|
||||
dvrSourceConnection config is required when testing dvrRecord. -->
|
||||
<xs:attribute name="hasFrontendConnection" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="frontendConnection" type="frontendId" use="optional"/>
|
||||
<xs:attribute name="dvrRecordConnection" type="dvrId" use="required"/>
|
||||
<!-- DVR is only required when the frontend is using the software input -->
|
||||
<!-- This Dvr is only required when the frontend is using the software input -->
|
||||
<xs:attribute name="dvrSoftwareFeConnection" type="dvrId" use="optional"/>
|
||||
<!-- This Dvr is only required when there's no frontend(sw or hw) connection -->
|
||||
<xs:attribute name="dvrSourceConnection" type="dvrId" use="optional"/>
|
||||
<xs:attribute name="recordFilterConnection" type="filterId" use="required"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
Reference in New Issue
Block a user