1 /*
2 * Copyright 2020 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "VtsHalTvTunerV1_0TargetTest.h"
18
19 namespace {
20
filterDataOutputTest()21 AssertionResult TunerBroadcastHidlTest::filterDataOutputTest() {
22 return filterDataOutputTestBase(mFilterTests);
23 }
24
filterDataOutputTest()25 AssertionResult TunerPlaybackHidlTest::filterDataOutputTest() {
26 return filterDataOutputTestBase(mFilterTests);
27 }
28
filterDataOutputTest()29 AssertionResult TunerDescramblerHidlTest::filterDataOutputTest() {
30 return filterDataOutputTestBase(mFilterTests);
31 }
32
configSingleFilterInDemuxTest(FilterConfig filterConf,FrontendConfig frontendConf)33 void TunerFilterHidlTest::configSingleFilterInDemuxTest(FilterConfig filterConf,
34 FrontendConfig frontendConf) {
35 uint32_t feId;
36 uint32_t demuxId;
37 sp<IDemux> demux;
38 uint32_t filterId;
39
40 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
41 ASSERT_TRUE(feId != INVALID_ID);
42 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
43 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
44 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
45 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
46 mFilterTests.setDemux(demux);
47 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
48 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(filterId));
49 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
50 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
51 ASSERT_TRUE(mFilterTests.startFilter(filterId));
52 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
53 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
54 ASSERT_TRUE(mDemuxTests.closeDemux());
55 ASSERT_TRUE(mFrontendTests.closeFrontend());
56 }
57
testTimeFilter(TimeFilterConfig filterConf)58 void TunerFilterHidlTest::testTimeFilter(TimeFilterConfig filterConf) {
59 uint32_t demuxId;
60 sp<IDemux> demux;
61 DemuxCapabilities caps;
62
63 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
64 ASSERT_TRUE(mDemuxTests.getDemuxCaps(caps));
65 ASSERT_TRUE(caps.bTimeFilter);
66 mFilterTests.setDemux(demux);
67 ASSERT_TRUE(mFilterTests.openTimeFilterInDemux());
68 ASSERT_TRUE(mFilterTests.setTimeStamp(filterConf.timeStamp));
69 ASSERT_TRUE(mFilterTests.getTimeStamp());
70 ASSERT_TRUE(mFilterTests.clearTimeStamp());
71 ASSERT_TRUE(mFilterTests.closeTimeFilter());
72 ASSERT_TRUE(mDemuxTests.closeDemux());
73 }
74
broadcastSingleFilterTest(FilterConfig filterConf,FrontendConfig frontendConf)75 void TunerBroadcastHidlTest::broadcastSingleFilterTest(FilterConfig filterConf,
76 FrontendConfig frontendConf) {
77 uint32_t feId;
78 uint32_t demuxId;
79 sp<IDemux> demux;
80 uint32_t filterId;
81
82 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
83 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
84 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
85 if (mLnbId) {
86 ASSERT_TRUE(mFrontendTests.setLnb(*mLnbId));
87 }
88 if (frontendConf.isSoftwareFe) {
89 mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[live.dvrSoftwareFeId]);
90 }
91 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
92 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
93 mFrontendTests.setDemux(demux);
94 mFilterTests.setDemux(demux);
95 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
96 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(filterId));
97 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
98 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
99 ASSERT_TRUE(mFilterTests.startFilter(filterId));
100 // tune test
101 ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
102 ASSERT_TRUE(filterDataOutputTest());
103 ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
104 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
105 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
106 ASSERT_TRUE(mDemuxTests.closeDemux());
107 ASSERT_TRUE(mFrontendTests.closeFrontend());
108 }
109
broadcastSingleFilterTestWithLnb(FilterConfig filterConf,FrontendConfig frontendConf,LnbConfig lnbConf)110 void TunerBroadcastHidlTest::broadcastSingleFilterTestWithLnb(FilterConfig filterConf,
111 FrontendConfig frontendConf,
112 LnbConfig lnbConf) {
113 if (lnbConf.name.compare(emptyHardwareId) == 0) {
114 vector<uint32_t> ids;
115 ASSERT_TRUE(mLnbTests.getLnbIds(ids));
116 ASSERT_TRUE(ids.size() > 0);
117 ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
118 mLnbId = &ids[0];
119 } else {
120 mLnbId = (uint32_t*)malloc(sizeof(uint32_t));
121 ASSERT_TRUE(mLnbTests.openLnbByName(lnbConf.name, *mLnbId));
122 }
123 ASSERT_TRUE(mLnbTests.setLnbCallback());
124 ASSERT_TRUE(mLnbTests.setVoltage(lnbConf.voltage));
125 ASSERT_TRUE(mLnbTests.setTone(lnbConf.tone));
126 ASSERT_TRUE(mLnbTests.setSatellitePosition(lnbConf.position));
127 broadcastSingleFilterTest(filterConf, frontendConf);
128 ASSERT_TRUE(mLnbTests.closeLnb());
129 mLnbId = nullptr;
130 }
131
playbackSingleFilterTest(FilterConfig filterConf,DvrConfig dvrConf)132 void TunerPlaybackHidlTest::playbackSingleFilterTest(FilterConfig filterConf, DvrConfig dvrConf) {
133 uint32_t demuxId;
134 sp<IDemux> demux;
135 uint32_t filterId;
136
137 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
138 mFilterTests.setDemux(demux);
139 mDvrTests.setDemux(demux);
140 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrConf.type, dvrConf.bufferSize));
141 ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrConf.settings));
142 ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
143 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
144 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(filterId));
145 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
146 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
147 mDvrTests.startPlaybackInputThread(dvrConf.playbackInputFile, dvrConf.settings.playback());
148 ASSERT_TRUE(mDvrTests.startDvrPlayback());
149 ASSERT_TRUE(mFilterTests.startFilter(filterId));
150 ASSERT_TRUE(filterDataOutputTest());
151 mDvrTests.stopPlaybackThread();
152 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
153 ASSERT_TRUE(mDvrTests.stopDvrPlayback());
154 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
155 mDvrTests.closeDvrPlayback();
156 ASSERT_TRUE(mDemuxTests.closeDemux());
157 }
158
recordSingleFilterTest(FilterConfig filterConf,FrontendConfig frontendConf,DvrConfig dvrConf)159 void TunerRecordHidlTest::recordSingleFilterTest(FilterConfig filterConf,
160 FrontendConfig frontendConf, DvrConfig dvrConf) {
161 uint32_t demuxId;
162 sp<IDemux> demux;
163 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
164 mDvrTests.setDemux(demux);
165
166 DvrConfig dvrSourceConfig;
167 if (mLnbId || record.hasFrontendConnection) {
168 uint32_t feId;
169 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
170 ASSERT_TRUE(feId != INVALID_ID);
171 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
172 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
173 if (mLnbId) {
174 ASSERT_TRUE(mFrontendTests.setLnb(*mLnbId));
175 }
176 if (frontendConf.isSoftwareFe) {
177 mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[record.dvrSoftwareFeId]);
178 }
179 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
180 mFrontendTests.setDvrTests(mDvrTests);
181 } else {
182 dvrSourceConfig = dvrMap[record.dvrSourceId];
183 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrSourceConfig.type, dvrSourceConfig.bufferSize));
184 ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrSourceConfig.settings));
185 ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
186 }
187
188 uint32_t filterId;
189 sp<IFilter> filter;
190 mFilterTests.setDemux(demux);
191 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrConf.type, dvrConf.bufferSize));
192 ASSERT_TRUE(mDvrTests.configDvrRecord(dvrConf.settings));
193 ASSERT_TRUE(mDvrTests.getDvrRecordMQDescriptor());
194 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
195 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(filterId));
196 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
197 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
198 filter = mFilterTests.getFilterById(filterId);
199 ASSERT_TRUE(filter != nullptr);
200 mDvrTests.startRecordOutputThread(dvrConf.settings.record());
201 ASSERT_TRUE(mDvrTests.attachFilterToDvr(filter));
202 ASSERT_TRUE(mDvrTests.startDvrRecord());
203 ASSERT_TRUE(mFilterTests.startFilter(filterId));
204
205 if (mLnbId || record.hasFrontendConnection) {
206 ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
207 } else {
208 // Start DVR Source
209 mDvrTests.startPlaybackInputThread(dvrSourceConfig.playbackInputFile,
210 dvrSourceConfig.settings.playback());
211 ASSERT_TRUE(mDvrTests.startDvrPlayback());
212 }
213
214 mDvrTests.testRecordOutput();
215 mDvrTests.stopRecordThread();
216
217 if (mLnbId || record.hasFrontendConnection) {
218 ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
219 } else {
220 mDvrTests.stopPlaybackThread();
221 ASSERT_TRUE(mDvrTests.stopDvrPlayback());
222 }
223
224 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
225 ASSERT_TRUE(mDvrTests.stopDvrRecord());
226 ASSERT_TRUE(mDvrTests.detachFilterToDvr(filter));
227 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
228 mDvrTests.closeDvrRecord();
229
230 if (mLnbId || record.hasFrontendConnection) {
231 ASSERT_TRUE(mFrontendTests.closeFrontend());
232 } else {
233 mDvrTests.closeDvrPlayback();
234 }
235
236 ASSERT_TRUE(mDemuxTests.closeDemux());
237 }
238
recordSingleFilterTestWithLnb(FilterConfig filterConf,FrontendConfig frontendConf,DvrConfig dvrConf,LnbConfig lnbConf)239 void TunerRecordHidlTest::recordSingleFilterTestWithLnb(FilterConfig filterConf,
240 FrontendConfig frontendConf,
241 DvrConfig dvrConf, LnbConfig lnbConf) {
242 if (lnbConf.name.compare(emptyHardwareId) == 0) {
243 vector<uint32_t> ids;
244 ASSERT_TRUE(mLnbTests.getLnbIds(ids));
245 ASSERT_TRUE(ids.size() > 0);
246 ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
247 mLnbId = &ids[0];
248 } else {
249 mLnbId = (uint32_t*)malloc(sizeof(uint32_t));
250 ASSERT_TRUE(mLnbTests.openLnbByName(lnbConf.name, *mLnbId));
251 }
252 ASSERT_TRUE(mLnbTests.setLnbCallback());
253 ASSERT_TRUE(mLnbTests.setVoltage(lnbConf.voltage));
254 ASSERT_TRUE(mLnbTests.setTone(lnbConf.tone));
255 ASSERT_TRUE(mLnbTests.setSatellitePosition(lnbConf.position));
256 for (auto msgName : lnbRecord.diseqcMsgs) {
257 ASSERT_TRUE(mLnbTests.sendDiseqcMessage(diseqcMsgMap[msgName]));
258 }
259 recordSingleFilterTest(filterConf, frontendConf, dvrConf);
260 ASSERT_TRUE(mLnbTests.closeLnb());
261 mLnbId = nullptr;
262 }
263
attachSingleFilterToRecordDvrTest(FilterConfig filterConf,FrontendConfig frontendConf,DvrConfig dvrConf)264 void TunerRecordHidlTest::attachSingleFilterToRecordDvrTest(FilterConfig filterConf,
265 FrontendConfig frontendConf,
266 DvrConfig dvrConf) {
267 uint32_t demuxId;
268 sp<IDemux> demux;
269 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
270 mDvrTests.setDemux(demux);
271
272 DvrConfig dvrSourceConfig;
273 if (record.hasFrontendConnection) {
274 uint32_t feId;
275 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
276 ASSERT_TRUE(feId != INVALID_ID);
277 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
278 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
279 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
280 } else {
281 dvrSourceConfig = dvrMap[record.dvrSourceId];
282 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrSourceConfig.type, dvrSourceConfig.bufferSize));
283 ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrSourceConfig.settings));
284 ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
285 }
286
287 uint32_t filterId;
288 sp<IFilter> filter;
289 mFilterTests.setDemux(demux);
290
291 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrConf.type, dvrConf.bufferSize));
292 ASSERT_TRUE(mDvrTests.configDvrRecord(dvrConf.settings));
293 ASSERT_TRUE(mDvrTests.getDvrRecordMQDescriptor());
294
295 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
296 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(filterId));
297 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
298 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
299 filter = mFilterTests.getFilterById(filterId);
300 ASSERT_TRUE(filter != nullptr);
301 ASSERT_TRUE(mDvrTests.attachFilterToDvr(filter));
302 ASSERT_TRUE(mDvrTests.startDvrRecord());
303 ASSERT_TRUE(mFilterTests.startFilter(filterId));
304 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
305 ASSERT_TRUE(mDvrTests.stopDvrRecord());
306 ASSERT_TRUE(mDvrTests.detachFilterToDvr(filter));
307 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
308 mDvrTests.closeDvrRecord();
309 ASSERT_TRUE(mDemuxTests.closeDemux());
310
311 if (record.hasFrontendConnection) {
312 ASSERT_TRUE(mFrontendTests.closeFrontend());
313 }
314 }
315
scrambledBroadcastTest(set<struct FilterConfig> mediaFilterConfs,FrontendConfig frontendConf,DescramblerConfig descConfig)316 void TunerDescramblerHidlTest::scrambledBroadcastTest(set<struct FilterConfig> mediaFilterConfs,
317 FrontendConfig frontendConf,
318 DescramblerConfig descConfig) {
319 uint32_t demuxId;
320 sp<IDemux> demux;
321 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
322
323 DvrConfig dvrSourceConfig;
324 if (descrambling.hasFrontendConnection) {
325 uint32_t feId;
326 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
327 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
328 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
329 if (frontendConf.isSoftwareFe) {
330 mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[descrambling.dvrSoftwareFeId]);
331 }
332 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
333 mFrontendTests.setDemux(demux);
334 } else {
335 dvrSourceConfig = dvrMap[descrambling.dvrSourceId];
336 mDvrTests.setDemux(demux);
337 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrSourceConfig.type, dvrSourceConfig.bufferSize));
338 ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrSourceConfig.settings));
339 ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
340 }
341
342 set<uint32_t> filterIds;
343 uint32_t filterId;
344 set<struct FilterConfig>::iterator config;
345 set<uint32_t>::iterator id;
346 mFilterTests.setDemux(demux);
347 for (config = mediaFilterConfs.begin(); config != mediaFilterConfs.end(); config++) {
348 ASSERT_TRUE(mFilterTests.openFilterInDemux((*config).type, (*config).bufferSize));
349 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(filterId));
350 ASSERT_TRUE(mFilterTests.configFilter((*config).settings, filterId));
351 filterIds.insert(filterId);
352 }
353 ASSERT_TRUE(mDescramblerTests.openDescrambler(demuxId));
354 TunerKeyToken token;
355 ASSERT_TRUE(mDescramblerTests.getKeyToken(descConfig.casSystemId, descConfig.provisionStr,
356 descConfig.hidlPvtData, token));
357 mDescramblerTests.setKeyToken(token);
358 vector<DemuxPid> pids;
359 DemuxPid pid;
360 for (config = mediaFilterConfs.begin(); config != mediaFilterConfs.end(); config++) {
361 ASSERT_TRUE(mDescramblerTests.getDemuxPidFromFilterSettings((*config).type,
362 (*config).settings, pid));
363 pids.push_back(pid);
364 ASSERT_TRUE(mDescramblerTests.addPid(pid, nullptr));
365 }
366 for (id = filterIds.begin(); id != filterIds.end(); id++) {
367 ASSERT_TRUE(mFilterTests.startFilter(*id));
368 }
369
370 if (descrambling.hasFrontendConnection) {
371 // tune test
372 ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
373 } else {
374 // Start DVR Source
375 mDvrTests.startPlaybackInputThread(dvrSourceConfig.playbackInputFile,
376 dvrSourceConfig.settings.playback());
377 ASSERT_TRUE(mDvrTests.startDvrPlayback());
378 }
379
380 ASSERT_TRUE(filterDataOutputTest());
381
382 if (descrambling.hasFrontendConnection) {
383 ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
384 } else {
385 mDvrTests.stopPlaybackThread();
386 ASSERT_TRUE(mDvrTests.stopDvrPlayback());
387 }
388
389 for (id = filterIds.begin(); id != filterIds.end(); id++) {
390 ASSERT_TRUE(mFilterTests.stopFilter(*id));
391 }
392 for (auto pid : pids) {
393 ASSERT_TRUE(mDescramblerTests.removePid(pid, nullptr));
394 }
395 ASSERT_TRUE(mDescramblerTests.closeDescrambler());
396 for (id = filterIds.begin(); id != filterIds.end(); id++) {
397 ASSERT_TRUE(mFilterTests.closeFilter(*id));
398 }
399
400 if (descrambling.hasFrontendConnection) {
401 ASSERT_TRUE(mFrontendTests.closeFrontend());
402 } else {
403 mDvrTests.closeDvrPlayback();
404 }
405
406 ASSERT_TRUE(mDemuxTests.closeDemux());
407 }
408
TEST_P(TunerFrontendHidlTest,TuneFrontend)409 TEST_P(TunerFrontendHidlTest, TuneFrontend) {
410 description("Tune one Frontend with specific setting and check Lock event");
411 if (!live.hasFrontendConnection) {
412 return;
413 }
414 mFrontendTests.tuneTest(frontendMap[live.frontendId]);
415 }
416
TEST_P(TunerFrontendHidlTest,AutoScanFrontend)417 TEST_P(TunerFrontendHidlTest, AutoScanFrontend) {
418 description("Run an auto frontend scan with specific setting and check lock scanMessage");
419 if (!scan.hasFrontendConnection) {
420 return;
421 }
422 mFrontendTests.scanTest(frontendMap[scan.frontendId], FrontendScanType::SCAN_AUTO);
423 }
424
TEST_P(TunerFrontendHidlTest,BlindScanFrontend)425 TEST_P(TunerFrontendHidlTest, BlindScanFrontend) {
426 description("Run an blind frontend scan with specific setting and check lock scanMessage");
427 if (!scan.hasFrontendConnection) {
428 return;
429 }
430 mFrontendTests.scanTest(frontendMap[scan.frontendId], FrontendScanType::SCAN_BLIND);
431 }
432
TEST_P(TunerLnbHidlTest,SendDiseqcMessageToLnb)433 TEST_P(TunerLnbHidlTest, SendDiseqcMessageToLnb) {
434 description("Open and configure an Lnb with specific settings then send a diseqc msg to it.");
435 if (!lnbLive.support) {
436 return;
437 }
438 if (lnbMap[lnbLive.lnbId].name.compare(emptyHardwareId) == 0) {
439 vector<uint32_t> ids;
440 ASSERT_TRUE(mLnbTests.getLnbIds(ids));
441 ASSERT_TRUE(ids.size() > 0);
442 ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
443 } else {
444 uint32_t id;
445 ASSERT_TRUE(mLnbTests.openLnbByName(lnbMap[lnbLive.lnbId].name, id));
446 }
447 ASSERT_TRUE(mLnbTests.setLnbCallback());
448 ASSERT_TRUE(mLnbTests.setVoltage(lnbMap[lnbLive.lnbId].voltage));
449 ASSERT_TRUE(mLnbTests.setTone(lnbMap[lnbLive.lnbId].tone));
450 ASSERT_TRUE(mLnbTests.setSatellitePosition(lnbMap[lnbLive.lnbId].position));
451 for (auto msgName : lnbLive.diseqcMsgs) {
452 ASSERT_TRUE(mLnbTests.sendDiseqcMessage(diseqcMsgMap[msgName]));
453 }
454 ASSERT_TRUE(mLnbTests.closeLnb());
455 }
456
TEST_P(TunerDemuxHidlTest,openDemux)457 TEST_P(TunerDemuxHidlTest, openDemux) {
458 description("Open and close a Demux.");
459 if (!live.hasFrontendConnection) {
460 return;
461 }
462 uint32_t feId;
463 uint32_t demuxId;
464 sp<IDemux> demux;
465 mFrontendTests.getFrontendIdByType(frontendMap[live.frontendId].type, feId);
466 ASSERT_TRUE(feId != INVALID_ID);
467 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
468 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
469 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
470 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
471 ASSERT_TRUE(mDemuxTests.closeDemux());
472 ASSERT_TRUE(mFrontendTests.closeFrontend());
473 }
474
TEST_P(TunerDemuxHidlTest,getAvSyncTime)475 TEST_P(TunerDemuxHidlTest, getAvSyncTime) {
476 description("Get the A/V sync time from a PCR filter.");
477 if (!live.hasFrontendConnection) {
478 return;
479 }
480 if (live.pcrFilterId.compare(emptyHardwareId) == 0) {
481 return;
482 }
483 uint32_t feId;
484 uint32_t demuxId;
485 sp<IDemux> demux;
486 uint32_t mediaFilterId;
487 uint32_t pcrFilterId;
488 uint32_t avSyncHwId;
489 sp<IFilter> mediaFilter;
490
491 mFrontendTests.getFrontendIdByType(frontendMap[live.frontendId].type, feId);
492 ASSERT_TRUE(feId != INVALID_ID);
493 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
494 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
495 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
496 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
497 mFilterTests.setDemux(demux);
498 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterMap[live.videoFilterId].type,
499 filterMap[live.videoFilterId].bufferSize));
500 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(mediaFilterId));
501 ASSERT_TRUE(mFilterTests.configFilter(filterMap[live.videoFilterId].settings, mediaFilterId));
502 mediaFilter = mFilterTests.getFilterById(mediaFilterId);
503 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterMap[live.pcrFilterId].type,
504 filterMap[live.pcrFilterId].bufferSize));
505 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(pcrFilterId));
506 ASSERT_TRUE(mFilterTests.configFilter(filterMap[live.pcrFilterId].settings, pcrFilterId));
507 ASSERT_TRUE(mDemuxTests.getAvSyncId(mediaFilter, avSyncHwId));
508 ASSERT_TRUE(pcrFilterId == avSyncHwId);
509 ASSERT_TRUE(mDemuxTests.getAvSyncTime(pcrFilterId));
510 ASSERT_TRUE(mFilterTests.closeFilter(pcrFilterId));
511 ASSERT_TRUE(mFilterTests.closeFilter(mediaFilterId));
512 ASSERT_TRUE(mDemuxTests.closeDemux());
513 ASSERT_TRUE(mFrontendTests.closeFrontend());
514 }
515
TEST_P(TunerFilterHidlTest,StartFilterInDemux)516 TEST_P(TunerFilterHidlTest, StartFilterInDemux) {
517 description("Open and start a filter in Demux.");
518 if (!live.hasFrontendConnection) {
519 return;
520 }
521 // TODO use paramterized tests
522 configSingleFilterInDemuxTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
523 }
524
TEST_P(TunerFilterHidlTest,SetFilterLinkage)525 TEST_P(TunerFilterHidlTest, SetFilterLinkage) {
526 description("Pick up all the possible linkages from the demux caps and set them up.");
527 DemuxCapabilities caps;
528 uint32_t demuxId;
529 sp<IDemux> demux;
530 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
531 ASSERT_TRUE(mDemuxTests.getDemuxCaps(caps));
532 mFilterTests.setDemux(demux);
533 for (int i = 0; i < caps.linkCaps.size(); i++) {
534 uint32_t bitMask = 1;
535 for (int j = 0; j < FILTER_MAIN_TYPE_BIT_COUNT; j++) {
536 if (caps.linkCaps[i] & (bitMask << j)) {
537 uint32_t sourceFilterId;
538 uint32_t sinkFilterId;
539 ASSERT_TRUE(mFilterTests.openFilterInDemux(getLinkageFilterType(i), FMQ_SIZE_16M));
540 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(sourceFilterId));
541 ASSERT_TRUE(mFilterTests.openFilterInDemux(getLinkageFilterType(j), FMQ_SIZE_16M));
542 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId(sinkFilterId));
543 ASSERT_TRUE(mFilterTests.setFilterDataSource(sourceFilterId, sinkFilterId));
544 ASSERT_TRUE(mFilterTests.setFilterDataSourceToDemux(sinkFilterId));
545 ASSERT_TRUE(mFilterTests.closeFilter(sinkFilterId));
546 ASSERT_TRUE(mFilterTests.closeFilter(sourceFilterId));
547 }
548 }
549 }
550 ASSERT_TRUE(mDemuxTests.closeDemux());
551 }
552
TEST_P(TunerFilterHidlTest,testTimeFilter)553 TEST_P(TunerFilterHidlTest, testTimeFilter) {
554 description("Open a timer filter in Demux and set time stamp.");
555 if (!timeFilter.support) {
556 return;
557 }
558 // TODO use paramterized tests
559 testTimeFilter(timeFilterMap[timeFilter.timeFilterId]);
560 }
561
TEST_P(TunerBroadcastHidlTest,BroadcastDataFlowVideoFilterTest)562 TEST_P(TunerBroadcastHidlTest, BroadcastDataFlowVideoFilterTest) {
563 description("Test Video Filter functionality in Broadcast use case.");
564 if (!live.hasFrontendConnection) {
565 return;
566 }
567 broadcastSingleFilterTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
568 }
569
TEST_P(TunerBroadcastHidlTest,BroadcastDataFlowAudioFilterTest)570 TEST_P(TunerBroadcastHidlTest, BroadcastDataFlowAudioFilterTest) {
571 description("Test Audio Filter functionality in Broadcast use case.");
572 if (!live.hasFrontendConnection) {
573 return;
574 }
575 broadcastSingleFilterTest(filterMap[live.audioFilterId], frontendMap[live.frontendId]);
576 }
577
TEST_P(TunerBroadcastHidlTest,BroadcastDataFlowSectionFilterTest)578 TEST_P(TunerBroadcastHidlTest, BroadcastDataFlowSectionFilterTest) {
579 description("Test Section Filter functionality in Broadcast use case.");
580 if (!live.hasFrontendConnection) {
581 return;
582 }
583 if (live.sectionFilterId.compare(emptyHardwareId) == 0) {
584 return;
585 }
586 broadcastSingleFilterTest(filterMap[live.sectionFilterId], frontendMap[live.frontendId]);
587 }
588
TEST_P(TunerBroadcastHidlTest,IonBufferTest)589 TEST_P(TunerBroadcastHidlTest, IonBufferTest) {
590 description("Test the av filter data bufferring.");
591 if (!live.hasFrontendConnection) {
592 return;
593 }
594 broadcastSingleFilterTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
595 }
596
TEST_P(TunerBroadcastHidlTest,LnbBroadcastDataFlowVideoFilterTest)597 TEST_P(TunerBroadcastHidlTest, LnbBroadcastDataFlowVideoFilterTest) {
598 description("Test Video Filter functionality in Broadcast with Lnb use case.");
599 if (!lnbLive.support) {
600 return;
601 }
602 broadcastSingleFilterTestWithLnb(filterMap[lnbLive.videoFilterId],
603 frontendMap[lnbLive.frontendId], lnbMap[lnbLive.lnbId]);
604 }
605
TEST_P(TunerPlaybackHidlTest,PlaybackDataFlowWithTsSectionFilterTest)606 TEST_P(TunerPlaybackHidlTest, PlaybackDataFlowWithTsSectionFilterTest) {
607 description("Feed ts data from playback and configure Ts section filter to get output");
608 if (!playback.support || playback.sectionFilterId.compare(emptyHardwareId) == 0) {
609 return;
610 }
611 playbackSingleFilterTest(filterMap[playback.sectionFilterId], dvrMap[playback.dvrId]);
612 }
613
TEST_P(TunerPlaybackHidlTest,PlaybackDataFlowWithTsAudioFilterTest)614 TEST_P(TunerPlaybackHidlTest, PlaybackDataFlowWithTsAudioFilterTest) {
615 description("Feed ts data from playback and configure Ts audio filter to get output");
616 if (!playback.support) {
617 return;
618 }
619 playbackSingleFilterTest(filterMap[playback.audioFilterId], dvrMap[playback.dvrId]);
620 }
621
TEST_P(TunerPlaybackHidlTest,PlaybackDataFlowWithTsVideoFilterTest)622 TEST_P(TunerPlaybackHidlTest, PlaybackDataFlowWithTsVideoFilterTest) {
623 description("Feed ts data from playback and configure Ts video filter to get output");
624 if (!playback.support) {
625 return;
626 }
627 playbackSingleFilterTest(filterMap[playback.videoFilterId], dvrMap[playback.dvrId]);
628 }
629
TEST_P(TunerRecordHidlTest,AttachFiltersToRecordTest)630 TEST_P(TunerRecordHidlTest, AttachFiltersToRecordTest) {
631 description("Attach a single filter to the record dvr test.");
632 // TODO use paramterized tests
633 if (!record.support) {
634 return;
635 }
636 attachSingleFilterToRecordDvrTest(filterMap[record.recordFilterId],
637 frontendMap[record.frontendId], dvrMap[record.dvrRecordId]);
638 }
639
TEST_P(TunerRecordHidlTest,RecordDataFlowWithTsRecordFilterTest)640 TEST_P(TunerRecordHidlTest, RecordDataFlowWithTsRecordFilterTest) {
641 description("Feed ts data from frontend to recording and test with ts record filter");
642 if (!record.support) {
643 return;
644 }
645 recordSingleFilterTest(filterMap[record.recordFilterId], frontendMap[record.frontendId],
646 dvrMap[record.dvrRecordId]);
647 }
648
TEST_P(TunerRecordHidlTest,LnbRecordDataFlowWithTsRecordFilterTest)649 TEST_P(TunerRecordHidlTest, LnbRecordDataFlowWithTsRecordFilterTest) {
650 description("Feed ts data from Fe with Lnb to recording and test with ts record filter");
651 if (!lnbRecord.support) {
652 return;
653 }
654 recordSingleFilterTestWithLnb(filterMap[lnbRecord.recordFilterId],
655 frontendMap[lnbRecord.frontendId], dvrMap[lnbRecord.dvrRecordId],
656 lnbMap[lnbRecord.lnbId]);
657 }
658
TEST_P(TunerDescramblerHidlTest,CreateDescrambler)659 TEST_P(TunerDescramblerHidlTest, CreateDescrambler) {
660 description("Create Descrambler");
661 if (!descrambling.support) {
662 return;
663 }
664 uint32_t demuxId;
665 sp<IDemux> demux;
666 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
667
668 if (descrambling.hasFrontendConnection) {
669 uint32_t feId;
670 mFrontendTests.getFrontendIdByType(frontendMap[descrambling.frontendId].type, feId);
671 ASSERT_TRUE(feId != INVALID_ID);
672 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
673 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
674 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
675 }
676
677 ASSERT_TRUE(mDescramblerTests.openDescrambler(demuxId));
678 ASSERT_TRUE(mDescramblerTests.closeDescrambler());
679 ASSERT_TRUE(mDemuxTests.closeDemux());
680
681 if (descrambling.hasFrontendConnection) {
682 ASSERT_TRUE(mFrontendTests.closeFrontend());
683 }
684 }
685
TEST_P(TunerDescramblerHidlTest,ScrambledBroadcastDataFlowMediaFiltersTest)686 TEST_P(TunerDescramblerHidlTest, ScrambledBroadcastDataFlowMediaFiltersTest) {
687 description("Test ts audio filter in scrambled broadcast use case");
688 if (!descrambling.support) {
689 return;
690 }
691 set<FilterConfig> filterConfs;
692 filterConfs.insert(static_cast<FilterConfig>(filterMap[descrambling.audioFilterId]));
693 filterConfs.insert(static_cast<FilterConfig>(filterMap[descrambling.videoFilterId]));
694 scrambledBroadcastTest(filterConfs, frontendMap[descrambling.frontendId],
695 descramblerMap[descrambling.descramblerId]);
696 }
697
698 INSTANTIATE_TEST_SUITE_P(
699 PerInstance, TunerFrontendHidlTest,
700 testing::ValuesIn(android::hardware::getAllHalInstanceNames(ITuner::descriptor)),
701 android::hardware::PrintInstanceNameToString);
702
703 INSTANTIATE_TEST_SUITE_P(
704 PerInstance, TunerLnbHidlTest,
705 testing::ValuesIn(android::hardware::getAllHalInstanceNames(ITuner::descriptor)),
706 android::hardware::PrintInstanceNameToString);
707
708 INSTANTIATE_TEST_SUITE_P(
709 PerInstance, TunerDemuxHidlTest,
710 testing::ValuesIn(android::hardware::getAllHalInstanceNames(ITuner::descriptor)),
711 android::hardware::PrintInstanceNameToString);
712
713 INSTANTIATE_TEST_SUITE_P(
714 PerInstance, TunerFilterHidlTest,
715 testing::ValuesIn(android::hardware::getAllHalInstanceNames(ITuner::descriptor)),
716 android::hardware::PrintInstanceNameToString);
717
718 INSTANTIATE_TEST_SUITE_P(
719 PerInstance, TunerBroadcastHidlTest,
720 testing::ValuesIn(android::hardware::getAllHalInstanceNames(ITuner::descriptor)),
721 android::hardware::PrintInstanceNameToString);
722
723 INSTANTIATE_TEST_SUITE_P(
724 PerInstance, TunerPlaybackHidlTest,
725 testing::ValuesIn(android::hardware::getAllHalInstanceNames(ITuner::descriptor)),
726 android::hardware::PrintInstanceNameToString);
727
728 INSTANTIATE_TEST_SUITE_P(
729 PerInstance, TunerRecordHidlTest,
730 testing::ValuesIn(android::hardware::getAllHalInstanceNames(ITuner::descriptor)),
731 android::hardware::PrintInstanceNameToString);
732
733 INSTANTIATE_TEST_SUITE_P(
734 PerInstance, TunerDescramblerHidlTest,
735 testing::ValuesIn(android::hardware::getAllHalInstanceNames(ITuner::descriptor)),
736 android::hardware::PrintInstanceNameToString);
737 } // namespace
738