OMXVideoDecoderAVCSecure.h revision 5d4000b70597878fd0a589f199523b91afc15166
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