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