• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 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 #include <binder/IInterface.h>
18 #include <media/hardware/HDCPAPI.h>
19 #include <media/stagefright/foundation/ABase.h>
20 
21 namespace android {
22 
23 struct IHDCPObserver : public IInterface {
24     DECLARE_META_INTERFACE(HDCPObserver);
25 
26     virtual void notify(
27             int msg, int ext1, int ext2, const Parcel *obj) = 0;
28 
29 private:
30     DISALLOW_EVIL_CONSTRUCTORS(IHDCPObserver);
31 };
32 
33 struct IHDCP : public IInterface {
34     DECLARE_META_INTERFACE(HDCP);
35 
36     // Called to specify the observer that receives asynchronous notifications
37     // from the HDCP implementation to signal completion/failure of asynchronous
38     // operations (such as initialization) or out of band events.
39     virtual status_t setObserver(const sp<IHDCPObserver> &observer) = 0;
40 
41     // Request to setup an HDCP session with the specified host listening
42     // on the specified port.
43     virtual status_t initAsync(const char *host, unsigned port) = 0;
44 
45     // Request to shutdown the active HDCP session.
46     virtual status_t shutdownAsync() = 0;
47 
48     // ENCRYPTION only:
49     // Encrypt data according to the HDCP spec. "size" bytes of data are
50     // available at "inData" (virtual address), "size" may not be a multiple
51     // of 128 bits (16 bytes). An equal number of encrypted bytes should be
52     // written to the buffer at "outData" (virtual address).
53     // This operation is to be synchronous, i.e. this call does not return
54     // until outData contains size bytes of encrypted data.
55     // streamCTR will be assigned by the caller (to 0 for the first PES stream,
56     // 1 for the second and so on)
57     // inputCTR _will_be_maintained_by_the_callee_ for each PES stream.
58     virtual status_t encrypt(
59             const void *inData, size_t size, uint32_t streamCTR,
60             uint64_t *outInputCTR, void *outData) = 0;
61 
62     // DECRYPTION only:
63     // Decrypt data according to the HDCP spec.
64     // "size" bytes of encrypted data are available at "inData"
65     // (virtual address), "size" may not be a multiple of 128 bits (16 bytes).
66     // An equal number of decrypted bytes should be written to the buffer
67     // at "outData" (virtual address).
68     // This operation is to be synchronous, i.e. this call does not return
69     // until outData contains size bytes of decrypted data.
70     // Both streamCTR and inputCTR will be provided by the caller.
71     virtual status_t decrypt(
72             const void *inData, size_t size,
73             uint32_t streamCTR, uint64_t inputCTR,
74             void *outData) = 0;
75 
76 private:
77     DISALLOW_EVIL_CONSTRUCTORS(IHDCP);
78 };
79 
80 struct BnHDCPObserver : public BnInterface<IHDCPObserver> {
81     virtual status_t onTransact(
82             uint32_t code, const Parcel &data, Parcel *reply,
83             uint32_t flags = 0);
84 };
85 
86 struct BnHDCP : public BnInterface<IHDCP> {
87     virtual status_t onTransact(
88             uint32_t code, const Parcel &data, Parcel *reply,
89             uint32_t flags = 0);
90 };
91 
92 }  // namespace android
93 
94 
95