1 /*
2  * Copyright (C) 2017 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 MEDIA_CAS_DEFS_H_
18 #define MEDIA_CAS_DEFS_H_
19 
20 #include <binder/Parcel.h>
21 #include <media/cas/CasAPI.h>
22 #include <media/cas/DescramblerAPI.h>
23 #include <media/stagefright/foundation/ABase.h>
24 
25 namespace android {
26 class IMemory;
27 namespace media {
28 
29 namespace MediaCas {
30 class ParcelableCasData : public CasData,
31                           public Parcelable {
32 public:
ParcelableCasData()33     ParcelableCasData() {}
ParcelableCasData(const uint8_t * data,size_t size)34     ParcelableCasData(const uint8_t *data, size_t size) :
35         CasData(data, data + size) {}
~ParcelableCasData()36     virtual ~ParcelableCasData() {}
37     status_t readFromParcel(const Parcel* parcel) override;
38     status_t writeToParcel(Parcel* parcel) const override;
39 
40 private:
41     DISALLOW_EVIL_CONSTRUCTORS(ParcelableCasData);
42 };
43 
44 class ParcelableCasPluginDescriptor : public Parcelable {
45 public:
ParcelableCasPluginDescriptor(int32_t CA_system_id,const char * name)46     ParcelableCasPluginDescriptor(int32_t CA_system_id, const char *name)
47         : mCASystemId(CA_system_id), mName(name) {}
48 
ParcelableCasPluginDescriptor()49     ParcelableCasPluginDescriptor() : mCASystemId(0) {}
50 
51     ParcelableCasPluginDescriptor(ParcelableCasPluginDescriptor&& desc) = default;
52 
~ParcelableCasPluginDescriptor()53     virtual ~ParcelableCasPluginDescriptor() {}
54 
55     status_t readFromParcel(const Parcel* parcel) override;
56     status_t writeToParcel(Parcel* parcel) const override;
57 
58 private:
59     int32_t mCASystemId;
60     String16 mName;
61     DISALLOW_EVIL_CONSTRUCTORS(ParcelableCasPluginDescriptor);
62 };
63 }
64 
65 namespace MediaDescrambler {
66 class DescrambleInfo : public Parcelable {
67 public:
68     enum DestinationType {
69         kDestinationTypeVmPointer,    // non-secure
70         kDestinationTypeNativeHandle  // secure
71     };
72 
73     DestinationType dstType;
74     DescramblerPlugin::ScramblingControl scramblingControl;
75     size_t numSubSamples;
76     DescramblerPlugin::SubSample *subSamples;
77     sp<IMemory> srcMem;
78     int32_t srcOffset;
79     void *dstPtr;
80     int32_t dstOffset;
81 
82     DescrambleInfo();
83     virtual ~DescrambleInfo();
84     status_t readFromParcel(const Parcel* parcel) override;
85     status_t writeToParcel(Parcel* parcel) const override;
86 
87 private:
88 
89     DISALLOW_EVIL_CONSTRUCTORS(DescrambleInfo);
90 };
91 }
92 
93 } // namespace media
94 } // namespace android
95 
96 
97 #endif // MEDIA_CAS_DEFS_H_
98