#ifndef __VIDEO_ENCODER_UTILS_H__
#define __VIDEO_ENCODER_UTILS_H__
#include <va/va.h>
#include <va/va_tpi.h>
#include "VideoEncoderDef.h"
#include "IntelMetadataBuffer.h"
#ifdef IMG_GFX
#include <hardware/gralloc.h>
#endif

#define MAP_ACTION_COPY         0x00000001  //mem copy
#define MAP_ACTION_ALIGN64      0x00000002  //align 64
#define MAP_ACTION_COLORCONVERT 0x00000004  //color convert
#define MAP_ACTION_RESIZE       0x00000008  //resize

class VASurfaceMap {
public:
    VASurfaceMap(VADisplay display, int hwcap);
    ~VASurfaceMap();

    Encode_Status doMapping();
    VASurfaceID getVASurface() {return mVASurface;}
    intptr_t getValue() {return mValue;}
    ValueInfo* getValueInfo() {return &mVinfo;}

    void setVASurface(VASurfaceID surface) {mVASurface = surface;}
    void setValue(intptr_t value) {mValue = value;}
    void setValueInfo(ValueInfo& vinfo) {memcpy(&mVinfo, &vinfo, sizeof(ValueInfo));}
    void setTracked() {mTracked = true;}
    void setAction(int32_t action) {mAction = action;}

private:
    Encode_Status doActionCopy();
    Encode_Status doActionColConv();
    Encode_Status MappingToVASurface();
    Encode_Status MappingSurfaceID(intptr_t value);
    Encode_Status MappingGfxHandle(intptr_t value);
    Encode_Status MappingKbufHandle(intptr_t value);
    Encode_Status MappingMallocPTR(intptr_t value);
    VASurfaceID CreateSurfaceFromExternalBuf(intptr_t value, ValueInfo& vinfo);

    VADisplay mVADisplay;

    intptr_t mValue;

    VASurfaceID mVASurface;
    int32_t mVASurfaceWidth;
    int32_t mVASurfaceHeight;
    int32_t mVASurfaceStride;

//    MetadataBufferType mType;

    ValueInfo mVinfo;
    bool mTracked;

    int32_t mAction;

    int32_t mSupportedSurfaceMemType;

#ifdef IMG_GFX
    //special for gfx color format converter
    buffer_handle_t mGfxHandle;
#endif
};

VASurfaceID CreateNewVASurface(VADisplay display, int32_t width, int32_t height);

#endif

