1791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang/* 2791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * Copyright (C) 2017 The Android Open Source Project 3791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * 4791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 5791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * you may not use this file except in compliance with the License. 6791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * You may obtain a copy of the License at 7791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * 8791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * http://www.apache.org/licenses/LICENSE-2.0 9791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * 10791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * Unless required by applicable law or agreed to in writing, software 11791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * distributed under the License is distributed on an "AS IS" BASIS, 12791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * See the License for the specific language governing permissions and 14791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * limitations under the License. 15791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang */ 16791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 17791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#ifndef KEY_FETCHER_H_ 18791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#define KEY_FETCHER_H_ 19791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 20791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include <vector> 21791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 22791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include <media/stagefright/foundation/ABuffer.h> 23791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include <utils/Errors.h> 24791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 25791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangusing namespace std; 26791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 27791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangnamespace android { 28791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangnamespace clearkeycas { 29791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 30791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang// Interface for classes which extract the content key from an Ecm. 31791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangclass KeyFetcher { 32791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangpublic: 33791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang struct KeyInfo { 34791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang sp<ABuffer> key_bytes; 35791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang int key_id; 36791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang }; 37791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 38791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang KeyFetcher() {} 39791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang virtual ~KeyFetcher() {} 40791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 41791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang // Initializes resources set in subclass-specific calls. This must be called 42791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang // before threads are started. 43791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang virtual status_t Init() = 0; 44791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 45791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang // Obtains content key(s) based on contents of |ecm|. |asset_id| is the 46791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang // internal id of the asset, |keys| is a vector containing instances of a 47791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang // class containing a content key and an id. |asset_id| and |keys| are 48791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang // owned by the caller and must be non-null. 49791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang virtual status_t ObtainKey(const sp<ABuffer>& ecm, 50791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang uint64_t* asset_id, vector<KeyInfo>* keys) = 0; 51791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang}; 52791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 53791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang} // namespace clearkeycas 54791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang} // namespace android 55791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang 56791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#endif // KEY_FETCHER_H_ 57