#ifndef OMX_VIDEO_ENCODER_VP8_H
#define OMX_VIDEO_ENCODER_VP8_H

#include <OMX_VideoExt.h>
#include "OMXVideoEncoderBase.h"

class OMXVideoEncoderVP8 : public OMXVideoEncoderBase {
    public:
        OMXVideoEncoderVP8();
        virtual ~OMXVideoEncoderVP8();
    protected:
        virtual OMX_ERRORTYPE InitOutputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDeninitionOutput);
        virtual OMX_ERRORTYPE ProcessorInit(void);
        virtual OMX_ERRORTYPE ProcessorDeinit(void);
        virtual OMX_ERRORTYPE ProcessorProcess(OMX_BUFFERHEADERTYPE **buffers, buffer_retain_t *retains, OMX_U32 numberBuffers);
        virtual OMX_ERRORTYPE BuildHandlerList(void);
        virtual OMX_ERRORTYPE SetVideoEncoderParam();
        DECLARE_HANDLER(OMXVideoEncoderVP8, ParamVideoVp8);
        DECLARE_HANDLER(OMXVideoEncoderVP8, ConfigVideoVp8ReferenceFrame);
        DECLARE_HANDLER(OMXVideoEncoderVP8, ConfigVp8MaxFrameSizeRatio);
    private:
        enum {
            OUTPORT_MIN_BUFFER_COUNT = 1,
            OUTPORT_ACTUAL_BUFFER_COUNT = 2,
            OUTPORT_BUFFER_SIZE = 1382400,
        };

        OMX_VIDEO_PARAM_VP8TYPE mParamVp8;
        OMX_VIDEO_VP8REFERENCEFRAMETYPE mConfigVideoVp8ReferenceFrame;
        // Last input buffer timestamp
        OMX_TICKS mLastTimestamp;
};

#endif /* OMX_VIDEO_ENCODER_VP8_H */