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 "TimeFilterClient"
18 
19 #include <android-base/logging.h>
20 #include <utils/Log.h>
21 
22 #include "ClientHelper.h"
23 #include "TimeFilterClient.h"
24 
25 using ::android::hardware::tv::tuner::V1_0::Result;
26 using ::android::hardware::tv::tuner::V1_1::Constant64Bit;
27 
28 namespace android {
29 
30 /////////////// TimeFilterClient ///////////////////////
31 
TimeFilterClient(shared_ptr<ITunerTimeFilter> tunerTimeFilter)32 TimeFilterClient::TimeFilterClient(shared_ptr<ITunerTimeFilter> tunerTimeFilter) {
33     mTunerTimeFilter = tunerTimeFilter;
34 }
35 
~TimeFilterClient()36 TimeFilterClient::~TimeFilterClient() {
37     mTunerTimeFilter = NULL;
38     mTimeFilter = NULL;
39 }
40 
41 // TODO: remove after migration to Tuner Service is done.
setHidlTimeFilter(sp<ITimeFilter> timeFilter)42 void TimeFilterClient::setHidlTimeFilter(sp<ITimeFilter> timeFilter) {
43     mTimeFilter = timeFilter;
44 }
45 
setTimeStamp(long timeStamp)46 Result TimeFilterClient::setTimeStamp(long timeStamp) {
47     if (mTunerTimeFilter != NULL) {
48         Status s = mTunerTimeFilter->setTimeStamp(timeStamp);
49         return ClientHelper::getServiceSpecificErrorCode(s);
50     }
51 
52     if (mTimeFilter != NULL) {
53         return mTimeFilter->setTimeStamp(timeStamp);
54     }
55 
56     return Result::INVALID_STATE;
57 }
58 
clearTimeStamp()59 Result TimeFilterClient::clearTimeStamp() {
60     if (mTunerTimeFilter != NULL) {
61         Status s = mTunerTimeFilter->clearTimeStamp();
62         return ClientHelper::getServiceSpecificErrorCode(s);
63     }
64 
65     if (mTimeFilter != NULL) {
66         return mTimeFilter->clearTimeStamp();
67     }
68 
69     return Result::INVALID_STATE;
70 }
71 
getTimeStamp()72 long TimeFilterClient::getTimeStamp() {
73     if (mTunerTimeFilter != NULL) {
74         int64_t timeStamp;
75         Status s = mTunerTimeFilter->getTimeStamp(&timeStamp);
76         if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
77             return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
78         }
79         return timeStamp;
80     }
81 
82     if (mTimeFilter != NULL) {
83         Result res;
84         long timestamp;
85         mTimeFilter->getTimeStamp(
86                 [&](Result r, uint64_t t) {
87                     res = r;
88                     timestamp = t;
89                 });
90         if (res != Result::SUCCESS) {
91             return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
92         }
93         return timestamp;
94     }
95 
96     return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
97 }
98 
getSourceTime()99 long TimeFilterClient::getSourceTime() {
100     if (mTunerTimeFilter != NULL) {
101         int64_t sourceTime;
102         Status s = mTunerTimeFilter->getTimeStamp(&sourceTime);
103         if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
104             return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
105         }
106         return sourceTime;
107     }
108 
109     if (mTimeFilter != NULL) {
110         Result res;
111         long sourceTime;
112         mTimeFilter->getSourceTime(
113                 [&](Result r, uint64_t t) {
114                     res = r;
115                     sourceTime = t;
116                 });
117         if (res != Result::SUCCESS) {
118             return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
119         }
120         return sourceTime;
121     }
122 
123     return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
124 }
125 
close()126 Result TimeFilterClient::close() {
127     if (mTunerTimeFilter != NULL) {
128         Status s = mTunerTimeFilter->close();
129         mTunerTimeFilter = NULL;
130         return ClientHelper::getServiceSpecificErrorCode(s);
131     }
132 
133     if (mTimeFilter != NULL) {
134         Result res = mTimeFilter->close();
135         mTimeFilter = NULL;
136         return res;
137     }
138 
139     return Result::INVALID_STATE;
140 }
141 }  // namespace android
142