Add an initial Demxu client and Filter Client interface

Test: make libmedia_tv_tuner
Bug: 174095851

Change-Id: I8af379bf2810bee3dedf69ea0187766300b05370
diff --git a/media/jni/tuner/TunerClient.cpp b/media/jni/tuner/TunerClient.cpp
index 4665f2b..a56a418 100644
--- a/media/jni/tuner/TunerClient.cpp
+++ b/media/jni/tuner/TunerClient.cpp
@@ -82,13 +82,13 @@
         // TODO: handle error code
         shared_ptr<ITunerFrontend> tunerFrontend;
         mTunerService->openFrontend(frontendHandle, &tunerFrontend);
-        return new FrontendClient(tunerFrontend);
+        return new FrontendClient(tunerFrontend, frontendHandle);
     }
 
     if (mTuner != NULL) {
         sp<IFrontend> hidlFrontend = openHidlFrontendByHandle(frontendHandle);
         if (hidlFrontend != NULL) {
-            sp<FrontendClient> frontendClient = new FrontendClient(NULL);
+            sp<FrontendClient> frontendClient = new FrontendClient(NULL, frontendHandle);
             frontendClient->setHidlFrontend(hidlFrontend);
             return frontendClient;
         }
@@ -136,6 +136,27 @@
     return NULL;
 }
 
+sp<DemuxClient> TunerClient::openDemux(int /*demuxHandle*/) {
+    if (mTunerService != NULL) {
+        // TODO: handle error code
+        /*shared_ptr<ITunerDemux> tunerDemux;
+        mTunerService->openDemux(demuxHandle, &tunerDemux);
+        return new DemuxClient(tunerDemux);*/
+    }
+
+    if (mTuner != NULL) {
+        // TODO: pending aidl interface
+        sp<DemuxClient> demuxClient = new DemuxClient();
+        sp<IDemux> hidlDemux = openHidlDemux();
+        if (hidlDemux != NULL) {
+            demuxClient->setHidlDemux(hidlDemux);
+            return demuxClient;
+        }
+    }
+
+    return NULL;
+}
+
 /////////////// TunerClient Helper Methods ///////////////////////
 
 sp<ITuner> TunerClient::getHidlTuner() {
@@ -183,6 +204,21 @@
     return res;
 }
 
+sp<IDemux> TunerClient::openHidlDemux() {
+    sp<IDemux> demux;
+    Result res;
+
+    mTuner->openDemux([&](Result result, uint32_t /*id*/, const sp<IDemux>& demuxSp) {
+        demux = demuxSp;
+        res = result;
+    });
+    if (res != Result::SUCCESS || demux == nullptr) {
+        ALOGE("Failed to open demux");
+        return NULL;
+    }
+    return demux;
+}
+
 FrontendInfo TunerClient::FrontendInfoAidlToHidl(TunerServiceFrontendInfo aidlFrontendInfo) {
     FrontendInfo hidlFrontendInfo {
         .type = static_cast<FrontendType>(aidlFrontendInfo.type),