| /* |
| * Copyright (c) 2009-2011 Intel Corporation. All rights reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| |
| #ifndef OMX_VIDEO_DECODER_BASE_H_ |
| #define OMX_VIDEO_DECODER_BASE_H_ |
| |
| |
| #include "OMXComponentCodecBase.h" |
| #include "VideoDecoderInterface.h" |
| #include "VideoDecoderHost.h" |
| |
| #ifdef USE_GEN_HW |
| #include "graphics.h" |
| #endif |
| |
| static constexpr const char* VA_VED_RAW_MIME_TYPE = "video/x-raw-vaved"; |
| static const uint32_t VA_VED_COLOR_FORMAT = 0x20; |
| |
| |
| class OMXVideoDecoderBase : public OMXComponentCodecBase { |
| public: |
| OMXVideoDecoderBase(); |
| virtual ~OMXVideoDecoderBase(); |
| |
| protected: |
| virtual OMX_ERRORTYPE InitInputPort(void); |
| virtual OMX_ERRORTYPE InitOutputPort(void); |
| virtual OMX_ERRORTYPE InitInputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *input) = 0; |
| virtual OMX_ERRORTYPE InitOutputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *output); |
| |
| virtual OMX_ERRORTYPE ProcessorInit(void); |
| virtual OMX_ERRORTYPE ProcessorDeinit(void); |
| virtual OMX_ERRORTYPE ProcessorStart(void); |
| virtual OMX_ERRORTYPE ProcessorStop(void); |
| virtual OMX_ERRORTYPE ProcessorPause(void); |
| virtual OMX_ERRORTYPE ProcessorResume(void); |
| virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 portIndex); |
| virtual OMX_ERRORTYPE ProcessorProcess( |
| OMX_BUFFERHEADERTYPE ***pBuffers, |
| buffer_retain_t *retains, |
| OMX_U32 numberBuffers); |
| virtual OMX_ERRORTYPE ProcessorReset(void); |
| virtual bool IsAllBufferAvailable(void); |
| virtual OMX_ERRORTYPE SetMaxOutputBufferCount(OMX_PARAM_PORTDEFINITIONTYPE *p); |
| virtual OMX_ERRORTYPE ProcessorPreFillBuffer(OMX_BUFFERHEADERTYPE* buffer); |
| virtual OMX_ERRORTYPE ProcessorPreFreeBuffer(OMX_U32 nPortIndex,OMX_BUFFERHEADERTYPE * pBuffer); |
| virtual OMX_ERRORTYPE PrepareConfigBuffer(VideoConfigBuffer *p); |
| virtual OMX_ERRORTYPE PrepareDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p); |
| virtual OMX_ERRORTYPE PrepareDecodeNativeHandleBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p); |
| virtual OMX_ERRORTYPE FillRenderBuffer(OMX_BUFFERHEADERTYPE **pBuffer, buffer_retain_t *retain, |
| OMX_U32 inportBufferFlags, OMX_BOOL *isResolutionChange); |
| virtual OMX_ERRORTYPE HandleFormatChange(void); |
| virtual OMX_ERRORTYPE TranslateDecodeStatus(Decode_Status status); |
| virtual OMX_COLOR_FORMATTYPE GetOutputColorFormat(int width); |
| virtual OMX_ERRORTYPE BuildHandlerList(void); |
| virtual OMX_ERRORTYPE SetDecoderOutputCropSpecific(OMX_PTR pStructure); |
| virtual OMX_ERRORTYPE GetDecoderOutputCropSpecific(OMX_PTR pStructure); |
| virtual OMX_ERRORTYPE GetNativeBufferUsageSpecific(OMX_PTR pStructure); |
| virtual OMX_ERRORTYPE SetNativeBufferUsageSpecific(OMX_PTR pStructure); |
| virtual OMX_ERRORTYPE SetNativeBufferModeSpecific(OMX_PTR pStructure); |
| virtual OMX_ERRORTYPE GetNativeBufferModeSpecific(OMX_PTR pStructure); |
| |
| DECLARE_HANDLER(OMXVideoDecoderBase, ParamVideoPortFormat); |
| DECLARE_HANDLER(OMXVideoDecoderBase, CapabilityFlags); |
| DECLARE_HANDLER(OMXVideoDecoderBase, NativeBufferUsage); |
| DECLARE_HANDLER(OMXVideoDecoderBase, NativeBuffer); |
| DECLARE_HANDLER(OMXVideoDecoderBase, NativeBufferMode); |
| DECLARE_HANDLER(OMXVideoDecoderBase, DecoderRotation); |
| DECLARE_HANDLER(OMXVideoDecoderBase, DecoderOutputCrop); |
| #ifdef TARGET_HAS_ISV |
| DECLARE_HANDLER(OMXVideoDecoderBase, DecoderVppBufferNum); |
| #endif |
| DECLARE_HANDLER(OMXVideoDecoderBase, StoreMetaDataMode); |
| DECLARE_HANDLER(OMXVideoDecoderBase, ErrorReportMode); |
| DECLARE_HANDLER(OMXVideoDecoderBase, CodecPriority); |
| DECLARE_HANDLER(OMXVideoDecoderBase, DecoderOperatingRate); |
| |
| private: |
| enum { |
| // OMX_PARAM_PORTDEFINITIONTYPE |
| INPORT_MIN_BUFFER_COUNT = 1, |
| INPORT_ACTUAL_BUFFER_COUNT = 256, |
| INPORT_BUFFER_SIZE = 1382400, |
| |
| // OMX_PARAM_PORTDEFINITIONTYPE |
| OUTPORT_MIN_BUFFER_COUNT = 1, |
| OUTPORT_ACTUAL_BUFFER_COUNT = 4, |
| OUTPORT_BUFFER_SIZE = 1382400, |
| |
| OUTPORT_NATIVE_BUFFER_COUNT = 10, |
| }; |
| |
| struct GraphicBufferParam { |
| uint32_t graphicBufferHStride; |
| uint32_t graphicBufferVStride; |
| uint32_t graphicBufferWidth; |
| uint32_t graphicBufferHeight; |
| uint32_t graphicBufferColorFormat; |
| }; |
| uint32_t mRotationDegrees; |
| #ifdef TARGET_HAS_ISV |
| uint32_t mVppBufferNum; |
| #endif |
| |
| // Codec priority. Higher value means lower priority |
| // Currently, only two levels are supported: |
| // 0: realtime priority - This will only be used by |
| // media playback, capture, and possibly by realtime |
| // communication scenarios if best effort performance is not suitable. |
| // 1: non-realtime priority (best effort). This is the default value. |
| uint32_t mCodecPriority; |
| |
| uint32_t mOperatingRate; |
| |
| protected: |
| IVideoDecoder *mVideoDecoder; |
| int mNativeBufferCount; |
| enum WorkingMode { |
| GRAPHICBUFFER_MODE, |
| RAWDATA_MODE, |
| }; |
| WorkingMode mWorkingMode; |
| bool mErrorReportEnabled; |
| GraphicBufferParam mGraphicBufferParam; |
| uint32_t mOMXBufferHeaderTypePtrNum; |
| OMX_BUFFERHEADERTYPE *mOMXBufferHeaderTypePtrArray[MAX_GRAPHIC_BUFFER_NUM]; |
| |
| enum AdaptivePlaybackMode { |
| METADATA_MODE, |
| LEGACY_MODE, |
| }; |
| AdaptivePlaybackMode mAPMode; |
| uint32_t mMetaDataBuffersNum; |
| OMX_TICKS mFlushMode; |
| bool mFormatChanged; |
| uint32_t getStride(uint32_t width); |
| }; |
| |
| #endif /* OMX_VIDEO_DECODER_BASE_H_ */ |