1d05f9a0b79e3a07c9a868261debf4677e86af238ywan/* 2d05f9a0b79e3a07c9a868261debf4677e86af238ywan* Copyright (c) 2012 Intel Corporation. All rights reserved. 3d05f9a0b79e3a07c9a868261debf4677e86af238ywan* 4d05f9a0b79e3a07c9a868261debf4677e86af238ywan* Licensed under the Apache License, Version 2.0 (the "License"); 5d05f9a0b79e3a07c9a868261debf4677e86af238ywan* you may not use this file except in compliance with the License. 6d05f9a0b79e3a07c9a868261debf4677e86af238ywan* You may obtain a copy of the License at 7d05f9a0b79e3a07c9a868261debf4677e86af238ywan* 8d05f9a0b79e3a07c9a868261debf4677e86af238ywan* http://www.apache.org/licenses/LICENSE-2.0 9d05f9a0b79e3a07c9a868261debf4677e86af238ywan* 10d05f9a0b79e3a07c9a868261debf4677e86af238ywan* Unless required by applicable law or agreed to in writing, software 11d05f9a0b79e3a07c9a868261debf4677e86af238ywan* distributed under the License is distributed on an "AS IS" BASIS, 12d05f9a0b79e3a07c9a868261debf4677e86af238ywan* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d05f9a0b79e3a07c9a868261debf4677e86af238ywan* See the License for the specific language governing permissions and 14d05f9a0b79e3a07c9a868261debf4677e86af238ywan* limitations under the License. 15d05f9a0b79e3a07c9a868261debf4677e86af238ywan*/ 16d05f9a0b79e3a07c9a868261debf4677e86af238ywan 17d05f9a0b79e3a07c9a868261debf4677e86af238ywan 18d05f9a0b79e3a07c9a868261debf4677e86af238ywan 19d05f9a0b79e3a07c9a868261debf4677e86af238ywan#ifndef OMX_VIDEO_DECODER_VP9_HYBRID_H_ 20d05f9a0b79e3a07c9a868261debf4677e86af238ywan#define OMX_VIDEO_DECODER_VP9_HYBRID_H_ 21d05f9a0b79e3a07c9a868261debf4677e86af238ywan 22d05f9a0b79e3a07c9a868261debf4677e86af238ywan#include "OMXVideoDecoderBase.h" 23d05f9a0b79e3a07c9a868261debf4677e86af238ywan#include <dlfcn.h> 24d05f9a0b79e3a07c9a868261debf4677e86af238ywan#define VPX_DECODE_BORDER 0 25d05f9a0b79e3a07c9a868261debf4677e86af238ywan 26d05f9a0b79e3a07c9a868261debf4677e86af238ywanclass OMXVideoDecoderVP9Hybrid : public OMXVideoDecoderBase { 27d05f9a0b79e3a07c9a868261debf4677e86af238ywanpublic: 28d05f9a0b79e3a07c9a868261debf4677e86af238ywan OMXVideoDecoderVP9Hybrid(); 29d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual ~OMXVideoDecoderVP9Hybrid(); 30d05f9a0b79e3a07c9a868261debf4677e86af238ywan 31d05f9a0b79e3a07c9a868261debf4677e86af238ywanprotected: 32d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE InitInputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionInput); 33d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE ProcessorInit(void); 34d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE ProcessorDeinit(void); 35d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE ProcessorStop(void); 36d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 portIndex); 37d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE ProcessorProcess( 38d05f9a0b79e3a07c9a868261debf4677e86af238ywan OMX_BUFFERHEADERTYPE ***pBuffers, 39d05f9a0b79e3a07c9a868261debf4677e86af238ywan buffer_retain_t *retains, 40d05f9a0b79e3a07c9a868261debf4677e86af238ywan OMX_U32 numberBuffers); 41c51d5398ac792d8ddd35d72322038305281b80edywan virtual OMX_ERRORTYPE ProcessorReset(void); 42d05f9a0b79e3a07c9a868261debf4677e86af238ywan 43d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE ProcessorPreFillBuffer(OMX_BUFFERHEADERTYPE* buffer); 44d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual bool IsAllBufferAvailable(void); 45d05f9a0b79e3a07c9a868261debf4677e86af238ywan 46d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE PrepareConfigBuffer(VideoConfigBuffer *p); 47d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE PrepareDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p); 48d05f9a0b79e3a07c9a868261debf4677e86af238ywan 49d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE BuildHandlerList(void); 50d05f9a0b79e3a07c9a868261debf4677e86af238ywan 515246619dfe1807934867669347b846166a18977eywan virtual OMX_ERRORTYPE FillRenderBuffer(OMX_BUFFERHEADERTYPE **pBuffer, buffer_retain_t *retain, OMX_U32 inportBufferFlags, OMX_BOOL *isResolutionChange); 52d05f9a0b79e3a07c9a868261debf4677e86af238ywan 53d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_COLOR_FORMATTYPE GetOutputColorFormat(int width); 54d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE GetDecoderOutputCropSpecific(OMX_PTR pStructure); 55d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE GetNativeBufferUsageSpecific(OMX_PTR pStructure); 56d05f9a0b79e3a07c9a868261debf4677e86af238ywan virtual OMX_ERRORTYPE SetNativeBufferModeSpecific(OMX_PTR pStructure); 575246619dfe1807934867669347b846166a18977eywan virtual OMX_ERRORTYPE HandleFormatChange(void); 58d05f9a0b79e3a07c9a868261debf4677e86af238ywan DECLARE_HANDLER(OMXVideoDecoderVP9Hybrid, ParamVideoVp9); 59d05f9a0b79e3a07c9a868261debf4677e86af238ywan 60d05f9a0b79e3a07c9a868261debf4677e86af238ywanprivate: 61c51d5398ac792d8ddd35d72322038305281b80edywan bool isReallocateNeeded(const uint8_t *data, uint32_t data_sz); 62d05f9a0b79e3a07c9a868261debf4677e86af238ywan void *mCtx; 63d05f9a0b79e3a07c9a868261debf4677e86af238ywan void *mHybridCtx; 64d05f9a0b79e3a07c9a868261debf4677e86af238ywan void *mLibHandle; 655246619dfe1807934867669347b846166a18977eywan // These members are for Adaptive playback 665246619dfe1807934867669347b846166a18977eywan uint32_t mDecodedImageWidth; 675246619dfe1807934867669347b846166a18977eywan uint32_t mDecodedImageHeight; 685246619dfe1807934867669347b846166a18977eywan uint32_t mDecodedImageNewWidth; 695246619dfe1807934867669347b846166a18977eywan uint32_t mDecodedImageNewHeight; 70d05f9a0b79e3a07c9a868261debf4677e86af238ywan typedef bool (*OpenFunc)(void ** , void **); 7177e0e77a812f416a90713150431db498ad7559e5ywan typedef bool (*InitFunc)(void *,uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, bool, uint32_t *); 72d05f9a0b79e3a07c9a868261debf4677e86af238ywan typedef bool (*CloseFunc)(void *, void *); 7313c7df7e879f64e0055bbcc61dbe0d472ac8d43bywan typedef bool (*SingalRenderDoneFunc)(void *, unsigned int); 74c51d5398ac792d8ddd35d72322038305281b80edywan typedef int (*DecodeFunc)(void *, void *, unsigned char *, unsigned int, bool); 7513c7df7e879f64e0055bbcc61dbe0d472ac8d43bywan typedef bool (*IsBufferAvailableFunc)(void *); 765246619dfe1807934867669347b846166a18977eywan typedef int (*GetOutputFunc)(void*, void *, unsigned int *, unsigned int *); 7713c7df7e879f64e0055bbcc61dbe0d472ac8d43bywan typedef int (*GetRawDataOutputFunc)(void*, void *, unsigned char *, int, int); 78c51d5398ac792d8ddd35d72322038305281b80edywan typedef void (*DeinitFunc)(void *); 79c51d5398ac792d8ddd35d72322038305281b80edywan typedef bool (*GetFrameResolutionFunc)(const uint8_t *, uint32_t , uint32_t *, uint32_t *); 80d05f9a0b79e3a07c9a868261debf4677e86af238ywan OpenFunc mOpenDecoder; 81d05f9a0b79e3a07c9a868261debf4677e86af238ywan InitFunc mInitDecoder; 82d05f9a0b79e3a07c9a868261debf4677e86af238ywan CloseFunc mCloseDecoder; 83d05f9a0b79e3a07c9a868261debf4677e86af238ywan SingalRenderDoneFunc mSingalRenderDone; 84d05f9a0b79e3a07c9a868261debf4677e86af238ywan DecodeFunc mDecoderDecode; 85d05f9a0b79e3a07c9a868261debf4677e86af238ywan IsBufferAvailableFunc mCheckBufferAvailable; 86d05f9a0b79e3a07c9a868261debf4677e86af238ywan GetOutputFunc mGetOutput; 8713c7df7e879f64e0055bbcc61dbe0d472ac8d43bywan GetRawDataOutputFunc mGetRawDataOutput; 88c51d5398ac792d8ddd35d72322038305281b80edywan GetFrameResolutionFunc mGetFrameResolution; 89c51d5398ac792d8ddd35d72322038305281b80edywan DeinitFunc mDeinitDecoder; 906725411e5c835fed1121f4ae9244013183f2ff38ywan int64_t mLastTimeStamp; 91d05f9a0b79e3a07c9a868261debf4677e86af238ywan enum { 92d05f9a0b79e3a07c9a868261debf4677e86af238ywan // OMX_PARAM_PORTDEFINITIONTYPE 93d05f9a0b79e3a07c9a868261debf4677e86af238ywan INPORT_MIN_BUFFER_COUNT = 1, 94d05f9a0b79e3a07c9a868261debf4677e86af238ywan INPORT_ACTUAL_BUFFER_COUNT = 5, 95d05f9a0b79e3a07c9a868261debf4677e86af238ywan INPORT_BUFFER_SIZE = 1382400, 96c45012b443298ff3073d34164fa65a38d3a5fd20ywan OUTPORT_NATIVE_BUFFER_COUNT = 15, // 8 reference + 2 current + 4 for asynchronized mode + 1 free buffer 97d05f9a0b79e3a07c9a868261debf4677e86af238ywan }; 98d05f9a0b79e3a07c9a868261debf4677e86af238ywan 99d05f9a0b79e3a07c9a868261debf4677e86af238ywan}; 100d05f9a0b79e3a07c9a868261debf4677e86af238ywan 101d05f9a0b79e3a07c9a868261debf4677e86af238ywan#endif 102d05f9a0b79e3a07c9a868261debf4677e86af238ywan 103