• 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 #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