Connect existed TunerFilter/TunerDemux AIDL apis to TunerClient
This CL also resolved some TODO to handle aidl error messages
Test: make
Bug: 159067322
Change-Id: I6da66d1fa3989a501ec58bf1e0553f85a13e18db
diff --git a/media/jni/tuner/DemuxClient.cpp b/media/jni/tuner/DemuxClient.cpp
index 08b7398..7265dcc 100644
--- a/media/jni/tuner/DemuxClient.cpp
+++ b/media/jni/tuner/DemuxClient.cpp
@@ -23,20 +23,20 @@
using ::aidl::android::media::tv::tuner::TunerFrontendSettings;
+using ::android::hardware::tv::tuner::V1_0::DemuxFilterMainType;
using ::android::hardware::tv::tuner::V1_0::Result;
namespace android {
/////////////// DemuxClient ///////////////////////
-// TODO: pending aidl interface
-DemuxClient::DemuxClient() {
- //mTunerDemux = tunerDemux;
+DemuxClient::DemuxClient(shared_ptr<ITunerDemux> tunerDemux) {
+ mTunerDemux = tunerDemux;
mId = -1;
}
DemuxClient::~DemuxClient() {
- //mTunerDemux = NULL;
+ mTunerDemux = NULL;
mDemux = NULL;
mId = -1;
}
@@ -47,12 +47,10 @@
}
Result DemuxClient::setFrontendDataSource(sp<FrontendClient> frontendClient) {
- // TODO: pending aidl interface
- /*if (mTunerDemux != NULL) {
- // TODO: handle error message
- mTunerDemux->setFrontendDataSource(frontendClient->getAidlFrontend());
- return (int) Result::SUCCESS;
- }*/
+ if (mTunerDemux != NULL) {
+ Status s = mTunerDemux->setFrontendDataSource(frontendClient->getAidlFrontend());
+ return ClientHelper::getServiceSpecificErrorCode(s);
+ }
if (mDemux != NULL) {
Result res = mDemux->setFrontendDataSource(frontendClient->getId());
@@ -64,13 +62,23 @@
sp<FilterClient> DemuxClient::openFilter(DemuxFilterType type, int bufferSize,
sp<FilterClientCallback> cb) {
- // TODO: pending aidl interface
+ if (mTunerDemux != NULL) {
+ shared_ptr<ITunerFilter> tunerFilter;
+ shared_ptr<TunerFilterCallback> callback =
+ ::ndk::SharedRefBase::make<TunerFilterCallback>(cb);
+ Status s = mTunerDemux->openFilter((int)type.mainType, getSubType(type),
+ bufferSize, callback, &tunerFilter);
+ if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
+ return NULL;
+ }
+ return new FilterClient(type, tunerFilter);
+ }
if (mDemux != NULL) {
sp<HidlFilterCallback> callback = new HidlFilterCallback(cb);
sp<IFilter> hidlFilter = openHidlFilter(type, bufferSize, callback);
if (hidlFilter != NULL) {
- sp<FilterClient> filterClient = new FilterClient(type);
+ sp<FilterClient> filterClient = new FilterClient(type, NULL);
filterClient->setHidlFilter(hidlFilter);
return filterClient;
}
@@ -244,4 +252,21 @@
return hidlDvr;
}
+
+int DemuxClient::getSubType(DemuxFilterType filterType) {
+ switch (filterType.mainType) {
+ case DemuxFilterMainType::TS:
+ return (int)filterType.subType.tsFilterType();
+ case DemuxFilterMainType::MMTP:
+ return (int)filterType.subType.mmtpFilterType();
+ case DemuxFilterMainType::IP:
+ return (int)filterType.subType.ipFilterType();
+ case DemuxFilterMainType::TLV:
+ return (int)filterType.subType.tlvFilterType();
+ case DemuxFilterMainType::ALP:
+ return (int)filterType.subType.alpFilterType();
+ default:
+ return -1;
+ }
+}
} // namespace android