blob: 202f83f542072e1a50ef34290c54acb095cbfa79 [file] [log] [blame]
Hongguang600a6ae2021-07-08 18:51:51 -07001/*
2 * Copyright 2021 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 "VtsHalTvTunerTargetTest.h"
18
19#include <aidl/Gtest.h>
20#include <aidl/Vintf.h>
21#include <android/binder_manager.h>
22#include <android/binder_process.h>
23
24namespace {
25
26AssertionResult TunerBroadcastAidlTest::filterDataOutputTest() {
27 return filterDataOutputTestBase(mFilterTests);
28}
29
30AssertionResult TunerPlaybackAidlTest::filterDataOutputTest() {
31 return filterDataOutputTestBase(mFilterTests);
32}
33
34AssertionResult TunerDescramblerAidlTest::filterDataOutputTest() {
35 return filterDataOutputTestBase(mFilterTests);
36}
37
38void TunerFilterAidlTest::configSingleFilterInDemuxTest(FilterConfig filterConf,
39 FrontendConfig frontendConf) {
40 int32_t feId;
41 int32_t demuxId;
42 std::shared_ptr<IDemux> demux;
43 int64_t filterId;
44
45 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
46 ASSERT_TRUE(feId != INVALID_ID);
47 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
48 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
49 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
50 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
51 mFilterTests.setDemux(demux);
52 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
53 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(filterId));
54 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
55 if (filterConf.type.mainType == DemuxFilterMainType::IP) {
56 ASSERT_TRUE(mFilterTests.configIpFilterCid(filterConf.ipCid, filterId));
57 }
58 if (filterConf.monitorEventTypes > 0) {
59 ASSERT_TRUE(mFilterTests.configureMonitorEvent(filterId, filterConf.monitorEventTypes));
60 }
61 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
62 ASSERT_TRUE(mFilterTests.startFilter(filterId));
63 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
64 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
65 ASSERT_TRUE(mDemuxTests.closeDemux());
66 ASSERT_TRUE(mFrontendTests.closeFrontend());
67}
68
69void TunerFilterAidlTest::reconfigSingleFilterInDemuxTest(FilterConfig filterConf,
70 FilterConfig filterReconf,
71 FrontendConfig frontendConf) {
72 int32_t feId;
73 int32_t demuxId;
74 std::shared_ptr<IDemux> demux;
75 int64_t filterId;
76
77 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
78 ASSERT_TRUE(feId != INVALID_ID);
79 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
80 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
81 if (frontendConf.isSoftwareFe) {
82 mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[live.dvrSoftwareFeId]);
83 }
84 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
85 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
86 mFrontendTests.setDemux(demux);
87 mFilterTests.setDemux(demux);
88 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
89 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(filterId));
90 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
91 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
92 ASSERT_TRUE(mFilterTests.startFilter(filterId));
93 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
94 ASSERT_TRUE(mFilterTests.configFilter(filterReconf.settings, filterId));
95 ASSERT_TRUE(mFilterTests.startFilter(filterId));
96 ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
97 ASSERT_TRUE(mFilterTests.startIdTest(filterId));
98 ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
99 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
100 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
101 ASSERT_TRUE(mDemuxTests.closeDemux());
102 ASSERT_TRUE(mFrontendTests.closeFrontend());
103}
104
105void TunerFilterAidlTest::testTimeFilter(TimeFilterConfig filterConf) {
106 int32_t demuxId;
107 std::shared_ptr<IDemux> demux;
108 DemuxCapabilities caps;
109
110 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
111 ASSERT_TRUE(mDemuxTests.getDemuxCaps(caps));
112 ASSERT_TRUE(caps.bTimeFilter);
113 mFilterTests.setDemux(demux);
114 ASSERT_TRUE(mFilterTests.openTimeFilterInDemux());
115 ASSERT_TRUE(mFilterTests.setTimeStamp(filterConf.timeStamp));
116 ASSERT_TRUE(mFilterTests.getTimeStamp());
117 ASSERT_TRUE(mFilterTests.clearTimeStamp());
118 ASSERT_TRUE(mFilterTests.closeTimeFilter());
119 ASSERT_TRUE(mDemuxTests.closeDemux());
120}
121
122void TunerBroadcastAidlTest::broadcastSingleFilterTest(FilterConfig filterConf,
123 FrontendConfig frontendConf) {
124 int32_t feId;
125 int32_t demuxId;
126 std::shared_ptr<IDemux> demux;
127 int64_t filterId;
128
129 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
130 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
131 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
132 if (mLnbId) {
133 ASSERT_TRUE(mFrontendTests.setLnb(*mLnbId));
134 }
135 if (frontendConf.isSoftwareFe) {
136 mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[live.dvrSoftwareFeId]);
137 }
138 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
139 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
140 mFrontendTests.setDemux(demux);
141 mFilterTests.setDemux(demux);
142 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
143 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(filterId));
144 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
145 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
146 ASSERT_TRUE(mFilterTests.startFilter(filterId));
147 // tune test
148 ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
149 ASSERT_TRUE(filterDataOutputTest());
150 ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
151 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
152 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
153 ASSERT_TRUE(mDemuxTests.closeDemux());
154 ASSERT_TRUE(mFrontendTests.closeFrontend());
155}
156
157void TunerBroadcastAidlTest::broadcastSingleFilterTestWithLnb(FilterConfig filterConf,
158 FrontendConfig frontendConf,
159 LnbConfig lnbConf) {
160 if (lnbConf.name.compare(emptyHardwareId) == 0) {
161 vector<int32_t> ids;
162 ASSERT_TRUE(mLnbTests.getLnbIds(ids));
163 ASSERT_TRUE(ids.size() > 0);
164 ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
165 mLnbId = &ids[0];
166 } else {
167 mLnbId = (int32_t*)malloc(sizeof(int32_t));
168 ASSERT_TRUE(mLnbTests.openLnbByName(lnbConf.name, *mLnbId));
169 }
170 ASSERT_TRUE(mLnbTests.setLnbCallback());
171 ASSERT_TRUE(mLnbTests.setVoltage(lnbConf.voltage));
172 ASSERT_TRUE(mLnbTests.setTone(lnbConf.tone));
173 ASSERT_TRUE(mLnbTests.setSatellitePosition(lnbConf.position));
174 broadcastSingleFilterTest(filterConf, frontendConf);
175 ASSERT_TRUE(mLnbTests.closeLnb());
176 mLnbId = nullptr;
177}
178
179void TunerBroadcastAidlTest::mediaFilterUsingSharedMemoryTest(FilterConfig filterConf,
180 FrontendConfig frontendConf) {
181 int32_t feId;
182 int32_t demuxId;
183 std::shared_ptr<IDemux> demux;
184 int64_t filterId;
185
186 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
187 ASSERT_TRUE(feId != INVALID_ID);
188 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
189 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
190 if (frontendConf.isSoftwareFe) {
191 mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[live.dvrSoftwareFeId]);
192 }
193 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
194 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
195 mFrontendTests.setDemux(demux);
196 mFilterTests.setDemux(demux);
197 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
198 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(filterId));
199 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
200 ASSERT_TRUE(mFilterTests.getSharedAvMemoryHandle(filterId));
201 ASSERT_TRUE(mFilterTests.configAvFilterStreamType(filterConf.streamType, filterId));
202 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
203 ASSERT_TRUE(mFilterTests.startFilter(filterId));
204 // tune test
205 ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
206 ASSERT_TRUE(filterDataOutputTest());
207 ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
208 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
209 ASSERT_TRUE(mFilterTests.releaseShareAvHandle(filterId));
210 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
211 ASSERT_TRUE(mDemuxTests.closeDemux());
212 ASSERT_TRUE(mFrontendTests.closeFrontend());
213}
214
215void TunerPlaybackAidlTest::playbackSingleFilterTest(FilterConfig filterConf, DvrConfig dvrConf) {
216 int32_t demuxId;
217 std::shared_ptr<IDemux> demux;
218 int64_t filterId;
219
220 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
221 mFilterTests.setDemux(demux);
222 mDvrTests.setDemux(demux);
223 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrConf.type, dvrConf.bufferSize));
224 ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrConf.settings));
225 ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
226 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
227 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(filterId));
228 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
229 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
230 mDvrTests.startPlaybackInputThread(dvrConf.playbackInputFile,
231 dvrConf.settings.get<DvrSettings::Tag::playback>());
232 ASSERT_TRUE(mDvrTests.startDvrPlayback());
233 ASSERT_TRUE(mFilterTests.startFilter(filterId));
234 ASSERT_TRUE(filterDataOutputTest());
235 mDvrTests.stopPlaybackThread();
236 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
237 ASSERT_TRUE(mDvrTests.stopDvrPlayback());
238 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
239 mDvrTests.closeDvrPlayback();
240 ASSERT_TRUE(mDemuxTests.closeDemux());
241}
242
243void TunerRecordAidlTest::recordSingleFilterTestWithLnb(FilterConfig filterConf,
244 FrontendConfig frontendConf,
245 DvrConfig dvrConf, LnbConfig lnbConf) {
246 if (lnbConf.name.compare(emptyHardwareId) == 0) {
247 vector<int32_t> ids;
248 ASSERT_TRUE(mLnbTests.getLnbIds(ids));
249 ASSERT_TRUE(ids.size() > 0);
250 ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
251 mLnbId = &ids[0];
252 } else {
253 mLnbId = (int32_t*)malloc(sizeof(int32_t));
254 ASSERT_TRUE(mLnbTests.openLnbByName(lnbConf.name, *mLnbId));
255 }
256 ASSERT_TRUE(mLnbTests.setLnbCallback());
257 ASSERT_TRUE(mLnbTests.setVoltage(lnbConf.voltage));
258 ASSERT_TRUE(mLnbTests.setTone(lnbConf.tone));
259 ASSERT_TRUE(mLnbTests.setSatellitePosition(lnbConf.position));
260 for (auto msgName : lnbRecord.diseqcMsgs) {
261 ASSERT_TRUE(mLnbTests.sendDiseqcMessage(diseqcMsgMap[msgName]));
262 }
263 recordSingleFilterTest(filterConf, frontendConf, dvrConf);
264 ASSERT_TRUE(mLnbTests.closeLnb());
265 mLnbId = nullptr;
266}
267
268void TunerRecordAidlTest::attachSingleFilterToRecordDvrTest(FilterConfig filterConf,
269 FrontendConfig frontendConf,
270 DvrConfig dvrConf) {
271 int32_t demuxId;
272 std::shared_ptr<IDemux> demux;
273 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
274 mDvrTests.setDemux(demux);
275
276 DvrConfig dvrSourceConfig;
277 if (record.hasFrontendConnection) {
278 int32_t feId;
279 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
280 ASSERT_TRUE(feId != INVALID_ID);
281 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
282 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
283 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
284 } else {
285 dvrSourceConfig = dvrMap[record.dvrSourceId];
286 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrSourceConfig.type, dvrSourceConfig.bufferSize));
287 ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrSourceConfig.settings));
288 ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
289 }
290
291 int64_t filterId;
292 std::shared_ptr<IFilter> filter;
293 mFilterTests.setDemux(demux);
294
295 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrConf.type, dvrConf.bufferSize));
296 ASSERT_TRUE(mDvrTests.configDvrRecord(dvrConf.settings));
297 ASSERT_TRUE(mDvrTests.getDvrRecordMQDescriptor());
298
299 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
300 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(filterId));
301 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
302 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
303 filter = mFilterTests.getFilterById(filterId);
304 ASSERT_TRUE(filter != nullptr);
305 ASSERT_TRUE(mDvrTests.attachFilterToDvr(filter));
306 ASSERT_TRUE(mDvrTests.startDvrRecord());
307 ASSERT_TRUE(mFilterTests.startFilter(filterId));
308 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
309 ASSERT_TRUE(mDvrTests.stopDvrRecord());
310 ASSERT_TRUE(mDvrTests.detachFilterToDvr(filter));
311 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
312 mDvrTests.closeDvrRecord();
313 ASSERT_TRUE(mDemuxTests.closeDemux());
314
315 if (record.hasFrontendConnection) {
316 ASSERT_TRUE(mFrontendTests.closeFrontend());
317 }
318}
319
320void TunerRecordAidlTest::recordSingleFilterTest(FilterConfig filterConf,
321 FrontendConfig frontendConf, DvrConfig dvrConf) {
322 int32_t demuxId;
323 std::shared_ptr<IDemux> demux;
324 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
325 mDvrTests.setDemux(demux);
326
327 DvrConfig dvrSourceConfig;
328 if (record.hasFrontendConnection) {
329 int32_t feId;
330 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
331 ASSERT_TRUE(feId != INVALID_ID);
332 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
333 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
334 if (frontendConf.isSoftwareFe) {
335 mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[record.dvrSoftwareFeId]);
336 }
337 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
338 mFrontendTests.setDvrTests(&mDvrTests);
339 } else {
340 dvrSourceConfig = dvrMap[record.dvrSourceId];
341 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrSourceConfig.type, dvrSourceConfig.bufferSize));
342 ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrSourceConfig.settings));
343 ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
344 }
345
346 int64_t filterId;
347 std::shared_ptr<IFilter> filter;
348 mFilterTests.setDemux(demux);
349 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrConf.type, dvrConf.bufferSize));
350 ASSERT_TRUE(mDvrTests.configDvrRecord(dvrConf.settings));
351 ASSERT_TRUE(mDvrTests.getDvrRecordMQDescriptor());
352 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
353 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(filterId));
354 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
355 ASSERT_TRUE(mFilterTests.getFilterMQDescriptor(filterId, filterConf.getMqDesc));
356 filter = mFilterTests.getFilterById(filterId);
357 ASSERT_TRUE(filter != nullptr);
358 mDvrTests.startRecordOutputThread(dvrConf.settings.get<DvrSettings::Tag::record>());
359 ASSERT_TRUE(mDvrTests.attachFilterToDvr(filter));
360 ASSERT_TRUE(mDvrTests.startDvrRecord());
361 ASSERT_TRUE(mFilterTests.startFilter(filterId));
362
363 if (record.hasFrontendConnection) {
364 ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
365 } else {
366 // Start DVR Source
367 mDvrTests.startPlaybackInputThread(
368 dvrSourceConfig.playbackInputFile,
369 dvrSourceConfig.settings.get<DvrSettings::Tag::playback>());
370 ASSERT_TRUE(mDvrTests.startDvrPlayback());
371 }
372
373 mDvrTests.testRecordOutput();
374 mDvrTests.stopRecordThread();
375
376 if (record.hasFrontendConnection) {
377 ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
378 } else {
379 mDvrTests.stopPlaybackThread();
380 ASSERT_TRUE(mDvrTests.stopDvrPlayback());
381 }
382
383 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
384 ASSERT_TRUE(mDvrTests.stopDvrRecord());
385 ASSERT_TRUE(mDvrTests.detachFilterToDvr(filter));
386 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
387 mDvrTests.closeDvrRecord();
388
389 if (record.hasFrontendConnection) {
390 ASSERT_TRUE(mFrontendTests.closeFrontend());
391 } else {
392 mDvrTests.closeDvrPlayback();
393 }
394
395 ASSERT_TRUE(mDemuxTests.closeDemux());
396}
397
398void TunerDescramblerAidlTest::scrambledBroadcastTest(set<struct FilterConfig> mediaFilterConfs,
399 FrontendConfig frontendConf,
400 DescramblerConfig descConfig) {
401 int32_t demuxId;
402 std::shared_ptr<IDemux> demux;
403 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
404
405 DvrConfig dvrSourceConfig;
406 if (descrambling.hasFrontendConnection) {
407 int32_t feId;
408 mFrontendTests.getFrontendIdByType(frontendConf.type, feId);
409 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
410 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
411 if (frontendConf.isSoftwareFe) {
412 mFrontendTests.setSoftwareFrontendDvrConfig(dvrMap[descrambling.dvrSoftwareFeId]);
413 }
414 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
415 mFrontendTests.setDemux(demux);
416 } else {
417 dvrSourceConfig = dvrMap[descrambling.dvrSourceId];
418 mDvrTests.setDemux(demux);
419 ASSERT_TRUE(mDvrTests.openDvrInDemux(dvrSourceConfig.type, dvrSourceConfig.bufferSize));
420 ASSERT_TRUE(mDvrTests.configDvrPlayback(dvrSourceConfig.settings));
421 ASSERT_TRUE(mDvrTests.getDvrPlaybackMQDescriptor());
422 }
423
424 set<int64_t> filterIds;
425 int64_t filterId;
426 set<struct FilterConfig>::iterator config;
427 set<int64_t>::iterator id;
428 mFilterTests.setDemux(demux);
429 for (config = mediaFilterConfs.begin(); config != mediaFilterConfs.end(); config++) {
430 ASSERT_TRUE(mFilterTests.openFilterInDemux((*config).type, (*config).bufferSize));
431 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(filterId));
432 ASSERT_TRUE(mFilterTests.configFilter((*config).settings, filterId));
433 filterIds.insert(filterId);
434 }
435 ASSERT_TRUE(mDescramblerTests.openDescrambler(demuxId));
436 vector<uint8_t> token;
437 ASSERT_TRUE(mDescramblerTests.getKeyToken(descConfig.casSystemId, descConfig.provisionStr,
438 descConfig.hidlPvtData, token));
439 mDescramblerTests.setKeyToken(token);
440 vector<DemuxPid> pids;
441 DemuxPid pid;
442 for (config = mediaFilterConfs.begin(); config != mediaFilterConfs.end(); config++) {
443 ASSERT_TRUE(mDescramblerTests.getDemuxPidFromFilterSettings((*config).type,
444 (*config).settings, pid));
445 pids.push_back(pid);
446 ASSERT_TRUE(mDescramblerTests.addPid(pid, nullptr));
447 }
448 for (id = filterIds.begin(); id != filterIds.end(); id++) {
449 ASSERT_TRUE(mFilterTests.startFilter(*id));
450 }
451
452 if (descrambling.hasFrontendConnection) {
453 // tune test
454 ASSERT_TRUE(mFrontendTests.tuneFrontend(frontendConf, true /*testWithDemux*/));
455 } else {
456 // Start DVR Source
457 mDvrTests.startPlaybackInputThread(
458 dvrSourceConfig.playbackInputFile,
459 dvrSourceConfig.settings.get<DvrSettings::Tag::playback>());
460 ASSERT_TRUE(mDvrTests.startDvrPlayback());
461 }
462
463 ASSERT_TRUE(filterDataOutputTest());
464
465 if (descrambling.hasFrontendConnection) {
466 ASSERT_TRUE(mFrontendTests.stopTuneFrontend(true /*testWithDemux*/));
467 } else {
468 mDvrTests.stopPlaybackThread();
469 ASSERT_TRUE(mDvrTests.stopDvrPlayback());
470 }
471
472 for (id = filterIds.begin(); id != filterIds.end(); id++) {
473 ASSERT_TRUE(mFilterTests.stopFilter(*id));
474 }
475 for (auto pid : pids) {
476 ASSERT_TRUE(mDescramblerTests.removePid(pid, nullptr));
477 }
478 ASSERT_TRUE(mDescramblerTests.closeDescrambler());
479 for (id = filterIds.begin(); id != filterIds.end(); id++) {
480 ASSERT_TRUE(mFilterTests.closeFilter(*id));
481 }
482
483 if (descrambling.hasFrontendConnection) {
484 ASSERT_TRUE(mFrontendTests.closeFrontend());
485 } else {
486 mDvrTests.closeDvrPlayback();
487 }
488
489 ASSERT_TRUE(mDemuxTests.closeDemux());
490}
491
492TEST_P(TunerLnbAidlTest, SendDiseqcMessageToLnb) {
493 description("Open and configure an Lnb with specific settings then send a diseqc msg to it.");
494 if (!lnbLive.support) {
495 return;
496 }
497 if (lnbMap[lnbLive.lnbId].name.compare(emptyHardwareId) == 0) {
498 vector<int32_t> ids;
499 ASSERT_TRUE(mLnbTests.getLnbIds(ids));
500 ASSERT_TRUE(ids.size() > 0);
501 ASSERT_TRUE(mLnbTests.openLnbById(ids[0]));
502 } else {
503 int32_t id;
504 ASSERT_TRUE(mLnbTests.openLnbByName(lnbMap[lnbLive.lnbId].name, id));
505 }
506 ASSERT_TRUE(mLnbTests.setLnbCallback());
507 ASSERT_TRUE(mLnbTests.setVoltage(lnbMap[lnbLive.lnbId].voltage));
508 ASSERT_TRUE(mLnbTests.setTone(lnbMap[lnbLive.lnbId].tone));
509 ASSERT_TRUE(mLnbTests.setSatellitePosition(lnbMap[lnbLive.lnbId].position));
510 for (auto msgName : lnbLive.diseqcMsgs) {
511 ASSERT_TRUE(mLnbTests.sendDiseqcMessage(diseqcMsgMap[msgName]));
512 }
513 ASSERT_TRUE(mLnbTests.closeLnb());
514}
515
516TEST_P(TunerDemuxAidlTest, openDemux) {
517 description("Open and close a Demux.");
518 if (!live.hasFrontendConnection) {
519 return;
520 }
521 int32_t feId;
522 int32_t demuxId;
523 std::shared_ptr<IDemux> demux;
524 mFrontendTests.getFrontendIdByType(frontendMap[live.frontendId].type, feId);
525 ASSERT_TRUE(feId != INVALID_ID);
526 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
527 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
528 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
529 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
530 ASSERT_TRUE(mDemuxTests.closeDemux());
531 ASSERT_TRUE(mFrontendTests.closeFrontend());
532}
533
534TEST_P(TunerDemuxAidlTest, getAvSyncTime) {
535 description("Get the A/V sync time from a PCR filter.");
536 if (!live.hasFrontendConnection) {
537 return;
538 }
539 if (live.pcrFilterId.compare(emptyHardwareId) == 0) {
540 return;
541 }
542 int32_t feId;
543 int32_t demuxId;
544 std::shared_ptr<IDemux> demux;
545 int64_t mediaFilterId;
546 int64_t pcrFilterId;
547 int32_t avSyncHwId;
548 std::shared_ptr<IFilter> mediaFilter;
549
550 mFrontendTests.getFrontendIdByType(frontendMap[live.frontendId].type, feId);
551 ASSERT_TRUE(feId != INVALID_ID);
552 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
553 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
554 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
555 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
556 mFilterTests.setDemux(demux);
557 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterMap[live.videoFilterId].type,
558 filterMap[live.videoFilterId].bufferSize));
559 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(mediaFilterId));
560 ASSERT_TRUE(mFilterTests.configFilter(filterMap[live.videoFilterId].settings, mediaFilterId));
561 mediaFilter = mFilterTests.getFilterById(mediaFilterId);
562 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterMap[live.pcrFilterId].type,
563 filterMap[live.pcrFilterId].bufferSize));
564 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(pcrFilterId));
565 ASSERT_TRUE(mFilterTests.configFilter(filterMap[live.pcrFilterId].settings, pcrFilterId));
566 ASSERT_TRUE(mDemuxTests.getAvSyncId(mediaFilter, avSyncHwId));
567 ASSERT_TRUE(pcrFilterId == avSyncHwId);
568 ASSERT_TRUE(mDemuxTests.getAvSyncTime(pcrFilterId));
569 ASSERT_TRUE(mFilterTests.closeFilter(pcrFilterId));
570 ASSERT_TRUE(mFilterTests.closeFilter(mediaFilterId));
571 ASSERT_TRUE(mDemuxTests.closeDemux());
572 ASSERT_TRUE(mFrontendTests.closeFrontend());
573}
574
575TEST_P(TunerFilterAidlTest, StartFilterInDemux) {
576 description("Open and start a filter in Demux.");
577 if (!live.hasFrontendConnection) {
578 return;
579 }
580 // TODO use parameterized tests
581 configSingleFilterInDemuxTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
582}
583
584TEST_P(TunerFilterAidlTest, ConfigIpFilterInDemuxWithCid) {
585 description("Open and configure an ip filter in Demux.");
586 // TODO use parameterized tests
587 if (!live.hasFrontendConnection) {
588 return;
589 }
590 if (live.ipFilterId.compare(emptyHardwareId) == 0) {
591 return;
592 }
593 configSingleFilterInDemuxTest(filterMap[live.ipFilterId], frontendMap[live.frontendId]);
594}
595
596TEST_P(TunerFilterAidlTest, ReconfigFilterToReceiveStartId) {
597 description("Recofigure and restart a filter to test start id.");
598 if (!live.hasFrontendConnection) {
599 return;
600 }
601 // TODO use parameterized tests
602 reconfigSingleFilterInDemuxTest(filterMap[live.videoFilterId], filterMap[live.videoFilterId],
603 frontendMap[live.frontendId]);
604}
605
606TEST_P(TunerFilterAidlTest, SetFilterLinkage) {
607 description("Pick up all the possible linkages from the demux caps and set them up.");
608 DemuxCapabilities caps;
609 int32_t demuxId;
610 std::shared_ptr<IDemux> demux;
611 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
612 ASSERT_TRUE(mDemuxTests.getDemuxCaps(caps));
613 mFilterTests.setDemux(demux);
614 for (int i = 0; i < caps.linkCaps.size(); i++) {
615 uint32_t bitMask = 1;
616 for (int j = 0; j < FILTER_MAIN_TYPE_BIT_COUNT; j++) {
617 if (caps.linkCaps[i] & (bitMask << j)) {
618 int64_t sourceFilterId;
619 int64_t sinkFilterId;
620 ASSERT_TRUE(mFilterTests.openFilterInDemux(getLinkageFilterType(i), FMQ_SIZE_16M));
621 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(sourceFilterId));
622 ASSERT_TRUE(mFilterTests.openFilterInDemux(getLinkageFilterType(j), FMQ_SIZE_16M));
623 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(sinkFilterId));
624 ASSERT_TRUE(mFilterTests.setFilterDataSource(sourceFilterId, sinkFilterId));
625 ASSERT_TRUE(mFilterTests.setFilterDataSourceToDemux(sinkFilterId));
626 ASSERT_TRUE(mFilterTests.closeFilter(sinkFilterId));
627 ASSERT_TRUE(mFilterTests.closeFilter(sourceFilterId));
628 }
629 }
630 }
631 ASSERT_TRUE(mDemuxTests.closeDemux());
632}
633
634TEST_P(TunerFilterAidlTest, testTimeFilter) {
635 description("Open a timer filter in Demux and set time stamp.");
636 if (!timeFilter.support) {
637 return;
638 }
639 // TODO use parameterized tests
640 testTimeFilter(timeFilterMap[timeFilter.timeFilterId]);
641}
642
Patrick Rohr1586d212021-11-23 00:40:56 +0100643static bool isMediaFilter(const FilterConfig& filterConfig) {
644 switch (filterConfig.type.mainType) {
645 case DemuxFilterMainType::TS: {
646 // TS Audio and Video filters are media filters
647 auto tsFilterType =
648 filterConfig.type.subType.get<DemuxFilterSubType::Tag::tsFilterType>();
649 return (tsFilterType == DemuxTsFilterType::AUDIO ||
650 tsFilterType == DemuxTsFilterType::VIDEO);
651 }
652 case DemuxFilterMainType::MMTP: {
653 // MMTP Audio and Video filters are media filters
654 auto mmtpFilterType =
655 filterConfig.type.subType.get<DemuxFilterSubType::Tag::mmtpFilterType>();
656 return (mmtpFilterType == DemuxMmtpFilterType::AUDIO ||
657 mmtpFilterType == DemuxMmtpFilterType::VIDEO);
658 }
659 default:
660 return false;
661 }
662}
Patrick Rohr149b0872021-11-20 00:39:37 +0100663
Patrick Rohr1586d212021-11-23 00:40:56 +0100664static int getDemuxFilterEventDataLength(const DemuxFilterEvent& event) {
665 switch (event.getTag()) {
666 case DemuxFilterEvent::Tag::section:
667 return event.get<DemuxFilterEvent::Tag::section>().dataLength;
668 case DemuxFilterEvent::Tag::media:
669 return event.get<DemuxFilterEvent::Tag::media>().dataLength;
670 case DemuxFilterEvent::Tag::pes:
671 return event.get<DemuxFilterEvent::Tag::pes>().dataLength;
672 case DemuxFilterEvent::Tag::download:
673 return event.get<DemuxFilterEvent::Tag::download>().dataLength;
674 case DemuxFilterEvent::Tag::ipPayload:
675 return event.get<DemuxFilterEvent::Tag::ipPayload>().dataLength;
676
677 case DemuxFilterEvent::Tag::tsRecord:
678 case DemuxFilterEvent::Tag::mmtpRecord:
679 case DemuxFilterEvent::Tag::temi:
680 case DemuxFilterEvent::Tag::monitorEvent:
681 case DemuxFilterEvent::Tag::startId:
682 return 0;
683 }
684}
685
686// TODO: move boilerplate into text fixture
687void TunerFilterAidlTest::testDelayHint(const FilterConfig& filterConf) {
Patrick Rohr149b0872021-11-20 00:39:37 +0100688 int32_t feId;
689 int32_t demuxId;
690 std::shared_ptr<IDemux> demux;
691 int64_t filterId;
692
693 mFrontendTests.getFrontendIdByType(frontendMap[live.frontendId].type, feId);
694 ASSERT_TRUE(feId != INVALID_ID);
695 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
696 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
697 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
698 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
699 mFilterTests.setDemux(demux);
700
Patrick Rohr149b0872021-11-20 00:39:37 +0100701 ASSERT_TRUE(mFilterTests.openFilterInDemux(filterConf.type, filterConf.bufferSize));
702 ASSERT_TRUE(mFilterTests.getNewlyOpenedFilterId_64bit(filterId));
Patrick Rohr149b0872021-11-20 00:39:37 +0100703
Patrick Rohr1586d212021-11-23 00:40:56 +0100704 bool mediaFilter = isMediaFilter(filterConf);
Patrick Rohr149b0872021-11-20 00:39:37 +0100705 auto filter = mFilterTests.getFilterById(filterId);
706
Patrick Rohr1586d212021-11-23 00:40:56 +0100707 auto timeDelayInMs = std::chrono::milliseconds(filterConf.timeDelayInMs);
708 if (timeDelayInMs.count() > 0) {
709 FilterDelayHint delayHint;
710 delayHint.hintType = FilterDelayHintType::TIME_DELAY_IN_MS;
711 delayHint.hintValue = timeDelayInMs.count();
Patrick Rohr149b0872021-11-20 00:39:37 +0100712
Patrick Rohr1586d212021-11-23 00:40:56 +0100713 // setDelayHint should fail for media filters.
714 ASSERT_EQ(filter->setDelayHint(delayHint).isOk(), !mediaFilter);
715 }
Patrick Rohr149b0872021-11-20 00:39:37 +0100716
Patrick Rohr1586d212021-11-23 00:40:56 +0100717 int dataDelayInBytes = filterConf.dataDelayInBytes;
718 if (dataDelayInBytes > 0) {
719 FilterDelayHint delayHint;
720 delayHint.hintType = FilterDelayHintType::DATA_SIZE_DELAY_IN_BYTES;
721 delayHint.hintValue = dataDelayInBytes;
Patrick Rohr149b0872021-11-20 00:39:37 +0100722
Patrick Rohr1586d212021-11-23 00:40:56 +0100723 // setDelayHint should fail for media filters.
724 ASSERT_EQ(filter->setDelayHint(delayHint).isOk(), !mediaFilter);
725 }
Patrick Rohr149b0872021-11-20 00:39:37 +0100726
Patrick Rohr1586d212021-11-23 00:40:56 +0100727 // start and stop filter in order to circumvent callback scheduler race
728 // conditions after adjusting filter delays.
729 mFilterTests.startFilter(filterId);
730 mFilterTests.stopFilter(filterId);
Patrick Rohr149b0872021-11-20 00:39:37 +0100731
Patrick Rohr1586d212021-11-23 00:40:56 +0100732 if (!mediaFilter) {
733 auto cb = mFilterTests.getFilterCallbacks().at(filterId);
734 int callbackSize = 0;
735 auto future = cb->verifyFilterCallback(
736 [&callbackSize](const std::vector<DemuxFilterEvent>& events) {
737 for (const auto& event : events) {
738 callbackSize += getDemuxFilterEventDataLength(event);
739 }
740 return true;
741 });
742
743 // The configure stage can also produce events, so we should set the delay
744 // hint beforehand.
745 ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
746
747 auto startTime = std::chrono::steady_clock::now();
748 ASSERT_TRUE(mFilterTests.startFilter(filterId));
749
750 // block and wait for callback to be received.
751 auto timeout = std::chrono::seconds(30);
752 ASSERT_EQ(future.wait_for(timeout), std::future_status::ready);
753 auto duration = std::chrono::steady_clock::now() - startTime;
754
755 bool delayHintTest = duration >= timeDelayInMs;
756 bool dataSizeTest = callbackSize >= dataDelayInBytes;
757
758 if (timeDelayInMs.count() > 0 && dataDelayInBytes > 0) {
759 ASSERT_TRUE(delayHintTest || dataSizeTest);
760 } else {
761 // if only one of time delay / data delay is configured, one of them
762 // holds true by default, so we want both assertions to be true.
763 ASSERT_TRUE(delayHintTest && dataSizeTest);
764 }
765
766 ASSERT_TRUE(mFilterTests.stopFilter(filterId));
767 }
768
Patrick Rohr149b0872021-11-20 00:39:37 +0100769 ASSERT_TRUE(mFilterTests.closeFilter(filterId));
770 ASSERT_TRUE(mDemuxTests.closeDemux());
771 ASSERT_TRUE(mFrontendTests.closeFrontend());
772}
773
Patrick Rohr1586d212021-11-23 00:40:56 +0100774TEST_P(TunerFilterAidlTest, FilterDelayHintTest) {
775 description("Test filter time delay hint.");
776
777 for (const auto& obj : filterMap) {
778 testDelayHint(obj.second);
779 }
780}
781
Hongguang600a6ae2021-07-08 18:51:51 -0700782TEST_P(TunerPlaybackAidlTest, PlaybackDataFlowWithTsSectionFilterTest) {
783 description("Feed ts data from playback and configure Ts section filter to get output");
784 if (!playback.support || playback.sectionFilterId.compare(emptyHardwareId) == 0) {
785 return;
786 }
787 playbackSingleFilterTest(filterMap[playback.sectionFilterId], dvrMap[playback.dvrId]);
788}
789
790TEST_P(TunerPlaybackAidlTest, PlaybackDataFlowWithTsAudioFilterTest) {
791 description("Feed ts data from playback and configure Ts audio filter to get output");
792 if (!playback.support) {
793 return;
794 }
795 playbackSingleFilterTest(filterMap[playback.audioFilterId], dvrMap[playback.dvrId]);
796}
797
798TEST_P(TunerPlaybackAidlTest, PlaybackDataFlowWithTsVideoFilterTest) {
799 description("Feed ts data from playback and configure Ts video filter to get output");
800 if (!playback.support) {
801 return;
802 }
803 playbackSingleFilterTest(filterMap[playback.videoFilterId], dvrMap[playback.dvrId]);
804}
805
806TEST_P(TunerRecordAidlTest, RecordDataFlowWithTsRecordFilterTest) {
807 description("Feed ts data from frontend to recording and test with ts record filter");
808 if (!record.support) {
809 return;
810 }
811 recordSingleFilterTest(filterMap[record.recordFilterId], frontendMap[record.frontendId],
812 dvrMap[record.dvrRecordId]);
813}
814
815TEST_P(TunerRecordAidlTest, AttachFiltersToRecordTest) {
816 description("Attach a single filter to the record dvr test.");
817 // TODO use parameterized tests
818 if (!record.support) {
819 return;
820 }
821 attachSingleFilterToRecordDvrTest(filterMap[record.recordFilterId],
822 frontendMap[record.frontendId], dvrMap[record.dvrRecordId]);
823}
824
825TEST_P(TunerRecordAidlTest, LnbRecordDataFlowWithTsRecordFilterTest) {
826 description("Feed ts data from Fe with Lnb to recording and test with ts record filter");
827 if (!lnbRecord.support) {
828 return;
829 }
830 recordSingleFilterTestWithLnb(filterMap[lnbRecord.recordFilterId],
831 frontendMap[lnbRecord.frontendId], dvrMap[lnbRecord.dvrRecordId],
832 lnbMap[lnbRecord.lnbId]);
833}
834
835TEST_P(TunerFrontendAidlTest, TuneFrontend) {
836 description("Tune one Frontend with specific setting and check Lock event");
837 if (!live.hasFrontendConnection) {
838 return;
839 }
840 mFrontendTests.tuneTest(frontendMap[live.frontendId]);
841}
842
843TEST_P(TunerFrontendAidlTest, AutoScanFrontend) {
844 description("Run an auto frontend scan with specific setting and check lock scanMessage");
845 if (!scan.hasFrontendConnection) {
846 return;
847 }
848 mFrontendTests.scanTest(frontendMap[scan.frontendId], FrontendScanType::SCAN_AUTO);
849}
850
851TEST_P(TunerFrontendAidlTest, BlindScanFrontend) {
852 description("Run an blind frontend scan with specific setting and check lock scanMessage");
853 if (!scan.hasFrontendConnection) {
854 return;
855 }
856 mFrontendTests.scanTest(frontendMap[scan.frontendId], FrontendScanType::SCAN_BLIND);
857}
858
859TEST_P(TunerFrontendAidlTest, TuneFrontendWithFrontendSettings) {
860 description("Tune one Frontend with setting and check Lock event");
861 if (!live.hasFrontendConnection) {
862 return;
863 }
864 mFrontendTests.tuneTest(frontendMap[live.frontendId]);
865}
866
867TEST_P(TunerFrontendAidlTest, BlindScanFrontendWithEndFrequency) {
868 description("Run an blind frontend scan with setting and check lock scanMessage");
869 if (!scan.hasFrontendConnection) {
870 return;
871 }
872 mFrontendTests.scanTest(frontendMap[scan.frontendId], FrontendScanType::SCAN_BLIND);
873}
874
875TEST_P(TunerFrontendAidlTest, LinkToCiCam) {
876 description("Test Frontend link to CiCam");
877 if (!live.hasFrontendConnection) {
878 return;
879 }
880 if (!frontendMap[live.frontendId].canConnectToCiCam) {
881 return;
882 }
883 mFrontendTests.tuneTest(frontendMap[live.frontendId]);
884}
885
Hongguangfcedda02021-12-13 17:08:02 -0800886TEST_P(TunerFrontendAidlTest, getHardwareInfo) {
887 description("Test Frontend get hardware info");
888 if (!live.hasFrontendConnection) {
889 return;
890 }
891 mFrontendTests.debugInfoTest(frontendMap[live.frontendId]);
892}
893
Hongguang600a6ae2021-07-08 18:51:51 -0700894TEST_P(TunerBroadcastAidlTest, BroadcastDataFlowVideoFilterTest) {
895 description("Test Video Filter functionality in Broadcast use case.");
896 if (!live.hasFrontendConnection) {
897 return;
898 }
899 broadcastSingleFilterTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
900}
901
902TEST_P(TunerBroadcastAidlTest, BroadcastDataFlowAudioFilterTest) {
903 description("Test Audio Filter functionality in Broadcast use case.");
904 if (!live.hasFrontendConnection) {
905 return;
906 }
907 broadcastSingleFilterTest(filterMap[live.audioFilterId], frontendMap[live.frontendId]);
908}
909
910TEST_P(TunerBroadcastAidlTest, BroadcastDataFlowSectionFilterTest) {
911 description("Test Section Filter functionality in Broadcast use case.");
912 if (!live.hasFrontendConnection) {
913 return;
914 }
915 if (live.sectionFilterId.compare(emptyHardwareId) == 0) {
916 return;
917 }
918 broadcastSingleFilterTest(filterMap[live.sectionFilterId], frontendMap[live.frontendId]);
919}
920
921TEST_P(TunerBroadcastAidlTest, IonBufferTest) {
922 description("Test the av filter data bufferring.");
923 if (!live.hasFrontendConnection) {
924 return;
925 }
926 broadcastSingleFilterTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
927}
928
929TEST_P(TunerBroadcastAidlTest, LnbBroadcastDataFlowVideoFilterTest) {
930 description("Test Video Filter functionality in Broadcast with Lnb use case.");
931 if (!lnbLive.support) {
932 return;
933 }
934 broadcastSingleFilterTestWithLnb(filterMap[lnbLive.videoFilterId],
935 frontendMap[lnbLive.frontendId], lnbMap[lnbLive.lnbId]);
936}
937
938TEST_P(TunerBroadcastAidlTest, MediaFilterWithSharedMemoryHandle) {
939 description("Test the Media Filter with shared memory handle");
940 if (!live.hasFrontendConnection) {
941 return;
942 }
943 mediaFilterUsingSharedMemoryTest(filterMap[live.videoFilterId], frontendMap[live.frontendId]);
944}
945
946TEST_P(TunerDescramblerAidlTest, CreateDescrambler) {
947 description("Create Descrambler");
948 if (!descrambling.support) {
949 return;
950 }
951 int32_t demuxId;
952 std::shared_ptr<IDemux> demux;
953 ASSERT_TRUE(mDemuxTests.openDemux(demux, demuxId));
954
955 if (descrambling.hasFrontendConnection) {
956 int32_t feId;
957 mFrontendTests.getFrontendIdByType(frontendMap[descrambling.frontendId].type, feId);
958 ASSERT_TRUE(feId != INVALID_ID);
959 ASSERT_TRUE(mFrontendTests.openFrontendById(feId));
960 ASSERT_TRUE(mFrontendTests.setFrontendCallback());
961 ASSERT_TRUE(mDemuxTests.setDemuxFrontendDataSource(feId));
962 }
963
964 ASSERT_TRUE(mDescramblerTests.openDescrambler(demuxId));
965 ASSERT_TRUE(mDescramblerTests.closeDescrambler());
966 ASSERT_TRUE(mDemuxTests.closeDemux());
967
968 if (descrambling.hasFrontendConnection) {
969 ASSERT_TRUE(mFrontendTests.closeFrontend());
970 }
971}
972
973TEST_P(TunerDescramblerAidlTest, ScrambledBroadcastDataFlowMediaFiltersTest) {
974 description("Test ts audio filter in scrambled broadcast use case");
975 if (!descrambling.support) {
976 return;
977 }
978 set<FilterConfig> filterConfs;
979 filterConfs.insert(static_cast<FilterConfig>(filterMap[descrambling.audioFilterId]));
980 filterConfs.insert(static_cast<FilterConfig>(filterMap[descrambling.videoFilterId]));
981 scrambledBroadcastTest(filterConfs, frontendMap[descrambling.frontendId],
982 descramblerMap[descrambling.descramblerId]);
983}
984
985INSTANTIATE_TEST_SUITE_P(PerInstance, TunerBroadcastAidlTest,
986 testing::ValuesIn(android::getAidlHalInstanceNames(ITuner::descriptor)),
987 android::PrintInstanceNameToString);
988
989INSTANTIATE_TEST_SUITE_P(PerInstance, TunerFrontendAidlTest,
990 testing::ValuesIn(android::getAidlHalInstanceNames(ITuner::descriptor)),
991 android::PrintInstanceNameToString);
992
993INSTANTIATE_TEST_SUITE_P(PerInstance, TunerFilterAidlTest,
994 testing::ValuesIn(android::getAidlHalInstanceNames(ITuner::descriptor)),
995 android::PrintInstanceNameToString);
996
997INSTANTIATE_TEST_SUITE_P(PerInstance, TunerRecordAidlTest,
998 testing::ValuesIn(android::getAidlHalInstanceNames(ITuner::descriptor)),
999 android::PrintInstanceNameToString);
1000
1001INSTANTIATE_TEST_SUITE_P(PerInstance, TunerLnbAidlTest,
1002 testing::ValuesIn(android::getAidlHalInstanceNames(ITuner::descriptor)),
1003 android::PrintInstanceNameToString);
1004
1005INSTANTIATE_TEST_SUITE_P(PerInstance, TunerDemuxAidlTest,
1006 testing::ValuesIn(android::getAidlHalInstanceNames(ITuner::descriptor)),
1007 android::PrintInstanceNameToString);
1008
1009INSTANTIATE_TEST_SUITE_P(PerInstance, TunerPlaybackAidlTest,
1010 testing::ValuesIn(android::getAidlHalInstanceNames(ITuner::descriptor)),
1011 android::PrintInstanceNameToString);
1012
1013INSTANTIATE_TEST_SUITE_P(PerInstance, TunerDescramblerAidlTest,
1014 testing::ValuesIn(android::getAidlHalInstanceNames(ITuner::descriptor)),
1015 android::PrintInstanceNameToString);
1016
1017} // namespace
1018
1019// Start thread pool to receive callbacks from AIDL service.
1020int main(int argc, char** argv) {
1021 ::testing::InitGoogleTest(&argc, argv);
1022 ABinderProcess_setThreadPoolMaxThreadCount(1);
1023 ABinderProcess_startThreadPool();
1024 return RUN_ALL_TESTS();
1025}