11b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber/* 21b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * Copyright (C) 2012 The Android Open Source Project 31b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * 41b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 51b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * you may not use this file except in compliance with the License. 61b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * You may obtain a copy of the License at 71b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * 81b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 91b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * 101b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * Unless required by applicable law or agreed to in writing, software 111b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 121b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * See the License for the specific language governing permissions and 141b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber * limitations under the License. 151b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber */ 161b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 171b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber#include <binder/IInterface.h> 181b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber#include <media/hardware/HDCPAPI.h> 191b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber#include <media/stagefright/foundation/ABase.h> 201b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 211b19c9d120869c3182373a9b06a1ed98898df882Andreas Hubernamespace android { 221b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 231b19c9d120869c3182373a9b06a1ed98898df882Andreas Huberstruct IHDCPObserver : public IInterface { 241b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber DECLARE_META_INTERFACE(HDCPObserver); 251b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 261b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber virtual void notify( 271b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber int msg, int ext1, int ext2, const Parcel *obj) = 0; 281b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 291b19c9d120869c3182373a9b06a1ed98898df882Andreas Huberprivate: 301b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(IHDCPObserver); 311b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber}; 321b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 331b19c9d120869c3182373a9b06a1ed98898df882Andreas Huberstruct IHDCP : public IInterface { 341b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber DECLARE_META_INTERFACE(HDCP); 351b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 361b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // Called to specify the observer that receives asynchronous notifications 371b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // from the HDCP implementation to signal completion/failure of asynchronous 381b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // operations (such as initialization) or out of band events. 391b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber virtual status_t setObserver(const sp<IHDCPObserver> &observer) = 0; 401b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 411b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // Request to setup an HDCP session with the specified host listening 421b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // on the specified port. 431b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber virtual status_t initAsync(const char *host, unsigned port) = 0; 441b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 451b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // Request to shutdown the active HDCP session. 461b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber virtual status_t shutdownAsync() = 0; 471b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 481b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // Encrypt a data according to the HDCP spec. The data is to be 491b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // encrypted in-place, only size bytes of data should be read/write, 501b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // even if the size is not a multiple of 128 bit (16 bytes). 511b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // This operation is to be synchronous, i.e. this call does not return 521b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // until outData contains size bytes of encrypted data. 531b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // streamCTR will be assigned by the caller (to 0 for the first PES stream, 541b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // 1 for the second and so on) 551b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber // inputCTR will be maintained by the callee for each PES stream. 561b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber virtual status_t encrypt( 571b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber const void *inData, size_t size, uint32_t streamCTR, 581b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber uint64_t *outInputCTR, void *outData) = 0; 591b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 601b19c9d120869c3182373a9b06a1ed98898df882Andreas Huberprivate: 611b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(IHDCP); 621b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber}; 631b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 641b19c9d120869c3182373a9b06a1ed98898df882Andreas Huberstruct BnHDCPObserver : public BnInterface<IHDCPObserver> { 651b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber virtual status_t onTransact( 661b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 671b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber uint32_t flags = 0); 681b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber}; 691b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 701b19c9d120869c3182373a9b06a1ed98898df882Andreas Huberstruct BnHDCP : public BnInterface<IHDCP> { 711b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber virtual status_t onTransact( 721b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 731b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber uint32_t flags = 0); 741b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber}; 751b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 761b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber} // namespace android 771b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 781b19c9d120869c3182373a9b06a1ed98898df882Andreas Huber 79