1b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores/*
2b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores* Copyright (c) 2009-2012 Intel Corporation.  All rights reserved.
3b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores*
4b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores* Licensed under the Apache License, Version 2.0 (the "License");
5b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores* you may not use this file except in compliance with the License.
6b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores* You may obtain a copy of the License at
7b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores*
8b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores* http://www.apache.org/licenses/LICENSE-2.0
9b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores*
10b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores* Unless required by applicable law or agreed to in writing, software
11b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores* distributed under the License is distributed on an "AS IS" BASIS,
12b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores* See the License for the specific language governing permissions and
14b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores* limitations under the License.
15b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores*/
16b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
17b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores#ifndef OMX_VIDEO_DECODER_AVC_SECURE_H_
18b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores#define OMX_VIDEO_DECODER_AVC_SECURE_H_
19b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
20b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
21b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores#include "OMXVideoDecoderBase.h"
2211ef2daa6d47bd094dc9925977ca3ebebf625d14Thierry Strudelextern "C" {
2311ef2daa6d47bd094dc9925977ca3ebebf625d14Thierry Strudel#include "drm_vendor_api.h"
2411ef2daa6d47bd094dc9925977ca3ebebf625d14Thierry Strudel}
25b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
26b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Safforesclass OMXVideoDecoderAVCSecure : public OMXVideoDecoderBase {
27b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Safforespublic:
28b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    OMXVideoDecoderAVCSecure();
29b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    virtual ~OMXVideoDecoderAVCSecure();
30b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
31b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Safforesprotected:
32b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    virtual OMX_ERRORTYPE InitInputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionInput);
33b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    virtual OMX_ERRORTYPE ProcessorInit(void);
34b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    virtual OMX_ERRORTYPE ProcessorDeinit(void);
35b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    virtual OMX_ERRORTYPE ProcessorStart(void);
36b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    virtual OMX_ERRORTYPE ProcessorStop(void);
37b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    virtual OMX_ERRORTYPE ProcessorPause(void);
38b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    virtual OMX_ERRORTYPE ProcessorResume(void);
39b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 portIndex);
40b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    virtual OMX_ERRORTYPE ProcessorProcess(
41b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores            OMX_BUFFERHEADERTYPE ***pBuffers,
42b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores            buffer_retain_t *retains,
43b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores            OMX_U32 numberBuffers);
44b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
45b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores   virtual OMX_ERRORTYPE PrepareConfigBuffer(VideoConfigBuffer *p);
46b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores   virtual OMX_ERRORTYPE PrepareDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p);
47b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
48b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores   virtual OMX_ERRORTYPE BuildHandlerList(void);
496c36d9722df768cfe63e015193459d870f3cdaa9Tianmi Chen   virtual OMX_ERRORTYPE SetMaxOutputBufferCount(OMX_PARAM_PORTDEFINITIONTYPE *p);
50b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores   DECLARE_HANDLER(OMXVideoDecoderAVCSecure, ParamVideoAvc);
51b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores   DECLARE_HANDLER(OMXVideoDecoderAVCSecure, ParamVideoAVCProfileLevel);
52b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
53b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Safforesprivate:
5481b99781be1ad2166a2b97d93de3fd8071c856b0Ryan Saffores    static OMX_U8* MemAllocDataBuffer(OMX_U32 nSizeBytes, OMX_PTR pUserData);
5581b99781be1ad2166a2b97d93de3fd8071c856b0Ryan Saffores    static void MemFreeDataBuffer(OMX_U8 *pBuffer, OMX_PTR pUserData);
5681b99781be1ad2166a2b97d93de3fd8071c856b0Ryan Saffores    OMX_U8* MemAllocDataBuffer(OMX_U32 nSizeBytes);
5781b99781be1ad2166a2b97d93de3fd8071c856b0Ryan Saffores    void  MemFreeDataBuffer(OMX_U8 *pBuffer);
58b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    static void KeepAliveTimerCallback(sigval v);
59b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    void KeepAliveTimerCallback();
6094dfa71f4dcfb338d0c4d63d53c867acee23ba97Andy Qiu    void WaitForFrameDisplayed();
6183bcefb43895de4cc45cf444ba17536631e59fd5Rajesh Poornachandran    bool EnableIEDSession(bool enable);
623705a9ee3d11bf6ace08dd5baea211ca8f8a8691Ryan Saffores    OMX_ERRORTYPE PrepareWVCDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p);
633705a9ee3d11bf6ace08dd5baea211ca8f8a8691Ryan Saffores    OMX_ERRORTYPE PrepareCENCDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p);
643705a9ee3d11bf6ace08dd5baea211ca8f8a8691Ryan Saffores    OMX_ERRORTYPE PreparePRASFDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p);
65b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Safforesprivate:
66b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    enum {
67b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        // OMX_PARAM_PORTDEFINITIONTYPE
68b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        INPORT_MIN_BUFFER_COUNT = 1,
69b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        INPORT_ACTUAL_BUFFER_COUNT = 5,
7057cb3a01a71aa5fa60c3e6ebd377a5242b2d8998Jack W. Lix        INPORT_BUFFER_SIZE = 1572864,
71b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
72b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        // for OMX_VIDEO_PARAM_INTEL_AVC_DECODE_SETTINGS
73b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        // default number of reference frame
74b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        NUM_REFERENCE_FRAME = 4,
75b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
76b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        // a typical value for 1080p clips
77b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        OUTPORT_NATIVE_BUFFER_COUNT = 17,
78b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    };
79b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
80b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    OMX_VIDEO_PARAM_AVCTYPE mParamAvc;
8157cb3a01a71aa5fa60c3e6ebd377a5242b2d8998Jack W. Lix    uint32_t mDrmScheme;
82b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
83b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    struct IMRSlot {
84b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        uint32_t offset;
85b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        uint8_t *owner;  // pointer to OMX buffer that owns this slot
8681b99781be1ad2166a2b97d93de3fd8071c856b0Ryan Saffores    } mDataBufferSlot[INPORT_ACTUAL_BUFFER_COUNT];
87b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
88b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    timer_t mKeepAliveTimer;
89b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
90b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    bool mSessionPaused;
9111ef2daa6d47bd094dc9925977ca3ebebf625d14Thierry Strudel    struct drm_vendor_api drm_vendor_api;
9283bcefb43895de4cc45cf444ba17536631e59fd5Rajesh Poornachandran    int mDrmDevFd;
93b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores};
94b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
95b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores#endif /* OMX_VIDEO_DECODER_AVC_SECURE_H_ */
96