android13/frameworks/native/headers/media_plugin/media/cas/CasAPI.h

171 lines
5.2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef CAS_API_H_
#define CAS_API_H_
#include <vector>
#include <utils/String8.h>
// Loadable CasPlugin shared libraries should define the entry points
// as shown below:
//
// extern "C" {
// extern android::CasFactory *createCasFactory();
// extern android::DescramblerFactory *createDescramblerFactory();
// }
namespace android {
struct CasPlugin;
struct CasPluginDescriptor {
int32_t CA_system_id;
String8 name;
};
typedef std::vector<uint8_t> CasData;
typedef std::vector<uint8_t> CasSessionId;
typedef std::vector<uint8_t> CasEmm;
typedef std::vector<uint8_t> CasEcm;
typedef void (*CasPluginCallback)(
void *appData,
int32_t event,
int32_t arg,
uint8_t *data,
size_t size);
typedef void (*CasPluginCallbackExt)(
void *appData,
int32_t event,
int32_t arg,
uint8_t *data,
size_t size,
const CasSessionId *sessionId);
typedef void (*CasPluginStatusCallback)(
void *appData,
int32_t event,
int32_t arg);
struct CasFactory {
CasFactory() {}
virtual ~CasFactory() {}
// Determine if the plugin can handle the CA scheme identified by CA_system_id.
virtual bool isSystemIdSupported(
int32_t CA_system_id) const = 0;
// Get a list of the CA schemes supported by the plugin.
virtual status_t queryPlugins(
std::vector<CasPluginDescriptor> *descriptors) const = 0;
// Construct a new instance of a CasPlugin given a CA_system_id
virtual status_t createPlugin(
int32_t CA_system_id,
void *appData,
CasPluginCallback callback,
CasPlugin **plugin) = 0;
// Construct a new extend instance of a CasPlugin given a CA_system_id
virtual status_t createPlugin(
int32_t CA_system_id,
void *appData,
CasPluginCallbackExt callback,
CasPlugin **plugin) = 0;
private:
CasFactory(const CasFactory &);
CasFactory &operator=(const CasFactory &); /* NOLINT */
};
struct CasPlugin {
CasPlugin() {}
virtual ~CasPlugin() {}
// Provide a callback to report plugin status
virtual status_t setStatusCallback(
CasPluginStatusCallback callback) = 0;
// Provide the CA private data from a CA_descriptor in the conditional
// access table to a CasPlugin.
virtual status_t setPrivateData(
const CasData &privateData) = 0;
// Open a session for descrambling a program, or one or more elementary
// streams.
virtual status_t openSession(CasSessionId *sessionId) = 0;
// Open a session with intend and mode for descrambling a program, or one
// or more elementary streams.
virtual status_t openSession(uint32_t intent, uint32_t mode,
CasSessionId *sessionId) = 0;
// Close a previously opened session.
virtual status_t closeSession(const CasSessionId &sessionId) = 0;
// Provide the CA private data from a CA_descriptor in the program map
// table to a CasPlugin.
virtual status_t setSessionPrivateData(
const CasSessionId &sessionId,
const CasData &privateData) = 0;
// Process an ECM from the ECM stream for this sessions elementary stream.
virtual status_t processEcm(
const CasSessionId &sessionId,
const CasEcm &ecm) = 0;
// Process an in-band EMM from the EMM stream.
virtual status_t processEmm(
const CasEmm &emm) = 0;
// Deliver an event to the CasPlugin. The format of the event is specific
// to the CA scheme and is opaque to the framework.
virtual status_t sendEvent(
int32_t event,
int32_t arg,
const CasData &eventData) = 0;
// Deliver an session event to the CasPlugin. The format of the event is
// specific to the CA scheme and is opaque to the framework.
virtual status_t sendSessionEvent(
const CasSessionId &sessionId,
int32_t event,
int32_t arg,
const CasData &eventData) = 0;
// Native implementation of the MediaCas Java API provision method.
virtual status_t provision(
const String8 &provisionString) = 0;
// Native implementation of the MediaCas Java API refreshEntitlements method
virtual status_t refreshEntitlements(
int32_t refreshType,
const CasData &refreshData) = 0;
private:
CasPlugin(const CasPlugin &);
CasPlugin &operator=(const CasPlugin &); /* NOLINT */
};
extern "C" {
extern android::CasFactory *createCasFactory();
}
} // namespace android
#endif // CAS_API_H_