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