blob: 8e2d6c76cb05fc8f3145edb1d67b4a96a11ad2b0 [file] [log] [blame]
Amy Zhangb2989b52021-02-05 12:27:25 -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#define LOG_TAG "TunerDescrambler"
18
Amy Zhangb2989b52021-02-05 12:27:25 -080019#include "TunerDescrambler.h"
20
Hongguangeae68392021-07-27 20:56:23 -070021#include <aidl/android/hardware/tv/tuner/IFilter.h>
22#include <aidl/android/hardware/tv/tuner/Result.h>
23
24#include "TunerDemux.h"
25#include "TunerFilter.h"
26
27using ::aidl::android::hardware::tv::tuner::IFilter;
28using ::aidl::android::hardware::tv::tuner::Result;
Amy Zhangb2989b52021-02-05 12:27:25 -080029
30using namespace std;
31
Hongguangeae68392021-07-27 20:56:23 -070032namespace aidl {
Amy Zhangb2989b52021-02-05 12:27:25 -080033namespace android {
Hongguangeae68392021-07-27 20:56:23 -070034namespace media {
35namespace tv {
36namespace tuner {
Amy Zhangb2989b52021-02-05 12:27:25 -080037
Hongguangeae68392021-07-27 20:56:23 -070038TunerDescrambler::TunerDescrambler(shared_ptr<IDescrambler> descrambler) {
Amy Zhangb2989b52021-02-05 12:27:25 -080039 mDescrambler = descrambler;
40}
41
42TunerDescrambler::~TunerDescrambler() {
43 mDescrambler = nullptr;
44}
45
Hongguangeae68392021-07-27 20:56:23 -070046::ndk::ScopedAStatus TunerDescrambler::setDemuxSource(
47 const shared_ptr<ITunerDemux>& in_tunerDemux) {
Amy Zhangb2989b52021-02-05 12:27:25 -080048 if (mDescrambler == nullptr) {
49 ALOGE("IDescrambler is not initialized");
Hongguangeae68392021-07-27 20:56:23 -070050 return ::ndk::ScopedAStatus::fromServiceSpecificError(
51 static_cast<int32_t>(Result::UNAVAILABLE));
Amy Zhangb2989b52021-02-05 12:27:25 -080052 }
53
Hongguangeae68392021-07-27 20:56:23 -070054 return mDescrambler->setDemuxSource((static_cast<TunerDemux*>(in_tunerDemux.get()))->getId());
Amy Zhangb2989b52021-02-05 12:27:25 -080055}
56
Hongguangeae68392021-07-27 20:56:23 -070057::ndk::ScopedAStatus TunerDescrambler::setKeyToken(const vector<uint8_t>& in_keyToken) {
Amy Zhangb2989b52021-02-05 12:27:25 -080058 if (mDescrambler == nullptr) {
59 ALOGE("IDescrambler is not initialized");
Hongguangeae68392021-07-27 20:56:23 -070060 return ::ndk::ScopedAStatus::fromServiceSpecificError(
61 static_cast<int32_t>(Result::UNAVAILABLE));
Amy Zhangb2989b52021-02-05 12:27:25 -080062 }
63
Hongguangeae68392021-07-27 20:56:23 -070064 return mDescrambler->setKeyToken(in_keyToken);
Amy Zhangb2989b52021-02-05 12:27:25 -080065}
66
Hongguangeae68392021-07-27 20:56:23 -070067::ndk::ScopedAStatus TunerDescrambler::addPid(
68 const DemuxPid& in_pid, const shared_ptr<ITunerFilter>& in_optionalSourceFilter) {
Amy Zhangb2989b52021-02-05 12:27:25 -080069 if (mDescrambler == nullptr) {
70 ALOGE("IDescrambler is not initialized");
Hongguangeae68392021-07-27 20:56:23 -070071 return ::ndk::ScopedAStatus::fromServiceSpecificError(
72 static_cast<int32_t>(Result::UNAVAILABLE));
Amy Zhangb2989b52021-02-05 12:27:25 -080073 }
74
Hongguangeae68392021-07-27 20:56:23 -070075 shared_ptr<IFilter> halFilter =
76 (in_optionalSourceFilter == nullptr)
77 ? nullptr
78 : static_cast<TunerFilter*>(in_optionalSourceFilter.get())->getHalFilter();
79
80 return mDescrambler->addPid(in_pid, halFilter);
Amy Zhangb2989b52021-02-05 12:27:25 -080081}
82
Hongguangeae68392021-07-27 20:56:23 -070083::ndk::ScopedAStatus TunerDescrambler::removePid(
84 const DemuxPid& in_pid, const shared_ptr<ITunerFilter>& in_optionalSourceFilter) {
Amy Zhangb2989b52021-02-05 12:27:25 -080085 if (mDescrambler == nullptr) {
86 ALOGE("IDescrambler is not initialized");
Hongguangeae68392021-07-27 20:56:23 -070087 return ::ndk::ScopedAStatus::fromServiceSpecificError(
88 static_cast<int32_t>(Result::UNAVAILABLE));
Amy Zhangb2989b52021-02-05 12:27:25 -080089 }
90
Hongguangeae68392021-07-27 20:56:23 -070091 shared_ptr<IFilter> halFilter =
92 (in_optionalSourceFilter == nullptr)
93 ? nullptr
94 : static_cast<TunerFilter*>(in_optionalSourceFilter.get())->getHalFilter();
95
96 return mDescrambler->removePid(in_pid, halFilter);
Amy Zhangb2989b52021-02-05 12:27:25 -080097}
98
Hongguangeae68392021-07-27 20:56:23 -070099::ndk::ScopedAStatus TunerDescrambler::close() {
Amy Zhangb2989b52021-02-05 12:27:25 -0800100 if (mDescrambler == nullptr) {
101 ALOGE("IDescrambler is not initialized.");
Hongguangeae68392021-07-27 20:56:23 -0700102 return ::ndk::ScopedAStatus::fromServiceSpecificError(
103 static_cast<int32_t>(Result::UNAVAILABLE));
Amy Zhangb2989b52021-02-05 12:27:25 -0800104 }
105
Hongguangeae68392021-07-27 20:56:23 -0700106 auto res = mDescrambler->close();
107 mDescrambler = nullptr;
Amy Zhang14a60e82021-02-11 15:22:52 -0800108
Hongguangeae68392021-07-27 20:56:23 -0700109 return res;
Amy Zhangb2989b52021-02-05 12:27:25 -0800110}
111
Hongguangeae68392021-07-27 20:56:23 -0700112} // namespace tuner
113} // namespace tv
114} // namespace media
Amy Zhangb2989b52021-02-05 12:27:25 -0800115} // namespace android
Hongguangeae68392021-07-27 20:56:23 -0700116} // namespace aidl