You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
5.9 KiB
153 lines
5.9 KiB
/* |
|
* 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_ */
|
|
|