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);
505d4000b70597878fd0a589f199523b91afc15166Hyunchang Choi   DECLARE_HANDLER(OMXVideoDecoderAVCSecure, ExtAllocateNativeHandle);
51b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores   DECLARE_HANDLER(OMXVideoDecoderAVCSecure, ParamVideoAvc);
52b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores   DECLARE_HANDLER(OMXVideoDecoderAVCSecure, ParamVideoAVCProfileLevel);
53b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
54b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Safforesprivate:
5581b99781be1ad2166a2b97d93de3fd8071c856b0Ryan Saffores    static OMX_U8* MemAllocDataBuffer(OMX_U32 nSizeBytes, OMX_PTR pUserData);
5681b99781be1ad2166a2b97d93de3fd8071c856b0Ryan Saffores    static void MemFreeDataBuffer(OMX_U8 *pBuffer, OMX_PTR pUserData);
5781b99781be1ad2166a2b97d93de3fd8071c856b0Ryan Saffores    OMX_U8* MemAllocDataBuffer(OMX_U32 nSizeBytes);
5881b99781be1ad2166a2b97d93de3fd8071c856b0Ryan Saffores    void  MemFreeDataBuffer(OMX_U8 *pBuffer);
59b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    static void KeepAliveTimerCallback(sigval v);
60b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    void KeepAliveTimerCallback();
6194dfa71f4dcfb338d0c4d63d53c867acee23ba97Andy Qiu    void WaitForFrameDisplayed();
6283bcefb43895de4cc45cf444ba17536631e59fd5Rajesh Poornachandran    bool EnableIEDSession(bool enable);
633705a9ee3d11bf6ace08dd5baea211ca8f8a8691Ryan Saffores    OMX_ERRORTYPE PrepareWVCDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p);
643705a9ee3d11bf6ace08dd5baea211ca8f8a8691Ryan Saffores    OMX_ERRORTYPE PrepareCENCDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p);
653705a9ee3d11bf6ace08dd5baea211ca8f8a8691Ryan Saffores    OMX_ERRORTYPE PreparePRASFDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p);
66b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Safforesprivate:
67b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    enum {
68b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        // OMX_PARAM_PORTDEFINITIONTYPE
69b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        INPORT_MIN_BUFFER_COUNT = 1,
70b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        INPORT_ACTUAL_BUFFER_COUNT = 5,
7157cb3a01a71aa5fa60c3e6ebd377a5242b2d8998Jack W. Lix        INPORT_BUFFER_SIZE = 1572864,
72b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
73b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        // for OMX_VIDEO_PARAM_INTEL_AVC_DECODE_SETTINGS
74b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        // default number of reference frame
75b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        NUM_REFERENCE_FRAME = 4,
76b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
77b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        // a typical value for 1080p clips
78b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        OUTPORT_NATIVE_BUFFER_COUNT = 17,
79b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    };
80b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
81b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    OMX_VIDEO_PARAM_AVCTYPE mParamAvc;
8257cb3a01a71aa5fa60c3e6ebd377a5242b2d8998Jack W. Lix    uint32_t mDrmScheme;
83b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
84b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    struct IMRSlot {
85b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        uint32_t offset;
86b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores        uint8_t *owner;  // pointer to OMX buffer that owns this slot
8781b99781be1ad2166a2b97d93de3fd8071c856b0Ryan Saffores    } mDataBufferSlot[INPORT_ACTUAL_BUFFER_COUNT];
88b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
89b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    timer_t mKeepAliveTimer;
90b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
91ce5d181857065512540466b8d6b8944979291ef9Rajesh Poornachandran    // Keep track of number of allocated inport buffers
92ce5d181857065512540466b8d6b8944979291ef9Rajesh Poornachandran    uint32_t mNumInportBuffers;
93b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores    bool mSessionPaused;
9411ef2daa6d47bd094dc9925977ca3ebebf625d14Thierry Strudel    struct drm_vendor_api drm_vendor_api;
9583bcefb43895de4cc45cf444ba17536631e59fd5Rajesh Poornachandran    int mDrmDevFd;
96b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores};
97b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores
98b6f41f9d03897dbc6e44887d2e3ad2d7a26ed203Ryan Saffores#endif /* OMX_VIDEO_DECODER_AVC_SECURE_H_ */
99