blob: a508e99e603394545a50b1571ac59d0404405cc8 [file] [log] [blame]
Amy Zhangada92d72021-01-22 16:45:53 -08001/**
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
27using Status = ::ndk::ScopedAStatus;
28using ::aidl::android::hardware::common::fmq::GrantorDescriptor;
29using ::aidl::android::hardware::common::fmq::MQDescriptor;
30using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite;
31using ::aidl::android::media::tv::tuner::BnTunerDvr;
32using ::aidl::android::media::tv::tuner::ITunerDvrCallback;
33using ::aidl::android::media::tv::tuner::ITunerFilter;
34using ::aidl::android::media::tv::tuner::TunerDvrSettings;
35
36using ::android::hardware::MQDescriptorSync;
37using ::android::hardware::MessageQueue;
38using ::android::hardware::Return;
39using ::android::hardware::Void;
40
41using ::android::hardware::tv::tuner::V1_0::DvrSettings;
42using ::android::hardware::tv::tuner::V1_0::DvrType;
43using ::android::hardware::tv::tuner::V1_0::IDvr;
44using ::android::hardware::tv::tuner::V1_0::IDvrCallback;
45using ::android::hardware::tv::tuner::V1_0::PlaybackStatus;
46using ::android::hardware::tv::tuner::V1_0::RecordStatus;
47
48using namespace std;
49
50namespace android {
51
52using MQDesc = MQDescriptorSync<uint8_t>;
53using AidlMQDesc = MQDescriptor<int8_t, SynchronizedReadWrite>;
54
55class TunerDvr : public BnTunerDvr {
56
57public:
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 {
78 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
88private:
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