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 "TunerTimeFilter"
18 
19 #include "TunerTimeFilter.h"
20 
21 using ::android::hardware::tv::tuner::V1_0::Result;
22 using ::android::hardware::tv::tuner::V1_1::Constant64Bit;
23 
24 namespace android {
25 
TunerTimeFilter(sp<ITimeFilter> timeFilter)26 TunerTimeFilter::TunerTimeFilter(sp<ITimeFilter> timeFilter) {
27     mTimeFilter = timeFilter;
28 }
29 
~TunerTimeFilter()30 TunerTimeFilter::~TunerTimeFilter() {
31     mTimeFilter = NULL;
32 }
33 
setTimeStamp(int64_t timeStamp)34 Status TunerTimeFilter::setTimeStamp(int64_t timeStamp) {
35     if (mTimeFilter == NULL) {
36         ALOGE("ITimeFilter is not initialized");
37         return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
38     }
39 
40     Result status = mTimeFilter->setTimeStamp(timeStamp);
41     if (status != Result::SUCCESS) {
42         return Status::fromServiceSpecificError(static_cast<int32_t>(status));
43     }
44     return Status::ok();
45 }
46 
clearTimeStamp()47 Status TunerTimeFilter::clearTimeStamp() {
48     if (mTimeFilter == NULL) {
49         ALOGE("ITimeFilter is not initialized");
50         return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
51     }
52 
53     Result status = mTimeFilter->clearTimeStamp();
54     if (status != Result::SUCCESS) {
55         return Status::fromServiceSpecificError(static_cast<int32_t>(status));
56     }
57     return Status::ok();
58 }
59 
getSourceTime(int64_t * _aidl_return)60 Status TunerTimeFilter::getSourceTime(int64_t* _aidl_return) {
61     if (mTimeFilter == NULL) {
62         *_aidl_return = (int64_t)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
63         ALOGE("ITimeFilter is not initialized");
64         return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
65     }
66 
67     Result status;
68     mTimeFilter->getSourceTime(
69             [&](Result r, uint64_t t) {
70                 status = r;
71                 *_aidl_return = t;
72             });
73     if (status != Result::SUCCESS) {
74         *_aidl_return = (int64_t)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
75         return Status::fromServiceSpecificError(static_cast<int32_t>(status));
76     }
77     return Status::ok();
78 }
79 
getTimeStamp(int64_t * _aidl_return)80 Status TunerTimeFilter::getTimeStamp(int64_t* _aidl_return) {
81     if (mTimeFilter == NULL) {
82         *_aidl_return = (int64_t)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
83         ALOGE("ITimeFilter is not initialized");
84         return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
85     }
86 
87     Result status;
88     mTimeFilter->getTimeStamp(
89             [&](Result r, uint64_t t) {
90                 status = r;
91                 *_aidl_return = t;
92             });
93     if (status != Result::SUCCESS) {
94         *_aidl_return = (int64_t)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
95         return Status::fromServiceSpecificError(static_cast<int32_t>(status));
96     }
97     return Status::ok();
98 }
99 
close()100 Status TunerTimeFilter::close() {
101     if (mTimeFilter == NULL) {
102         ALOGE("ITimeFilter is not initialized");
103         return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
104     }
105 
106     Result res = mTimeFilter->close();
107     mTimeFilter = NULL;
108 
109     if (res != Result::SUCCESS) {
110         return Status::fromServiceSpecificError(static_cast<int32_t>(res));
111     }
112     return Status::ok();
113 }
114 }  // namespace android
115