aboutsummaryrefslogtreecommitdiffstats
path: root/videocodec/OMXVideoDecoderVP9HWR.h
diff options
context:
space:
mode:
authorywan171 <yi.a.wang@intel.com>2014-07-25 22:00:59 +0800
committerPatrick Tjin <pattjin@google.com>2014-07-29 22:26:10 -0700
commit233d2500723e5594f3e7c70896ffeeef32b9c950 (patch)
tree5c3e6e3039d649ad0e9c46b237530e9bb56f8fd2 /videocodec/OMXVideoDecoderVP9HWR.h
parent0541f11be2f78b558476772f1f877e140f9d844b (diff)
downloadandroid_hardware_intel_common_omx-components-233d2500723e5594f3e7c70896ffeeef32b9c950.tar.gz
android_hardware_intel_common_omx-components-233d2500723e5594f3e7c70896ffeeef32b9c950.tar.bz2
android_hardware_intel_common_omx-components-233d2500723e5594f3e7c70896ffeeef32b9c950.zip
add vp9 accelerated sw decoder plugin in fugu
BZ: 209178 add vp9 sw decoder plugin, the code is pulled from main branch Change-Id: I566570ac6d5c7d9b5a3e760234300e6e9b756666 Signed-off-by: ywan171 <yi.a.wang@intel.com> Reviewed-on: https://android.intel.com/220089 Reviewed-by: Fourdan, Olivier <olivier.fourdan@intel.com> Tested-by: Fourdan, Olivier <olivier.fourdan@intel.com>
Diffstat (limited to 'videocodec/OMXVideoDecoderVP9HWR.h')
-rw-r--r--videocodec/OMXVideoDecoderVP9HWR.h134
1 files changed, 134 insertions, 0 deletions
diff --git a/videocodec/OMXVideoDecoderVP9HWR.h b/videocodec/OMXVideoDecoderVP9HWR.h
new file mode 100644
index 0000000..069b182
--- /dev/null
+++ b/videocodec/OMXVideoDecoderVP9HWR.h
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2012 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_VP9HWR_H_
+#define OMX_VIDEO_DECODER_VP9HWR_H_
+
+#include "OMXVideoDecoderBase.h"
+#include "vpx/vpx_decoder.h"
+#include "vpx/vpx_codec.h"
+#include "vpx/vp8dx.h"
+#include <va/va.h>
+#include <va/va_android.h>
+#include <va/va_tpi.h>
+
+// VAAPI Allocator internal Mem ID
+typedef struct vaapiMemId
+{
+ VASurfaceID* m_surface;
+ unsigned int m_key; //Gralloc handle from which this srf was created
+ unsigned char* m_usrAddr;
+ bool m_render_done;
+ bool m_released;
+}vaapiMemId;
+
+typedef unsigned int Display;
+#define ANDROID_DISPLAY_HANDLE 0x18c34078
+
+#define DECODE_WITH_GRALLOC_BUFFER
+#define VPX_DECODE_BORDER 0
+
+// Make it global to be accessed by callback realloc func
+#define MAX_NATIVE_BUFFER_COUNT 64
+vaapiMemId* extMIDs[MAX_NATIVE_BUFFER_COUNT];
+int extUtilBufferCount;
+int extMappedNativeBufferCount;
+unsigned int extNativeBufferSize;
+
+// These two strides are passed into libvpx to indicate the external buffer size
+// in case that video demension is smaller than these, libvpx inside should
+// ajust the start point of address of decoded y/v/u component.
+// This is especially for adaptive playback case. External buffer is always allocated
+// (or mapped from vaSurface) to a pre-set max size.
+int extActualBufferStride;
+int extActualBufferHeightStride;
+
+class OMXVideoDecoderVP9HWR : public OMXVideoDecoderBase {
+public:
+ OMXVideoDecoderVP9HWR();
+ virtual ~OMXVideoDecoderVP9HWR();
+
+protected:
+ virtual OMX_ERRORTYPE InitInputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionInput);
+ virtual OMX_ERRORTYPE ProcessorInit(void);
+ virtual OMX_ERRORTYPE ProcessorDeinit(void);
+ virtual OMX_ERRORTYPE ProcessorStop(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 OMX_ERRORTYPE ProcessorPreFillBuffer(OMX_BUFFERHEADERTYPE* buffer);
+ virtual bool IsAllBufferAvailable(void);
+
+ virtual OMX_ERRORTYPE PrepareConfigBuffer(VideoConfigBuffer *p);
+ virtual OMX_ERRORTYPE PrepareDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p);
+
+ virtual OMX_ERRORTYPE BuildHandlerList(void);
+
+ virtual OMX_ERRORTYPE FillRenderBuffer(OMX_BUFFERHEADERTYPE **pBuffer,
+ buffer_retain_t *retain,
+ OMX_U32 inportBufferFlags,
+ OMX_BOOL *isResolutionChange);
+
+ virtual OMX_ERRORTYPE HandleFormatChange(void);
+
+ virtual OMX_COLOR_FORMATTYPE GetOutputColorFormat(int width);
+ virtual OMX_ERRORTYPE GetDecoderOutputCropSpecific(OMX_PTR pStructure);
+ virtual OMX_ERRORTYPE GetNativeBufferUsageSpecific(OMX_PTR pStructure);
+ virtual OMX_ERRORTYPE SetNativeBufferModeSpecific(OMX_PTR pStructure);
+
+ friend int reallocVP9FrameBuffer(void *user_priv, unsigned int new_size, vpx_codec_frame_buffer_t *fb);
+
+ DECLARE_HANDLER(OMXVideoDecoderVP9HWR, ParamVideoVp9);
+
+private:
+ OMX_ERRORTYPE initDecoder();
+ OMX_ERRORTYPE destroyDecoder();
+
+ enum {
+ // OMX_PARAM_PORTDEFINITIONTYPE
+ INPORT_MIN_BUFFER_COUNT = 1,
+ INPORT_ACTUAL_BUFFER_COUNT = 5,
+ INPORT_BUFFER_SIZE = 1382400,
+ OUTPORT_NATIVE_BUFFER_COUNT = 12, // 8 reference + 1 current + 3 for asynchronized mode
+ OUTPORT_ACTUAL_BUFFER_COUNT = 12, // for raw data mode
+ INTERNAL_MAX_FRAME_WIDTH = 1920,
+ INTERNAL_MAX_FRAME_HEIGHT = 1088,
+ };
+
+ void *mCtx;
+
+ //OMX_VIDEO_PARAM_VP9TYPE mParamVp9;
+ vpx_codec_frame_buffer_t* mFrameBuffers;
+ int mNumFrameBuffer;
+
+ // These members are for Adaptive playback
+ uint32_t mDecodedImageWidth;
+ uint32_t mDecodedImageHeight;
+ uint32_t mDecodedImageNewWidth;
+ uint32_t mDecodedImageNewHeight;
+
+ Display* mDisplay;
+ VADisplay mVADisplay;
+};
+
+#endif /* OMX_VIDEO_DECODER_VP9HWR_H_ */
+