DrmEngineBase.h revision a2cd44cb5067b4fe98794860690394254d3ac73c
1aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger/*
2aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Copyright (C) 2010 The Android Open Source Project
3aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *
4aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Licensed under the Apache License, Version 2.0 (the "License");
5aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * you may not use this file except in compliance with the License.
6aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * You may obtain a copy of the License at
7aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *
8aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *      http://www.apache.org/licenses/LICENSE-2.0
9aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *
10aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * Unless required by applicable law or agreed to in writing, software
11aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * distributed under the License is distributed on an "AS IS" BASIS,
12aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * See the License for the specific language governing permissions and
14aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * limitations under the License.
15aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger */
16aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
17aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#ifndef __DRM_ENGINE_BASE_H__
18aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define __DRM_ENGINE_BASE_H__
19aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
20aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <drm/drm_framework_common.h>
21aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include "IDrmEngine.h"
22aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
23aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingernamespace android {
24aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
25aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger/**
26aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * This class is an interface for plug-in developers
27aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *
285dfe556188df2a3b2bfe73c8bc3b3b9216171a93osdl.org!shemminger * Responsibility of this class is control the sequence of actual plug-in.
29aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger * All each plug-in developer has to do is implement onXXX() type virtual interfaces.
3090f93024a0818dc691138d8401721e797004b042shemminger */
3190f93024a0818dc691138d8401721e797004b042shemmingerclass DrmEngineBase : public IDrmEngine {
3290f93024a0818dc691138d8401721e797004b042shemmingerpublic:
33aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DrmEngineBase();
34aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual ~DrmEngineBase();
35aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
364094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemmingerpublic:
37aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DrmConstraints* getConstraints(int uniqueId, const String8* path, int action);
38aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
39aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    status_t initialize(int uniqueId);
40aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
41aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    status_t setOnInfoListener(int uniqueId, const IDrmEngine::OnInfoListener* infoListener);
42aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
43aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    status_t terminate(int uniqueId);
44aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
45aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    bool canHandle(int uniqueId, const String8& path);
46aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
47aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
48aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
49aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    status_t saveRights(int uniqueId, const DrmRights& drmRights,
505a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson            const String8& rightsPath, const String8& contentPath);
515a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
525a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest);
535a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
545a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    String8 getOriginalMimeType(int uniqueId, const String8& path);
555a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
565a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
575a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
585a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    int checkRightsStatus(int uniqueId, const String8& path, int action);
595a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
605a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    status_t consumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
615a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
625a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    status_t setPlaybackStatus(
635a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson            int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position);
645a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
655a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    bool validateAction(
665a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson            int uniqueId, const String8& path, int action, const ActionDescription& description);
675a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
685a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    status_t removeRights(int uniqueId, const String8& path);
695a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
705a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    status_t removeAllRights(int uniqueId);
715a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
725a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    status_t openConvertSession(int uniqueId, int convertId);
735a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
745a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    DrmConvertedStatus* convertData(int uniqueId, int convertId, const DrmBuffer* inputData);
755a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
765a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
775a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
785a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    DrmSupportInfo* getSupportInfo(int uniqueId);
795a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
805a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    status_t openDecryptSession(
815a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson            int uniqueId, DecryptHandle* decryptHandle, int fd, off64_t offset, off64_t length);
825a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
835a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson    status_t openDecryptSession(
845a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson            int uniqueId, DecryptHandle* decryptHandle, const char* uri);
854094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger
86aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
87aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
88aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
89aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            int decryptUnitId, const DrmBuffer* headerInfo);
90aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
91aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
92aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
93aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
94aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    status_t finalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
95aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
96aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
97aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            void* buffer, ssize_t numBytes, off64_t offset);
98aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
9954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jonesprotected:
10054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    /////////////////////////////////////////////////////
10154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    // Interface for plug-in developers                //
10254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    // each plug-in has to implement following method  //
10354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    /////////////////////////////////////////////////////
10454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    /**
10554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * Get constraint information associated with input content
10654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *
10754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @param[in] uniqueId Unique identifier for a session
10854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @param[in] path Path of the protected content
10954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @param[in] action Actions defined such as,
11054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *     Action::DEFAULT, Action::PLAY, etc
11154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @return DrmConstraints
11254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *     key-value pairs of constraint are embedded in it
11354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @note
11454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *     In case of error, return NULL
11554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     */
11654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    virtual DrmConstraints* onGetConstraints(
11754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones            int uniqueId, const String8* path, int action) = 0;
11854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones
11954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    /**
12054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * Initialize plug-in
12154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *
12254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @param[in] uniqueId Unique identifier for a session
12354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @return status_t
12454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
12554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     */
12654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    virtual status_t onInitialize(int uniqueId) = 0;
12754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones
12854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    /**
12954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * Register a callback to be invoked when the caller required to
13054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * receive necessary information
13154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *
13254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @param[in] uniqueId Unique identifier for a session
13354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @param[in] infoListener Listener
13454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @return status_t
13554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
13654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     */
13754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    virtual status_t onSetOnInfoListener(
13854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones            int uniqueId, const IDrmEngine::OnInfoListener* infoListener) = 0;
13954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones
14054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    /**
14154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * Terminate the plug-in
14254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * and release resource bound to plug-in
14354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *
14454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @param[in] uniqueId Unique identifier for a session
14554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @return status_t
14654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
14754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     */
14854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    virtual status_t onTerminate(int uniqueId) = 0;
14954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones
15054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    /**
15154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * Get whether the given content can be handled by this plugin or not
15254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *
15354e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @param[in] uniqueId Unique identifier for a session
15454e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @param[in] path Path the protected object
15554e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * @return bool
15654e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *     Returns true if this plugin can handle , false in case of not able to handle
15754e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     */
15854e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    virtual bool onCanHandle(int uniqueId, const String8& path) = 0;
15954e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones
16054e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones    /**
16154e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     * Executes given drm information based on its type
16254e0b2e71d723e3b493ff53d1332b48250f5d4bcRick Jones     *
163c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @param[in] uniqueId Unique identifier for a session
164c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @param[in] drmInfo Information needs to be processed
165c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @return DrmInfoStatus
166c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     *     instance as a result of processing given input
167c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     */
168c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger    virtual DrmInfoStatus* onProcessDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0;
169c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger
170c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger    /**
171c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * Save DRM rights to specified rights path
172c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * and make association with content path
173c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     *
174c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @param[in] uniqueId Unique identifier for a session
175c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @param[in] drmRights DrmRights to be saved
176c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @param[in] rightsPath File path where rights to be saved
1774094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger     * @param[in] contentPath File path where content was saved
178aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return status_t
179aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
180aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
181aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onSaveRights(int uniqueId, const DrmRights& drmRights,
182aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            const String8& rightspath, const String8& contentPath) = 0;
183aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
184aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
185aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Retrieves necessary information for registration, unregistration or rights
186aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * acquisition information.
187aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
188aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
189aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] drmInfoRequest Request information to retrieve drmInfo
190aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return DrmInfo
1914094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger     *     instance as a result of processing given input
192aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
193aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual DrmInfo* onAcquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0;
194aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
195aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
196aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Retrieves the mime type embedded inside the original content
197aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
198aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
199aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] path Path of the protected content
200aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return String8
201aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns mime-type of the original content, such as "video/mpeg"
202aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
203aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual String8 onGetOriginalMimeType(int uniqueId, const String8& path) = 0;
204aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
2054094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger    /**
206aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Retrieves the type of the protected object (content, rights, etc..)
207aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * using specified path or mimetype. At least one parameter should be non null
208aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * to retrieve DRM object type
209aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
210aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
211aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] path Path of the content or null.
212aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] mimeType Mime type of the content or null.
213aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return type of the DRM content,
214aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     such as DrmObjectType::CONTENT, DrmObjectType::RIGHTS_OBJECT
215aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
216aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual int onGetDrmObjectType(
217aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            int uniqueId, const String8& path, const String8& mimeType) = 0;
218aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
2194094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger    /**
220aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Check whether the given content has valid rights or not
221aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
222aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
223aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] path Path of the protected content
224aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] action Action to perform (Action::DEFAULT, Action::PLAY, etc)
225aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return the status of the rights for the protected content,
226aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     such as RightsStatus::RIGHTS_VALID, RightsStatus::RIGHTS_EXPIRED, etc.
227aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
228aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual int onCheckRightsStatus(int uniqueId, const String8& path, int action) = 0;
229aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
230aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
231aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Consumes the rights for a content.
232aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * If the reserve parameter is true the rights is reserved until the same
2334094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger     * application calls this api again with the reserve parameter set to false.
234aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
235aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
236aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] decryptHandle Handle for the decryption session
237aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] action Action to perform. (Action::DEFAULT, Action::PLAY, etc)
238aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] reserve True if the rights should be reserved.
239aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return status_t
240aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
241aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
242aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onConsumeRights(int uniqueId, DecryptHandle* decryptHandle,
243aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            int action, bool reserve) = 0;
244aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
245aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
246aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Informs the DRM Engine about the playback actions performed on the DRM files.
2474094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger     *
248aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
2494094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger     * @param[in] decryptHandle Handle for the decryption session
250aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] playbackStatus Playback action (Playback::START, Playback::STOP, Playback::PAUSE)
251aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] position Position in the file (in milliseconds) where the start occurs.
252aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Only valid together with Playback::START.
253aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return status_t
254aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
255aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
256aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onSetPlaybackStatus(
257aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) = 0;
258aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
259aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
260aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Validates whether an action on the DRM content is allowed or not.
261aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
262aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
263aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] path Path of the protected content
264aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] action Action to validate (Action::PLAY, Action::TRANSFER, etc)
265aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] description Detailed description of the action
266aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return true if the action is allowed.
267aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
268aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual bool onValidateAction(int uniqueId, const String8& path,
269aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            int action, const ActionDescription& description) = 0;
270aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
271aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
272aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Removes the rights associated with the given protected content
273aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
274aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
275aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] path Path of the protected content
276aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return status_t
277aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
278aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
279aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onRemoveRights(int uniqueId, const String8& path) = 0;
280aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
281aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
282aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Removes all the rights information of each plug-in associated with
283aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * DRM framework. Will be used in master reset
284aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
285aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
286aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return status_t
287aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
288aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
289aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onRemoveAllRights(int uniqueId) = 0;
290aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
291aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
292aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * This API is for Forward Lock based DRM scheme.
293aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Each time the application tries to download a new DRM file
294aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * which needs to be converted, then the application has to
295aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * begin with calling this API.
296aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
297aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
298aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] convertId Handle for the convert session
299aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return status_t
300aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
301aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
302aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onOpenConvertSession(int uniqueId, int convertId) = 0;
303aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
304aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
305fb9b1d0f6a9f355bceae435ea43f1c8f3635b2dfosdl.net!shemminger     * Accepts and converts the input data which is part of DRM file.
306aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * The resultant converted data and the status is returned in the DrmConvertedInfo
307aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * object. This method will be called each time there are new block
308aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * of data received by the application.
309aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
310aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
311aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] convertId Handle for the convert session
312aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] inputData Input Data which need to be converted
313aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return Return object contains the status of the data conversion,
314aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     the output converted data and offset. In this case the
315aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     application will ignore the offset information.
316aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
317aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual DrmConvertedStatus* onConvertData(
318aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            int uniqueId, int convertId, const DrmBuffer* inputData) = 0;
319aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
320aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
321aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Informs the Drm Agent when there is no more data which need to be converted
322aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * or when an error occurs. Upon successful conversion of the complete data,
323aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * the agent will inform that where the header and body signature
324aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * should be added. This signature appending is needed to integrity
325aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * protect the converted file.
326aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
327fb9b1d0f6a9f355bceae435ea43f1c8f3635b2dfosdl.net!shemminger     * @param[in] uniqueId Unique identifier for a session
328aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] convertId Handle for the convert session
329aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return Return object contains the status of the data conversion,
330aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     the header and body signature data. It also informs
331aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     the application on which offset these signature data
332aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     should be appended.
333aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
334aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual DrmConvertedStatus* onCloseConvertSession(int uniqueId, int convertId) = 0;
335aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
336aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
337aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Returns the information about the Drm Engine capabilities which includes
338aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * supported MimeTypes and file suffixes.
339aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
340aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
341aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return DrmSupportInfo
3425a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson     *     instance which holds the capabilities of a plug-in
3435a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson     */
344aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual DrmSupportInfo* onGetSupportInfo(int uniqueId) = 0;
345aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
346aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
347f082b64fb40b467bc1f9e5d245114aae4e256d5cnet[shemminger]!shemminger     * Open the decrypt session to decrypt the given protected content
348aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
349aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
350aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] decryptHandle Handle for the current decryption session
351aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] fd File descriptor of the protected content to be decrypted
352aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] offset Start position of the content
353aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] length The length of the protected content
354aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return
355aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
356aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
357c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger    virtual status_t onOpenDecryptSession(
358aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            int uniqueId, DecryptHandle* decryptHandle, int fd, off64_t offset, off64_t length) = 0;
359aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
360aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
361aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Open the decrypt session to decrypt the given protected content
362aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
363aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
364aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] decryptHandle Handle for the current decryption session
365aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uri Path of the protected content to be decrypted
366aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return
367aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
368aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
369aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onOpenDecryptSession(
370fb9b1d0f6a9f355bceae435ea43f1c8f3635b2dfosdl.net!shemminger            int uniqueId, DecryptHandle* decryptHandle, const char* uri) = 0;
371aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
372aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
373aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Close the decrypt session for the given handle
374aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
375aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
376aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] decryptHandle Handle for the decryption session
377aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return status_t
378aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
379aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
380aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onCloseDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
381aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
382aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
383c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * Initialize decryption for the given unit of the protected content
384aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
385aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
386aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] decryptId Handle for the decryption session
387aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] decryptUnitId ID Specifies decryption unit, such as track ID
388aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] headerInfo Information for initializing decryption of this decrypUnit
389aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return status_t
390aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
391aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
392aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onInitializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
3934094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger            int decryptUnitId, const DrmBuffer* headerInfo) = 0;
394aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
395aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
396aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Decrypt the protected content buffers for the given unit
397aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * This method will be called any number of times, based on number of
398aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * encrypted streams received from application.
399c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     *
400c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @param[in] uniqueId Unique identifier for a session
401c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @param[in] decryptId Handle for the decryption session
402c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @param[in] decryptUnitId ID Specifies decryption unit, such as track ID
403c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @param[in] encBuffer Encrypted data block
404c7699875bee00fbcd057fc62c30d6560b044e007net[shemminger]!shemminger     * @param[out] decBuffer Decrypted data block
4054094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger     * @param[in] IV Optional buffer
406aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return status_t
407aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns the error code for this API
408aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED
409aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED,
410aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     DRM_ERROR_DECRYPT for failure.
4114094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger     */
412aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onDecrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
413aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
414aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
415aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
416aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Finalize decryption for the given unit of the protected content
4174094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger     *
418aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
419aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] decryptHandle Handle for the decryption session
420aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] decryptUnitId ID Specifies decryption unit, such as track ID
421aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return status_t
422aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *     Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
4234094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger     */
424aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual status_t onFinalizeDecryptUnit(
425aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
426aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
427aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    /**
428aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * Reads the specified number of bytes from an open DRM file.
429aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
430aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[in] uniqueId Unique identifier for a session
4314094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger     * @param[in] decryptHandle Handle for the decryption session
432aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @param[out] buffer Reference to the buffer that should receive the read data.
4339626dfd54c3cc4deec1c651a0bfee65b50feb78bStephen Hemminger     * @param[in] numBytes Number of bytes to read.
4349626dfd54c3cc4deec1c651a0bfee65b50feb78bStephen Hemminger     * @param[in] offset Offset with which to update the file position.
435aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     *
436aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     * @return Number of bytes read. Returns -1 for Failure.
437aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger     */
438aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    virtual ssize_t onPread(int uniqueId, DecryptHandle* decryptHandle,
439aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger            void* buffer, ssize_t numBytes, off64_t offset) = 0;
440aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger};
441aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
442aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger};
443aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
444aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#endif /* __DRM_ENGINE_BASE_H__ */
445aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
446aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger