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