• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 #define LOG_TAG "DemuxClient"
18 
19 #include "DemuxClient.h"
20 
21 #include <aidl/android/hardware/tv/tuner/Constant.h>
22 #include <aidl/android/hardware/tv/tuner/Constant64Bit.h>
23 #include <android-base/logging.h>
24 #include <utils/Log.h>
25 
26 using ::aidl::android::hardware::tv::tuner::Constant;
27 using ::aidl::android::hardware::tv::tuner::Constant64Bit;
28 
29 namespace android {
30 /////////////// DemuxClient ///////////////////////
DemuxClient(shared_ptr<ITunerDemux> tunerDemux)31 DemuxClient::DemuxClient(shared_ptr<ITunerDemux> tunerDemux) {
32     mTunerDemux = tunerDemux;
33 }
34 
~DemuxClient()35 DemuxClient::~DemuxClient() {
36     mTunerDemux = nullptr;
37 }
38 
setFrontendDataSource(sp<FrontendClient> frontendClient)39 Result DemuxClient::setFrontendDataSource(sp<FrontendClient> frontendClient) {
40     if (frontendClient == nullptr) {
41         return Result::INVALID_ARGUMENT;
42     }
43 
44     if (mTunerDemux != nullptr) {
45         Status s = mTunerDemux->setFrontendDataSource(frontendClient->getAidlFrontend());
46         return ClientHelper::getServiceSpecificErrorCode(s);
47     }
48 
49     return Result::INVALID_STATE;
50 }
51 
setFrontendDataSourceById(int frontendId)52 Result DemuxClient::setFrontendDataSourceById(int frontendId) {
53     if (mTunerDemux != nullptr) {
54         Status s = mTunerDemux->setFrontendDataSourceById(frontendId);
55         return ClientHelper::getServiceSpecificErrorCode(s);
56     }
57 
58     return Result::INVALID_STATE;
59 }
60 
openFilter(const DemuxFilterType & type,int32_t bufferSize,sp<FilterClientCallback> cb)61 sp<FilterClient> DemuxClient::openFilter(const DemuxFilterType& type, int32_t bufferSize,
62                                          sp<FilterClientCallback> cb) {
63     if (cb == nullptr) {
64         return nullptr;
65     }
66 
67     if (mTunerDemux != nullptr) {
68         shared_ptr<ITunerFilter> tunerFilter;
69         shared_ptr<TunerFilterCallback> callback =
70                 ::ndk::SharedRefBase::make<TunerFilterCallback>(cb);
71         Status s = mTunerDemux->openFilter(type, bufferSize, callback, &tunerFilter);
72         if (!s.isOk()) {
73             return nullptr;
74         }
75         return new FilterClient(type, tunerFilter);
76     }
77 
78     return nullptr;
79 }
80 
openTimeFilter()81 sp<TimeFilterClient> DemuxClient::openTimeFilter() {
82     if (mTunerDemux != nullptr) {
83         shared_ptr<ITunerTimeFilter> tunerTimeFilter;
84         Status s = mTunerDemux->openTimeFilter(&tunerTimeFilter);
85         if (!s.isOk()) {
86             return nullptr;
87         }
88         return new TimeFilterClient(tunerTimeFilter);
89     }
90 
91     return nullptr;
92 }
93 
getAvSyncHwId(sp<FilterClient> filterClient)94 int32_t DemuxClient::getAvSyncHwId(sp<FilterClient> filterClient) {
95     if (filterClient == nullptr) {
96         return static_cast<int32_t>(Constant::INVALID_AV_SYNC_ID);
97     }
98 
99     if (mTunerDemux != nullptr) {
100         int32_t hwId;
101         Status s = mTunerDemux->getAvSyncHwId(filterClient->getAidlFilter(), &hwId);
102         if (!s.isOk()) {
103             return static_cast<int32_t>(Constant::INVALID_AV_SYNC_ID);
104         }
105         return hwId;
106     }
107 
108     return static_cast<int32_t>(Constant::INVALID_AV_SYNC_ID);
109 }
110 
getAvSyncTime(int32_t avSyncHwId)111 int64_t DemuxClient::getAvSyncTime(int32_t avSyncHwId) {
112     if (mTunerDemux != nullptr) {
113         int64_t time;
114         Status s = mTunerDemux->getAvSyncTime(avSyncHwId, &time);
115         if (!s.isOk()) {
116             return static_cast<int64_t>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP);
117         }
118         return time;
119     }
120 
121     return static_cast<int64_t>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP);
122 }
123 
openDvr(DvrType dvbType,int32_t bufferSize,sp<DvrClientCallback> cb)124 sp<DvrClient> DemuxClient::openDvr(DvrType dvbType, int32_t bufferSize, sp<DvrClientCallback> cb) {
125     if (cb == nullptr) {
126         return nullptr;
127     }
128 
129     if (mTunerDemux != nullptr) {
130         shared_ptr<ITunerDvr> tunerDvr;
131         shared_ptr<TunerDvrCallback> callback =
132                 ::ndk::SharedRefBase::make<TunerDvrCallback>(cb);
133         Status s = mTunerDemux->openDvr(dvbType, bufferSize, callback, &tunerDvr);
134         if (!s.isOk()) {
135             return nullptr;
136         }
137         return new DvrClient(tunerDvr);
138     }
139 
140     return nullptr;
141 }
142 
connectCiCam(int32_t ciCamId)143 Result DemuxClient::connectCiCam(int32_t ciCamId) {
144     if (mTunerDemux != nullptr) {
145         Status s = mTunerDemux->connectCiCam(ciCamId);
146         return ClientHelper::getServiceSpecificErrorCode(s);
147     }
148 
149     return Result::INVALID_STATE;
150 }
151 
disconnectCiCam()152 Result DemuxClient::disconnectCiCam() {
153     if (mTunerDemux != nullptr) {
154         Status s = mTunerDemux->disconnectCiCam();
155         return ClientHelper::getServiceSpecificErrorCode(s);
156     }
157 
158     return Result::INVALID_STATE;
159 }
160 
close()161 Result DemuxClient::close() {
162     if (mTunerDemux != nullptr) {
163         Status s = mTunerDemux->close();
164         mTunerDemux = nullptr;
165         return ClientHelper::getServiceSpecificErrorCode(s);
166     }
167 
168     return Result::INVALID_STATE;
169 }
170 
171 }  // namespace android
172