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 #ifndef ANDROID_MEDIA_TUNERDVR_H 18 #define ANDROID_MEDIA_TUNERDVR_H 19 20 #include <aidl/android/media/tv/tuner/BnTunerDvr.h> 21 #include <aidl/android/media/tv/tuner/ITunerDvrCallback.h> 22 #include <android/hardware/tv/tuner/1.0/ITuner.h> 23 #include <fmq/MessageQueue.h> 24 25 #include <TunerFilter.h> 26 27 using Status = ::ndk::ScopedAStatus; 28 using ::aidl::android::hardware::common::fmq::GrantorDescriptor; 29 using ::aidl::android::hardware::common::fmq::MQDescriptor; 30 using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite; 31 using ::aidl::android::media::tv::tuner::BnTunerDvr; 32 using ::aidl::android::media::tv::tuner::ITunerDvrCallback; 33 using ::aidl::android::media::tv::tuner::ITunerFilter; 34 using ::aidl::android::media::tv::tuner::TunerDvrSettings; 35 36 using ::android::hardware::MQDescriptorSync; 37 using ::android::hardware::MessageQueue; 38 using ::android::hardware::Return; 39 using ::android::hardware::Void; 40 41 using ::android::hardware::tv::tuner::V1_0::DvrSettings; 42 using ::android::hardware::tv::tuner::V1_0::DvrType; 43 using ::android::hardware::tv::tuner::V1_0::IDvr; 44 using ::android::hardware::tv::tuner::V1_0::IDvrCallback; 45 using ::android::hardware::tv::tuner::V1_0::PlaybackStatus; 46 using ::android::hardware::tv::tuner::V1_0::RecordStatus; 47 48 using namespace std; 49 50 namespace android { 51 52 using MQDesc = MQDescriptorSync<uint8_t>; 53 using AidlMQDesc = MQDescriptor<int8_t, SynchronizedReadWrite>; 54 55 class TunerDvr : public BnTunerDvr { 56 57 public: 58 TunerDvr(sp<IDvr> dvr, int type); 59 ~TunerDvr(); 60 61 Status getQueueDesc(AidlMQDesc* _aidl_return) override; 62 63 Status configure(const TunerDvrSettings& settings) override; 64 65 Status attachFilter(const shared_ptr<ITunerFilter>& filter) override; 66 67 Status detachFilter(const shared_ptr<ITunerFilter>& filter) override; 68 69 Status start() override; 70 71 Status stop() override; 72 73 Status flush() override; 74 75 Status close() override; 76 77 struct DvrCallback : public IDvrCallback { DvrCallbackDvrCallback78 DvrCallback(const shared_ptr<ITunerDvrCallback> tunerDvrCallback) 79 : mTunerDvrCallback(tunerDvrCallback) {}; 80 81 virtual Return<void> onRecordStatus(const RecordStatus status); 82 virtual Return<void> onPlaybackStatus(const PlaybackStatus status); 83 84 private: 85 shared_ptr<ITunerDvrCallback> mTunerDvrCallback; 86 }; 87 88 private: 89 DvrSettings getHidlDvrSettingsFromAidl(TunerDvrSettings settings); 90 91 sp<IDvr> mDvr; 92 DvrType mType; 93 }; 94 95 } // namespace android 96 97 #endif // ANDROID_MEDIA_TUNERDVR_H 98