1*d57664e9SAndroid Build Coastguard Worker /* 2*d57664e9SAndroid Build Coastguard Worker * Copyright 2021 The Android Open Source Project 3*d57664e9SAndroid Build Coastguard Worker * 4*d57664e9SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*d57664e9SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*d57664e9SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*d57664e9SAndroid Build Coastguard Worker * 8*d57664e9SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*d57664e9SAndroid Build Coastguard Worker * 10*d57664e9SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*d57664e9SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*d57664e9SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*d57664e9SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*d57664e9SAndroid Build Coastguard Worker * limitations under the License. 15*d57664e9SAndroid Build Coastguard Worker */ 16*d57664e9SAndroid Build Coastguard Worker 17*d57664e9SAndroid Build Coastguard Worker #ifndef _ANDROID_MEDIA_TV_DVR_CLIENT_H_ 18*d57664e9SAndroid Build Coastguard Worker #define _ANDROID_MEDIA_TV_DVR_CLIENT_H_ 19*d57664e9SAndroid Build Coastguard Worker 20*d57664e9SAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/DvrSettings.h> 21*d57664e9SAndroid Build Coastguard Worker #include <aidl/android/hardware/tv/tuner/Result.h> 22*d57664e9SAndroid Build Coastguard Worker #include <aidl/android/media/tv/tuner/BnTunerDvrCallback.h> 23*d57664e9SAndroid Build Coastguard Worker #include <aidl/android/media/tv/tuner/ITunerDvr.h> 24*d57664e9SAndroid Build Coastguard Worker #include <fmq/AidlMessageQueue.h> 25*d57664e9SAndroid Build Coastguard Worker 26*d57664e9SAndroid Build Coastguard Worker #include "DvrClientCallback.h" 27*d57664e9SAndroid Build Coastguard Worker #include "FilterClient.h" 28*d57664e9SAndroid Build Coastguard Worker 29*d57664e9SAndroid Build Coastguard Worker using Status = ::ndk::ScopedAStatus; 30*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::common::fmq::MQDescriptor; 31*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite; 32*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::DvrSettings; 33*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::PlaybackStatus; 34*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::RecordStatus; 35*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::hardware::tv::tuner::Result; 36*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::media::tv::tuner::BnTunerDvrCallback; 37*d57664e9SAndroid Build Coastguard Worker using ::aidl::android::media::tv::tuner::ITunerDvr; 38*d57664e9SAndroid Build Coastguard Worker 39*d57664e9SAndroid Build Coastguard Worker using namespace std; 40*d57664e9SAndroid Build Coastguard Worker 41*d57664e9SAndroid Build Coastguard Worker namespace android { 42*d57664e9SAndroid Build Coastguard Worker 43*d57664e9SAndroid Build Coastguard Worker using AidlMQ = AidlMessageQueue<int8_t, SynchronizedReadWrite>; 44*d57664e9SAndroid Build Coastguard Worker using AidlMQDesc = MQDescriptor<int8_t, SynchronizedReadWrite>; 45*d57664e9SAndroid Build Coastguard Worker 46*d57664e9SAndroid Build Coastguard Worker class TunerDvrCallback : public BnTunerDvrCallback { 47*d57664e9SAndroid Build Coastguard Worker 48*d57664e9SAndroid Build Coastguard Worker public: 49*d57664e9SAndroid Build Coastguard Worker TunerDvrCallback(sp<DvrClientCallback> dvrClientCallback); 50*d57664e9SAndroid Build Coastguard Worker 51*d57664e9SAndroid Build Coastguard Worker Status onRecordStatus(RecordStatus status); 52*d57664e9SAndroid Build Coastguard Worker Status onPlaybackStatus(PlaybackStatus status); 53*d57664e9SAndroid Build Coastguard Worker 54*d57664e9SAndroid Build Coastguard Worker private: 55*d57664e9SAndroid Build Coastguard Worker sp<DvrClientCallback> mDvrClientCallback; 56*d57664e9SAndroid Build Coastguard Worker }; 57*d57664e9SAndroid Build Coastguard Worker 58*d57664e9SAndroid Build Coastguard Worker struct DvrClient : public RefBase { 59*d57664e9SAndroid Build Coastguard Worker 60*d57664e9SAndroid Build Coastguard Worker public: 61*d57664e9SAndroid Build Coastguard Worker DvrClient(shared_ptr<ITunerDvr> tunerDvr); 62*d57664e9SAndroid Build Coastguard Worker ~DvrClient(); 63*d57664e9SAndroid Build Coastguard Worker 64*d57664e9SAndroid Build Coastguard Worker /** 65*d57664e9SAndroid Build Coastguard Worker * Set the DVR file descriptor. 66*d57664e9SAndroid Build Coastguard Worker */ 67*d57664e9SAndroid Build Coastguard Worker void setFd(int32_t fd); 68*d57664e9SAndroid Build Coastguard Worker 69*d57664e9SAndroid Build Coastguard Worker /** 70*d57664e9SAndroid Build Coastguard Worker * Read data from file with given size. Return the actual read size. 71*d57664e9SAndroid Build Coastguard Worker */ 72*d57664e9SAndroid Build Coastguard Worker int64_t readFromFile(int64_t size); 73*d57664e9SAndroid Build Coastguard Worker 74*d57664e9SAndroid Build Coastguard Worker /** 75*d57664e9SAndroid Build Coastguard Worker * Read data from the given buffer with given size. Return the actual read size. 76*d57664e9SAndroid Build Coastguard Worker */ 77*d57664e9SAndroid Build Coastguard Worker int64_t readFromBuffer(int8_t* buffer, int64_t size); 78*d57664e9SAndroid Build Coastguard Worker 79*d57664e9SAndroid Build Coastguard Worker /** 80*d57664e9SAndroid Build Coastguard Worker * Write data to file with given size. Return the actual write size. 81*d57664e9SAndroid Build Coastguard Worker */ 82*d57664e9SAndroid Build Coastguard Worker int64_t writeToFile(int64_t size); 83*d57664e9SAndroid Build Coastguard Worker 84*d57664e9SAndroid Build Coastguard Worker /** 85*d57664e9SAndroid Build Coastguard Worker * Seeks the Dvr file descriptor from the beginning of the file. 86*d57664e9SAndroid Build Coastguard Worker */ 87*d57664e9SAndroid Build Coastguard Worker int64_t seekFile(int64_t pos); 88*d57664e9SAndroid Build Coastguard Worker 89*d57664e9SAndroid Build Coastguard Worker /** 90*d57664e9SAndroid Build Coastguard Worker * Write data to the given buffer with given size. Return the actual write size. 91*d57664e9SAndroid Build Coastguard Worker */ 92*d57664e9SAndroid Build Coastguard Worker int64_t writeToBuffer(int8_t* buffer, int64_t size); 93*d57664e9SAndroid Build Coastguard Worker 94*d57664e9SAndroid Build Coastguard Worker /** 95*d57664e9SAndroid Build Coastguard Worker * Configure the DVR. 96*d57664e9SAndroid Build Coastguard Worker */ 97*d57664e9SAndroid Build Coastguard Worker Result configure(DvrSettings settings); 98*d57664e9SAndroid Build Coastguard Worker 99*d57664e9SAndroid Build Coastguard Worker /** 100*d57664e9SAndroid Build Coastguard Worker * Attach one filter to DVR interface for recording. 101*d57664e9SAndroid Build Coastguard Worker */ 102*d57664e9SAndroid Build Coastguard Worker Result attachFilter(sp<FilterClient> filterClient); 103*d57664e9SAndroid Build Coastguard Worker 104*d57664e9SAndroid Build Coastguard Worker /** 105*d57664e9SAndroid Build Coastguard Worker * Detach one filter from the DVR's recording. 106*d57664e9SAndroid Build Coastguard Worker */ 107*d57664e9SAndroid Build Coastguard Worker Result detachFilter(sp<FilterClient> filterClient); 108*d57664e9SAndroid Build Coastguard Worker 109*d57664e9SAndroid Build Coastguard Worker /** 110*d57664e9SAndroid Build Coastguard Worker * Start DVR. 111*d57664e9SAndroid Build Coastguard Worker */ 112*d57664e9SAndroid Build Coastguard Worker Result start(); 113*d57664e9SAndroid Build Coastguard Worker 114*d57664e9SAndroid Build Coastguard Worker /** 115*d57664e9SAndroid Build Coastguard Worker * Stop DVR. 116*d57664e9SAndroid Build Coastguard Worker */ 117*d57664e9SAndroid Build Coastguard Worker Result stop(); 118*d57664e9SAndroid Build Coastguard Worker 119*d57664e9SAndroid Build Coastguard Worker /** 120*d57664e9SAndroid Build Coastguard Worker * Flush DVR data. 121*d57664e9SAndroid Build Coastguard Worker */ 122*d57664e9SAndroid Build Coastguard Worker Result flush(); 123*d57664e9SAndroid Build Coastguard Worker 124*d57664e9SAndroid Build Coastguard Worker /** 125*d57664e9SAndroid Build Coastguard Worker * close the DVR instance to release resource for DVR. 126*d57664e9SAndroid Build Coastguard Worker */ 127*d57664e9SAndroid Build Coastguard Worker Result close(); 128*d57664e9SAndroid Build Coastguard Worker 129*d57664e9SAndroid Build Coastguard Worker /** 130*d57664e9SAndroid Build Coastguard Worker * Set status check time interval. 131*d57664e9SAndroid Build Coastguard Worker */ 132*d57664e9SAndroid Build Coastguard Worker Result setStatusCheckIntervalHint(int64_t durationInMs); 133*d57664e9SAndroid Build Coastguard Worker 134*d57664e9SAndroid Build Coastguard Worker private: 135*d57664e9SAndroid Build Coastguard Worker /** 136*d57664e9SAndroid Build Coastguard Worker * An AIDL Tuner Dvr Singleton assigned at the first time the Tuner Client 137*d57664e9SAndroid Build Coastguard Worker * opens a dvr. Default null when dvr is not opened. 138*d57664e9SAndroid Build Coastguard Worker */ 139*d57664e9SAndroid Build Coastguard Worker shared_ptr<ITunerDvr> mTunerDvr; 140*d57664e9SAndroid Build Coastguard Worker 141*d57664e9SAndroid Build Coastguard Worker AidlMQ* mDvrMQ; 142*d57664e9SAndroid Build Coastguard Worker EventFlag* mDvrMQEventFlag; 143*d57664e9SAndroid Build Coastguard Worker string mFilePath; 144*d57664e9SAndroid Build Coastguard Worker int32_t mFd; 145*d57664e9SAndroid Build Coastguard Worker }; 146*d57664e9SAndroid Build Coastguard Worker } // namespace android 147*d57664e9SAndroid Build Coastguard Worker 148*d57664e9SAndroid Build Coastguard Worker #endif // _ANDROID_MEDIA_TV_DVR_CLIENT_H_ 149