1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan* Copyright (c) 2012 Intel Corporation. All rights reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan* 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan* Licensed under the Apache License, Version 2.0 (the "License"); 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan* you may not use this file except in compliance with the License. 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan* You may obtain a copy of the License at 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan* 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan* http://www.apache.org/licenses/LICENSE-2.0 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan* 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan* Unless required by applicable law or agreed to in writing, software 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan* distributed under the License is distributed on an "AS IS" BASIS, 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan* See the License for the specific language governing permissions and 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan* limitations under the License. 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan*/ 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifndef OMX_VIDEO_DECODER_VP9HWR_H_ 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define OMX_VIDEO_DECODER_VP9HWR_H_ 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "OMXVideoDecoderBase.h" 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx/vpx_decoder.h" 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx/vpx_codec.h" 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx/vp8dx.h" 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include <va/va.h> 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include <va/va_android.h> 28233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include <va/va_tpi.h> 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan 30233d2500723e5594f3e7c70896ffeeef32b9c950ywan// VAAPI Allocator internal Mem ID 31233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef struct vaapiMemId 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan{ 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan VASurfaceID* m_surface; 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int m_key; //Gralloc handle from which this srf was created 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char* m_usrAddr; 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan bool m_render_done; 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan bool m_released; 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan}vaapiMemId; 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan 40233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef unsigned int Display; 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define ANDROID_DISPLAY_HANDLE 0x18c34078 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define DECODE_WITH_GRALLOC_BUFFER 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define VPX_DECODE_BORDER 0 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define MAX_NATIVE_BUFFER_COUNT 64 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan 48233d2500723e5594f3e7c70896ffeeef32b9c950ywanclass OMXVideoDecoderVP9HWR : public OMXVideoDecoderBase { 49233d2500723e5594f3e7c70896ffeeef32b9c950ywanpublic: 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan OMXVideoDecoderVP9HWR(); 51233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual ~OMXVideoDecoderVP9HWR(); 52aa97fcc905746a68487a0122736c2d373bb81f4eywan vaapiMemId* extMIDs[MAX_NATIVE_BUFFER_COUNT]; 53aa97fcc905746a68487a0122736c2d373bb81f4eywan int extUtilBufferCount; 54aa97fcc905746a68487a0122736c2d373bb81f4eywan int extMappedNativeBufferCount; 55aa97fcc905746a68487a0122736c2d373bb81f4eywan unsigned int extNativeBufferSize; 56aa97fcc905746a68487a0122736c2d373bb81f4eywan // (or mapped from vaSurface) to a pre-set max size. 57aa97fcc905746a68487a0122736c2d373bb81f4eywan int extActualBufferStride; 58aa97fcc905746a68487a0122736c2d373bb81f4eywan int extActualBufferHeightStride; 59233d2500723e5594f3e7c70896ffeeef32b9c950ywan 60233d2500723e5594f3e7c70896ffeeef32b9c950ywanprotected: 61233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE InitInputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionInput); 62233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE ProcessorInit(void); 63233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE ProcessorDeinit(void); 64233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE ProcessorStop(void); 65233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 portIndex); 66233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE ProcessorProcess( 67233d2500723e5594f3e7c70896ffeeef32b9c950ywan OMX_BUFFERHEADERTYPE ***pBuffers, 68233d2500723e5594f3e7c70896ffeeef32b9c950ywan buffer_retain_t *retains, 69233d2500723e5594f3e7c70896ffeeef32b9c950ywan OMX_U32 numberBuffers); 70233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE ProcessorReset(void); 71233d2500723e5594f3e7c70896ffeeef32b9c950ywan 72233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE ProcessorPreFillBuffer(OMX_BUFFERHEADERTYPE* buffer); 73233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual bool IsAllBufferAvailable(void); 74233d2500723e5594f3e7c70896ffeeef32b9c950ywan 75233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE PrepareConfigBuffer(VideoConfigBuffer *p); 76233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE PrepareDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p); 77233d2500723e5594f3e7c70896ffeeef32b9c950ywan 78233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE BuildHandlerList(void); 79233d2500723e5594f3e7c70896ffeeef32b9c950ywan 80233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE FillRenderBuffer(OMX_BUFFERHEADERTYPE **pBuffer, 81233d2500723e5594f3e7c70896ffeeef32b9c950ywan buffer_retain_t *retain, 82233d2500723e5594f3e7c70896ffeeef32b9c950ywan OMX_U32 inportBufferFlags, 83233d2500723e5594f3e7c70896ffeeef32b9c950ywan OMX_BOOL *isResolutionChange); 84233d2500723e5594f3e7c70896ffeeef32b9c950ywan 85233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE HandleFormatChange(void); 86233d2500723e5594f3e7c70896ffeeef32b9c950ywan 87233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_COLOR_FORMATTYPE GetOutputColorFormat(int width); 88233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE GetDecoderOutputCropSpecific(OMX_PTR pStructure); 89233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE GetNativeBufferUsageSpecific(OMX_PTR pStructure); 90233d2500723e5594f3e7c70896ffeeef32b9c950ywan virtual OMX_ERRORTYPE SetNativeBufferModeSpecific(OMX_PTR pStructure); 91233d2500723e5594f3e7c70896ffeeef32b9c950ywan 92233d2500723e5594f3e7c70896ffeeef32b9c950ywan friend int reallocVP9FrameBuffer(void *user_priv, unsigned int new_size, vpx_codec_frame_buffer_t *fb); 93233d2500723e5594f3e7c70896ffeeef32b9c950ywan 94233d2500723e5594f3e7c70896ffeeef32b9c950ywan DECLARE_HANDLER(OMXVideoDecoderVP9HWR, ParamVideoVp9); 95233d2500723e5594f3e7c70896ffeeef32b9c950ywanprivate: 96233d2500723e5594f3e7c70896ffeeef32b9c950ywan OMX_ERRORTYPE initDecoder(); 97233d2500723e5594f3e7c70896ffeeef32b9c950ywan OMX_ERRORTYPE destroyDecoder(); 98233d2500723e5594f3e7c70896ffeeef32b9c950ywan 99233d2500723e5594f3e7c70896ffeeef32b9c950ywan enum { 100233d2500723e5594f3e7c70896ffeeef32b9c950ywan // OMX_PARAM_PORTDEFINITIONTYPE 101233d2500723e5594f3e7c70896ffeeef32b9c950ywan INPORT_MIN_BUFFER_COUNT = 1, 102233d2500723e5594f3e7c70896ffeeef32b9c950ywan INPORT_ACTUAL_BUFFER_COUNT = 5, 103233d2500723e5594f3e7c70896ffeeef32b9c950ywan INPORT_BUFFER_SIZE = 1382400, 104233d2500723e5594f3e7c70896ffeeef32b9c950ywan OUTPORT_NATIVE_BUFFER_COUNT = 12, // 8 reference + 1 current + 3 for asynchronized mode 105233d2500723e5594f3e7c70896ffeeef32b9c950ywan OUTPORT_ACTUAL_BUFFER_COUNT = 12, // for raw data mode 106233d2500723e5594f3e7c70896ffeeef32b9c950ywan INTERNAL_MAX_FRAME_WIDTH = 1920, 107233d2500723e5594f3e7c70896ffeeef32b9c950ywan INTERNAL_MAX_FRAME_HEIGHT = 1088, 108233d2500723e5594f3e7c70896ffeeef32b9c950ywan }; 109233d2500723e5594f3e7c70896ffeeef32b9c950ywan 110233d2500723e5594f3e7c70896ffeeef32b9c950ywan void *mCtx; 111233d2500723e5594f3e7c70896ffeeef32b9c950ywan 112233d2500723e5594f3e7c70896ffeeef32b9c950ywan //OMX_VIDEO_PARAM_VP9TYPE mParamVp9; 113233d2500723e5594f3e7c70896ffeeef32b9c950ywan vpx_codec_frame_buffer_t* mFrameBuffers; 114233d2500723e5594f3e7c70896ffeeef32b9c950ywan int mNumFrameBuffer; 115233d2500723e5594f3e7c70896ffeeef32b9c950ywan 116233d2500723e5594f3e7c70896ffeeef32b9c950ywan // These members are for Adaptive playback 117233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint32_t mDecodedImageWidth; 118233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint32_t mDecodedImageHeight; 119233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint32_t mDecodedImageNewWidth; 120233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint32_t mDecodedImageNewHeight; 121233d2500723e5594f3e7c70896ffeeef32b9c950ywan 122233d2500723e5594f3e7c70896ffeeef32b9c950ywan Display* mDisplay; 123233d2500723e5594f3e7c70896ffeeef32b9c950ywan VADisplay mVADisplay; 124233d2500723e5594f3e7c70896ffeeef32b9c950ywan}; 125233d2500723e5594f3e7c70896ffeeef32b9c950ywan 126233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif /* OMX_VIDEO_DECODER_VP9HWR_H_ */ 127233d2500723e5594f3e7c70896ffeeef32b9c950ywan 128