#include "Parameters.h"

v8::Local<v8::Object> GET_AUDIO_PORTDEFINITIONTYPE(OMX_AUDIO_PORTDEFINITIONTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_PORTFORMATTYPE(OMX_AUDIO_PARAM_PORTFORMATTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_PCMMODETYPE(OMX_AUDIO_PARAM_PCMMODETYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_MP3TYPE(OMX_AUDIO_PARAM_MP3TYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_DDPTYPE(OMX_AUDIO_PARAM_DDPTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_DTSTYPE(OMX_AUDIO_PARAM_DTSTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_AACPROFILETYPE(OMX_AUDIO_PARAM_AACPROFILETYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_VORBISTYPE(OMX_AUDIO_PARAM_VORBISTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_WMATYPE(OMX_AUDIO_PARAM_WMATYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_RATYPE(OMX_AUDIO_PARAM_RATYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_SBCTYPE(OMX_AUDIO_PARAM_SBCTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_ADPCMTYPE(OMX_AUDIO_PARAM_ADPCMTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_G723TYPE(OMX_AUDIO_PARAM_G723TYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_G726TYPE(OMX_AUDIO_PARAM_G726TYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_G729TYPE(OMX_AUDIO_PARAM_G729TYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_AMRTYPE(OMX_AUDIO_PARAM_AMRTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_GSMFRTYPE(OMX_AUDIO_PARAM_GSMFRTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_GSMHRTYPE(OMX_AUDIO_PARAM_GSMHRTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_GSMEFRTYPE(OMX_AUDIO_PARAM_GSMEFRTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_TDMAFRTYPE(OMX_AUDIO_PARAM_TDMAFRTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_TDMAEFRTYPE(OMX_AUDIO_PARAM_TDMAEFRTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_PDCFRTYPE(OMX_AUDIO_PARAM_PDCFRTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_PDCEFRTYPE(OMX_AUDIO_PARAM_PDCEFRTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_PDCHRTYPE(OMX_AUDIO_PARAM_PDCHRTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_QCELP8TYPE(OMX_AUDIO_PARAM_QCELP8TYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_QCELP13TYPE(OMX_AUDIO_PARAM_QCELP13TYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_EVRCTYPE(OMX_AUDIO_PARAM_EVRCTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_SMVTYPE(OMX_AUDIO_PARAM_SMVTYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_MIDITYPE(OMX_AUDIO_PARAM_MIDITYPE &format);
v8::Local<v8::Object> GET_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE(OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE(OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE(OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDICONTROLTYPE(OMX_AUDIO_CONFIG_MIDICONTROLTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDISTATUSTYPE(OMX_AUDIO_CONFIG_MIDISTATUSTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDIMETAEVENTTYPE(OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE(OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_VOLUMETYPE(OMX_AUDIO_CONFIG_VOLUMETYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_CHANNELVOLUMETYPE(OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_BALANCETYPE(OMX_AUDIO_CONFIG_BALANCETYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_MUTETYPE(OMX_AUDIO_CONFIG_MUTETYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_CHANNELMUTETYPE(OMX_AUDIO_CONFIG_CHANNELMUTETYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_LOUDNESSTYPE(OMX_AUDIO_CONFIG_LOUDNESSTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_BASSTYPE(OMX_AUDIO_CONFIG_BASSTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_TREBLETYPE(OMX_AUDIO_CONFIG_TREBLETYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_EQUALIZERTYPE(OMX_AUDIO_CONFIG_EQUALIZERTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_STEREOWIDENINGTYPE(OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_CHORUSTYPE(OMX_AUDIO_CONFIG_CHORUSTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_REVERBERATIONTYPE(OMX_AUDIO_CONFIG_REVERBERATIONTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_ECHOCANCELATIONTYPE(OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE &format);
v8::Local<v8::Object> GET_AUDIO_CONFIG_NOISEREDUCTIONTYPE(OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE &format);
v8::Local<v8::Object> GET_BUFFERFRAGMENTTYPE(OMX_BUFFERFRAGMENTTYPE &format);
v8::Local<v8::Object> GET_PARAM_IJGSCALINGTYPE(OMX_PARAM_IJGSCALINGTYPE &format);
v8::Local<v8::Object> GET_DISPLAYRECTTYPE(OMX_DISPLAYRECTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_DISPLAYREGIONTYPE(OMX_CONFIG_DISPLAYREGIONTYPE &format);
v8::Local<v8::Object> GET_PARAM_SOURCETYPE(OMX_PARAM_SOURCETYPE &format);
v8::Local<v8::Object> GET_PARAM_RESIZETYPE(OMX_PARAM_RESIZETYPE &format);
v8::Local<v8::Object> GET_PARAM_TESTINTERFACETYPE(OMX_PARAM_TESTINTERFACETYPE &format);
v8::Local<v8::Object> GET_CONFIG_VISUALISATIONTYPE(OMX_CONFIG_VISUALISATIONTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMAUDIODESTINATIONTYPE(OMX_CONFIG_BRCMAUDIODESTINATIONTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMAUDIOSOURCETYPE(OMX_CONFIG_BRCMAUDIOSOURCETYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS(OMX_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS &format);
v8::Local<v8::Object> GET_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS8x8(OMX_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS8x8 &format);
v8::Local<v8::Object> GET_CONFIG_BRCMAUDIOMAXSAMPLE(OMX_CONFIG_BRCMAUDIOMAXSAMPLE &format);
v8::Local<v8::Object> GET_CONFIG_PLAYMODETYPE(OMX_CONFIG_PLAYMODETYPE &format);
v8::Local<v8::Object> GET_PARAM_DELIVERYFORMATTYPE(OMX_PARAM_DELIVERYFORMATTYPE &format);
v8::Local<v8::Object> GET_PARAM_CODECCONFIGTYPE(OMX_PARAM_CODECCONFIGTYPE &format);
v8::Local<v8::Object> GET_PARAM_STILLSFUNCTIONTYPE(OMX_PARAM_STILLSFUNCTIONTYPE &format);
v8::Local<v8::Object> GET_PARAM_BUFFERADDRESSTYPE(OMX_PARAM_BUFFERADDRESSTYPE &format);
v8::Local<v8::Object> GET_PARAM_TUNNELSETUPTYPE(OMX_PARAM_TUNNELSETUPTYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMPORTEGLTYPE(OMX_PARAM_BRCMPORTEGLTYPE &format);
v8::Local<v8::Object> GET_CONFIG_IMAGEFILTERPARAMSTYPE(OMX_CONFIG_IMAGEFILTERPARAMSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_TRANSITIONCONTROLTYPE(OMX_CONFIG_TRANSITIONCONTROLTYPE &format);
v8::Local<v8::Object> GET_CONFIG_AUDIOMONOTRACKCONTROLTYPE(OMX_CONFIG_AUDIOMONOTRACKCONTROLTYPE &format);
v8::Local<v8::Object> GET_PARAM_CAMERAIMAGEPOOLTYPE(OMX_PARAM_CAMERAIMAGEPOOLTYPE &format);
v8::Local<v8::Object> GET_PARAM_IMAGEPOOLSIZETYPE(OMX_PARAM_IMAGEPOOLSIZETYPE &format);
v8::Local<v8::Object> GET_PARAM_IMAGEPOOLEXTERNALTYPE(OMX_PARAM_IMAGEPOOLEXTERNALTYPE &format);
v8::Local<v8::Object> GET_PARAM_RUTILFIFOINFOTYPE(OMX_PARAM_RUTILFIFOINFOTYPE &format);
v8::Local<v8::Object> GET_PARAM_ILFIFOCONFIG(OMX_PARAM_ILFIFOCONFIG &format);
v8::Local<v8::Object> GET_CONFIG_CAMERASENSORMODETYPE(OMX_CONFIG_CAMERASENSORMODETYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMPORTBUFFERSTATSTYPE(OMX_CONFIG_BRCMPORTBUFFERSTATSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMPORTSTATSTYPE(OMX_CONFIG_BRCMPORTSTATSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMCAMERASTATSTYPE(OMX_CONFIG_BRCMCAMERASTATSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMIOPERFSTATSTYPE(OMX_CONFIG_BRCMIOPERFSTATSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_SHARPNESSTYPE(OMX_CONFIG_SHARPNESSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_FLICKERCANCELTYPE(OMX_CONFIG_FLICKERCANCELTYPE &format);
v8::Local<v8::Object> GET_CONFIG_REDEYEREMOVALTYPE(OMX_CONFIG_REDEYEREMOVALTYPE &format);
v8::Local<v8::Object> GET_CONFIG_FACEDETECTIONCONTROLTYPE(OMX_CONFIG_FACEDETECTIONCONTROLTYPE &format);
v8::Local<v8::Object> GET_CONFIG_FACEDETECTIONREGIONTYPE(OMX_CONFIG_FACEDETECTIONREGIONTYPE &format);
v8::Local<v8::Object> GET_CONFIG_INTERLACETYPE(OMX_CONFIG_INTERLACETYPE &format);
v8::Local<v8::Object> GET_PARAM_CAMERAISPTUNERTYPE(OMX_PARAM_CAMERAISPTUNERTYPE &format);
v8::Local<v8::Object> GET_CONFIG_IMAGEPTRTYPE(OMX_CONFIG_IMAGEPTRTYPE &format);
v8::Local<v8::Object> GET_CONFIG_AFASSISTTYPE(OMX_CONFIG_AFASSISTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_INPUTCROPTYPE(OMX_CONFIG_INPUTCROPTYPE &format);
v8::Local<v8::Object> GET_PARAM_CODECREQUIREMENTSTYPE(OMX_PARAM_CODECREQUIREMENTSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMEGLIMAGEMEMHANDLETYPE(OMX_CONFIG_BRCMEGLIMAGEMEMHANDLETYPE &format);
v8::Local<v8::Object> GET_CONFIG_PRIVACYINDICATORTYPE(OMX_CONFIG_PRIVACYINDICATORTYPE &format);
v8::Local<v8::Object> GET_PARAM_CAMERAFLASHTYPE(OMX_PARAM_CAMERAFLASHTYPE &format);
v8::Local<v8::Object> GET_CONFIG_CAMERAFLASHCONFIGTYPE(OMX_CONFIG_CAMERAFLASHCONFIGTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMAUDIOTRACKGAPLESSPLAYBACKTYPE(OMX_CONFIG_BRCMAUDIOTRACKGAPLESSPLAYBACKTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMAUDIOTRACKCHANGECONTROLTYPE(OMX_CONFIG_BRCMAUDIOTRACKCHANGECONTROLTYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMPIXELVALUERANGETYPE(OMX_PARAM_BRCMPIXELVALUERANGETYPE &format);
v8::Local<v8::Object> GET_PARAM_CAMERADISABLEALGORITHMTYPE(OMX_PARAM_CAMERADISABLEALGORITHMTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMAUDIOEFFECTCONTROLTYPE(OMX_CONFIG_BRCMAUDIOEFFECTCONTROLTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMMINIMUMPROCESSINGLATENCY(OMX_CONFIG_BRCMMINIMUMPROCESSINGLATENCY &format);
v8::Local<v8::Object> GET_PARAM_BRCMVIDEOAVCSEIENABLETYPE(OMX_PARAM_BRCMVIDEOAVCSEIENABLETYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMALLOWMEMCHANGETYPE(OMX_PARAM_BRCMALLOWMEMCHANGETYPE &format);
v8::Local<v8::Object> GET_CONFIG_CAMERAUSECASETYPE(OMX_CONFIG_CAMERAUSECASETYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMDISABLEPROPRIETARYTUNNELSTYPE(OMX_PARAM_BRCMDISABLEPROPRIETARYTUNNELSTYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMRETAINMEMORYTYPE(OMX_PARAM_BRCMRETAINMEMORYTYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMOUTPUTBUFFERSIZETYPE(OMX_PARAM_BRCMOUTPUTBUFFERSIZETYPE &format);
v8::Local<v8::Object> GET_CONFIG_CAMERAINFOTYPE(OMX_CONFIG_CAMERAINFOTYPE &format);
v8::Local<v8::Object> GET_CONFIG_CAMERAFEATURESTYPE(OMX_CONFIG_CAMERAFEATURESTYPE &format);
v8::Local<v8::Object> GET_CONFIG_REQUESTCALLBACKTYPE(OMX_CONFIG_REQUESTCALLBACKTYPE &format);
v8::Local<v8::Object> GET_FOCUSREGIONXY(OMX_FOCUSREGIONXY &format);
v8::Local<v8::Object> GET_CONFIG_FOCUSREGIONXYTYPE(OMX_CONFIG_FOCUSREGIONXYTYPE &format);
v8::Local<v8::Object> GET_CONFIG_U8TYPE(OMX_CONFIG_U8TYPE &format);
v8::Local<v8::Object> GET_CONFIG_CAMERASETTINGSTYPE(OMX_CONFIG_CAMERASETTINGSTYPE &format);
v8::Local<v8::Object> GET_YUVCOLOUR(OMX_YUVCOLOUR &format);
v8::Local<v8::Object> GET_CONFIG_DRAWBOXLINEPARAMS(OMX_CONFIG_DRAWBOXLINEPARAMS &format);
v8::Local<v8::Object> GET_PARAM_CAMERARMITYPE(OMX_PARAM_CAMERARMITYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMSYNCOUTPUTTYPE(OMX_CONFIG_BRCMSYNCOUTPUTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_DRMVIEWTYPE(OMX_CONFIG_DRMVIEWTYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMU64TYPE(OMX_PARAM_BRCMU64TYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMTHUMBNAILTYPE(OMX_PARAM_BRCMTHUMBNAILTYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMASPECTRATIOTYPE(OMX_PARAM_BRCMASPECTRATIOTYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMVIDEODECODEERRORCONCEALMENTTYPE(OMX_PARAM_BRCMVIDEODECODEERRORCONCEALMENTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_FLASHINFOTYPE(OMX_CONFIG_FLASHINFOTYPE &format);
v8::Local<v8::Object> GET_CONFIG_DYNAMICRANGEEXPANSIONTYPE(OMX_CONFIG_DYNAMICRANGEEXPANSIONTYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMTHREADAFFINITYTYPE(OMX_PARAM_BRCMTHREADAFFINITYTYPE &format);
v8::Local<v8::Object> GET_CONFIG_SCENEDETECTTYPE(OMX_CONFIG_SCENEDETECTTYPE &format);
v8::Local<v8::Object> GET_NALSTREAMFORMATTYPE(OMX_NALSTREAMFORMATTYPE &format);
v8::Local<v8::Object> GET_STATICBOX(OMX_STATICBOX &format);
v8::Local<v8::Object> GET_CONFIG_STATICBOXTYPE(OMX_CONFIG_STATICBOXTYPE &format);
v8::Local<v8::Object> GET_CONFIG_PORTBOOLEANTYPE(OMX_CONFIG_PORTBOOLEANTYPE &format);
v8::Local<v8::Object> GET_PARAM_CAMERACAPTUREMODETYPE(OMX_PARAM_CAMERACAPTUREMODETYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMDRMENCRYPTIONTYPE(OMX_PARAM_BRCMDRMENCRYPTIONTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BUFFERSTALLTYPE(OMX_CONFIG_BUFFERSTALLTYPE &format);
v8::Local<v8::Object> GET_CONFIG_LATENCYTARGETTYPE(OMX_CONFIG_LATENCYTARGETTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMUSEPROPRIETARYCALLBACKTYPE(OMX_CONFIG_BRCMUSEPROPRIETARYCALLBACKTYPE &format);
v8::Local<v8::Object> GET_PARAM_TIMESTAMPMODETYPE(OMX_PARAM_TIMESTAMPMODETYPE &format);
v8::Local<v8::Object> GET_BRCMVEGLIMAGETYPE(OMX_BRCMVEGLIMAGETYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMFOVTYPE(OMX_CONFIG_BRCMFOVTYPE &format);
v8::Local<v8::Object> GET_VIDEO_CONFIG_LEVEL_EXTEND(OMX_VIDEO_CONFIG_LEVEL_EXTEND &format);
v8::Local<v8::Object> GET_VIDEO_EEDE_ENABLE(OMX_VIDEO_EEDE_ENABLE &format);
v8::Local<v8::Object> GET_VIDEO_EEDE_LOSSRATE(OMX_VIDEO_EEDE_LOSSRATE &format);
v8::Local<v8::Object> GET_PARAM_COLORSPACETYPE(OMX_PARAM_COLORSPACETYPE &format);
v8::Local<v8::Object> GET_PARAM_CAPTURESTATETYPE(OMX_PARAM_CAPTURESTATETYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMCONFIGFILETYPE(OMX_PARAM_BRCMCONFIGFILETYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMCONFIGFILECHUNKTYPE(OMX_PARAM_BRCMCONFIGFILECHUNKTYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMFRAMERATERANGETYPE(OMX_PARAM_BRCMFRAMERATERANGETYPE &format);
v8::Local<v8::Object> GET_PARAM_S32TYPE(OMX_PARAM_S32TYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMVIDEODRMPROTECTBUFFERTYPE(OMX_PARAM_BRCMVIDEODRMPROTECTBUFFERTYPE &format);
v8::Local<v8::Object> GET_CONFIG_ZEROSHUTTERLAGTYPE(OMX_CONFIG_ZEROSHUTTERLAGTYPE &format);
v8::Local<v8::Object> GET_PARAM_BRCMVIDEODECODECONFIGVD3TYPE(OMX_PARAM_BRCMVIDEODECODECONFIGVD3TYPE &format);
v8::Local<v8::Object> GET_CONFIG_CUSTOMAWBGAINSTYPE(OMX_CONFIG_CUSTOMAWBGAINSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMRENDERSTATSTYPE(OMX_CONFIG_BRCMRENDERSTATSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMANNOTATETYPE(OMX_CONFIG_BRCMANNOTATETYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRCMSTEREOSCOPICMODETYPE(OMX_CONFIG_BRCMSTEREOSCOPICMODETYPE &format);
v8::Local<v8::Object> GET_PARAM_CAMERAINTERFACETYPE(OMX_PARAM_CAMERAINTERFACETYPE &format);
v8::Local<v8::Object> GET_PARAM_CAMERACLOCKINGMODETYPE(OMX_PARAM_CAMERACLOCKINGMODETYPE &format);
v8::Local<v8::Object> GET_PARAM_CAMERARXCONFIG_TYPE(OMX_PARAM_CAMERARXCONFIG_TYPE &format);
v8::Local<v8::Object> GET_PARAM_CAMERARXTIMING_TYPE(OMX_PARAM_CAMERARXTIMING_TYPE &format);
v8::Local<v8::Object> GET_PARAM_BAYERORDERTYPE(OMX_PARAM_BAYERORDERTYPE &format);
v8::Local<v8::Object> GET_PARAM_PORTDEFINITIONTYPE(OMX_PARAM_PORTDEFINITIONTYPE &format);
v8::Local<v8::Object> GET_PARAM_U32TYPE(OMX_PARAM_U32TYPE &format);
v8::Local<v8::Object> GET_PARAM_SUSPENSIONPOLICYTYPE(OMX_PARAM_SUSPENSIONPOLICYTYPE &format);
v8::Local<v8::Object> GET_PARAM_SUSPENSIONTYPE(OMX_PARAM_SUSPENSIONTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BOOLEANTYPE(OMX_CONFIG_BOOLEANTYPE &format);
v8::Local<v8::Object> GET_PARAM_CONTENTURITYPE(OMX_PARAM_CONTENTURITYPE &format);
v8::Local<v8::Object> GET_PARAM_CONTENTPIPETYPE(OMX_PARAM_CONTENTPIPETYPE &format);
v8::Local<v8::Object> GET_RESOURCECONCEALMENTTYPE(OMX_RESOURCECONCEALMENTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_METADATAITEMCOUNTTYPE(OMX_CONFIG_METADATAITEMCOUNTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_METADATAITEMTYPE(OMX_CONFIG_METADATAITEMTYPE &format);
v8::Local<v8::Object> GET_CONFIG_CONTAINERNODECOUNTTYPE(OMX_CONFIG_CONTAINERNODECOUNTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_CONTAINERNODEIDTYPE(OMX_CONFIG_CONTAINERNODEIDTYPE &format);
v8::Local<v8::Object> GET_PARAM_METADATAFILTERTYPE(OMX_PARAM_METADATAFILTERTYPE &format);
v8::Local<v8::Object> GET_PRIORITYMGMTTYPE(OMX_PRIORITYMGMTTYPE &format);
v8::Local<v8::Object> GET_PARAM_COMPONENTROLETYPE(OMX_PARAM_COMPONENTROLETYPE &format);
v8::Local<v8::Object> GET_BUFFERHEADERTYPE(OMX_BUFFERHEADERTYPE &format);
v8::Local<v8::Object> GET_OTHER_EXTRADATATYPE(OMX_OTHER_EXTRADATATYPE &format);
v8::Local<v8::Object> GET_PORT_PARAM_TYPE(OMX_PORT_PARAM_TYPE &format);
v8::Local<v8::Object> GET_PARAM_BUFFERSUPPLIERTYPE(OMX_PARAM_BUFFERSUPPLIERTYPE &format);
v8::Local<v8::Object> GET_TUNNELSETUPTYPE(OMX_TUNNELSETUPTYPE &format);
v8::Local<v8::Object> GET_PARAM_PORTSUMMARYTYPE(OMX_PARAM_PORTSUMMARYTYPE &format);
v8::Local<v8::Object> GET_PARAM_MARKCOMPARISONTYPE(OMX_PARAM_MARKCOMPARISONTYPE &format);
v8::Local<v8::Object> GET_PARAM_TUNNELSTATUSTYPE(OMX_PARAM_TUNNELSTATUSTYPE &format);
v8::Local<v8::Object> GET_IMAGE_PORTDEFINITIONTYPE(OMX_IMAGE_PORTDEFINITIONTYPE &format);
v8::Local<v8::Object> GET_IMAGE_PARAM_PORTFORMATTYPE(OMX_IMAGE_PARAM_PORTFORMATTYPE &format);
v8::Local<v8::Object> GET_IMAGE_PARAM_FLASHCONTROLTYPE(OMX_IMAGE_PARAM_FLASHCONTROLTYPE &format);
v8::Local<v8::Object> GET_IMAGE_CONFIG_FOCUSCONTROLTYPE(OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE &format);
v8::Local<v8::Object> GET_IMAGE_PARAM_QFACTORTYPE(OMX_IMAGE_PARAM_QFACTORTYPE &format);
v8::Local<v8::Object> GET_IMAGE_PARAM_QUANTIZATIONTABLETYPE(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE &format);
v8::Local<v8::Object> GET_IMAGE_PARAM_HUFFMANTTABLETYPE(OMX_IMAGE_PARAM_HUFFMANTTABLETYPE &format);
v8::Local<v8::Object> GET_CONFIG_COLORCONVERSIONTYPE(OMX_CONFIG_COLORCONVERSIONTYPE &format);
v8::Local<v8::Object> GET_CONFIG_SCALEFACTORTYPE(OMX_CONFIG_SCALEFACTORTYPE &format);
v8::Local<v8::Object> GET_CONFIG_IMAGEFILTERTYPE(OMX_CONFIG_IMAGEFILTERTYPE &format);
v8::Local<v8::Object> GET_CONFIG_COLORENHANCEMENTTYPE(OMX_CONFIG_COLORENHANCEMENTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_COLORKEYTYPE(OMX_CONFIG_COLORKEYTYPE &format);
v8::Local<v8::Object> GET_CONFIG_COLORBLENDTYPE(OMX_CONFIG_COLORBLENDTYPE &format);
v8::Local<v8::Object> GET_FRAMESIZETYPE(OMX_FRAMESIZETYPE &format);
v8::Local<v8::Object> GET_CONFIG_ROTATIONTYPE(OMX_CONFIG_ROTATIONTYPE &format);
v8::Local<v8::Object> GET_CONFIG_MIRRORTYPE(OMX_CONFIG_MIRRORTYPE &format);
v8::Local<v8::Object> GET_CONFIG_POINTTYPE(OMX_CONFIG_POINTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_RECTTYPE(OMX_CONFIG_RECTTYPE &format);
v8::Local<v8::Object> GET_PARAM_DEBLOCKINGTYPE(OMX_PARAM_DEBLOCKINGTYPE &format);
v8::Local<v8::Object> GET_CONFIG_FRAMESTABTYPE(OMX_CONFIG_FRAMESTABTYPE &format);
v8::Local<v8::Object> GET_CONFIG_WHITEBALCONTROLTYPE(OMX_CONFIG_WHITEBALCONTROLTYPE &format);
v8::Local<v8::Object> GET_CONFIG_EXPOSURECONTROLTYPE(OMX_CONFIG_EXPOSURECONTROLTYPE &format);
v8::Local<v8::Object> GET_PARAM_SENSORMODETYPE(OMX_PARAM_SENSORMODETYPE &format);
v8::Local<v8::Object> GET_CONFIG_CONTRASTTYPE(OMX_CONFIG_CONTRASTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BRIGHTNESSTYPE(OMX_CONFIG_BRIGHTNESSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_BACKLIGHTTYPE(OMX_CONFIG_BACKLIGHTTYPE &format);
v8::Local<v8::Object> GET_CONFIG_GAMMATYPE(OMX_CONFIG_GAMMATYPE &format);
v8::Local<v8::Object> GET_CONFIG_SATURATIONTYPE(OMX_CONFIG_SATURATIONTYPE &format);
v8::Local<v8::Object> GET_CONFIG_LIGHTNESSTYPE(OMX_CONFIG_LIGHTNESSTYPE &format);
v8::Local<v8::Object> GET_CONFIG_PLANEBLENDTYPE(OMX_CONFIG_PLANEBLENDTYPE &format);
v8::Local<v8::Object> GET_PARAM_INTERLEAVETYPE(OMX_PARAM_INTERLEAVETYPE &format);
v8::Local<v8::Object> GET_CONFIG_TRANSITIONEFFECTTYPE(OMX_CONFIG_TRANSITIONEFFECTTYPE &format);
v8::Local<v8::Object> GET_PARAM_DATAUNITTYPE(OMX_PARAM_DATAUNITTYPE &format);
v8::Local<v8::Object> GET_CONFIG_DITHERTYPE(OMX_CONFIG_DITHERTYPE &format);
v8::Local<v8::Object> GET_CONFIG_CAPTUREMODETYPE(OMX_CONFIG_CAPTUREMODETYPE &format);
v8::Local<v8::Object> GET_CONFIG_EXPOSUREVALUETYPE(OMX_CONFIG_EXPOSUREVALUETYPE &format);
v8::Local<v8::Object> GET_CONFIG_FOCUSREGIONTYPE(OMX_CONFIG_FOCUSREGIONTYPE &format);
v8::Local<v8::Object> GET_PARAM_FOCUSSTATUSTYPE(OMX_PARAM_FOCUSSTATUSTYPE &format);
v8::Local<v8::Object> GET_TIME_CONFIG_SEEKMODETYPE(OMX_TIME_CONFIG_SEEKMODETYPE &format);
v8::Local<v8::Object> GET_TIME_CONFIG_TIMESTAMPTYPE(OMX_TIME_CONFIG_TIMESTAMPTYPE &format);
v8::Local<v8::Object> GET_TIME_CONFIG_MEDIATIMEREQUESTTYPE(OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE &format);
v8::Local<v8::Object> GET_TIME_MEDIATIMETYPE(OMX_TIME_MEDIATIMETYPE &format);
v8::Local<v8::Object> GET_TIME_CONFIG_SCALETYPE(OMX_TIME_CONFIG_SCALETYPE &format);
v8::Local<v8::Object> GET_TIME_CONFIG_CLOCKSTATETYPE(OMX_TIME_CONFIG_CLOCKSTATETYPE &format);
v8::Local<v8::Object> GET_TIME_CONFIG_ACTIVEREFCLOCKTYPE(OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE &format);
v8::Local<v8::Object> GET_OTHER_CONFIG_POWERTYPE(OMX_OTHER_CONFIG_POWERTYPE &format);
v8::Local<v8::Object> GET_OTHER_CONFIG_STATSTYPE(OMX_OTHER_CONFIG_STATSTYPE &format);
v8::Local<v8::Object> GET_OTHER_PORTDEFINITIONTYPE(OMX_OTHER_PORTDEFINITIONTYPE &format);
v8::Local<v8::Object> GET_OTHER_PARAM_PORTFORMATTYPE(OMX_OTHER_PARAM_PORTFORMATTYPE &format);
v8::Local<v8::Object> GET_BU32(OMX_BU32 &format);
v8::Local<v8::Object> GET_BS32(OMX_BS32 &format);
v8::Local<v8::Object> GET_TICKS(OMX_TICKS &format);
v8::Local<v8::Object> GET_MARKTYPE(OMX_MARKTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PORTDEFINITIONTYPE(OMX_VIDEO_PORTDEFINITIONTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_PORTFORMATTYPE(OMX_VIDEO_PARAM_PORTFORMATTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_QUANTIZATIONTYPE(OMX_VIDEO_PARAM_QUANTIZATIONTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_VIDEOFASTUPDATETYPE(OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_BITRATETYPE(OMX_VIDEO_PARAM_BITRATETYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_MOTIONVECTORTYPE(OMX_VIDEO_PARAM_MOTIONVECTORTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_INTRAREFRESHTYPE(OMX_VIDEO_PARAM_INTRAREFRESHTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_ERRORCORRECTIONTYPE(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_VBSMCTYPE(OMX_VIDEO_PARAM_VBSMCTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_H263TYPE(OMX_VIDEO_PARAM_H263TYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_MPEG2TYPE(OMX_VIDEO_PARAM_MPEG2TYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_MPEG4TYPE(OMX_VIDEO_PARAM_MPEG4TYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_WMVTYPE(OMX_VIDEO_PARAM_WMVTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_RVTYPE(OMX_VIDEO_PARAM_RVTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_AVCTYPE(OMX_VIDEO_PARAM_AVCTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_PROFILELEVELTYPE(OMX_VIDEO_PARAM_PROFILELEVELTYPE &format);
v8::Local<v8::Object> GET_VIDEO_CONFIG_BITRATETYPE(OMX_VIDEO_CONFIG_BITRATETYPE &format);
v8::Local<v8::Object> GET_CONFIG_FRAMERATETYPE(OMX_CONFIG_FRAMERATETYPE &format);
v8::Local<v8::Object> GET_CONFIG_INTRAREFRESHVOPTYPE(OMX_CONFIG_INTRAREFRESHVOPTYPE &format);
v8::Local<v8::Object> GET_CONFIG_MACROBLOCKERRORMAPTYPE(OMX_CONFIG_MACROBLOCKERRORMAPTYPE &format);
v8::Local<v8::Object> GET_CONFIG_MBERRORREPORTINGTYPE(OMX_CONFIG_MBERRORREPORTINGTYPE &format);
v8::Local<v8::Object> GET_PARAM_MACROBLOCKSTYPE(OMX_PARAM_MACROBLOCKSTYPE &format);
v8::Local<v8::Object> GET_VIDEO_PARAM_AVCSLICEFMO(OMX_VIDEO_PARAM_AVCSLICEFMO &format);
v8::Local<v8::Object> GET_VIDEO_CONFIG_AVCINTRAPERIOD(OMX_VIDEO_CONFIG_AVCINTRAPERIOD &format);
v8::Local<v8::Object> GET_VIDEO_CONFIG_NALSIZE(OMX_VIDEO_CONFIG_NALSIZE &format);

v8::Local<v8::Object> GET_AUDIO_PORTDEFINITIONTYPE(OMX_AUDIO_PORTDEFINITIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("pNativeRender").ToLocalChecked(), Nan::New(format.pNativeRender)); // < platform specific reference for an output device, otherwise this field is 0
  Nan::Set(ret, Nan::New("bFlagErrorConcealment").ToLocalChecked(), Nan::New(!!format.bFlagErrorConcealment)); // Turns on error concealment if it is supported by the OMX component
  Nan::Set(ret, Nan::New("eEncoding").ToLocalChecked(), Nan::New(format.eEncoding)); // Type of data expected for this port (e.g. PCM, AMR, MP3, etc)
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_PORTFORMATTYPE(OMX_AUDIO_PARAM_PORTFORMATTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex)); // Indicates the enumeration index for the format from 0x0 to N-1
  Nan::Set(ret, Nan::New("eEncoding").ToLocalChecked(), Nan::New(format.eEncoding)); // Type of data expected for this port (e.g. PCM, AMR, MP3, etc)
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_PCMMODETYPE(OMX_AUDIO_PARAM_PCMMODETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels (e.g. 2 for stereo)
  Nan::Set(ret, Nan::New("eNumData").ToLocalChecked(), Nan::New(format.eNumData)); // indicates PCM data as signed or unsigned
  Nan::Set(ret, Nan::New("eEndian").ToLocalChecked(), Nan::New(format.eEndian)); // indicates PCM data as little or big endian
  Nan::Set(ret, Nan::New("bInterleaved").ToLocalChecked(), Nan::New(!!format.bInterleaved)); // True for normal interleaved data; false for non-interleaved data (e.g. block data)
  Nan::Set(ret, Nan::New("nBitPerSample").ToLocalChecked(), Nan::New(format.nBitPerSample)); // Bit per sample
  Nan::Set(ret, Nan::New("nSamplingRate").ToLocalChecked(), Nan::New(format.nSamplingRate)); // Sampling rate of the source data. Use 0 for variable or unknown sampling rate.
  Nan::Set(ret, Nan::New("ePCMMode").ToLocalChecked(), Nan::New(format.ePCMMode)); // PCM mode enumeration
  Nan::Set(ret, Nan::New("eChannelMapping").ToLocalChecked(), Nan::New(format.eChannelMapping)); // Slot i contains channel defined by eChannelMap[i]
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_MP3TYPE(OMX_AUDIO_PARAM_MP3TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels
  Nan::Set(ret, Nan::New("nBitRate").ToLocalChecked(), Nan::New(format.nBitRate)); // Bit rate of the input data. Use 0 for variable rate or unknown bit rates
  Nan::Set(ret, Nan::New("nSampleRate").ToLocalChecked(), Nan::New(format.nSampleRate)); // Sampling rate of the source data. Use 0 for variable or unknown sampling rate.
  Nan::Set(ret, Nan::New("nAudioBandWidth").ToLocalChecked(), Nan::New(format.nAudioBandWidth)); // Audio band width (in Hz) to which an encoder should limit the audio signal. Use 0 to let encoder decide
  Nan::Set(ret, Nan::New("eChannelMode").ToLocalChecked(), Nan::New(format.eChannelMode)); // Channel mode enumeration
  Nan::Set(ret, Nan::New("eFormat").ToLocalChecked(), Nan::New(format.eFormat)); // MP3 stream format
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_DDPTYPE(OMX_AUDIO_PARAM_DDPTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels
  Nan::Set(ret, Nan::New("nBitRate").ToLocalChecked(), Nan::New(format.nBitRate)); // Bit rate of the input data. Use 0 for variable rate or unknown bit rates
  Nan::Set(ret, Nan::New("nSampleRate").ToLocalChecked(), Nan::New(format.nSampleRate)); // Sampling rate of the source data. Use 0 for variable or unknown sampling rate.
  Nan::Set(ret, Nan::New("eBitStreamId").ToLocalChecked(), Nan::New(format.eBitStreamId));
  Nan::Set(ret, Nan::New("eBitStreamMode").ToLocalChecked(), Nan::New(format.eBitStreamMode));
  Nan::Set(ret, Nan::New("eDolbySurroundMode").ToLocalChecked(), Nan::New(format.eDolbySurroundMode));
  Nan::Set(ret, Nan::New("eChannelMapping").ToLocalChecked(), Nan::New(format.eChannelMapping)); // Slot i contains channel defined by eChannelMapping[i]
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_DTSTYPE(OMX_AUDIO_PARAM_DTSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels
  Nan::Set(ret, Nan::New("nBitRate").ToLocalChecked(), Nan::New(format.nBitRate)); // Bit rate of the input data. Use 0 for variable rate or unknown bit rates
  Nan::Set(ret, Nan::New("nSampleRate").ToLocalChecked(), Nan::New(format.nSampleRate)); // Sampling rate of the source data. Use 0 for variable or unknown sampling rate.
  Nan::Set(ret, Nan::New("nDtsType").ToLocalChecked(), Nan::New(format.nDtsType)); // DTS type 1, 2, or 3.
  Nan::Set(ret, Nan::New("nFormat").ToLocalChecked(), Nan::New(format.nFormat)); // DTS stream is either big/little endian and 16/14 bit packing
  Nan::Set(ret, Nan::New("nDtsFrameSizeBytes").ToLocalChecked(), Nan::New(format.nDtsFrameSizeBytes)); // DTS frame size in bytes
  Nan::Set(ret, Nan::New("eChannelMapping").ToLocalChecked(), Nan::New(format.eChannelMapping)); // Slot i contains channel defined by eChannelMapping[i]
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_AACPROFILETYPE(OMX_AUDIO_PARAM_AACPROFILETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels
  Nan::Set(ret, Nan::New("nSampleRate").ToLocalChecked(), Nan::New(format.nSampleRate)); // Sampling rate of the source data. Use 0 for variable or unknown sampling rate.
  Nan::Set(ret, Nan::New("nBitRate").ToLocalChecked(), Nan::New(format.nBitRate)); // Bit rate of the input data. Use 0 for variable rate or unknown bit rates
  Nan::Set(ret, Nan::New("nAudioBandWidth").ToLocalChecked(), Nan::New(format.nAudioBandWidth)); // Audio band width (in Hz) to which an encoder should limit the audio signal. Use 0 to let encoder decide
  Nan::Set(ret, Nan::New("nFrameLength").ToLocalChecked(), Nan::New(format.nFrameLength)); // Frame length (in audio samples per channel) of the codec. Can be 1024 or 960 (AAC-LC), 2048 (HE-AAC), 480 or 512 (AAC-LD). Use 0 to let encoder decide
  Nan::Set(ret, Nan::New("nAACtools").ToLocalChecked(), Nan::New(format.nAACtools)); // AAC tool usage
  Nan::Set(ret, Nan::New("nAACERtools").ToLocalChecked(), Nan::New(format.nAACERtools)); // MPEG-4 AAC error resilience tool usage
  Nan::Set(ret, Nan::New("eAACProfile").ToLocalChecked(), Nan::New(format.eAACProfile)); // AAC profile enumeration
  Nan::Set(ret, Nan::New("eAACStreamFormat").ToLocalChecked(), Nan::New(format.eAACStreamFormat)); // AAC stream format enumeration
  Nan::Set(ret, Nan::New("eChannelMode").ToLocalChecked(), Nan::New(format.eChannelMode)); // Channel mode enumeration
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_VORBISTYPE(OMX_AUDIO_PARAM_VORBISTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels
  Nan::Set(ret, Nan::New("nBitRate").ToLocalChecked(), Nan::New(format.nBitRate)); // Bit rate of the encoded data data. Use 0 for variable rate or unknown bit rates. Encoding is set to the bitrate closest to specified value (in bps)
  Nan::Set(ret, Nan::New("nMinBitRate").ToLocalChecked(), Nan::New(format.nMinBitRate)); // Sets minimum bitrate (in bps).
  Nan::Set(ret, Nan::New("nMaxBitRate").ToLocalChecked(), Nan::New(format.nMaxBitRate)); // Sets maximum bitrate (in bps).
  Nan::Set(ret, Nan::New("nSampleRate").ToLocalChecked(), Nan::New(format.nSampleRate)); // Sampling rate of the source data. Use 0 for variable or unknown sampling rate.
  Nan::Set(ret, Nan::New("nAudioBandWidth").ToLocalChecked(), Nan::New(format.nAudioBandWidth)); // Audio band width (in Hz) to which an encoder should limit the audio signal. Use 0 to let encoder decide
  Nan::Set(ret, Nan::New("nQuality").ToLocalChecked(), Nan::New(format.nQuality)); // Sets encoding quality to n, between -1 (low) and 10 (high). In the default mode of operation, teh quality level is 3. Normal quality range is 0 - 10.
  Nan::Set(ret, Nan::New("bManaged").ToLocalChecked(), Nan::New(!!format.bManaged)); // Set bitrate management mode. This turns off the normal VBR encoding, but allows hard or soft bitrate constraints to be enforced by the encoder. This mode can be slower, and may also be lower quality. It is primarily useful for streaming.
  Nan::Set(ret, Nan::New("bDownmix").ToLocalChecked(), Nan::New(!!format.bDownmix)); // Downmix input from stereo to mono (has no effect on non-stereo streams). Useful for lower-bitrate encoding.
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_WMATYPE(OMX_AUDIO_PARAM_WMATYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels
  Nan::Set(ret, Nan::New("nBitRate").ToLocalChecked(), Nan::New(format.nBitRate)); // Bit rate of the input data. Use 0 for variable rate or unknown bit rates
  Nan::Set(ret, Nan::New("eFormat").ToLocalChecked(), Nan::New(format.eFormat)); // Version of WMA stream / data
  Nan::Set(ret, Nan::New("eProfile").ToLocalChecked(), Nan::New(format.eProfile)); // Profile of WMA stream / data
  Nan::Set(ret, Nan::New("nSamplingRate").ToLocalChecked(), Nan::New(format.nSamplingRate)); // Sampling rate of the source data
  Nan::Set(ret, Nan::New("nBlockAlign").ToLocalChecked(), Nan::New(format.nBlockAlign)); // is the block alignment, or block size, in bytes of the audio codec
  Nan::Set(ret, Nan::New("nEncodeOptions").ToLocalChecked(), Nan::New(format.nEncodeOptions)); // WMA Type-specific data
  Nan::Set(ret, Nan::New("nSuperBlockAlign").ToLocalChecked(), Nan::New(format.nSuperBlockAlign)); // WMA Type-specific data
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_RATYPE(OMX_AUDIO_PARAM_RATYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels
  Nan::Set(ret, Nan::New("nSamplingRate").ToLocalChecked(), Nan::New(format.nSamplingRate)); // is the sampling rate of the source data
  Nan::Set(ret, Nan::New("nBitsPerFrame").ToLocalChecked(), Nan::New(format.nBitsPerFrame)); // is the value for bits per frame
  Nan::Set(ret, Nan::New("nSamplePerFrame").ToLocalChecked(), Nan::New(format.nSamplePerFrame)); // is the value for samples per frame
  Nan::Set(ret, Nan::New("nCouplingQuantBits").ToLocalChecked(), Nan::New(format.nCouplingQuantBits)); // is the number of coupling quantization bits in the stream
  Nan::Set(ret, Nan::New("nCouplingStartRegion").ToLocalChecked(), Nan::New(format.nCouplingStartRegion)); // is the coupling start region in the stream
  Nan::Set(ret, Nan::New("nNumRegions").ToLocalChecked(), Nan::New(format.nNumRegions)); // is the number of regions value
  Nan::Set(ret, Nan::New("eFormat").ToLocalChecked(), Nan::New(format.eFormat)); // is the RealAudio audio format
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_SBCTYPE(OMX_AUDIO_PARAM_SBCTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels
  Nan::Set(ret, Nan::New("nBitRate").ToLocalChecked(), Nan::New(format.nBitRate)); // Bit rate of the input data. Use 0 for variable rate or unknown bit rates
  Nan::Set(ret, Nan::New("nSampleRate").ToLocalChecked(), Nan::New(format.nSampleRate)); // Sampling rate of the source data. Use 0 for variable or unknown sampling rate.
  Nan::Set(ret, Nan::New("nBlocks").ToLocalChecked(), Nan::New(format.nBlocks)); // Number of blocks
  Nan::Set(ret, Nan::New("nSubbands").ToLocalChecked(), Nan::New(format.nSubbands)); // Number of subbands
  Nan::Set(ret, Nan::New("nBitPool").ToLocalChecked(), Nan::New(format.nBitPool)); // Bitpool value
  Nan::Set(ret, Nan::New("bEnableBitrate").ToLocalChecked(), Nan::New(!!format.bEnableBitrate)); // Use bitrate value instead of bitpool
  Nan::Set(ret, Nan::New("eChannelMode").ToLocalChecked(), Nan::New(format.eChannelMode)); // Channel mode enumeration
  Nan::Set(ret, Nan::New("eSBCAllocType").ToLocalChecked(), Nan::New(format.eSBCAllocType)); // SBC Allocation method type
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_ADPCMTYPE(OMX_AUDIO_PARAM_ADPCMTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("nBitsPerSample").ToLocalChecked(), Nan::New(format.nBitsPerSample)); // Number of bits in each sample
  Nan::Set(ret, Nan::New("nSampleRate").ToLocalChecked(), Nan::New(format.nSampleRate)); // Sampling rate of the source data. Use 0 for variable or unknown sampling rate.
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_G723TYPE(OMX_AUDIO_PARAM_G723TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("bDTX").ToLocalChecked(), Nan::New(!!format.bDTX)); // Enable Discontinuous Transmisssion
  Nan::Set(ret, Nan::New("eBitRate").ToLocalChecked(), Nan::New(format.eBitRate)); // todo: Should this be moved to a config?
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable High Pass Filter
  Nan::Set(ret, Nan::New("bPostFilter").ToLocalChecked(), Nan::New(!!format.bPostFilter)); // Enable Post Filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_G726TYPE(OMX_AUDIO_PARAM_G726TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("eG726Mode").ToLocalChecked(), Nan::New(format.eG726Mode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_G729TYPE(OMX_AUDIO_PARAM_G729TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("bDTX").ToLocalChecked(), Nan::New(!!format.bDTX)); // Enable Discontinuous Transmisssion
  Nan::Set(ret, Nan::New("eBitType").ToLocalChecked(), Nan::New(format.eBitType));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_AMRTYPE(OMX_AUDIO_PARAM_AMRTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels
  Nan::Set(ret, Nan::New("nBitRate").ToLocalChecked(), Nan::New(format.nBitRate)); // Bit rate read only field
  Nan::Set(ret, Nan::New("eAMRBandMode").ToLocalChecked(), Nan::New(format.eAMRBandMode)); // AMR Band Mode enumeration
  Nan::Set(ret, Nan::New("eAMRDTXMode").ToLocalChecked(), Nan::New(format.eAMRDTXMode)); // AMR DTX Mode enumeration
  Nan::Set(ret, Nan::New("eAMRFrameFormat").ToLocalChecked(), Nan::New(format.eAMRFrameFormat)); // AMR frame format enumeration
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_GSMFRTYPE(OMX_AUDIO_PARAM_GSMFRTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bDTX").ToLocalChecked(), Nan::New(!!format.bDTX)); // Enable Discontinuous Transmisssion
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable High Pass Filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_GSMHRTYPE(OMX_AUDIO_PARAM_GSMHRTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bDTX").ToLocalChecked(), Nan::New(!!format.bDTX)); // Enable Discontinuous Transmisssion
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable High Pass Filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_GSMEFRTYPE(OMX_AUDIO_PARAM_GSMEFRTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bDTX").ToLocalChecked(), Nan::New(!!format.bDTX)); // Enable Discontinuous Transmisssion
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable High Pass Filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_TDMAFRTYPE(OMX_AUDIO_PARAM_TDMAFRTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("bDTX").ToLocalChecked(), Nan::New(!!format.bDTX)); // Enable Discontinuous Transmisssion
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable High Pass Filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_TDMAEFRTYPE(OMX_AUDIO_PARAM_TDMAEFRTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("bDTX").ToLocalChecked(), Nan::New(!!format.bDTX)); // Enable Discontinuous Transmisssion
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable High Pass Filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_PDCFRTYPE(OMX_AUDIO_PARAM_PDCFRTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("bDTX").ToLocalChecked(), Nan::New(!!format.bDTX)); // Enable Discontinuous Transmisssion
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable High Pass Filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_PDCEFRTYPE(OMX_AUDIO_PARAM_PDCEFRTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("bDTX").ToLocalChecked(), Nan::New(!!format.bDTX)); // Enable Discontinuous Transmisssion
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable High Pass Filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_PDCHRTYPE(OMX_AUDIO_PARAM_PDCHRTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("bDTX").ToLocalChecked(), Nan::New(!!format.bDTX)); // Enable Discontinuous Transmisssion
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable High Pass Filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_QCELP8TYPE(OMX_AUDIO_PARAM_QCELP8TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("nBitRate").ToLocalChecked(), Nan::New(format.nBitRate)); // Bit rate of the input data. Use 0 for variable rate or unknown bit rates
  Nan::Set(ret, Nan::New("eCDMARate").ToLocalChecked(), Nan::New(format.eCDMARate)); // Frame rate
  Nan::Set(ret, Nan::New("nMinBitRate").ToLocalChecked(), Nan::New(format.nMinBitRate)); // minmal rate for the encoder = 1,2,3,4, default = 1
  Nan::Set(ret, Nan::New("nMaxBitRate").ToLocalChecked(), Nan::New(format.nMaxBitRate)); // maximal rate for the encoder = 1,2,3,4, default = 4
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_QCELP13TYPE(OMX_AUDIO_PARAM_QCELP13TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("eCDMARate").ToLocalChecked(), Nan::New(format.eCDMARate)); // Frame rate
  Nan::Set(ret, Nan::New("nMinBitRate").ToLocalChecked(), Nan::New(format.nMinBitRate)); // minmal rate for the encoder = 1,2,3,4, default = 1
  Nan::Set(ret, Nan::New("nMaxBitRate").ToLocalChecked(), Nan::New(format.nMaxBitRate)); // maximal rate for the encoder = 1,2,3,4, default = 4
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_EVRCTYPE(OMX_AUDIO_PARAM_EVRCTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("eCDMARate").ToLocalChecked(), Nan::New(format.eCDMARate)); // actual Frame rate
  Nan::Set(ret, Nan::New("bRATE_REDUCon").ToLocalChecked(), Nan::New(!!format.bRATE_REDUCon)); // RATE_REDUCtion is requested for this frame
  Nan::Set(ret, Nan::New("nMinBitRate").ToLocalChecked(), Nan::New(format.nMinBitRate)); // minmal rate for the encoder = 1,2,3,4, default = 1
  Nan::Set(ret, Nan::New("nMaxBitRate").ToLocalChecked(), Nan::New(format.nMaxBitRate)); // maximal rate for the encoder = 1,2,3,4, default = 4
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable encoder's High Pass Filter
  Nan::Set(ret, Nan::New("bNoiseSuppressor").ToLocalChecked(), Nan::New(!!format.bNoiseSuppressor)); // Enable encoder's noise suppressor pre-processing
  Nan::Set(ret, Nan::New("bPostFilter").ToLocalChecked(), Nan::New(!!format.bPostFilter)); // Enable decoder's post Filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_SMVTYPE(OMX_AUDIO_PARAM_SMVTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannels").ToLocalChecked(), Nan::New(format.nChannels)); // Number of channels in the data stream (not necessarily the same as the number of channels to be rendered.
  Nan::Set(ret, Nan::New("eCDMARate").ToLocalChecked(), Nan::New(format.eCDMARate)); // Frame rate
  Nan::Set(ret, Nan::New("bRATE_REDUCon").ToLocalChecked(), Nan::New(!!format.bRATE_REDUCon)); // RATE_REDUCtion is requested for this frame
  Nan::Set(ret, Nan::New("nMinBitRate").ToLocalChecked(), Nan::New(format.nMinBitRate)); // minmal rate for the encoder = 1,2,3,4, default = 1 ??
  Nan::Set(ret, Nan::New("nMaxBitRate").ToLocalChecked(), Nan::New(format.nMaxBitRate)); // maximal rate for the encoder = 1,2,3,4, default = 4 ??
  Nan::Set(ret, Nan::New("bHiPassFilter").ToLocalChecked(), Nan::New(!!format.bHiPassFilter)); // Enable encoder's High Pass Filter ??
  Nan::Set(ret, Nan::New("bNoiseSuppressor").ToLocalChecked(), Nan::New(!!format.bNoiseSuppressor)); // Enable encoder's noise suppressor pre-processing
  Nan::Set(ret, Nan::New("bPostFilter").ToLocalChecked(), Nan::New(!!format.bPostFilter)); // Enable decoder's post Filter ??
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_MIDITYPE(OMX_AUDIO_PARAM_MIDITYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nFileSize").ToLocalChecked(), Nan::New(format.nFileSize)); // size of the MIDI file in bytes, where the entire MIDI file passed in, otherwise if 0x0, the MIDI data is merged and streamed (instead of passed as an entire MIDI file)
  Nan::Set(ret, Nan::New("sMaxPolyphony").ToLocalChecked(), GET_BU32(format.sMaxPolyphony));
  Nan::Set(ret, Nan::New("bLoadDefaultSound").ToLocalChecked(), Nan::New(!!format.bLoadDefaultSound)); // Whether to load default sound bank at initialization
  Nan::Set(ret, Nan::New("eMidiFormat").ToLocalChecked(), Nan::New(format.eMidiFormat)); // Version of the MIDI file
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE(OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nDLSIndex").ToLocalChecked(), Nan::New(format.nDLSIndex)); // DLS file index to be loaded
  Nan::Set(ret, Nan::New("nDLSSize").ToLocalChecked(), Nan::New(format.nDLSSize)); // Size in bytes
  Nan::Set(ret, Nan::New("eMidiSoundBank").ToLocalChecked(), Nan::New(format.eMidiSoundBank)); // Midi sound bank type enumeration
  Nan::Set(ret, Nan::New("eMidiSoundBankLayout").ToLocalChecked(), Nan::New(format.eMidiSoundBankLayout)); // Midi sound bank layout enumeration
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE(OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nMidiEventSize").ToLocalChecked(), Nan::New(format.nMidiEventSize)); // Size of immediate MIDI events or MIP message in bytes
  Nan::Set(ret, Nan::New("nMidiEvents").ToLocalChecked(), Nan::New(format.nMidiEvents)); // MIDI event array to be rendered immediately, or an array for the MIP message buffer, where the size is indicated by nMidiEventSize
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE(OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannel").ToLocalChecked(), Nan::New(format.nChannel)); // Valid channel values range from 1 to 16
  Nan::Set(ret, Nan::New("nIDProgram").ToLocalChecked(), Nan::New(format.nIDProgram)); // Valid program ID range is 1 to 128
  Nan::Set(ret, Nan::New("nIDSoundBank").ToLocalChecked(), Nan::New(format.nIDSoundBank)); // Sound bank ID
  Nan::Set(ret, Nan::New("nUserSoundBankIndex").ToLocalChecked(), Nan::New(format.nUserSoundBankIndex)); // User soundbank index, easier to access soundbanks by index if multiple banks are present
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDICONTROLTYPE(OMX_AUDIO_CONFIG_MIDICONTROLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("sPitchTransposition").ToLocalChecked(), GET_BS32(format.sPitchTransposition));
  Nan::Set(ret, Nan::New("sPlayBackRate").ToLocalChecked(), GET_BU32(format.sPlayBackRate));
  Nan::Set(ret, Nan::New("sTempo").ToLocalChecked(), GET_BU32(format.sTempo));
  Nan::Set(ret, Nan::New("nMaxPolyphony").ToLocalChecked(), Nan::New(format.nMaxPolyphony)); // Specifies the maximum simultaneous polyphonic voices. A value of zero indicates that the default polyphony of the device is used
  Nan::Set(ret, Nan::New("nNumRepeat").ToLocalChecked(), Nan::New(format.nNumRepeat)); // Number of times to repeat playback
  Nan::Set(ret, Nan::New("nStopTime").ToLocalChecked(), Nan::New(format.nStopTime)); // Time in milliseconds to indicate when playback will stop automatically. Set to zero if not used
  Nan::Set(ret, Nan::New("nChannelMuteMask").ToLocalChecked(), Nan::New(format.nChannelMuteMask)); // 16 bit mask for channel mute status
  Nan::Set(ret, Nan::New("nChannelSoloMask").ToLocalChecked(), Nan::New(format.nChannelSoloMask)); // 16 bit mask for channel solo status
  Nan::Set(ret, Nan::New("nTrack0031MuteMask").ToLocalChecked(), Nan::New(format.nTrack0031MuteMask)); // 32 bit mask for track mute status. Note: This is for tracks 0-31
  Nan::Set(ret, Nan::New("nTrack3263MuteMask").ToLocalChecked(), Nan::New(format.nTrack3263MuteMask)); // 32 bit mask for track mute status. Note: This is for tracks 32-63
  Nan::Set(ret, Nan::New("nTrack0031SoloMask").ToLocalChecked(), Nan::New(format.nTrack0031SoloMask)); // 32 bit mask for track solo status. Note: This is for tracks 0-31
  Nan::Set(ret, Nan::New("nTrack3263SoloMask").ToLocalChecked(), Nan::New(format.nTrack3263SoloMask)); // 32 bit mask for track solo status. Note: This is for tracks 32-63
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDISTATUSTYPE(OMX_AUDIO_CONFIG_MIDISTATUSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nNumTracks").ToLocalChecked(), Nan::New(format.nNumTracks)); // Number of MIDI tracks in the file, read only field. NOTE: May not return a meaningful value until the entire file is parsed and buffered.
  Nan::Set(ret, Nan::New("nDuration").ToLocalChecked(), Nan::New(format.nDuration)); // The length of the currently open MIDI resource in milliseconds. NOTE: May not return a meaningful value until the entire file is parsed and buffered.
  Nan::Set(ret, Nan::New("nPosition").ToLocalChecked(), Nan::New(format.nPosition)); // Current Position of the MIDI resource being played in milliseconds
  Nan::Set(ret, Nan::New("bVibra").ToLocalChecked(), Nan::New(!!format.bVibra)); // Does Vibra track exist? NOTE: May not return a meaningful value until the entire file is parsed and buffered.
  Nan::Set(ret, Nan::New("nNumMetaEvents").ToLocalChecked(), Nan::New(format.nNumMetaEvents)); // Total number of MIDI Meta Events in the currently open MIDI resource. NOTE: May not return a meaningful value until the entire file is parsed and buffered.
  Nan::Set(ret, Nan::New("nNumActiveVoices").ToLocalChecked(), Nan::New(format.nNumActiveVoices)); // Number of active voices in the currently playing MIDI resource. NOTE: May not return a meaningful value until the entire file is parsed and buffered.
  Nan::Set(ret, Nan::New("eMIDIPlayBackState").ToLocalChecked(), Nan::New(format.eMIDIPlayBackState)); // MIDI playback state enumeration, read only field
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDIMETAEVENTTYPE(OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex)); // Index of Meta Event
  Nan::Set(ret, Nan::New("nMetaEventType").ToLocalChecked(), Nan::New(format.nMetaEventType)); // Meta Event Type, 7bits (i.e. 0 - 127)
  Nan::Set(ret, Nan::New("nMetaEventSize").ToLocalChecked(), Nan::New(format.nMetaEventSize)); // size of the Meta Event in bytes
  Nan::Set(ret, Nan::New("nTrack").ToLocalChecked(), Nan::New(format.nTrack)); // track number for the meta event
  Nan::Set(ret, Nan::New("nPosition").ToLocalChecked(), Nan::New(format.nPosition)); // Position of the meta-event in milliseconds
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE(OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex)); // Index of Meta Event
  Nan::Set(ret, Nan::New("nMetaEventSize").ToLocalChecked(), Nan::New(format.nMetaEventSize)); // size of the Meta Event in bytes
  Nan::Set(ret, Nan::New("nData").ToLocalChecked(), Nan::New(format.nData)); // array of one or more bytes of meta data as indicated by the nMetaEventSize field
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_VOLUMETYPE(OMX_AUDIO_CONFIG_VOLUMETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bLinear").ToLocalChecked(), Nan::New(!!format.bLinear)); // Is the volume to be set in linear (0.100) or logarithmic scale (mB)
  Nan::Set(ret, Nan::New("sVolume").ToLocalChecked(), GET_BS32(format.sVolume));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_CHANNELVOLUMETYPE(OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannel").ToLocalChecked(), Nan::New(format.nChannel)); // channel to select from 0 to N-1, using OMX_ALL to apply volume settings to all channels
  Nan::Set(ret, Nan::New("bLinear").ToLocalChecked(), Nan::New(!!format.bLinear)); // Is the volume to be set in linear (0.100) or logarithmic scale (mB)
  Nan::Set(ret, Nan::New("sVolume").ToLocalChecked(), GET_BS32(format.sVolume));
  Nan::Set(ret, Nan::New("bIsMIDI").ToLocalChecked(), Nan::New(!!format.bIsMIDI)); // TRUE if nChannel refers to a MIDI channel, FALSE otherwise
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_BALANCETYPE(OMX_AUDIO_CONFIG_BALANCETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nBalance").ToLocalChecked(), Nan::New(format.nBalance)); // balance setting for this port (-100 to 100, where -100 indicates all left, and no right
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_MUTETYPE(OMX_AUDIO_CONFIG_MUTETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bMute").ToLocalChecked(), Nan::New(!!format.bMute)); // Mute setting for this port
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_CHANNELMUTETYPE(OMX_AUDIO_CONFIG_CHANNELMUTETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nChannel").ToLocalChecked(), Nan::New(format.nChannel)); // channel to select from 0 to N-1, using OMX_ALL to apply mute settings to all channels
  Nan::Set(ret, Nan::New("bMute").ToLocalChecked(), Nan::New(!!format.bMute)); // Mute setting for this channel
  Nan::Set(ret, Nan::New("bIsMIDI").ToLocalChecked(), Nan::New(!!format.bIsMIDI)); // TRUE if nChannel refers to a MIDI channel, FALSE otherwise
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_LOUDNESSTYPE(OMX_AUDIO_CONFIG_LOUDNESSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bLoudness").ToLocalChecked(), Nan::New(!!format.bLoudness)); // Enable/disable for loudness
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_BASSTYPE(OMX_AUDIO_CONFIG_BASSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable)); // Enable/disable for bass control
  Nan::Set(ret, Nan::New("nBass").ToLocalChecked(), Nan::New(format.nBass)); // bass setting for the port, as a continuous value from -100 to 100 (0 means no change in bass level)
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_TREBLETYPE(OMX_AUDIO_CONFIG_TREBLETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable)); // Enable/disable for treble control
  Nan::Set(ret, Nan::New("nTreble").ToLocalChecked(), Nan::New(format.nTreble)); // treble setting for the port, as a continuous value from -100 to 100 (0 means no change in treble level)
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_EQUALIZERTYPE(OMX_AUDIO_CONFIG_EQUALIZERTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable)); // Enable/disable for equalizer
  Nan::Set(ret, Nan::New("sBandIndex").ToLocalChecked(), GET_BU32(format.sBandIndex));
  Nan::Set(ret, Nan::New("sCenterFreq").ToLocalChecked(), GET_BU32(format.sCenterFreq));
  Nan::Set(ret, Nan::New("sBandLevel").ToLocalChecked(), GET_BS32(format.sBandLevel));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_STEREOWIDENINGTYPE(OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable)); // Enable/disable for stereo widening control
  Nan::Set(ret, Nan::New("eWideningType").ToLocalChecked(), Nan::New(format.eWideningType)); // Stereo widening algorithm type
  Nan::Set(ret, Nan::New("nStereoWidening").ToLocalChecked(), Nan::New(format.nStereoWidening)); // stereo widening setting for the port, as a continuous value from 0 to 100
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_CHORUSTYPE(OMX_AUDIO_CONFIG_CHORUSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable)); // Enable/disable for chorus
  Nan::Set(ret, Nan::New("sDelay").ToLocalChecked(), GET_BU32(format.sDelay));
  Nan::Set(ret, Nan::New("sModulationRate").ToLocalChecked(), GET_BU32(format.sModulationRate));
  Nan::Set(ret, Nan::New("nModulationDepth").ToLocalChecked(), Nan::New(format.nModulationDepth)); // depth of modulation as a percentage of delay (i.e. 0 to 100)
  Nan::Set(ret, Nan::New("nFeedback").ToLocalChecked(), GET_BU32(format.nFeedback));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_REVERBERATIONTYPE(OMX_AUDIO_CONFIG_REVERBERATIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable)); // Enable/disable for reverberation control
  Nan::Set(ret, Nan::New("sRoomLevel").ToLocalChecked(), GET_BS32(format.sRoomLevel));
  Nan::Set(ret, Nan::New("sRoomHighFreqLevel").ToLocalChecked(), GET_BS32(format.sRoomHighFreqLevel));
  Nan::Set(ret, Nan::New("sReflectionsLevel").ToLocalChecked(), GET_BS32(format.sReflectionsLevel));
  Nan::Set(ret, Nan::New("sReflectionsDelay").ToLocalChecked(), GET_BU32(format.sReflectionsDelay));
  Nan::Set(ret, Nan::New("sReverbLevel").ToLocalChecked(), GET_BS32(format.sReverbLevel));
  Nan::Set(ret, Nan::New("sReverbDelay").ToLocalChecked(), GET_BU32(format.sReverbDelay));
  Nan::Set(ret, Nan::New("sDecayTime").ToLocalChecked(), GET_BU32(format.sDecayTime));
  Nan::Set(ret, Nan::New("nDecayHighFreqRatio").ToLocalChecked(), GET_BU32(format.nDecayHighFreqRatio));
  Nan::Set(ret, Nan::New("nDensity").ToLocalChecked(), Nan::New(format.nDensity)); // Modal density in the late reverberation decay, in percent (i.e. 0 - 100)
  Nan::Set(ret, Nan::New("nDiffusion").ToLocalChecked(), Nan::New(format.nDiffusion)); // Echo density in the late reverberation decay, in percent (i.e. 0 - 100)
  Nan::Set(ret, Nan::New("sReferenceHighFreq").ToLocalChecked(), GET_BU32(format.sReferenceHighFreq));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_ECHOCANCELATIONTYPE(OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eEchoCancelation").ToLocalChecked(), Nan::New(format.eEchoCancelation)); // Echo cancelation settings
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_AUDIO_CONFIG_NOISEREDUCTIONTYPE(OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bNoiseReduction").ToLocalChecked(), Nan::New(!!format.bNoiseReduction)); // Enable/disable for noise reduction
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_BUFFERFRAGMENTTYPE(OMX_BUFFERFRAGMENTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nLen").ToLocalChecked(), Nan::New(format.nLen)); // number of bytes in the buffer
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_IJGSCALINGTYPE(OMX_PARAM_IJGSCALINGTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnabled").ToLocalChecked(), Nan::New(!!format.bEnabled));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_DISPLAYRECTTYPE(OMX_DISPLAYRECTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("x_offset").ToLocalChecked(), Nan::New(format.x_offset));
  Nan::Set(ret, Nan::New("y_offset").ToLocalChecked(), Nan::New(format.y_offset));
  Nan::Set(ret, Nan::New("width").ToLocalChecked(), Nan::New(format.width));
  Nan::Set(ret, Nan::New("height").ToLocalChecked(), Nan::New(format.height));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_DISPLAYREGIONTYPE(OMX_CONFIG_DISPLAYREGIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("set").ToLocalChecked(), Nan::New(format.set));
  Nan::Set(ret, Nan::New("num").ToLocalChecked(), Nan::New(format.num));
  Nan::Set(ret, Nan::New("fullscreen").ToLocalChecked(), Nan::New(!!format.fullscreen));
  Nan::Set(ret, Nan::New("transform").ToLocalChecked(), Nan::New(format.transform));
  Nan::Set(ret, Nan::New("dest_rect").ToLocalChecked(), GET_DISPLAYRECTTYPE(format.dest_rect));
  Nan::Set(ret, Nan::New("src_rect").ToLocalChecked(), GET_DISPLAYRECTTYPE(format.src_rect));
  Nan::Set(ret, Nan::New("noaspect").ToLocalChecked(), Nan::New(!!format.noaspect));
  Nan::Set(ret, Nan::New("mode").ToLocalChecked(), Nan::New(format.mode));
  Nan::Set(ret, Nan::New("pixel_x").ToLocalChecked(), Nan::New(format.pixel_x));
  Nan::Set(ret, Nan::New("pixel_y").ToLocalChecked(), Nan::New(format.pixel_y));
  Nan::Set(ret, Nan::New("layer").ToLocalChecked(), Nan::New(format.layer));
  Nan::Set(ret, Nan::New("copyprotect_required").ToLocalChecked(), Nan::New(!!format.copyprotect_required));
  Nan::Set(ret, Nan::New("alpha").ToLocalChecked(), Nan::New(format.alpha));
  Nan::Set(ret, Nan::New("wfc_context_width").ToLocalChecked(), Nan::New(format.wfc_context_width));
  Nan::Set(ret, Nan::New("wfc_context_height").ToLocalChecked(), Nan::New(format.wfc_context_height));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_SOURCETYPE(OMX_PARAM_SOURCETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eType").ToLocalChecked(), Nan::New(format.eType));
  Nan::Set(ret, Nan::New("nParam").ToLocalChecked(), Nan::New(format.nParam));
  Nan::Set(ret, Nan::New("nFrameCount").ToLocalChecked(), Nan::New(format.nFrameCount));
  Nan::Set(ret, Nan::New("xFrameRate").ToLocalChecked(), Nan::New(format.xFrameRate));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_RESIZETYPE(OMX_PARAM_RESIZETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode));
  Nan::Set(ret, Nan::New("nMaxWidth").ToLocalChecked(), Nan::New(format.nMaxWidth));
  Nan::Set(ret, Nan::New("nMaxHeight").ToLocalChecked(), Nan::New(format.nMaxHeight));
  Nan::Set(ret, Nan::New("nMaxBytes").ToLocalChecked(), Nan::New(format.nMaxBytes));
  Nan::Set(ret, Nan::New("bPreserveAspectRatio").ToLocalChecked(), Nan::New(!!format.bPreserveAspectRatio));
  Nan::Set(ret, Nan::New("bAllowUpscaling").ToLocalChecked(), Nan::New(!!format.bAllowUpscaling));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_TESTINTERFACETYPE(OMX_PARAM_TESTINTERFACETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bTest").ToLocalChecked(), Nan::New(!!format.bTest));
  Nan::Set(ret, Nan::New("bSetExtra").ToLocalChecked(), Nan::New(!!format.bSetExtra));
  Nan::Set(ret, Nan::New("nExtra").ToLocalChecked(), Nan::New(format.nExtra));
  Nan::Set(ret, Nan::New("bSetError").ToLocalChecked(), Nan::New(!!format.bSetError));
  Nan::Set(ret, Nan::New("stateError").ToLocalChecked(), Nan::New(!!format.stateError));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_VISUALISATIONTYPE(OMX_CONFIG_VISUALISATIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("name").ToLocalChecked(), Nan::New(format.name));
  Nan::Set(ret, Nan::New("property").ToLocalChecked(), Nan::New(format.property));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMAUDIODESTINATIONTYPE(OMX_CONFIG_BRCMAUDIODESTINATIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("sName").ToLocalChecked(), Nan::New(format.sName));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMAUDIOSOURCETYPE(OMX_CONFIG_BRCMAUDIOSOURCETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("sName").ToLocalChecked(), Nan::New(format.sName));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS(OMX_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("coeff").ToLocalChecked(), Nan::New(format.coeff));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS8x8(OMX_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS8x8 &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("coeff").ToLocalChecked(), Nan::New(format.coeff));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMAUDIOMAXSAMPLE(OMX_CONFIG_BRCMAUDIOMAXSAMPLE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nMaxSample").ToLocalChecked(), Nan::New(format.nMaxSample));
  Nan::Set(ret, Nan::New("nTimeStamp").ToLocalChecked(), GET_TICKS(format.nTimeStamp));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_PLAYMODETYPE(OMX_CONFIG_PLAYMODETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_DELIVERYFORMATTYPE(OMX_PARAM_DELIVERYFORMATTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eFormat").ToLocalChecked(), Nan::New(format.eFormat));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CODECCONFIGTYPE(OMX_PARAM_CODECCONFIGTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bCodecConfigIsComplete").ToLocalChecked(), Nan::New(format.bCodecConfigIsComplete));
  Nan::Set(ret, Nan::New("nData").ToLocalChecked(), Nan::New(format.nData));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_STILLSFUNCTIONTYPE(OMX_PARAM_STILLSFUNCTIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bBuffer").ToLocalChecked(), Nan::New(!!format.bBuffer));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BUFFERADDRESSTYPE(OMX_PARAM_BUFFERADDRESSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nAllocLen").ToLocalChecked(), Nan::New(format.nAllocLen));
  Nan::Set(ret, Nan::New("handle").ToLocalChecked(), Nan::New(format.handle));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_TUNNELSETUPTYPE(OMX_PARAM_TUNNELSETUPTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("sSetup").ToLocalChecked(), GET_TUNNELSETUPTYPE(format.sSetup));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMPORTEGLTYPE(OMX_PARAM_BRCMPORTEGLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bPortIsEGL").ToLocalChecked(), Nan::New(!!format.bPortIsEGL));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_IMAGEFILTERPARAMSTYPE(OMX_CONFIG_IMAGEFILTERPARAMSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eImageFilter").ToLocalChecked(), Nan::New(format.eImageFilter));
  Nan::Set(ret, Nan::New("nNumParams").ToLocalChecked(), Nan::New(format.nNumParams));
  Nan::Set(ret, Nan::New("nParams").ToLocalChecked(), Nan::New(format.nParams));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_TRANSITIONCONTROLTYPE(OMX_CONFIG_TRANSITIONCONTROLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nPosStart").ToLocalChecked(), Nan::New(format.nPosStart));
  Nan::Set(ret, Nan::New("nPosEnd").ToLocalChecked(), Nan::New(format.nPosEnd));
  Nan::Set(ret, Nan::New("nPosIncrement").ToLocalChecked(), Nan::New(format.nPosIncrement));
  Nan::Set(ret, Nan::New("nFrameIncrement").ToLocalChecked(), GET_TICKS(format.nFrameIncrement));
  Nan::Set(ret, Nan::New("bSwapInputs").ToLocalChecked(), Nan::New(!!format.bSwapInputs));
  Nan::Set(ret, Nan::New("name").ToLocalChecked(), Nan::New(format.name));
  Nan::Set(ret, Nan::New("property").ToLocalChecked(), Nan::New(format.property));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_AUDIOMONOTRACKCONTROLTYPE(OMX_CONFIG_AUDIOMONOTRACKCONTROLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAMERAIMAGEPOOLTYPE(OMX_PARAM_CAMERAIMAGEPOOLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nNumHiResVideoFrames").ToLocalChecked(), Nan::New(format.nNumHiResVideoFrames));
  Nan::Set(ret, Nan::New("nHiResVideoWidth").ToLocalChecked(), Nan::New(format.nHiResVideoWidth));
  Nan::Set(ret, Nan::New("nHiResVideoHeight").ToLocalChecked(), Nan::New(format.nHiResVideoHeight));
  Nan::Set(ret, Nan::New("eHiResVideoType").ToLocalChecked(), Nan::New(format.eHiResVideoType));
  Nan::Set(ret, Nan::New("nNumHiResStillsFrames").ToLocalChecked(), Nan::New(format.nNumHiResStillsFrames));
  Nan::Set(ret, Nan::New("nHiResStillsWidth").ToLocalChecked(), Nan::New(format.nHiResStillsWidth));
  Nan::Set(ret, Nan::New("nHiResStillsHeight").ToLocalChecked(), Nan::New(format.nHiResStillsHeight));
  Nan::Set(ret, Nan::New("eHiResStillsType").ToLocalChecked(), Nan::New(format.eHiResStillsType));
  Nan::Set(ret, Nan::New("nNumLoResFrames").ToLocalChecked(), Nan::New(format.nNumLoResFrames));
  Nan::Set(ret, Nan::New("nLoResWidth").ToLocalChecked(), Nan::New(format.nLoResWidth));
  Nan::Set(ret, Nan::New("nLoResHeight").ToLocalChecked(), Nan::New(format.nLoResHeight));
  Nan::Set(ret, Nan::New("eLoResType").ToLocalChecked(), Nan::New(format.eLoResType));
  Nan::Set(ret, Nan::New("nNumSnapshotFrames").ToLocalChecked(), Nan::New(format.nNumSnapshotFrames));
  Nan::Set(ret, Nan::New("eSnapshotType").ToLocalChecked(), Nan::New(format.eSnapshotType));
  Nan::Set(ret, Nan::New("eInputPoolMode").ToLocalChecked(), Nan::New(format.eInputPoolMode));
  Nan::Set(ret, Nan::New("nNumInputVideoFrames").ToLocalChecked(), Nan::New(format.nNumInputVideoFrames));
  Nan::Set(ret, Nan::New("nInputVideoWidth").ToLocalChecked(), Nan::New(format.nInputVideoWidth));
  Nan::Set(ret, Nan::New("nInputVideoHeight").ToLocalChecked(), Nan::New(format.nInputVideoHeight));
  Nan::Set(ret, Nan::New("eInputVideoType").ToLocalChecked(), Nan::New(format.eInputVideoType));
  Nan::Set(ret, Nan::New("nNumInputStillsFrames").ToLocalChecked(), Nan::New(format.nNumInputStillsFrames));
  Nan::Set(ret, Nan::New("nInputStillsWidth").ToLocalChecked(), Nan::New(format.nInputStillsWidth));
  Nan::Set(ret, Nan::New("nInputStillsHeight").ToLocalChecked(), Nan::New(format.nInputStillsHeight));
  Nan::Set(ret, Nan::New("eInputStillsType").ToLocalChecked(), Nan::New(format.eInputStillsType));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_IMAGEPOOLSIZETYPE(OMX_PARAM_IMAGEPOOLSIZETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("width").ToLocalChecked(), Nan::New(format.width));
  Nan::Set(ret, Nan::New("height").ToLocalChecked(), Nan::New(format.height));
  Nan::Set(ret, Nan::New("num_pages").ToLocalChecked(), Nan::New(format.num_pages));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_IMAGEPOOLEXTERNALTYPE(OMX_PARAM_IMAGEPOOLEXTERNALTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_RUTILFIFOINFOTYPE(OMX_PARAM_RUTILFIFOINFOTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_ILFIFOCONFIG(OMX_PARAM_ILFIFOCONFIG &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nDataSize").ToLocalChecked(), Nan::New(format.nDataSize)); // The size of the FIFO's data area
  Nan::Set(ret, Nan::New("nHeaderCount").ToLocalChecked(), Nan::New(format.nHeaderCount)); // The number of headers allocated
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CAMERASENSORMODETYPE(OMX_CONFIG_CAMERASENSORMODETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nModeIndex").ToLocalChecked(), Nan::New(format.nModeIndex));
  Nan::Set(ret, Nan::New("nNumModes").ToLocalChecked(), Nan::New(format.nNumModes));
  Nan::Set(ret, Nan::New("nWidth").ToLocalChecked(), Nan::New(format.nWidth));
  Nan::Set(ret, Nan::New("nHeight").ToLocalChecked(), Nan::New(format.nHeight));
  Nan::Set(ret, Nan::New("nPaddingRight").ToLocalChecked(), Nan::New(format.nPaddingRight));
  Nan::Set(ret, Nan::New("nPaddingDown").ToLocalChecked(), Nan::New(format.nPaddingDown));
  Nan::Set(ret, Nan::New("eColorFormat").ToLocalChecked(), Nan::New(format.eColorFormat));
  Nan::Set(ret, Nan::New("nFrameRateMax").ToLocalChecked(), Nan::New(format.nFrameRateMax));
  Nan::Set(ret, Nan::New("nFrameRateMin").ToLocalChecked(), Nan::New(format.nFrameRateMin));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMPORTBUFFERSTATSTYPE(OMX_CONFIG_BRCMPORTBUFFERSTATSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nCount").ToLocalChecked(), Nan::New(format.nCount));
  Nan::Set(ret, Nan::New("sData").ToLocalChecked(), Nan::New(format.sData));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMPORTSTATSTYPE(OMX_CONFIG_BRCMPORTSTATSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nImageCount").ToLocalChecked(), Nan::New(format.nImageCount));
  Nan::Set(ret, Nan::New("nBufferCount").ToLocalChecked(), Nan::New(format.nBufferCount));
  Nan::Set(ret, Nan::New("nFrameCount").ToLocalChecked(), Nan::New(format.nFrameCount));
  Nan::Set(ret, Nan::New("nFrameSkips").ToLocalChecked(), Nan::New(format.nFrameSkips));
  Nan::Set(ret, Nan::New("nDiscards").ToLocalChecked(), Nan::New(format.nDiscards));
  Nan::Set(ret, Nan::New("nEOS").ToLocalChecked(), Nan::New(format.nEOS));
  Nan::Set(ret, Nan::New("nMaxFrameSize").ToLocalChecked(), Nan::New(format.nMaxFrameSize));
  Nan::Set(ret, Nan::New("nByteCount").ToLocalChecked(), GET_TICKS(format.nByteCount));
  Nan::Set(ret, Nan::New("nMaxTimeDelta").ToLocalChecked(), GET_TICKS(format.nMaxTimeDelta));
  Nan::Set(ret, Nan::New("nCorruptMBs").ToLocalChecked(), Nan::New(format.nCorruptMBs)); // Number of corrupt macroblocks in the stream
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMCAMERASTATSTYPE(OMX_CONFIG_BRCMCAMERASTATSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nOutFrameCount").ToLocalChecked(), Nan::New(format.nOutFrameCount));
  Nan::Set(ret, Nan::New("nDroppedFrameCount").ToLocalChecked(), Nan::New(format.nDroppedFrameCount));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMIOPERFSTATSTYPE(OMX_CONFIG_BRCMIOPERFSTATSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnabled").ToLocalChecked(), Nan::New(!!format.bEnabled)); // Enable/disable I/O performance statistics
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_SHARPNESSTYPE(OMX_CONFIG_SHARPNESSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nSharpness").ToLocalChecked(), Nan::New(format.nSharpness));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_FLICKERCANCELTYPE(OMX_CONFIG_FLICKERCANCELTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eFlickerCancel").ToLocalChecked(), Nan::New(format.eFlickerCancel));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_REDEYEREMOVALTYPE(OMX_CONFIG_REDEYEREMOVALTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_FACEDETECTIONCONTROLTYPE(OMX_CONFIG_FACEDETECTIONCONTROLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode));
  Nan::Set(ret, Nan::New("nFrames").ToLocalChecked(), Nan::New(format.nFrames)); // number of frames to apply this setting for, 0 for unlimited
  Nan::Set(ret, Nan::New("nMaxRegions").ToLocalChecked(), Nan::New(format.nMaxRegions)); // maximum number of regions to detect, 0 for unlimited
  Nan::Set(ret, Nan::New("nQuality").ToLocalChecked(), Nan::New(format.nQuality)); // hint for algorithmic complexity, range is 0-100. 0 for simplest algorithm, 100 for best quality
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_FACEDETECTIONREGIONTYPE(OMX_CONFIG_FACEDETECTIONREGIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex)); // first requested region number, allowing retrieval of many regions over several requests
  Nan::Set(ret, Nan::New("nDetectedRegions").ToLocalChecked(), Nan::New(format.nDetectedRegions)); // total number of detected regions
  Nan::Set(ret, Nan::New("nValidRegions").ToLocalChecked(), Nan::New(format.nValidRegions)); // number of valid regions in sRegion array When getting, the client sets this to the number of regions available. The component writes region data and updates this field with how many regions have been written to.
  Nan::Set(ret, Nan::New("nImageWidth").ToLocalChecked(), Nan::New(format.nImageWidth)); // Width of the image, hence reference for the face coordinates
  Nan::Set(ret, Nan::New("nImageHeight").ToLocalChecked(), Nan::New(format.nImageHeight)); // Height of the image, hence reference for the face coordinates
  Nan::Set(ret, Nan::New("sRegion").ToLocalChecked(), Nan::New(format.sRegion)); // variable length array of face regions
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_INTERLACETYPE(OMX_CONFIG_INTERLACETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode)); // The interlace type of the content
  Nan::Set(ret, Nan::New("bRepeatFirstField").ToLocalChecked(), Nan::New(!!format.bRepeatFirstField)); // Whether to repeat the first field
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAMERAISPTUNERTYPE(OMX_PARAM_CAMERAISPTUNERTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("tuner_name").ToLocalChecked(), Nan::New(format.tuner_name));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_IMAGEPTRTYPE(OMX_CONFIG_IMAGEPTRTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_AFASSISTTYPE(OMX_CONFIG_AFASSISTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_INPUTCROPTYPE(OMX_CONFIG_INPUTCROPTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xLeft").ToLocalChecked(), Nan::New(format.xLeft)); // Fraction of the width for the top left corner of the rectangle
  Nan::Set(ret, Nan::New("xTop").ToLocalChecked(), Nan::New(format.xTop)); // Fraction of the height for the top left corner of the rectangle
  Nan::Set(ret, Nan::New("xWidth").ToLocalChecked(), Nan::New(format.xWidth)); // Fraction of the image width desired
  Nan::Set(ret, Nan::New("xHeight").ToLocalChecked(), Nan::New(format.xHeight)); // Fraction of the image height desired
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CODECREQUIREMENTSTYPE(OMX_PARAM_CODECREQUIREMENTSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nCallbackID").ToLocalChecked(), Nan::New(format.nCallbackID));
  Nan::Set(ret, Nan::New("bTryHWCodec").ToLocalChecked(), Nan::New(!!format.bTryHWCodec));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMEGLIMAGEMEMHANDLETYPE(OMX_CONFIG_BRCMEGLIMAGEMEMHANDLETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_PRIVACYINDICATORTYPE(OMX_CONFIG_PRIVACYINDICATORTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("ePrivacyIndicatorMode").ToLocalChecked(), Nan::New(format.ePrivacyIndicatorMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAMERAFLASHTYPE(OMX_PARAM_CAMERAFLASHTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eFlashType").ToLocalChecked(), Nan::New(format.eFlashType));
  Nan::Set(ret, Nan::New("bRedEyeUsesTorchMode").ToLocalChecked(), Nan::New(!!format.bRedEyeUsesTorchMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CAMERAFLASHCONFIGTYPE(OMX_CONFIG_CAMERAFLASHCONFIGTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bUsePreFlash").ToLocalChecked(), Nan::New(!!format.bUsePreFlash));
  Nan::Set(ret, Nan::New("bUseFocusDistanceInfo").ToLocalChecked(), Nan::New(!!format.bUseFocusDistanceInfo));
  Nan::Set(ret, Nan::New("eFlashSync").ToLocalChecked(), Nan::New(format.eFlashSync));
  Nan::Set(ret, Nan::New("bIgnoreChargeState").ToLocalChecked(), Nan::New(!!format.bIgnoreChargeState));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMAUDIOTRACKGAPLESSPLAYBACKTYPE(OMX_CONFIG_BRCMAUDIOTRACKGAPLESSPLAYBACKTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nDelay").ToLocalChecked(), Nan::New(format.nDelay)); // number of samples delay added by the codec
  Nan::Set(ret, Nan::New("nPadding").ToLocalChecked(), Nan::New(format.nPadding)); // number of silent samples added to the end
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMAUDIOTRACKCHANGECONTROLTYPE(OMX_CONFIG_BRCMAUDIOTRACKCHANGECONTROLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nSrcPortIndex").ToLocalChecked(), Nan::New(format.nSrcPortIndex));
  Nan::Set(ret, Nan::New("nDstPortIndex").ToLocalChecked(), Nan::New(format.nDstPortIndex));
  Nan::Set(ret, Nan::New("nXFade").ToLocalChecked(), Nan::New(format.nXFade));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMPIXELVALUERANGETYPE(OMX_PARAM_BRCMPIXELVALUERANGETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("ePixelValueRange").ToLocalChecked(), Nan::New(format.ePixelValueRange));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAMERADISABLEALGORITHMTYPE(OMX_PARAM_CAMERADISABLEALGORITHMTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eAlgorithm").ToLocalChecked(), Nan::New(format.eAlgorithm));
  Nan::Set(ret, Nan::New("bDisabled").ToLocalChecked(), Nan::New(!!format.bDisabled));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMAUDIOEFFECTCONTROLTYPE(OMX_CONFIG_BRCMAUDIOEFFECTCONTROLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable));
  Nan::Set(ret, Nan::New("name").ToLocalChecked(), Nan::New(format.name));
  Nan::Set(ret, Nan::New("property").ToLocalChecked(), Nan::New(format.property));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMMINIMUMPROCESSINGLATENCY(OMX_CONFIG_BRCMMINIMUMPROCESSINGLATENCY &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nOffset").ToLocalChecked(), GET_TICKS(format.nOffset));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMVIDEOAVCSEIENABLETYPE(OMX_PARAM_BRCMVIDEOAVCSEIENABLETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMALLOWMEMCHANGETYPE(OMX_PARAM_BRCMALLOWMEMCHANGETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CAMERAUSECASETYPE(OMX_CONFIG_CAMERAUSECASETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eUseCase").ToLocalChecked(), Nan::New(format.eUseCase));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMDISABLEPROPRIETARYTUNNELSTYPE(OMX_PARAM_BRCMDISABLEPROPRIETARYTUNNELSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bUseBuffers").ToLocalChecked(), Nan::New(!!format.bUseBuffers));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMRETAINMEMORYTYPE(OMX_PARAM_BRCMRETAINMEMORYTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMOUTPUTBUFFERSIZETYPE(OMX_PARAM_BRCMOUTPUTBUFFERSIZETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nBufferSize").ToLocalChecked(), Nan::New(format.nBufferSize));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CAMERAINFOTYPE(OMX_CONFIG_CAMERAINFOTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("cameraname").ToLocalChecked(), Nan::New(format.cameraname));
  Nan::Set(ret, Nan::New("lensname").ToLocalChecked(), Nan::New(format.lensname));
  Nan::Set(ret, Nan::New("nModelId").ToLocalChecked(), Nan::New(format.nModelId));
  Nan::Set(ret, Nan::New("nManufacturerId").ToLocalChecked(), Nan::New(format.nManufacturerId));
  Nan::Set(ret, Nan::New("nRevNum").ToLocalChecked(), Nan::New(format.nRevNum));
  Nan::Set(ret, Nan::New("sSerialNumber").ToLocalChecked(), Nan::New(format.sSerialNumber));
  Nan::Set(ret, Nan::New("sEpromVersion").ToLocalChecked(), Nan::New(format.sEpromVersion));
  Nan::Set(ret, Nan::New("xFNumber").ToLocalChecked(), Nan::New(format.xFNumber));
  Nan::Set(ret, Nan::New("xFocalLength").ToLocalChecked(), Nan::New(format.xFocalLength));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CAMERAFEATURESTYPE(OMX_CONFIG_CAMERAFEATURESTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eHasMechanicalShutter").ToLocalChecked(), Nan::New(format.eHasMechanicalShutter));
  Nan::Set(ret, Nan::New("bHasLens").ToLocalChecked(), Nan::New(!!format.bHasLens));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_REQUESTCALLBACKTYPE(OMX_CONFIG_REQUESTCALLBACKTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex));
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_FOCUSREGIONXY(OMX_FOCUSREGIONXY &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xLeft").ToLocalChecked(), Nan::New(format.xLeft));
  Nan::Set(ret, Nan::New("xTop").ToLocalChecked(), Nan::New(format.xTop));
  Nan::Set(ret, Nan::New("xWidth").ToLocalChecked(), Nan::New(format.xWidth));
  Nan::Set(ret, Nan::New("xHeight").ToLocalChecked(), Nan::New(format.xHeight));
  Nan::Set(ret, Nan::New("nWeight").ToLocalChecked(), Nan::New(format.nWeight));
  Nan::Set(ret, Nan::New("nMask").ToLocalChecked(), Nan::New(format.nMask));
  Nan::Set(ret, Nan::New("eType").ToLocalChecked(), Nan::New(format.eType));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_FOCUSREGIONXYTYPE(OMX_CONFIG_FOCUSREGIONXYTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex));
  Nan::Set(ret, Nan::New("nTotalRegions").ToLocalChecked(), Nan::New(format.nTotalRegions));
  Nan::Set(ret, Nan::New("nValidRegions").ToLocalChecked(), Nan::New(format.nValidRegions));
  Nan::Set(ret, Nan::New("bLockToFaces").ToLocalChecked(), Nan::New(!!format.bLockToFaces));
  Nan::Set(ret, Nan::New("xFaceTolerance").ToLocalChecked(), Nan::New(format.xFaceTolerance));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_U8TYPE(OMX_CONFIG_U8TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nU8").ToLocalChecked(), Nan::New(format.nU8)); // U8 value
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CAMERASETTINGSTYPE(OMX_CONFIG_CAMERASETTINGSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nExposure").ToLocalChecked(), Nan::New(format.nExposure));
  Nan::Set(ret, Nan::New("nAnalogGain").ToLocalChecked(), Nan::New(format.nAnalogGain));
  Nan::Set(ret, Nan::New("nDigitalGain").ToLocalChecked(), Nan::New(format.nDigitalGain));
  Nan::Set(ret, Nan::New("nLux").ToLocalChecked(), Nan::New(format.nLux));
  Nan::Set(ret, Nan::New("nRedGain").ToLocalChecked(), Nan::New(format.nRedGain));
  Nan::Set(ret, Nan::New("nBlueGain").ToLocalChecked(), Nan::New(format.nBlueGain));
  Nan::Set(ret, Nan::New("nFocusPosition").ToLocalChecked(), Nan::New(format.nFocusPosition));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_YUVCOLOUR(OMX_YUVCOLOUR &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nY").ToLocalChecked(), Nan::New(format.nY));
  Nan::Set(ret, Nan::New("nU").ToLocalChecked(), Nan::New(format.nU));
  Nan::Set(ret, Nan::New("nV").ToLocalChecked(), Nan::New(format.nV));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_DRAWBOXLINEPARAMS(OMX_CONFIG_DRAWBOXLINEPARAMS &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xCornerSize").ToLocalChecked(), Nan::New(format.xCornerSize)); // Size of the corners as a fraction of the complete side
  Nan::Set(ret, Nan::New("nPrimaryFaceLineWidth").ToLocalChecked(), Nan::New(format.nPrimaryFaceLineWidth)); // Width of the box line for the primary face in pixels
  Nan::Set(ret, Nan::New("nOtherFaceLineWidth").ToLocalChecked(), Nan::New(format.nOtherFaceLineWidth)); // Width of the box line for other faces in pixels
  Nan::Set(ret, Nan::New("nFocusRegionLineWidth").ToLocalChecked(), Nan::New(format.nFocusRegionLineWidth)); // Width of the box line for focus regions in pixels
  Nan::Set(ret, Nan::New("sPrimaryFaceColour").ToLocalChecked(), GET_YUVCOLOUR(format.sPrimaryFaceColour));
  Nan::Set(ret, Nan::New("sPrimaryFaceSmileColour").ToLocalChecked(), GET_YUVCOLOUR(format.sPrimaryFaceSmileColour));
  Nan::Set(ret, Nan::New("sPrimaryFaceBlinkColour").ToLocalChecked(), GET_YUVCOLOUR(format.sPrimaryFaceBlinkColour));
  Nan::Set(ret, Nan::New("sOtherFaceColour").ToLocalChecked(), GET_YUVCOLOUR(format.sOtherFaceColour));
  Nan::Set(ret, Nan::New("sOtherFaceSmileColour").ToLocalChecked(), GET_YUVCOLOUR(format.sOtherFaceSmileColour));
  Nan::Set(ret, Nan::New("sOtherFaceBlinkColour").ToLocalChecked(), GET_YUVCOLOUR(format.sOtherFaceBlinkColour));
  Nan::Set(ret, Nan::New("bShowFocusRegionsWhenIdle").ToLocalChecked(), Nan::New(!!format.bShowFocusRegionsWhenIdle)); // Are focus regions displayed when just in viewfinder/AF idle
  Nan::Set(ret, Nan::New("sFocusRegionColour").ToLocalChecked(), GET_YUVCOLOUR(format.sFocusRegionColour));
  Nan::Set(ret, Nan::New("bShowAfState").ToLocalChecked(), Nan::New(!!format.bShowAfState)); // Change to the colours specified below if AF cycle has run
  Nan::Set(ret, Nan::New("bShowOnlyPrimaryAfState").ToLocalChecked(), Nan::New(!!format.bShowOnlyPrimaryAfState)); // Only show the primary face when displaying the AF status
  Nan::Set(ret, Nan::New("bCombineNonFaceRegions").ToLocalChecked(), Nan::New(!!format.bCombineNonFaceRegions)); // Combine all regions not defined as faces into one single box covering them all
  Nan::Set(ret, Nan::New("sAfLockPrimaryFaceColour").ToLocalChecked(), GET_YUVCOLOUR(format.sAfLockPrimaryFaceColour));
  Nan::Set(ret, Nan::New("sAfLockOtherFaceColour").ToLocalChecked(), GET_YUVCOLOUR(format.sAfLockOtherFaceColour));
  Nan::Set(ret, Nan::New("sAfLockFocusRegionColour").ToLocalChecked(), GET_YUVCOLOUR(format.sAfLockFocusRegionColour));
  Nan::Set(ret, Nan::New("sAfFailPrimaryFaceColour").ToLocalChecked(), GET_YUVCOLOUR(format.sAfFailPrimaryFaceColour));
  Nan::Set(ret, Nan::New("sAfFailOtherFaceColour").ToLocalChecked(), GET_YUVCOLOUR(format.sAfFailOtherFaceColour));
  Nan::Set(ret, Nan::New("sAfFailFocusRegionColour").ToLocalChecked(), GET_YUVCOLOUR(format.sAfFailFocusRegionColour));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAMERARMITYPE(OMX_PARAM_CAMERARMITYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnabled").ToLocalChecked(), Nan::New(!!format.bEnabled));
  Nan::Set(ret, Nan::New("sRmiName").ToLocalChecked(), Nan::New(format.sRmiName));
  Nan::Set(ret, Nan::New("nInputBufferHeight").ToLocalChecked(), Nan::New(format.nInputBufferHeight));
  Nan::Set(ret, Nan::New("nRmiBufferSize").ToLocalChecked(), Nan::New(format.nRmiBufferSize));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMSYNCOUTPUTTYPE(OMX_CONFIG_BRCMSYNCOUTPUTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_DRMVIEWTYPE(OMX_CONFIG_DRMVIEWTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nCurrentView").ToLocalChecked(), Nan::New(format.nCurrentView)); // Current view count
  Nan::Set(ret, Nan::New("nMaxView").ToLocalChecked(), Nan::New(format.nMaxView)); // Max. no. of view allowed
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMU64TYPE(OMX_PARAM_BRCMU64TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nLowPart").ToLocalChecked(), Nan::New(format.nLowPart)); // low bits of the unsigned 64 bit value
  Nan::Set(ret, Nan::New("nHighPart").ToLocalChecked(), Nan::New(format.nHighPart)); // high bits of the unsigned 64 bit value
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMTHUMBNAILTYPE(OMX_PARAM_BRCMTHUMBNAILTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable)); // Enable generation of thumbnails during still capture
  Nan::Set(ret, Nan::New("bUsePreview").ToLocalChecked(), Nan::New(!!format.bUsePreview)); // Use the preview image (as is) as thumbnail
  Nan::Set(ret, Nan::New("nWidth").ToLocalChecked(), Nan::New(format.nWidth)); // Desired width of the thumbnail
  Nan::Set(ret, Nan::New("nHeight").ToLocalChecked(), Nan::New(format.nHeight)); // Desired height of the thumbnail
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMASPECTRATIOTYPE(OMX_PARAM_BRCMASPECTRATIOTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nWidth").ToLocalChecked(), Nan::New(format.nWidth));
  Nan::Set(ret, Nan::New("nHeight").ToLocalChecked(), Nan::New(format.nHeight));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMVIDEODECODEERRORCONCEALMENTTYPE(OMX_PARAM_BRCMVIDEODECODEERRORCONCEALMENTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bStartWithValidFrame").ToLocalChecked(), Nan::New(!!format.bStartWithValidFrame)); // Decoder will only start emitting frames from a non-corrupted frame
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_FLASHINFOTYPE(OMX_CONFIG_FLASHINFOTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("sFlashName").ToLocalChecked(), Nan::New(format.sFlashName));
  Nan::Set(ret, Nan::New("eFlashType").ToLocalChecked(), Nan::New(format.eFlashType));
  Nan::Set(ret, Nan::New("nDeviceId").ToLocalChecked(), Nan::New(format.nDeviceId));
  Nan::Set(ret, Nan::New("nDeviceVersion").ToLocalChecked(), Nan::New(format.nDeviceVersion));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_DYNAMICRANGEEXPANSIONTYPE(OMX_CONFIG_DYNAMICRANGEEXPANSIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMTHREADAFFINITYTYPE(OMX_PARAM_BRCMTHREADAFFINITYTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eAffinity").ToLocalChecked(), Nan::New(format.eAffinity)); // Thread CPU affinity
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_SCENEDETECTTYPE(OMX_CONFIG_SCENEDETECTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eScene").ToLocalChecked(), Nan::New(format.eScene)); // Scene type detected
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_NALSTREAMFORMATTYPE(OMX_NALSTREAMFORMATTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eNaluFormat").ToLocalChecked(), Nan::New(format.eNaluFormat));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_STATICBOX(OMX_STATICBOX &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xLeft").ToLocalChecked(), Nan::New(format.xLeft));
  Nan::Set(ret, Nan::New("xTop").ToLocalChecked(), Nan::New(format.xTop));
  Nan::Set(ret, Nan::New("xWidth").ToLocalChecked(), Nan::New(format.xWidth));
  Nan::Set(ret, Nan::New("xHeight").ToLocalChecked(), Nan::New(format.xHeight));
  Nan::Set(ret, Nan::New("eType").ToLocalChecked(), Nan::New(format.eType));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_STATICBOXTYPE(OMX_CONFIG_STATICBOXTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex));
  Nan::Set(ret, Nan::New("nTotalBoxes").ToLocalChecked(), Nan::New(format.nTotalBoxes));
  Nan::Set(ret, Nan::New("nValidBoxes").ToLocalChecked(), Nan::New(format.nValidBoxes));
  Nan::Set(ret, Nan::New("bDrawOtherBoxes").ToLocalChecked(), Nan::New(!!format.bDrawOtherBoxes));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_PORTBOOLEANTYPE(OMX_CONFIG_PORTBOOLEANTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnabled").ToLocalChecked(), Nan::New(!!format.bEnabled));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAMERACAPTUREMODETYPE(OMX_PARAM_CAMERACAPTUREMODETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMDRMENCRYPTIONTYPE(OMX_PARAM_BRCMDRMENCRYPTIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eEncryption").ToLocalChecked(), Nan::New(format.eEncryption));
  Nan::Set(ret, Nan::New("nConfigDataLen").ToLocalChecked(), Nan::New(format.nConfigDataLen));
  Nan::Set(ret, Nan::New("configData").ToLocalChecked(), Nan::New(format.configData));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BUFFERSTALLTYPE(OMX_CONFIG_BUFFERSTALLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bStalled").ToLocalChecked(), Nan::New(!!format.bStalled)); // Whether we are stalled
  Nan::Set(ret, Nan::New("nDelay").ToLocalChecked(), Nan::New(format.nDelay)); // Delay in real time (us) from last buffer to current time
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_LATENCYTARGETTYPE(OMX_CONFIG_LATENCYTARGETTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnabled").ToLocalChecked(), Nan::New(!!format.bEnabled)); // whether this mode is enabled
  Nan::Set(ret, Nan::New("nFilter").ToLocalChecked(), Nan::New(format.nFilter)); // number of latency samples to filter on, good value: 1
  Nan::Set(ret, Nan::New("nTarget").ToLocalChecked(), Nan::New(format.nTarget)); // target latency, us
  Nan::Set(ret, Nan::New("nShift").ToLocalChecked(), Nan::New(format.nShift)); // shift for storing latency values, good value: 7
  Nan::Set(ret, Nan::New("nSpeedFactor").ToLocalChecked(), Nan::New(format.nSpeedFactor)); // multiplier for speed changes, in 24.8 format, good value: 256-512
  Nan::Set(ret, Nan::New("nInterFactor").ToLocalChecked(), Nan::New(format.nInterFactor)); // divider for comparing latency versus gradiant, good value: 300
  Nan::Set(ret, Nan::New("nAdjCap").ToLocalChecked(), Nan::New(format.nAdjCap)); // limit for speed change before nSpeedFactor is applied, good value: 100
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMUSEPROPRIETARYCALLBACKTYPE(OMX_CONFIG_BRCMUSEPROPRIETARYCALLBACKTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_TIMESTAMPMODETYPE(OMX_PARAM_TIMESTAMPMODETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eTimestampMode").ToLocalChecked(), Nan::New(format.eTimestampMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_BRCMVEGLIMAGETYPE(OMX_BRCMVEGLIMAGETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nWidth").ToLocalChecked(), Nan::New(format.nWidth));
  Nan::Set(ret, Nan::New("nHeight").ToLocalChecked(), Nan::New(format.nHeight));
  Nan::Set(ret, Nan::New("nStride").ToLocalChecked(), Nan::New(format.nStride));
  Nan::Set(ret, Nan::New("nUmemHandle").ToLocalChecked(), Nan::New(format.nUmemHandle));
  Nan::Set(ret, Nan::New("nUmemOffset").ToLocalChecked(), Nan::New(format.nUmemOffset));
  Nan::Set(ret, Nan::New("nFlipped").ToLocalChecked(), Nan::New(format.nFlipped)); // Non-zero -> vertically flipped image
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMFOVTYPE(OMX_CONFIG_BRCMFOVTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xFieldOfViewHorizontal").ToLocalChecked(), Nan::New(format.xFieldOfViewHorizontal)); // Horizontal field of view in degrees. 16p16 value
  Nan::Set(ret, Nan::New("xFieldOfViewVertical").ToLocalChecked(), Nan::New(format.xFieldOfViewVertical)); // Vertical field of view in degrees. 16p16 value
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_CONFIG_LEVEL_EXTEND(OMX_VIDEO_CONFIG_LEVEL_EXTEND &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nCustomMaxMBPS").ToLocalChecked(), Nan::New(format.nCustomMaxMBPS)); // Specifies maximum macro-blocks per second
  Nan::Set(ret, Nan::New("nCustomMaxFS").ToLocalChecked(), Nan::New(format.nCustomMaxFS)); // Specifies maximum frame size (macro-blocks per frame)
  Nan::Set(ret, Nan::New("nCustomMaxBRandCPB").ToLocalChecked(), Nan::New(format.nCustomMaxBRandCPB)); // Specifies maximum bitrate in units of 1000 bits/s and Codec Picture Buffer (CPB derived from bitrate)
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_EEDE_ENABLE(OMX_VIDEO_EEDE_ENABLE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("enable").ToLocalChecked(), Nan::New(format.enable));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_EEDE_LOSSRATE(OMX_VIDEO_EEDE_LOSSRATE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("loss_rate").ToLocalChecked(), Nan::New(format.loss_rate)); // loss rate, 5 means 5%
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_COLORSPACETYPE(OMX_PARAM_COLORSPACETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eColorSpace").ToLocalChecked(), Nan::New(format.eColorSpace));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAPTURESTATETYPE(OMX_PARAM_CAPTURESTATETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eCaptureState").ToLocalChecked(), Nan::New(format.eCaptureState));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMCONFIGFILETYPE(OMX_PARAM_BRCMCONFIGFILETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("fileSize").ToLocalChecked(), Nan::New(format.fileSize)); // Size of complete file data
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMCONFIGFILECHUNKTYPE(OMX_PARAM_BRCMCONFIGFILECHUNKTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("size").ToLocalChecked(), Nan::New(format.size)); // Number of bytes being transferred in this chunk
  Nan::Set(ret, Nan::New("offset").ToLocalChecked(), Nan::New(format.offset)); // Offset of this chunk in the file
  Nan::Set(ret, Nan::New("data").ToLocalChecked(), Nan::New(format.data)); // Chunk data
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMFRAMERATERANGETYPE(OMX_PARAM_BRCMFRAMERATERANGETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xFramerateLow").ToLocalChecked(), Nan::New(format.xFramerateLow)); // Low end of framerate range. Q16 format
  Nan::Set(ret, Nan::New("xFramerateHigh").ToLocalChecked(), Nan::New(format.xFramerateHigh)); // High end of framerate range. Q16 format
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_S32TYPE(OMX_PARAM_S32TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nS32").ToLocalChecked(), Nan::New(format.nS32)); // S32 value
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMVIDEODRMPROTECTBUFFERTYPE(OMX_PARAM_BRCMVIDEODRMPROTECTBUFFERTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("size_wanted").ToLocalChecked(), Nan::New(format.size_wanted)); // Input. Zero size means internal video decoder buffer, mem_handle and phys_addr not returned in this case
  Nan::Set(ret, Nan::New("protect").ToLocalChecked(), Nan::New(format.protect)); // Input. 1 = protect, 0 = unprotect
  Nan::Set(ret, Nan::New("mem_handle").ToLocalChecked(), Nan::New(format.mem_handle)); // Output. Handle for protected buffer
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_ZEROSHUTTERLAGTYPE(OMX_CONFIG_ZEROSHUTTERLAGTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bZeroShutterMode").ToLocalChecked(), Nan::New(format.bZeroShutterMode)); // Select ZSL mode from the camera.
  Nan::Set(ret, Nan::New("bConcurrentCapture").ToLocalChecked(), Nan::New(format.bConcurrentCapture)); // Perform concurrent captures for full ZSL.
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BRCMVIDEODECODECONFIGVD3TYPE(OMX_PARAM_BRCMVIDEODECODECONFIGVD3TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("config").ToLocalChecked(), Nan::New(format.config)); // Configuration data (a VD3_CONFIGURE_T)
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CUSTOMAWBGAINSTYPE(OMX_CONFIG_CUSTOMAWBGAINSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xGainR").ToLocalChecked(), Nan::New(format.xGainR)); // Red gain - 16p16
  Nan::Set(ret, Nan::New("xGainB").ToLocalChecked(), Nan::New(format.xGainB)); // Blue gain - 16p16
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMRENDERSTATSTYPE(OMX_CONFIG_BRCMRENDERSTATSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nValid").ToLocalChecked(), Nan::New(!!format.nValid));
  Nan::Set(ret, Nan::New("nMatch").ToLocalChecked(), Nan::New(format.nMatch));
  Nan::Set(ret, Nan::New("nPeriod").ToLocalChecked(), Nan::New(format.nPeriod));
  Nan::Set(ret, Nan::New("nPhase").ToLocalChecked(), Nan::New(format.nPhase));
  Nan::Set(ret, Nan::New("nPixelClockNominal").ToLocalChecked(), Nan::New(format.nPixelClockNominal));
  Nan::Set(ret, Nan::New("nPixelClock").ToLocalChecked(), Nan::New(format.nPixelClock));
  Nan::Set(ret, Nan::New("nHvsStatus").ToLocalChecked(), Nan::New(format.nHvsStatus));
  Nan::Set(ret, Nan::New("dummy0").ToLocalChecked(), Nan::New(format.dummy0));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMANNOTATETYPE(OMX_CONFIG_BRCMANNOTATETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable));
  Nan::Set(ret, Nan::New("bShowShutter").ToLocalChecked(), Nan::New(!!format.bShowShutter));
  Nan::Set(ret, Nan::New("bShowAnalogGain").ToLocalChecked(), Nan::New(!!format.bShowAnalogGain));
  Nan::Set(ret, Nan::New("bShowLens").ToLocalChecked(), Nan::New(!!format.bShowLens));
  Nan::Set(ret, Nan::New("bShowCaf").ToLocalChecked(), Nan::New(!!format.bShowCaf));
  Nan::Set(ret, Nan::New("bShowMotion").ToLocalChecked(), Nan::New(!!format.bShowMotion));
  Nan::Set(ret, Nan::New("bShowFrameNum").ToLocalChecked(), Nan::New(!!format.bShowFrameNum));
  Nan::Set(ret, Nan::New("bEnableBackground").ToLocalChecked(), Nan::New(!!format.bEnableBackground));
  Nan::Set(ret, Nan::New("bCustomBackgroundColour").ToLocalChecked(), Nan::New(!!format.bCustomBackgroundColour));
  Nan::Set(ret, Nan::New("nBackgroundY").ToLocalChecked(), Nan::New(format.nBackgroundY));
  Nan::Set(ret, Nan::New("nBackgroundU").ToLocalChecked(), Nan::New(format.nBackgroundU));
  Nan::Set(ret, Nan::New("nBackgroundV").ToLocalChecked(), Nan::New(format.nBackgroundV));
  Nan::Set(ret, Nan::New("dummy1").ToLocalChecked(), Nan::New(format.dummy1));
  Nan::Set(ret, Nan::New("bCustomTextColour").ToLocalChecked(), Nan::New(!!format.bCustomTextColour));
  Nan::Set(ret, Nan::New("nTextY").ToLocalChecked(), Nan::New(format.nTextY));
  Nan::Set(ret, Nan::New("nTextU").ToLocalChecked(), Nan::New(format.nTextU));
  Nan::Set(ret, Nan::New("nTextV").ToLocalChecked(), Nan::New(format.nTextV));
  Nan::Set(ret, Nan::New("nTextSize").ToLocalChecked(), Nan::New(format.nTextSize)); // Text size: 6-150 pixels
  Nan::Set(ret, Nan::New("sText").ToLocalChecked(), Nan::New(format.sText));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRCMSTEREOSCOPICMODETYPE(OMX_CONFIG_BRCMSTEREOSCOPICMODETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode)); // Packing mode
  Nan::Set(ret, Nan::New("bDecimate").ToLocalChecked(), Nan::New(!!format.bDecimate)); // Half/half mode (pixel aspect ratio = 1:2 or 2:1 if set. 1:1 if not set)
  Nan::Set(ret, Nan::New("bSwapEyes").ToLocalChecked(), Nan::New(!!format.bSwapEyes)); // False = left eye first. True = right eye first.
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAMERAINTERFACETYPE(OMX_PARAM_CAMERAINTERFACETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode)); // Interface mode
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAMERACLOCKINGMODETYPE(OMX_PARAM_CAMERACLOCKINGMODETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMode").ToLocalChecked(), Nan::New(format.eMode)); // Clocking mode
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAMERARXCONFIG_TYPE(OMX_PARAM_CAMERARXCONFIG_TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eDecode").ToLocalChecked(), Nan::New(format.eDecode));
  Nan::Set(ret, Nan::New("eEncode").ToLocalChecked(), Nan::New(format.eEncode));
  Nan::Set(ret, Nan::New("eUnpack").ToLocalChecked(), Nan::New(format.eUnpack));
  Nan::Set(ret, Nan::New("ePack").ToLocalChecked(), Nan::New(format.ePack));
  Nan::Set(ret, Nan::New("nDataLanes").ToLocalChecked(), Nan::New(format.nDataLanes));
  Nan::Set(ret, Nan::New("nEncodeBlockLength").ToLocalChecked(), Nan::New(format.nEncodeBlockLength));
  Nan::Set(ret, Nan::New("nEmbeddedDataLines").ToLocalChecked(), Nan::New(format.nEmbeddedDataLines));
  Nan::Set(ret, Nan::New("nImageId").ToLocalChecked(), Nan::New(format.nImageId));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CAMERARXTIMING_TYPE(OMX_PARAM_CAMERARXTIMING_TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nTiming1").ToLocalChecked(), Nan::New(format.nTiming1));
  Nan::Set(ret, Nan::New("nTiming2").ToLocalChecked(), Nan::New(format.nTiming2));
  Nan::Set(ret, Nan::New("nTiming3").ToLocalChecked(), Nan::New(format.nTiming3));
  Nan::Set(ret, Nan::New("nTiming4").ToLocalChecked(), Nan::New(format.nTiming4));
  Nan::Set(ret, Nan::New("nTiming5").ToLocalChecked(), Nan::New(format.nTiming5));
  Nan::Set(ret, Nan::New("nTerm1").ToLocalChecked(), Nan::New(format.nTerm1));
  Nan::Set(ret, Nan::New("nTerm2").ToLocalChecked(), Nan::New(format.nTerm2));
  Nan::Set(ret, Nan::New("nCpiTiming1").ToLocalChecked(), Nan::New(format.nCpiTiming1));
  Nan::Set(ret, Nan::New("nCpiTiming2").ToLocalChecked(), Nan::New(format.nCpiTiming2));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BAYERORDERTYPE(OMX_PARAM_BAYERORDERTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eBayerOrder").ToLocalChecked(), Nan::New(format.eBayerOrder));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_PORTDEFINITIONTYPE(OMX_PARAM_PORTDEFINITIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eDir").ToLocalChecked(), Nan::New(format.eDir)); // Direction (input or output) of this port
  Nan::Set(ret, Nan::New("nBufferCountActual").ToLocalChecked(), Nan::New(format.nBufferCountActual)); // The actual number of buffers allocated on this port
  Nan::Set(ret, Nan::New("nBufferCountMin").ToLocalChecked(), Nan::New(format.nBufferCountMin)); // The minimum number of buffers this port requires
  Nan::Set(ret, Nan::New("nBufferSize").ToLocalChecked(), Nan::New(format.nBufferSize)); // Size, in bytes, for buffers to be used for this channel
  Nan::Set(ret, Nan::New("bEnabled").ToLocalChecked(), Nan::New(!!format.bEnabled)); // Ports default to enabled and are enabled/disabled by OMX_CommandPortEnable/OMX_CommandPortDisable. When disabled a port is unpopulated. A disabled port is not populated with buffers on a transition to IDLE.
  Nan::Set(ret, Nan::New("bPopulated").ToLocalChecked(), Nan::New(!!format.bPopulated)); // Port is populated with all of its buffers as indicated by nBufferCountActual. A disabled port is always unpopulated. An enabled port is populated on a transition to OMX_StateIdle and unpopulated on a transition to loaded.
  Nan::Set(ret, Nan::New("eDomain").ToLocalChecked(), Nan::New(format.eDomain)); // Domain of the port. Determines the contents of metadata below.
  if (format.eDomain == OMX_PortDomainAudio) {
    Nan::Set(ret, Nan::New("audio").ToLocalChecked(), GET_AUDIO_PORTDEFINITIONTYPE(format.format.audio));
  }
  if (format.eDomain == OMX_PortDomainVideo) {
    Nan::Set(ret, Nan::New("video").ToLocalChecked(), GET_VIDEO_PORTDEFINITIONTYPE(format.format.video));
  }
  if (format.eDomain == OMX_PortDomainImage) {
    Nan::Set(ret, Nan::New("image").ToLocalChecked(), GET_IMAGE_PORTDEFINITIONTYPE(format.format.image));
  }
  if (format.eDomain == OMX_PortDomainOther) {
    Nan::Set(ret, Nan::New("other").ToLocalChecked(), GET_OTHER_PORTDEFINITIONTYPE(format.format.other));
  }
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_U32TYPE(OMX_PARAM_U32TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nU32").ToLocalChecked(), Nan::New(format.nU32)); // U32 value
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_SUSPENSIONPOLICYTYPE(OMX_PARAM_SUSPENSIONPOLICYTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("ePolicy").ToLocalChecked(), Nan::New(format.ePolicy));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_SUSPENSIONTYPE(OMX_PARAM_SUSPENSIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eType").ToLocalChecked(), Nan::New(format.eType));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BOOLEANTYPE(OMX_CONFIG_BOOLEANTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnabled").ToLocalChecked(), Nan::New(!!format.bEnabled));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CONTENTURITYPE(OMX_PARAM_CONTENTURITYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("contentURI").ToLocalChecked(), Nan::New(format.contentURI)); // The URI name
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_CONTENTPIPETYPE(OMX_PARAM_CONTENTPIPETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("hPipe").ToLocalChecked(), Nan::New(format.hPipe)); // The pipe handle
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_RESOURCECONCEALMENTTYPE(OMX_RESOURCECONCEALMENTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bResourceConcealmentForbidden").ToLocalChecked(), Nan::New(!!format.bResourceConcealmentForbidden)); // disallow the use of resource concealment methods (like degrading algorithm quality to lower resource consumption or functional bypass) on a component as a resolution to resource conflicts.
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_METADATAITEMCOUNTTYPE(OMX_CONFIG_METADATAITEMCOUNTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eScopeMode").ToLocalChecked(), Nan::New(format.eScopeMode));
  Nan::Set(ret, Nan::New("nScopeSpecifier").ToLocalChecked(), Nan::New(format.nScopeSpecifier));
  Nan::Set(ret, Nan::New("nMetadataItemCount").ToLocalChecked(), Nan::New(format.nMetadataItemCount));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_METADATAITEMTYPE(OMX_CONFIG_METADATAITEMTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eScopeMode").ToLocalChecked(), Nan::New(format.eScopeMode));
  Nan::Set(ret, Nan::New("nScopeSpecifier").ToLocalChecked(), Nan::New(format.nScopeSpecifier));
  Nan::Set(ret, Nan::New("nMetadataItemIndex").ToLocalChecked(), Nan::New(format.nMetadataItemIndex));
  Nan::Set(ret, Nan::New("eSearchMode").ToLocalChecked(), Nan::New(format.eSearchMode));
  Nan::Set(ret, Nan::New("eKeyCharset").ToLocalChecked(), Nan::New(format.eKeyCharset));
  Nan::Set(ret, Nan::New("nKeySizeUsed").ToLocalChecked(), Nan::New(format.nKeySizeUsed));
  Nan::Set(ret, Nan::New("nKey").ToLocalChecked(), Nan::New(format.nKey));
  Nan::Set(ret, Nan::New("eValueCharset").ToLocalChecked(), Nan::New(format.eValueCharset));
  Nan::Set(ret, Nan::New("nValueMaxSize").ToLocalChecked(), Nan::New(format.nValueMaxSize));
  Nan::Set(ret, Nan::New("nValueSizeUsed").ToLocalChecked(), Nan::New(format.nValueSizeUsed));
  Nan::Set(ret, Nan::New("nValue").ToLocalChecked(), Nan::New(format.nValue));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CONTAINERNODECOUNTTYPE(OMX_CONFIG_CONTAINERNODECOUNTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bAllKeys").ToLocalChecked(), Nan::New(!!format.bAllKeys));
  Nan::Set(ret, Nan::New("nParentNodeID").ToLocalChecked(), Nan::New(format.nParentNodeID));
  Nan::Set(ret, Nan::New("nNumNodes").ToLocalChecked(), Nan::New(format.nNumNodes));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CONTAINERNODEIDTYPE(OMX_CONFIG_CONTAINERNODEIDTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bAllKeys").ToLocalChecked(), Nan::New(!!format.bAllKeys));
  Nan::Set(ret, Nan::New("nParentNodeID").ToLocalChecked(), Nan::New(format.nParentNodeID));
  Nan::Set(ret, Nan::New("nNodeIndex").ToLocalChecked(), Nan::New(format.nNodeIndex));
  Nan::Set(ret, Nan::New("nNodeID").ToLocalChecked(), Nan::New(format.nNodeID));
  Nan::Set(ret, Nan::New("bIsLeafType").ToLocalChecked(), Nan::New(!!format.bIsLeafType));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_METADATAFILTERTYPE(OMX_PARAM_METADATAFILTERTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bAllKeys").ToLocalChecked(), Nan::New(!!format.bAllKeys)); // if true then this structure refers to all keys and the three key fields below are ignored
  Nan::Set(ret, Nan::New("eKeyCharset").ToLocalChecked(), Nan::New(format.eKeyCharset));
  Nan::Set(ret, Nan::New("nKeySizeUsed").ToLocalChecked(), Nan::New(format.nKeySizeUsed));
  Nan::Set(ret, Nan::New("nKey ").ToLocalChecked(), Nan::New(format.nKey ));
  Nan::Set(ret, Nan::New("nLanguageCountrySizeUsed").ToLocalChecked(), Nan::New(format.nLanguageCountrySizeUsed));
  Nan::Set(ret, Nan::New("nLanguageCountry").ToLocalChecked(), Nan::New(format.nLanguageCountry));
  Nan::Set(ret, Nan::New("bEnabled").ToLocalChecked(), Nan::New(!!format.bEnabled)); // if true then key is part of filter (e.g. retained for query later). If false then key is not part of filter
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PRIORITYMGMTTYPE(OMX_PRIORITYMGMTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nGroupPriority").ToLocalChecked(), Nan::New(format.nGroupPriority)); // Priority of the component group
  Nan::Set(ret, Nan::New("nGroupID").ToLocalChecked(), Nan::New(format.nGroupID)); // ID of the component group
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_COMPONENTROLETYPE(OMX_PARAM_COMPONENTROLETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("cRole").ToLocalChecked(), Nan::New(format.cRole)); // name of standard component which defines component role
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_BUFFERHEADERTYPE(OMX_BUFFERHEADERTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("pBuffer").ToLocalChecked(), Nan::New(format.pBuffer)); // Pointer to actual block of memory that is acting as the buffer
  Nan::Set(ret, Nan::New("nAllocLen").ToLocalChecked(), Nan::New(format.nAllocLen)); // size of the buffer allocated, in bytes
  Nan::Set(ret, Nan::New("nFilledLen").ToLocalChecked(), Nan::New(format.nFilledLen)); // number of bytes currently in the buffer
  Nan::Set(ret, Nan::New("nOffset").ToLocalChecked(), Nan::New(format.nOffset)); // start offset of valid data in bytes from the start of the buffer
  Nan::Set(ret, Nan::New("hMarkTargetComponent").ToLocalChecked(), Nan::New(format.hMarkTargetComponent)); // The component that will generate a mark event upon processing this buffer.
  Nan::Set(ret, Nan::New("nTickCount").ToLocalChecked(), Nan::New(format.nTickCount)); // Optional entry that the component and application can update with a tick count when they access the component. This value should be in microseconds. Since this is a value relative to an arbitrary starting point, this value cannot be used to determine absolute time. This is an optional entry and not all components will update it.
  Nan::Set(ret, Nan::New("nTimeStamp").ToLocalChecked(), GET_TICKS(format.nTimeStamp));
  Nan::Set(ret, Nan::New("nFlags").ToLocalChecked(), Nan::New(format.nFlags)); // buffer specific flags
  Nan::Set(ret, Nan::New("nOutputPortIndex").ToLocalChecked(), Nan::New(format.nOutputPortIndex)); // The index of the output port (if any) using this buffer
  Nan::Set(ret, Nan::New("nInputPortIndex").ToLocalChecked(), Nan::New(format.nInputPortIndex)); // The index of the input port (if any) using this buffer
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_OTHER_EXTRADATATYPE(OMX_OTHER_EXTRADATATYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eType").ToLocalChecked(), Nan::New(format.eType)); // Extra Data type
  Nan::Set(ret, Nan::New("nDataSize").ToLocalChecked(), Nan::New(format.nDataSize)); // Size of the supporting data to follow
  Nan::Set(ret, Nan::New("data").ToLocalChecked(), Nan::New(format.data)); // Supporting data hint
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PORT_PARAM_TYPE(OMX_PORT_PARAM_TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nPorts").ToLocalChecked(), Nan::New(format.nPorts)); // The number of ports for this component
  Nan::Set(ret, Nan::New("nStartPortNumber").ToLocalChecked(), Nan::New(format.nStartPortNumber)); // first port number for this type of port
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_BUFFERSUPPLIERTYPE(OMX_PARAM_BUFFERSUPPLIERTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eBufferSupplier").ToLocalChecked(), Nan::New(format.eBufferSupplier)); // buffer supplier
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_TUNNELSETUPTYPE(OMX_TUNNELSETUPTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nTunnelFlags").ToLocalChecked(), Nan::New(format.nTunnelFlags)); // bit flags for tunneling
  Nan::Set(ret, Nan::New("eSupplier").ToLocalChecked(), Nan::New(format.eSupplier)); // supplier preference
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_PORTSUMMARYTYPE(OMX_PARAM_PORTSUMMARYTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nNumPorts").ToLocalChecked(), Nan::New(format.nNumPorts)); // Total number of ports
  Nan::Set(ret, Nan::New("reqSet").ToLocalChecked(), Nan::New(format.reqSet)); // Which set of ports is details below, portIndex[0] is port reqSet 32
  Nan::Set(ret, Nan::New("portDir").ToLocalChecked(), Nan::New(format.portDir)); // Bitfield, 1 if output port, 0 if input port, max 256 ports
  Nan::Set(ret, Nan::New("portIndex").ToLocalChecked(), Nan::New(format.portIndex)); // Port Indexes
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_MARKCOMPARISONTYPE(OMX_PARAM_MARKCOMPARISONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_TUNNELSTATUSTYPE(OMX_PARAM_TUNNELSTATUSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex)); // Query the nIndex'th port and fill in nPortIndex
  Nan::Set(ret, Nan::New("bUseIndex").ToLocalChecked(), Nan::New(!!format.bUseIndex)); // If OMX_TRUE read nIndex, otherwise read nPortIndex
  Nan::Set(ret, Nan::New("nTunneledPort").ToLocalChecked(), Nan::New(format.nTunneledPort)); // Port on tunnelled component
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_IMAGE_PORTDEFINITIONTYPE(OMX_IMAGE_PORTDEFINITIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("pNativeRender").ToLocalChecked(), Nan::New(format.pNativeRender));
  Nan::Set(ret, Nan::New("nFrameWidth").ToLocalChecked(), Nan::New(format.nFrameWidth));
  Nan::Set(ret, Nan::New("nFrameHeight").ToLocalChecked(), Nan::New(format.nFrameHeight));
  Nan::Set(ret, Nan::New("nStride").ToLocalChecked(), Nan::New(format.nStride));
  Nan::Set(ret, Nan::New("nSliceHeight").ToLocalChecked(), Nan::New(format.nSliceHeight));
  Nan::Set(ret, Nan::New("bFlagErrorConcealment").ToLocalChecked(), Nan::New(!!format.bFlagErrorConcealment));
  Nan::Set(ret, Nan::New("eCompressionFormat").ToLocalChecked(), Nan::New(format.eCompressionFormat));
  Nan::Set(ret, Nan::New("eColorFormat").ToLocalChecked(), Nan::New(format.eColorFormat));
  Nan::Set(ret, Nan::New("pNativeWindow").ToLocalChecked(), Nan::New(format.pNativeWindow));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_IMAGE_PARAM_PORTFORMATTYPE(OMX_IMAGE_PARAM_PORTFORMATTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex));
  Nan::Set(ret, Nan::New("eCompressionFormat").ToLocalChecked(), Nan::New(format.eCompressionFormat));
  Nan::Set(ret, Nan::New("eColorFormat").ToLocalChecked(), Nan::New(format.eColorFormat));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_IMAGE_PARAM_FLASHCONTROLTYPE(OMX_IMAGE_PARAM_FLASHCONTROLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eFlashControl").ToLocalChecked(), Nan::New(format.eFlashControl));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_IMAGE_CONFIG_FOCUSCONTROLTYPE(OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eFocusControl").ToLocalChecked(), Nan::New(format.eFocusControl));
  Nan::Set(ret, Nan::New("nFocusSteps").ToLocalChecked(), Nan::New(format.nFocusSteps));
  Nan::Set(ret, Nan::New("nFocusStepIndex").ToLocalChecked(), Nan::New(format.nFocusStepIndex));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_IMAGE_PARAM_QFACTORTYPE(OMX_IMAGE_PARAM_QFACTORTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nQFactor").ToLocalChecked(), Nan::New(format.nQFactor));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_IMAGE_PARAM_QUANTIZATIONTABLETYPE(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eQuantizationTable").ToLocalChecked(), Nan::New(format.eQuantizationTable));
  Nan::Set(ret, Nan::New("nQuantizationMatrix").ToLocalChecked(), Nan::New(format.nQuantizationMatrix));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_IMAGE_PARAM_HUFFMANTTABLETYPE(OMX_IMAGE_PARAM_HUFFMANTTABLETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eHuffmanTable").ToLocalChecked(), Nan::New(format.eHuffmanTable));
  Nan::Set(ret, Nan::New("nNumberOfHuffmanCodeOfLength").ToLocalChecked(), Nan::New(format.nNumberOfHuffmanCodeOfLength));
  Nan::Set(ret, Nan::New("nHuffmanTable").ToLocalChecked(), Nan::New(format.nHuffmanTable));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_COLORCONVERSIONTYPE(OMX_CONFIG_COLORCONVERSIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xColorMatrix").ToLocalChecked(), Nan::New(format.xColorMatrix)); // Stored in signed Q16 format
  Nan::Set(ret, Nan::New("xColorOffset").ToLocalChecked(), Nan::New(format.xColorOffset)); // Stored in signed Q16 format
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_SCALEFACTORTYPE(OMX_CONFIG_SCALEFACTORTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xWidth").ToLocalChecked(), Nan::New(format.xWidth)); // Fixed point value stored as Q16
  Nan::Set(ret, Nan::New("xHeight").ToLocalChecked(), Nan::New(format.xHeight)); // Fixed point value stored as Q16
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_IMAGEFILTERTYPE(OMX_CONFIG_IMAGEFILTERTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eImageFilter").ToLocalChecked(), Nan::New(format.eImageFilter));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_COLORENHANCEMENTTYPE(OMX_CONFIG_COLORENHANCEMENTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bColorEnhancement").ToLocalChecked(), Nan::New(!!format.bColorEnhancement));
  Nan::Set(ret, Nan::New("nCustomizedU").ToLocalChecked(), Nan::New(format.nCustomizedU));
  Nan::Set(ret, Nan::New("nCustomizedV").ToLocalChecked(), Nan::New(format.nCustomizedV));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_COLORKEYTYPE(OMX_CONFIG_COLORKEYTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nARGBColor").ToLocalChecked(), Nan::New(format.nARGBColor));
  Nan::Set(ret, Nan::New("nARGBMask").ToLocalChecked(), Nan::New(format.nARGBMask));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_COLORBLENDTYPE(OMX_CONFIG_COLORBLENDTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nRGBAlphaConstant").ToLocalChecked(), Nan::New(format.nRGBAlphaConstant));
  Nan::Set(ret, Nan::New("eColorBlend").ToLocalChecked(), Nan::New(format.eColorBlend));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_FRAMESIZETYPE(OMX_FRAMESIZETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nWidth").ToLocalChecked(), Nan::New(format.nWidth));
  Nan::Set(ret, Nan::New("nHeight").ToLocalChecked(), Nan::New(format.nHeight));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_ROTATIONTYPE(OMX_CONFIG_ROTATIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nRotation").ToLocalChecked(), Nan::New(format.nRotation));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_MIRRORTYPE(OMX_CONFIG_MIRRORTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMirror").ToLocalChecked(), Nan::New(format.eMirror));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_POINTTYPE(OMX_CONFIG_POINTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nX").ToLocalChecked(), Nan::New(format.nX));
  Nan::Set(ret, Nan::New("nY").ToLocalChecked(), Nan::New(format.nY));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_RECTTYPE(OMX_CONFIG_RECTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nLeft").ToLocalChecked(), Nan::New(format.nLeft));
  Nan::Set(ret, Nan::New("nTop").ToLocalChecked(), Nan::New(format.nTop));
  Nan::Set(ret, Nan::New("nWidth").ToLocalChecked(), Nan::New(format.nWidth));
  Nan::Set(ret, Nan::New("nHeight").ToLocalChecked(), Nan::New(format.nHeight));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_DEBLOCKINGTYPE(OMX_PARAM_DEBLOCKINGTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bDeblocking").ToLocalChecked(), Nan::New(!!format.bDeblocking));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_FRAMESTABTYPE(OMX_CONFIG_FRAMESTABTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bStab").ToLocalChecked(), Nan::New(!!format.bStab));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_WHITEBALCONTROLTYPE(OMX_CONFIG_WHITEBALCONTROLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eWhiteBalControl").ToLocalChecked(), Nan::New(format.eWhiteBalControl));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_EXPOSURECONTROLTYPE(OMX_CONFIG_EXPOSURECONTROLTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eExposureControl").ToLocalChecked(), Nan::New(format.eExposureControl));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_SENSORMODETYPE(OMX_PARAM_SENSORMODETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nFrameRate").ToLocalChecked(), Nan::New(format.nFrameRate));
  Nan::Set(ret, Nan::New("bOneShot").ToLocalChecked(), Nan::New(!!format.bOneShot));
  Nan::Set(ret, Nan::New("sFrameSize").ToLocalChecked(), GET_FRAMESIZETYPE(format.sFrameSize));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CONTRASTTYPE(OMX_CONFIG_CONTRASTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nContrast").ToLocalChecked(), Nan::New(format.nContrast));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BRIGHTNESSTYPE(OMX_CONFIG_BRIGHTNESSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nBrightness").ToLocalChecked(), Nan::New(format.nBrightness));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_BACKLIGHTTYPE(OMX_CONFIG_BACKLIGHTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nBacklight").ToLocalChecked(), Nan::New(format.nBacklight));
  Nan::Set(ret, Nan::New("nTimeout").ToLocalChecked(), Nan::New(format.nTimeout));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_GAMMATYPE(OMX_CONFIG_GAMMATYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nGamma").ToLocalChecked(), Nan::New(format.nGamma));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_SATURATIONTYPE(OMX_CONFIG_SATURATIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nSaturation").ToLocalChecked(), Nan::New(format.nSaturation));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_LIGHTNESSTYPE(OMX_CONFIG_LIGHTNESSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nLightness").ToLocalChecked(), Nan::New(format.nLightness));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_PLANEBLENDTYPE(OMX_CONFIG_PLANEBLENDTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nDepth").ToLocalChecked(), Nan::New(format.nDepth));
  Nan::Set(ret, Nan::New("nAlpha").ToLocalChecked(), Nan::New(format.nAlpha));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_INTERLEAVETYPE(OMX_PARAM_INTERLEAVETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnable").ToLocalChecked(), Nan::New(!!format.bEnable));
  Nan::Set(ret, Nan::New("nInterleavePortIndex").ToLocalChecked(), Nan::New(format.nInterleavePortIndex));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_TRANSITIONEFFECTTYPE(OMX_CONFIG_TRANSITIONEFFECTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eEffect").ToLocalChecked(), Nan::New(format.eEffect));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_DATAUNITTYPE(OMX_PARAM_DATAUNITTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eUnitType").ToLocalChecked(), Nan::New(format.eUnitType));
  Nan::Set(ret, Nan::New("eEncapsulationType").ToLocalChecked(), Nan::New(format.eEncapsulationType));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_DITHERTYPE(OMX_CONFIG_DITHERTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eDither").ToLocalChecked(), Nan::New(format.eDither)); // Type of dithering to use
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_CAPTUREMODETYPE(OMX_CONFIG_CAPTUREMODETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bContinuous").ToLocalChecked(), Nan::New(!!format.bContinuous)); // If true then ignore frame rate and emit capture data as fast as possible (otherwise obey port's frame rate).
  Nan::Set(ret, Nan::New("bFrameLimited").ToLocalChecked(), Nan::New(!!format.bFrameLimited)); // If true then terminate capture after the port emits the specified number of frames (otherwise the port does not terminate the capture until instructed to do so by the client). Even if set, the client may manually terminate the capture prior to reaching the limit.
  Nan::Set(ret, Nan::New("nFrameLimit").ToLocalChecked(), Nan::New(format.nFrameLimit)); // Limit on number of frames emitted during a capture (only valid if bFrameLimited is set).
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_EXPOSUREVALUETYPE(OMX_CONFIG_EXPOSUREVALUETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eMetering").ToLocalChecked(), Nan::New(format.eMetering));
  Nan::Set(ret, Nan::New("xEVCompensation").ToLocalChecked(), Nan::New(format.xEVCompensation)); // Fixed point value stored as Q16
  Nan::Set(ret, Nan::New("nApertureFNumber").ToLocalChecked(), Nan::New(format.nApertureFNumber)); // e.g. nApertureFNumber = 2 implies "f/2" - Q16 format
  Nan::Set(ret, Nan::New("bAutoAperture").ToLocalChecked(), Nan::New(!!format.bAutoAperture)); // Whether aperture number is defined automatically
  Nan::Set(ret, Nan::New("nShutterSpeedMsec").ToLocalChecked(), Nan::New(format.nShutterSpeedMsec)); // Shutterspeed in milliseconds
  Nan::Set(ret, Nan::New("bAutoShutterSpeed").ToLocalChecked(), Nan::New(!!format.bAutoShutterSpeed)); // Whether shutter speed is defined automatically
  Nan::Set(ret, Nan::New("nSensitivity").ToLocalChecked(), Nan::New(format.nSensitivity)); // e.g. nSensitivity = 100 implies "ISO 100"
  Nan::Set(ret, Nan::New("bAutoSensitivity").ToLocalChecked(), Nan::New(!!format.bAutoSensitivity)); // Whether sensitivity is defined automatically
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_FOCUSREGIONTYPE(OMX_CONFIG_FOCUSREGIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bCenter").ToLocalChecked(), Nan::New(!!format.bCenter));
  Nan::Set(ret, Nan::New("bLeft").ToLocalChecked(), Nan::New(!!format.bLeft));
  Nan::Set(ret, Nan::New("bRight").ToLocalChecked(), Nan::New(!!format.bRight));
  Nan::Set(ret, Nan::New("bTop").ToLocalChecked(), Nan::New(!!format.bTop));
  Nan::Set(ret, Nan::New("bBottom").ToLocalChecked(), Nan::New(!!format.bBottom));
  Nan::Set(ret, Nan::New("bTopLeft").ToLocalChecked(), Nan::New(!!format.bTopLeft));
  Nan::Set(ret, Nan::New("bTopRight").ToLocalChecked(), Nan::New(!!format.bTopRight));
  Nan::Set(ret, Nan::New("bBottomLeft").ToLocalChecked(), Nan::New(!!format.bBottomLeft));
  Nan::Set(ret, Nan::New("bBottomRight").ToLocalChecked(), Nan::New(!!format.bBottomRight));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_FOCUSSTATUSTYPE(OMX_PARAM_FOCUSSTATUSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eFocusStatus").ToLocalChecked(), Nan::New(format.eFocusStatus));
  Nan::Set(ret, Nan::New("bCenterStatus").ToLocalChecked(), Nan::New(!!format.bCenterStatus));
  Nan::Set(ret, Nan::New("bLeftStatus").ToLocalChecked(), Nan::New(!!format.bLeftStatus));
  Nan::Set(ret, Nan::New("bRightStatus").ToLocalChecked(), Nan::New(!!format.bRightStatus));
  Nan::Set(ret, Nan::New("bTopStatus").ToLocalChecked(), Nan::New(!!format.bTopStatus));
  Nan::Set(ret, Nan::New("bBottomStatus").ToLocalChecked(), Nan::New(!!format.bBottomStatus));
  Nan::Set(ret, Nan::New("bTopLeftStatus").ToLocalChecked(), Nan::New(!!format.bTopLeftStatus));
  Nan::Set(ret, Nan::New("bTopRightStatus").ToLocalChecked(), Nan::New(!!format.bTopRightStatus));
  Nan::Set(ret, Nan::New("bBottomLeftStatus").ToLocalChecked(), Nan::New(!!format.bBottomLeftStatus));
  Nan::Set(ret, Nan::New("bBottomRightStatus").ToLocalChecked(), Nan::New(!!format.bBottomRightStatus));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_TIME_CONFIG_SEEKMODETYPE(OMX_TIME_CONFIG_SEEKMODETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eType").ToLocalChecked(), Nan::New(format.eType)); // The seek mode
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_TIME_CONFIG_TIMESTAMPTYPE(OMX_TIME_CONFIG_TIMESTAMPTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nTimestamp").ToLocalChecked(), GET_TICKS(format.nTimestamp));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_TIME_CONFIG_MEDIATIMEREQUESTTYPE(OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nMediaTimestamp").ToLocalChecked(), GET_TICKS(format.nMediaTimestamp));
  Nan::Set(ret, Nan::New("nOffset").ToLocalChecked(), GET_TICKS(format.nOffset));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_TIME_MEDIATIMETYPE(OMX_TIME_MEDIATIMETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nClientPrivate").ToLocalChecked(), Nan::New(format.nClientPrivate)); // Client private data to disabiguate this media time from others. Copied from the media time request. A value of zero is reserved for time scale updates.
  Nan::Set(ret, Nan::New("eUpdateType").ToLocalChecked(), Nan::New(format.eUpdateType)); // Reason for the update
  Nan::Set(ret, Nan::New("nMediaTimestamp").ToLocalChecked(), GET_TICKS(format.nMediaTimestamp));
  Nan::Set(ret, Nan::New("nOffset").ToLocalChecked(), GET_TICKS(format.nOffset));
  Nan::Set(ret, Nan::New("nWallTimeAtMediaTime").ToLocalChecked(), GET_TICKS(format.nWallTimeAtMediaTime));
  Nan::Set(ret, Nan::New("xScale").ToLocalChecked(), Nan::New(format.xScale)); // Current media time scale in Q16 format.
  Nan::Set(ret, Nan::New("eState").ToLocalChecked(), Nan::New(format.eState)); // Seeking Change. Added 7/12.
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_TIME_CONFIG_SCALETYPE(OMX_TIME_CONFIG_SCALETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xScale").ToLocalChecked(), Nan::New(format.xScale)); // This is a value in Q16 format which is used for scaling the media time
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_TIME_CONFIG_CLOCKSTATETYPE(OMX_TIME_CONFIG_CLOCKSTATETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eState").ToLocalChecked(), Nan::New(format.eState)); // State of the media time.
  Nan::Set(ret, Nan::New("nStartTime").ToLocalChecked(), GET_TICKS(format.nStartTime));
  Nan::Set(ret, Nan::New("nOffset").ToLocalChecked(), GET_TICKS(format.nOffset));
  Nan::Set(ret, Nan::New("nWaitMask").ToLocalChecked(), Nan::New(format.nWaitMask)); // Mask of OMX_CLOCKPORT values.
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_TIME_CONFIG_ACTIVEREFCLOCKTYPE(OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eClock").ToLocalChecked(), Nan::New(format.eClock)); // Reference clock used to compute media time
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_OTHER_CONFIG_POWERTYPE(OMX_OTHER_CONFIG_POWERTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnablePM").ToLocalChecked(), Nan::New(!!format.bEnablePM)); // Flag to enable Power Management
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_OTHER_CONFIG_STATSTYPE(OMX_OTHER_CONFIG_STATSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_OTHER_PORTDEFINITIONTYPE(OMX_OTHER_PORTDEFINITIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eFormat").ToLocalChecked(), Nan::New(format.eFormat)); // Type of data expected for this channel
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_OTHER_PARAM_PORTFORMATTYPE(OMX_OTHER_PARAM_PORTFORMATTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex)); // Indicates the enumeration index for the format from 0x0 to N-1
  Nan::Set(ret, Nan::New("eFormat").ToLocalChecked(), Nan::New(format.eFormat)); // Type of data expected for this channel
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_BU32(OMX_BU32 &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nValue").ToLocalChecked(), Nan::New(format.nValue)); // actual value
  Nan::Set(ret, Nan::New("nMin").ToLocalChecked(), Nan::New(format.nMin)); // minimum for value (i.e. nValue >= nMin)
  Nan::Set(ret, Nan::New("nMax").ToLocalChecked(), Nan::New(format.nMax)); // maximum for value (i.e. nValue <= nMax)
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_BS32(OMX_BS32 &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nValue").ToLocalChecked(), Nan::New(format.nValue)); // actual value
  Nan::Set(ret, Nan::New("nMin").ToLocalChecked(), Nan::New(format.nMin)); // minimum for value (i.e. nValue >= nMin)
  Nan::Set(ret, Nan::New("nMax").ToLocalChecked(), Nan::New(format.nMax)); // maximum for value (i.e. nValue <= nMax)
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_TICKS(OMX_TICKS &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nLowPart").ToLocalChecked(), Nan::New(format.nLowPart)); // low bits of the signed 64 bit tick value
  Nan::Set(ret, Nan::New("nHighPart").ToLocalChecked(), Nan::New(format.nHighPart)); // high bits of the signed 64 bit tick value
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_MARKTYPE(OMX_MARKTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("hMarkTargetComponent").ToLocalChecked(), Nan::New(format.hMarkTargetComponent)); // The component that will generate a mark event upon processing the mark.
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PORTDEFINITIONTYPE(OMX_VIDEO_PORTDEFINITIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("pNativeRender").ToLocalChecked(), Nan::New(format.pNativeRender));
  Nan::Set(ret, Nan::New("nFrameWidth").ToLocalChecked(), Nan::New(format.nFrameWidth));
  Nan::Set(ret, Nan::New("nFrameHeight").ToLocalChecked(), Nan::New(format.nFrameHeight));
  Nan::Set(ret, Nan::New("nStride").ToLocalChecked(), Nan::New(format.nStride));
  Nan::Set(ret, Nan::New("nSliceHeight").ToLocalChecked(), Nan::New(format.nSliceHeight));
  Nan::Set(ret, Nan::New("nBitrate").ToLocalChecked(), Nan::New(format.nBitrate));
  Nan::Set(ret, Nan::New("xFramerate").ToLocalChecked(), Nan::New(format.xFramerate));
  Nan::Set(ret, Nan::New("bFlagErrorConcealment").ToLocalChecked(), Nan::New(!!format.bFlagErrorConcealment));
  Nan::Set(ret, Nan::New("eCompressionFormat").ToLocalChecked(), Nan::New(format.eCompressionFormat));
  Nan::Set(ret, Nan::New("eColorFormat").ToLocalChecked(), Nan::New(format.eColorFormat));
  Nan::Set(ret, Nan::New("pNativeWindow").ToLocalChecked(), Nan::New(format.pNativeWindow));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_PORTFORMATTYPE(OMX_VIDEO_PARAM_PORTFORMATTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIndex").ToLocalChecked(), Nan::New(format.nIndex));
  Nan::Set(ret, Nan::New("eCompressionFormat").ToLocalChecked(), Nan::New(format.eCompressionFormat));
  Nan::Set(ret, Nan::New("eColorFormat").ToLocalChecked(), Nan::New(format.eColorFormat));
  Nan::Set(ret, Nan::New("xFramerate").ToLocalChecked(), Nan::New(format.xFramerate));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_QUANTIZATIONTYPE(OMX_VIDEO_PARAM_QUANTIZATIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nQpI").ToLocalChecked(), Nan::New(format.nQpI));
  Nan::Set(ret, Nan::New("nQpP").ToLocalChecked(), Nan::New(format.nQpP));
  Nan::Set(ret, Nan::New("nQpB").ToLocalChecked(), Nan::New(format.nQpB));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_VIDEOFASTUPDATETYPE(OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnableVFU").ToLocalChecked(), Nan::New(!!format.bEnableVFU));
  Nan::Set(ret, Nan::New("nFirstGOB").ToLocalChecked(), Nan::New(format.nFirstGOB));
  Nan::Set(ret, Nan::New("nFirstMB").ToLocalChecked(), Nan::New(format.nFirstMB));
  Nan::Set(ret, Nan::New("nNumMBs").ToLocalChecked(), Nan::New(format.nNumMBs));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_BITRATETYPE(OMX_VIDEO_PARAM_BITRATETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eControlRate").ToLocalChecked(), Nan::New(format.eControlRate));
  Nan::Set(ret, Nan::New("nTargetBitrate").ToLocalChecked(), Nan::New(format.nTargetBitrate));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_MOTIONVECTORTYPE(OMX_VIDEO_PARAM_MOTIONVECTORTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eAccuracy").ToLocalChecked(), Nan::New(format.eAccuracy));
  Nan::Set(ret, Nan::New("bUnrestrictedMVs").ToLocalChecked(), Nan::New(!!format.bUnrestrictedMVs));
  Nan::Set(ret, Nan::New("bFourMV").ToLocalChecked(), Nan::New(!!format.bFourMV));
  Nan::Set(ret, Nan::New("sXSearchRange").ToLocalChecked(), Nan::New(format.sXSearchRange));
  Nan::Set(ret, Nan::New("sYSearchRange").ToLocalChecked(), Nan::New(format.sYSearchRange));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_INTRAREFRESHTYPE(OMX_VIDEO_PARAM_INTRAREFRESHTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eRefreshMode").ToLocalChecked(), Nan::New(format.eRefreshMode));
  Nan::Set(ret, Nan::New("nAirMBs").ToLocalChecked(), Nan::New(format.nAirMBs));
  Nan::Set(ret, Nan::New("nAirRef").ToLocalChecked(), Nan::New(format.nAirRef));
  Nan::Set(ret, Nan::New("nCirMBs").ToLocalChecked(), Nan::New(format.nCirMBs));
  Nan::Set(ret, Nan::New("nPirMBs").ToLocalChecked(), Nan::New(format.nPirMBs));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_ERRORCORRECTIONTYPE(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnableHEC").ToLocalChecked(), Nan::New(!!format.bEnableHEC));
  Nan::Set(ret, Nan::New("bEnableResync").ToLocalChecked(), Nan::New(!!format.bEnableResync));
  Nan::Set(ret, Nan::New("nResynchMarkerSpacing").ToLocalChecked(), Nan::New(format.nResynchMarkerSpacing));
  Nan::Set(ret, Nan::New("bEnableDataPartitioning").ToLocalChecked(), Nan::New(!!format.bEnableDataPartitioning));
  Nan::Set(ret, Nan::New("bEnableRVLC").ToLocalChecked(), Nan::New(!!format.bEnableRVLC));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_VBSMCTYPE(OMX_VIDEO_PARAM_VBSMCTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("b16x16").ToLocalChecked(), Nan::New(!!format.b16x16));
  Nan::Set(ret, Nan::New("b16x8").ToLocalChecked(), Nan::New(!!format.b16x8));
  Nan::Set(ret, Nan::New("b8x16").ToLocalChecked(), Nan::New(!!format.b8x16));
  Nan::Set(ret, Nan::New("b8x8").ToLocalChecked(), Nan::New(!!format.b8x8));
  Nan::Set(ret, Nan::New("b8x4").ToLocalChecked(), Nan::New(!!format.b8x4));
  Nan::Set(ret, Nan::New("b4x8").ToLocalChecked(), Nan::New(!!format.b4x8));
  Nan::Set(ret, Nan::New("b4x4").ToLocalChecked(), Nan::New(!!format.b4x4));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_H263TYPE(OMX_VIDEO_PARAM_H263TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nPFrames").ToLocalChecked(), Nan::New(format.nPFrames));
  Nan::Set(ret, Nan::New("nBFrames").ToLocalChecked(), Nan::New(format.nBFrames));
  Nan::Set(ret, Nan::New("eProfile").ToLocalChecked(), Nan::New(format.eProfile));
  Nan::Set(ret, Nan::New("eLevel").ToLocalChecked(), Nan::New(format.eLevel));
  Nan::Set(ret, Nan::New("bPLUSPTYPEAllowed").ToLocalChecked(), Nan::New(!!format.bPLUSPTYPEAllowed));
  Nan::Set(ret, Nan::New("nAllowedPictureTypes").ToLocalChecked(), Nan::New(format.nAllowedPictureTypes));
  Nan::Set(ret, Nan::New("bForceRoundingTypeToZero").ToLocalChecked(), Nan::New(!!format.bForceRoundingTypeToZero));
  Nan::Set(ret, Nan::New("nPictureHeaderRepetition").ToLocalChecked(), Nan::New(format.nPictureHeaderRepetition));
  Nan::Set(ret, Nan::New("nGOBHeaderInterval").ToLocalChecked(), Nan::New(format.nGOBHeaderInterval));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_MPEG2TYPE(OMX_VIDEO_PARAM_MPEG2TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nPFrames").ToLocalChecked(), Nan::New(format.nPFrames));
  Nan::Set(ret, Nan::New("nBFrames").ToLocalChecked(), Nan::New(format.nBFrames));
  Nan::Set(ret, Nan::New("eProfile").ToLocalChecked(), Nan::New(format.eProfile));
  Nan::Set(ret, Nan::New("eLevel").ToLocalChecked(), Nan::New(format.eLevel));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_MPEG4TYPE(OMX_VIDEO_PARAM_MPEG4TYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nSliceHeaderSpacing").ToLocalChecked(), Nan::New(format.nSliceHeaderSpacing));
  Nan::Set(ret, Nan::New("bSVH").ToLocalChecked(), Nan::New(!!format.bSVH));
  Nan::Set(ret, Nan::New("bGov").ToLocalChecked(), Nan::New(!!format.bGov));
  Nan::Set(ret, Nan::New("nPFrames").ToLocalChecked(), Nan::New(format.nPFrames));
  Nan::Set(ret, Nan::New("nBFrames").ToLocalChecked(), Nan::New(format.nBFrames));
  Nan::Set(ret, Nan::New("nIDCVLCThreshold").ToLocalChecked(), Nan::New(format.nIDCVLCThreshold));
  Nan::Set(ret, Nan::New("bACPred").ToLocalChecked(), Nan::New(!!format.bACPred));
  Nan::Set(ret, Nan::New("nMaxPacketSize").ToLocalChecked(), Nan::New(format.nMaxPacketSize));
  Nan::Set(ret, Nan::New("nTimeIncRes").ToLocalChecked(), Nan::New(format.nTimeIncRes));
  Nan::Set(ret, Nan::New("eProfile").ToLocalChecked(), Nan::New(format.eProfile));
  Nan::Set(ret, Nan::New("eLevel").ToLocalChecked(), Nan::New(format.eLevel));
  Nan::Set(ret, Nan::New("nAllowedPictureTypes").ToLocalChecked(), Nan::New(format.nAllowedPictureTypes));
  Nan::Set(ret, Nan::New("nHeaderExtension").ToLocalChecked(), Nan::New(format.nHeaderExtension));
  Nan::Set(ret, Nan::New("bReversibleVLC").ToLocalChecked(), Nan::New(!!format.bReversibleVLC));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_WMVTYPE(OMX_VIDEO_PARAM_WMVTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eFormat").ToLocalChecked(), Nan::New(format.eFormat));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_RVTYPE(OMX_VIDEO_PARAM_RVTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eFormat").ToLocalChecked(), Nan::New(format.eFormat));
  Nan::Set(ret, Nan::New("nBitsPerPixel").ToLocalChecked(), Nan::New(format.nBitsPerPixel));
  Nan::Set(ret, Nan::New("nPaddedWidth").ToLocalChecked(), Nan::New(format.nPaddedWidth));
  Nan::Set(ret, Nan::New("nPaddedHeight").ToLocalChecked(), Nan::New(format.nPaddedHeight));
  Nan::Set(ret, Nan::New("nFrameRate").ToLocalChecked(), Nan::New(format.nFrameRate));
  Nan::Set(ret, Nan::New("nBitstreamFlags").ToLocalChecked(), Nan::New(format.nBitstreamFlags));
  Nan::Set(ret, Nan::New("nBitstreamVersion").ToLocalChecked(), Nan::New(format.nBitstreamVersion));
  Nan::Set(ret, Nan::New("nMaxEncodeFrameSize").ToLocalChecked(), Nan::New(format.nMaxEncodeFrameSize));
  Nan::Set(ret, Nan::New("bEnablePostFilter").ToLocalChecked(), Nan::New(!!format.bEnablePostFilter));
  Nan::Set(ret, Nan::New("bEnableTemporalInterpolation").ToLocalChecked(), Nan::New(!!format.bEnableTemporalInterpolation));
  Nan::Set(ret, Nan::New("bEnableLatencyMode").ToLocalChecked(), Nan::New(!!format.bEnableLatencyMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_AVCTYPE(OMX_VIDEO_PARAM_AVCTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nSliceHeaderSpacing").ToLocalChecked(), Nan::New(format.nSliceHeaderSpacing));
  Nan::Set(ret, Nan::New("nPFrames").ToLocalChecked(), Nan::New(format.nPFrames));
  Nan::Set(ret, Nan::New("nBFrames").ToLocalChecked(), Nan::New(format.nBFrames));
  Nan::Set(ret, Nan::New("bUseHadamard").ToLocalChecked(), Nan::New(!!format.bUseHadamard));
  Nan::Set(ret, Nan::New("nRefFrames").ToLocalChecked(), Nan::New(format.nRefFrames));
  Nan::Set(ret, Nan::New("nRefIdx10ActiveMinus1").ToLocalChecked(), Nan::New(format.nRefIdx10ActiveMinus1));
  Nan::Set(ret, Nan::New("nRefIdx11ActiveMinus1").ToLocalChecked(), Nan::New(format.nRefIdx11ActiveMinus1));
  Nan::Set(ret, Nan::New("bEnableUEP").ToLocalChecked(), Nan::New(!!format.bEnableUEP));
  Nan::Set(ret, Nan::New("bEnableFMO").ToLocalChecked(), Nan::New(!!format.bEnableFMO));
  Nan::Set(ret, Nan::New("bEnableASO").ToLocalChecked(), Nan::New(!!format.bEnableASO));
  Nan::Set(ret, Nan::New("bEnableRS").ToLocalChecked(), Nan::New(!!format.bEnableRS));
  Nan::Set(ret, Nan::New("eProfile").ToLocalChecked(), Nan::New(format.eProfile));
  Nan::Set(ret, Nan::New("eLevel").ToLocalChecked(), Nan::New(format.eLevel));
  Nan::Set(ret, Nan::New("nAllowedPictureTypes").ToLocalChecked(), Nan::New(format.nAllowedPictureTypes));
  Nan::Set(ret, Nan::New("bFrameMBsOnly").ToLocalChecked(), Nan::New(!!format.bFrameMBsOnly));
  Nan::Set(ret, Nan::New("bMBAFF").ToLocalChecked(), Nan::New(!!format.bMBAFF));
  Nan::Set(ret, Nan::New("bEntropyCodingCABAC").ToLocalChecked(), Nan::New(!!format.bEntropyCodingCABAC));
  Nan::Set(ret, Nan::New("bWeightedPPrediction").ToLocalChecked(), Nan::New(!!format.bWeightedPPrediction));
  Nan::Set(ret, Nan::New("nWeightedBipredicitonMode").ToLocalChecked(), Nan::New(format.nWeightedBipredicitonMode));
  Nan::Set(ret, Nan::New("bconstIpred").ToLocalChecked(), Nan::New(!!format.bconstIpred));
  Nan::Set(ret, Nan::New("bDirect8x8Inference").ToLocalChecked(), Nan::New(!!format.bDirect8x8Inference));
  Nan::Set(ret, Nan::New("bDirectSpatialTemporal").ToLocalChecked(), Nan::New(!!format.bDirectSpatialTemporal));
  Nan::Set(ret, Nan::New("nCabacInitIdc").ToLocalChecked(), Nan::New(format.nCabacInitIdc));
  Nan::Set(ret, Nan::New("eLoopFilterMode").ToLocalChecked(), Nan::New(format.eLoopFilterMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_PROFILELEVELTYPE(OMX_VIDEO_PARAM_PROFILELEVELTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("eProfile").ToLocalChecked(), Nan::New(format.eProfile)); // type is OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE, or OMX_VIDEO_MPEG4PROFILETYPE depending on context
  Nan::Set(ret, Nan::New("eLevel").ToLocalChecked(), Nan::New(format.eLevel)); // type is OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE, or OMX_VIDEO_MPEG4PROFILETYPE depending on context
  Nan::Set(ret, Nan::New("nProfileIndex").ToLocalChecked(), Nan::New(format.nProfileIndex)); // Used to query for individual profile support information, This parameter is valid only for OMX_IndexParamVideoProfileLevelQuerySupported index, For all other indices this parameter is to be ignored.
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_CONFIG_BITRATETYPE(OMX_VIDEO_CONFIG_BITRATETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nEncodeBitrate").ToLocalChecked(), Nan::New(format.nEncodeBitrate));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_FRAMERATETYPE(OMX_CONFIG_FRAMERATETYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("xEncodeFramerate").ToLocalChecked(), Nan::New(format.xEncodeFramerate)); // Q16 format
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_INTRAREFRESHVOPTYPE(OMX_CONFIG_INTRAREFRESHVOPTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("IntraRefreshVOP").ToLocalChecked(), Nan::New(!!format.IntraRefreshVOP));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_MACROBLOCKERRORMAPTYPE(OMX_CONFIG_MACROBLOCKERRORMAPTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nErrMapSize").ToLocalChecked(), Nan::New(format.nErrMapSize)); // Size of the Error Map in bytes
  Nan::Set(ret, Nan::New("ErrMap").ToLocalChecked(), Nan::New(format.ErrMap)); // Error map hint
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_CONFIG_MBERRORREPORTINGTYPE(OMX_CONFIG_MBERRORREPORTINGTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("bEnabled").ToLocalChecked(), Nan::New(!!format.bEnabled));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_PARAM_MACROBLOCKSTYPE(OMX_PARAM_MACROBLOCKSTYPE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nMacroblocks").ToLocalChecked(), Nan::New(format.nMacroblocks));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_PARAM_AVCSLICEFMO(OMX_VIDEO_PARAM_AVCSLICEFMO &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nNumSliceGroups").ToLocalChecked(), Nan::New(format.nNumSliceGroups));
  Nan::Set(ret, Nan::New("nSliceGroupMapType").ToLocalChecked(), Nan::New(format.nSliceGroupMapType));
  Nan::Set(ret, Nan::New("eSliceMode").ToLocalChecked(), Nan::New(format.eSliceMode));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_CONFIG_AVCINTRAPERIOD(OMX_VIDEO_CONFIG_AVCINTRAPERIOD &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nIDRPeriod").ToLocalChecked(), Nan::New(format.nIDRPeriod));
  Nan::Set(ret, Nan::New("nPFrames").ToLocalChecked(), Nan::New(format.nPFrames));
  return scope.Escape(ret);
}

v8::Local<v8::Object> GET_VIDEO_CONFIG_NALSIZE(OMX_VIDEO_CONFIG_NALSIZE &format) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();
  Nan::Set(ret, Nan::New("nNaluBytes").ToLocalChecked(), Nan::New(format.nNaluBytes));
  return scope.Escape(ret);
}

v8::Local<v8::Object> Parameters::GetParameter(OMX_HANDLETYPE *handle, int port, OMX_INDEXTYPE nParamIndex) {
  Nan::EscapableHandleScope scope;
  v8::Local<v8::Object> ret = Nan::New<v8::Object>();

  switch (nParamIndex) {
    case OMX_IndexParamPriorityMgmt:
    {
      OMX_PRIORITYMGMTTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PRIORITYMGMTTYPE(format));
    }
      break;
    case OMX_IndexParamAudioInit:
    {
      OMX_PORT_PARAM_TYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PORT_PARAM_TYPE(format));
    }
      break;
    case OMX_IndexParamImageInit:
    {
      OMX_PORT_PARAM_TYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PORT_PARAM_TYPE(format));
    }
      break;
    case OMX_IndexParamVideoInit:
    {
      OMX_PORT_PARAM_TYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PORT_PARAM_TYPE(format));
    }
      break;
    case OMX_IndexParamOtherInit:
    {
      OMX_PORT_PARAM_TYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PORT_PARAM_TYPE(format));
    }
      break;
    case OMX_IndexParamNumAvailableStreams:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamActiveStream:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamSuspensionPolicy:
    {
      OMX_PARAM_SUSPENSIONPOLICYTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_SUSPENSIONPOLICYTYPE(format));
    }
      break;
    case OMX_IndexParamComponentSuspended:
    {
      OMX_PARAM_SUSPENSIONTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_SUSPENSIONTYPE(format));
    }
      break;
    case OMX_IndexConfigCapturing:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigCaptureMode:
    {
      OMX_CONFIG_CAPTUREMODETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CAPTUREMODETYPE(format));
    }
      break;
    case OMX_IndexAutoPauseAfterCapture:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamContentURI:
    {
      OMX_PARAM_CONTENTURITYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CONTENTURITYPE(format));
    }
      break;
    case OMX_IndexParamCustomContentPipe:
    {
      OMX_PARAM_CONTENTPIPETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CONTENTPIPETYPE(format));
    }
      break;
    case OMX_IndexParamDisableResourceConcealment:
    {
      OMX_RESOURCECONCEALMENTTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_RESOURCECONCEALMENTTYPE(format));
    }
      break;
    case OMX_IndexConfigMetadataItemCount:
    {
      OMX_CONFIG_METADATAITEMCOUNTTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_METADATAITEMCOUNTTYPE(format));
    }
      break;
    case OMX_IndexConfigContainerNodeCount:
    {
      OMX_CONFIG_CONTAINERNODECOUNTTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CONTAINERNODECOUNTTYPE(format));
    }
      break;
    case OMX_IndexConfigMetadataItem:
    {
      OMX_CONFIG_METADATAITEMTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_METADATAITEMTYPE(format));
    }
      break;
    case OMX_IndexConfigCounterNodeID:
    {
      OMX_CONFIG_CONTAINERNODEIDTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CONTAINERNODEIDTYPE(format));
    }
      break;
    case OMX_IndexParamMetadataFilterType:
    {
      OMX_PARAM_METADATAFILTERTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_METADATAFILTERTYPE(format));
    }
      break;
    case OMX_IndexParamMetadataKeyFilter:
    {
      OMX_PARAM_METADATAFILTERTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_METADATAFILTERTYPE(format));
    }
      break;
    case OMX_IndexConfigPriorityMgmt:
    {
      OMX_PRIORITYMGMTTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PRIORITYMGMTTYPE(format));
    }
      break;
    case OMX_IndexParamStandardComponentRole:
    {
      OMX_PARAM_COMPONENTROLETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_COMPONENTROLETYPE(format));
    }
      break;
    case OMX_IndexParamPortDefinition:
    {
      OMX_PARAM_PORTDEFINITIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_PORTDEFINITIONTYPE(format));
    }
      break;
    case OMX_IndexParamCompBufferSupplier:
    {
      OMX_PARAM_BUFFERSUPPLIERTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BUFFERSUPPLIERTYPE(format));
    }
      break;
    case OMX_IndexParamAudioPortFormat:
    {
      OMX_AUDIO_PARAM_PORTFORMATTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_PORTFORMATTYPE(format));
    }
      break;
    case OMX_IndexParamAudioPcm:
    {
      OMX_AUDIO_PARAM_PCMMODETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_PCMMODETYPE(format));
    }
      break;
    case OMX_IndexParamAudioAac:
    {
      OMX_AUDIO_PARAM_AACPROFILETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_AACPROFILETYPE(format));
    }
      break;
    case OMX_IndexParamAudioRa:
    {
      OMX_AUDIO_PARAM_RATYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_RATYPE(format));
    }
      break;
    case OMX_IndexParamAudioMp3:
    {
      OMX_AUDIO_PARAM_MP3TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_MP3TYPE(format));
    }
      break;
    case OMX_IndexParamAudioAdpcm:
    {
      OMX_AUDIO_PARAM_ADPCMTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_ADPCMTYPE(format));
    }
      break;
    case OMX_IndexParamAudioG723:
    {
      OMX_AUDIO_PARAM_G723TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_G723TYPE(format));
    }
      break;
    case OMX_IndexParamAudioG729:
    {
      OMX_AUDIO_PARAM_G729TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_G729TYPE(format));
    }
      break;
    case OMX_IndexParamAudioAmr:
    {
      OMX_AUDIO_PARAM_AMRTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_AMRTYPE(format));
    }
      break;
    case OMX_IndexParamAudioWma:
    {
      OMX_AUDIO_PARAM_WMATYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_WMATYPE(format));
    }
      break;
    case OMX_IndexParamAudioSbc:
    {
      OMX_AUDIO_PARAM_SBCTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_SBCTYPE(format));
    }
      break;
    case OMX_IndexParamAudioMidi:
    {
      OMX_AUDIO_PARAM_MIDITYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_MIDITYPE(format));
    }
      break;
    case OMX_IndexParamAudioGsm_FR:
    {
      OMX_AUDIO_PARAM_GSMFRTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_GSMFRTYPE(format));
    }
      break;
    case OMX_IndexParamAudioMidiLoadUserSound:
    {
      OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE(format));
    }
      break;
    case OMX_IndexParamAudioG726:
    {
      OMX_AUDIO_PARAM_G726TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_G726TYPE(format));
    }
      break;
    case OMX_IndexParamAudioGsm_EFR:
    {
      OMX_AUDIO_PARAM_GSMEFRTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_GSMEFRTYPE(format));
    }
      break;
    case OMX_IndexParamAudioGsm_HR:
    {
      OMX_AUDIO_PARAM_GSMHRTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_GSMHRTYPE(format));
    }
      break;
    case OMX_IndexParamAudioPdc_FR:
    {
      OMX_AUDIO_PARAM_PDCFRTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_PDCFRTYPE(format));
    }
      break;
    case OMX_IndexParamAudioPdc_EFR:
    {
      OMX_AUDIO_PARAM_PDCEFRTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_PDCEFRTYPE(format));
    }
      break;
    case OMX_IndexParamAudioPdc_HR:
    {
      OMX_AUDIO_PARAM_PDCHRTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_PDCHRTYPE(format));
    }
      break;
    case OMX_IndexParamAudioTdma_FR:
    {
      OMX_AUDIO_PARAM_TDMAFRTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_TDMAFRTYPE(format));
    }
      break;
    case OMX_IndexParamAudioTdma_EFR:
    {
      OMX_AUDIO_PARAM_TDMAEFRTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_TDMAEFRTYPE(format));
    }
      break;
    case OMX_IndexParamAudioQcelp8:
    {
      OMX_AUDIO_PARAM_QCELP8TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_QCELP8TYPE(format));
    }
      break;
    case OMX_IndexParamAudioQcelp13:
    {
      OMX_AUDIO_PARAM_QCELP13TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_QCELP13TYPE(format));
    }
      break;
    case OMX_IndexParamAudioEvrc:
    {
      OMX_AUDIO_PARAM_EVRCTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_EVRCTYPE(format));
    }
      break;
    case OMX_IndexParamAudioSmv:
    {
      OMX_AUDIO_PARAM_SMVTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_SMVTYPE(format));
    }
      break;
    case OMX_IndexParamAudioVorbis:
    {
      OMX_AUDIO_PARAM_VORBISTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_VORBISTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioMidiImmediateEvent:
    {
      OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioMidiControl:
    {
      OMX_AUDIO_CONFIG_MIDICONTROLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_MIDICONTROLTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioMidiSoundBankProgram:
    {
      OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioMidiStatus:
    {
      OMX_AUDIO_CONFIG_MIDISTATUSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_MIDISTATUSTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioMidiMetaEvent:
    {
      OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_MIDIMETAEVENTTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioMidiMetaEventData:
    {
      OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE(format));
    }
      break;
    case OMX_IndexConfigAudioVolume:
    {
      OMX_AUDIO_CONFIG_VOLUMETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_VOLUMETYPE(format));
    }
      break;
    case OMX_IndexConfigAudioBalance:
    {
      OMX_AUDIO_CONFIG_BALANCETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_BALANCETYPE(format));
    }
      break;
    case OMX_IndexConfigAudioChannelMute:
    {
      OMX_AUDIO_CONFIG_CHANNELMUTETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_CHANNELMUTETYPE(format));
    }
      break;
    case OMX_IndexConfigAudioMute:
    {
      OMX_AUDIO_CONFIG_MUTETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_MUTETYPE(format));
    }
      break;
    case OMX_IndexConfigAudioLoudness:
    {
      OMX_AUDIO_CONFIG_LOUDNESSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_LOUDNESSTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioEchoCancelation:
    {
      OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_ECHOCANCELATIONTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioNoiseReduction:
    {
      OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_NOISEREDUCTIONTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioBass:
    {
      OMX_AUDIO_CONFIG_BASSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_BASSTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioTreble:
    {
      OMX_AUDIO_CONFIG_TREBLETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_TREBLETYPE(format));
    }
      break;
    case OMX_IndexConfigAudioStereoWidening:
    {
      OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_STEREOWIDENINGTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioChorus:
    {
      OMX_AUDIO_CONFIG_CHORUSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_CHORUSTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioEqualizer:
    {
      OMX_AUDIO_CONFIG_EQUALIZERTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_EQUALIZERTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioReverberation:
    {
      OMX_AUDIO_CONFIG_REVERBERATIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_REVERBERATIONTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioChannelVolume:
    {
      OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_CONFIG_CHANNELVOLUMETYPE(format));
    }
      break;
    case OMX_IndexParamImagePortFormat:
    {
      OMX_IMAGE_PARAM_PORTFORMATTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_IMAGE_PARAM_PORTFORMATTYPE(format));
    }
      break;
    case OMX_IndexParamFlashControl:
    {
      OMX_IMAGE_PARAM_FLASHCONTROLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_IMAGE_PARAM_FLASHCONTROLTYPE(format));
    }
      break;
    case OMX_IndexConfigFocusControl:
    {
      OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_IMAGE_CONFIG_FOCUSCONTROLTYPE(format));
    }
      break;
    case OMX_IndexParamQFactor:
    {
      OMX_IMAGE_PARAM_QFACTORTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_IMAGE_PARAM_QFACTORTYPE(format));
    }
      break;
    case OMX_IndexParamQuantizationTable:
    {
      OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_IMAGE_PARAM_QUANTIZATIONTABLETYPE(format));
    }
      break;
    case OMX_IndexParamHuffmanTable:
    {
      OMX_IMAGE_PARAM_HUFFMANTTABLETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_IMAGE_PARAM_HUFFMANTTABLETYPE(format));
    }
      break;
    case OMX_IndexConfigFlashControl:
    {
      OMX_IMAGE_PARAM_FLASHCONTROLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_IMAGE_PARAM_FLASHCONTROLTYPE(format));
    }
      break;
    case OMX_IndexParamVideoPortFormat:
    {
      OMX_VIDEO_PARAM_PORTFORMATTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_PORTFORMATTYPE(format));
    }
      break;
    case OMX_IndexParamVideoQuantization:
    {
      OMX_VIDEO_PARAM_QUANTIZATIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_QUANTIZATIONTYPE(format));
    }
      break;
    case OMX_IndexParamVideoFastUpdate:
    {
      OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_VIDEOFASTUPDATETYPE(format));
    }
      break;
    case OMX_IndexParamVideoBitrate:
    {
      OMX_VIDEO_PARAM_BITRATETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_BITRATETYPE(format));
    }
      break;
    case OMX_IndexParamVideoMotionVector:
    {
      OMX_VIDEO_PARAM_MOTIONVECTORTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_MOTIONVECTORTYPE(format));
    }
      break;
    case OMX_IndexParamVideoIntraRefresh:
    {
      OMX_VIDEO_PARAM_INTRAREFRESHTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_INTRAREFRESHTYPE(format));
    }
      break;
    case OMX_IndexParamVideoErrorCorrection:
    {
      OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_ERRORCORRECTIONTYPE(format));
    }
      break;
    case OMX_IndexParamVideoVBSMC:
    {
      OMX_VIDEO_PARAM_VBSMCTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_VBSMCTYPE(format));
    }
      break;
    case OMX_IndexParamVideoMpeg2:
    {
      OMX_VIDEO_PARAM_MPEG2TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_MPEG2TYPE(format));
    }
      break;
    case OMX_IndexParamVideoMpeg4:
    {
      OMX_VIDEO_PARAM_MPEG4TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_MPEG4TYPE(format));
    }
      break;
    case OMX_IndexParamVideoWmv:
    {
      OMX_VIDEO_PARAM_WMVTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_WMVTYPE(format));
    }
      break;
    case OMX_IndexParamVideoRv:
    {
      OMX_VIDEO_PARAM_RVTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_RVTYPE(format));
    }
      break;
    case OMX_IndexParamVideoAvc:
    {
      OMX_VIDEO_PARAM_AVCTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_AVCTYPE(format));
    }
      break;
    case OMX_IndexParamVideoH263:
    {
      OMX_VIDEO_PARAM_H263TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_H263TYPE(format));
    }
      break;
    case OMX_IndexParamVideoProfileLevelQuerySupported:
    {
      OMX_VIDEO_PARAM_PROFILELEVELTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_PROFILELEVELTYPE(format));
    }
      break;
    case OMX_IndexParamVideoProfileLevelCurrent:
    {
      OMX_VIDEO_PARAM_PROFILELEVELTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_PROFILELEVELTYPE(format));
    }
      break;
    case OMX_IndexConfigVideoBitrate:
    {
      OMX_VIDEO_CONFIG_BITRATETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_CONFIG_BITRATETYPE(format));
    }
      break;
    case OMX_IndexConfigVideoFramerate:
    {
      OMX_CONFIG_FRAMERATETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_FRAMERATETYPE(format));
    }
      break;
    case OMX_IndexConfigVideoIntraVOPRefresh:
    {
      OMX_CONFIG_INTRAREFRESHVOPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_INTRAREFRESHVOPTYPE(format));
    }
      break;
    case OMX_IndexConfigVideoIntraMBRefresh:
    {
      OMX_CONFIG_MACROBLOCKERRORMAPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_MACROBLOCKERRORMAPTYPE(format));
    }
      break;
    case OMX_IndexConfigVideoMBErrorReporting:
    {
      OMX_CONFIG_MBERRORREPORTINGTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_MBERRORREPORTINGTYPE(format));
    }
      break;
    case OMX_IndexParamVideoMacroblocksPerFrame:
    {
      OMX_PARAM_MACROBLOCKSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_MACROBLOCKSTYPE(format));
    }
      break;
    case OMX_IndexConfigVideoMacroBlockErrorMap:
    {
      OMX_CONFIG_MACROBLOCKERRORMAPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_MACROBLOCKERRORMAPTYPE(format));
    }
      break;
    case OMX_IndexParamVideoSliceFMO:
    {
      OMX_VIDEO_PARAM_AVCSLICEFMO format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_AVCSLICEFMO(format));
    }
      break;
    case OMX_IndexConfigVideoAVCIntraPeriod:
    {
      OMX_VIDEO_CONFIG_AVCINTRAPERIOD format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_CONFIG_AVCINTRAPERIOD(format));
    }
      break;
    case OMX_IndexConfigVideoNalSize:
    {
      OMX_VIDEO_CONFIG_NALSIZE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_CONFIG_NALSIZE(format));
    }
      break;
    case OMX_IndexParamCommonDeblocking:
    {
      OMX_PARAM_DEBLOCKINGTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_DEBLOCKINGTYPE(format));
    }
      break;
    case OMX_IndexParamCommonSensorMode:
    {
      OMX_PARAM_SENSORMODETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_SENSORMODETYPE(format));
    }
      break;
    case OMX_IndexParamCommonInterleave:
    {
      OMX_PARAM_INTERLEAVETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_INTERLEAVETYPE(format));
    }
      break;
    case OMX_IndexConfigCommonColorFormatConversion:
    {
      OMX_CONFIG_COLORCONVERSIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_COLORCONVERSIONTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonScale:
    {
      OMX_CONFIG_SCALEFACTORTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_SCALEFACTORTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonImageFilter:
    {
      OMX_CONFIG_IMAGEFILTERTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_IMAGEFILTERTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonColorEnhancement:
    {
      OMX_CONFIG_COLORENHANCEMENTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_COLORENHANCEMENTTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonColorKey:
    {
      OMX_CONFIG_COLORKEYTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_COLORKEYTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonColorBlend:
    {
      OMX_CONFIG_COLORBLENDTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_COLORBLENDTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonFrameStabilisation:
    {
      OMX_CONFIG_FRAMESTABTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_FRAMESTABTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonRotate:
    {
      OMX_CONFIG_ROTATIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_ROTATIONTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonMirror:
    {
      OMX_CONFIG_MIRRORTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_MIRRORTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonOutputPosition:
    {
      OMX_CONFIG_POINTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_POINTTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonInputCrop:
    {
      OMX_CONFIG_RECTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_RECTTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonOutputCrop:
    {
      OMX_CONFIG_RECTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_RECTTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonDigitalZoom:
    {
      OMX_CONFIG_SCALEFACTORTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_SCALEFACTORTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonOpticalZoom:
    {
      OMX_CONFIG_SCALEFACTORTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_SCALEFACTORTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonWhiteBalance:
    {
      OMX_CONFIG_WHITEBALCONTROLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_WHITEBALCONTROLTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonExposure:
    {
      OMX_CONFIG_EXPOSURECONTROLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_EXPOSURECONTROLTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonContrast:
    {
      OMX_CONFIG_CONTRASTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CONTRASTTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonBrightness:
    {
      OMX_CONFIG_BRIGHTNESSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRIGHTNESSTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonBacklight:
    {
      OMX_CONFIG_BACKLIGHTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BACKLIGHTTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonGamma:
    {
      OMX_CONFIG_GAMMATYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_GAMMATYPE(format));
    }
      break;
    case OMX_IndexConfigCommonSaturation:
    {
      OMX_CONFIG_SATURATIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_SATURATIONTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonLightness:
    {
      OMX_CONFIG_LIGHTNESSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_LIGHTNESSTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonExclusionRect:
    {
      OMX_CONFIG_RECTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_RECTTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonDithering:
    {
      OMX_CONFIG_DITHERTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_DITHERTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonPlaneBlend:
    {
      OMX_CONFIG_PLANEBLENDTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PLANEBLENDTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonExposureValue:
    {
      OMX_CONFIG_EXPOSUREVALUETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_EXPOSUREVALUETYPE(format));
    }
      break;
    case OMX_IndexConfigCommonOutputSize:
    {
      OMX_FRAMESIZETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_FRAMESIZETYPE(format));
    }
      break;
    case OMX_IndexParamCommonExtraQuantData:
    {
      OMX_OTHER_EXTRADATATYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_OTHER_EXTRADATATYPE(format));
    }
      break;
    case OMX_IndexConfigCommonFocusRegion:
    {
      OMX_CONFIG_FOCUSREGIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_FOCUSREGIONTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonFocusStatus:
    {
      OMX_PARAM_FOCUSSTATUSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_FOCUSSTATUSTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonTransitionEffect:
    {
      OMX_CONFIG_TRANSITIONEFFECTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_TRANSITIONEFFECTTYPE(format));
    }
      break;
    case OMX_IndexParamOtherPortFormat:
    {
      OMX_OTHER_PARAM_PORTFORMATTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_OTHER_PARAM_PORTFORMATTYPE(format));
    }
      break;
    case OMX_IndexConfigOtherPower:
    {
      OMX_OTHER_CONFIG_POWERTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_OTHER_CONFIG_POWERTYPE(format));
    }
      break;
    case OMX_IndexConfigOtherStats:
    {
      OMX_OTHER_CONFIG_STATSTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_OTHER_CONFIG_STATSTYPE(format));
    }
      break;
    case OMX_IndexConfigTimeScale:
    {
      OMX_TIME_CONFIG_SCALETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_SCALETYPE(format));
    }
      break;
    case OMX_IndexConfigTimeClockState:
    {
      OMX_TIME_CONFIG_CLOCKSTATETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_CLOCKSTATETYPE(format));
    }
      break;
    case OMX_IndexConfigTimeActiveRefClock:
    {
      OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_ACTIVEREFCLOCKTYPE(format));
    }
      break;
    case OMX_IndexConfigTimeCurrentMediaTime:
    {
      OMX_TIME_CONFIG_TIMESTAMPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_TIMESTAMPTYPE(format));
    }
      break;
    case OMX_IndexConfigTimeCurrentWallTime:
    {
      OMX_TIME_CONFIG_TIMESTAMPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_TIMESTAMPTYPE(format));
    }
      break;
    case OMX_IndexConfigTimeCurrentAudioReference:
    {
      OMX_TIME_CONFIG_TIMESTAMPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_TIMESTAMPTYPE(format));
    }
      break;
    case OMX_IndexConfigTimeCurrentVideoReference:
    {
      OMX_TIME_CONFIG_TIMESTAMPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_TIMESTAMPTYPE(format));
    }
      break;
    case OMX_IndexConfigTimeMediaTimeRequest:
    {
      OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_MEDIATIMEREQUESTTYPE(format));
    }
      break;
    case OMX_IndexConfigTimeClientStartTime:
    {
      OMX_TIME_CONFIG_TIMESTAMPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_TIMESTAMPTYPE(format));
    }
      break;
    case OMX_IndexConfigTimePosition:
    {
      OMX_TIME_CONFIG_TIMESTAMPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_TIMESTAMPTYPE(format));
    }
      break;
    case OMX_IndexConfigTimeSeekMode:
    {
      OMX_TIME_CONFIG_SEEKMODETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_SEEKMODETYPE(format));
    }
      break;
    case OMX_IndexParamMarkComparison:
    {
      OMX_PARAM_MARKCOMPARISONTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_MARKCOMPARISONTYPE(format));
    }
      break;
    case OMX_IndexParamPortSummary:
    {
      OMX_PARAM_PORTSUMMARYTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_PORTSUMMARYTYPE(format));
    }
      break;
    case OMX_IndexParamTunnelStatus:
    {
      OMX_PARAM_TUNNELSTATUSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_TUNNELSTATUSTYPE(format));
    }
      break;
    case OMX_IndexParamBufferAddress:
    {
      OMX_PARAM_BUFFERADDRESSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BUFFERADDRESSTYPE(format));
    }
      break;
    case OMX_IndexParamTunnelSetup:
    {
      OMX_PARAM_TUNNELSETUPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_TUNNELSETUPTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmPortEGL:
    {
      OMX_PARAM_BRCMPORTEGLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMPORTEGLTYPE(format));
    }
      break;
    case OMX_IndexParamIdleResourceCount:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmDataUnit:
    {
      OMX_PARAM_DATAUNITTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_DATAUNITTYPE(format));
    }
      break;
    case OMX_IndexParamCodecConfig:
    {
      OMX_PARAM_CODECCONFIGTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CODECCONFIGTYPE(format));
    }
      break;
    case OMX_IndexParamTestInterface:
    {
      OMX_PARAM_TESTINTERFACETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_TESTINTERFACETYPE(format));
    }
      break;
    case OMX_IndexConfigDisplayRegion:
    {
      OMX_CONFIG_DISPLAYREGIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_DISPLAYREGIONTYPE(format));
    }
      break;
    case OMX_IndexParamSource:
    {
      OMX_PARAM_SOURCETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_SOURCETYPE(format));
    }
      break;
    case OMX_IndexParamResize:
    {
      OMX_PARAM_RESIZETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_RESIZETYPE(format));
    }
      break;
    case OMX_IndexConfigVisualisation:
    {
      OMX_CONFIG_VISUALISATIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_VISUALISATIONTYPE(format));
    }
      break;
    case OMX_IndexConfigSingleStep:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigPlayMode:
    {
      OMX_CONFIG_PLAYMODETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PLAYMODETYPE(format));
    }
      break;
    case OMX_IndexParamCameraCamplusId:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigCommonImageFilterParameters:
    {
      OMX_CONFIG_IMAGEFILTERPARAMSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_IMAGEFILTERPARAMSTYPE(format));
    }
      break;
    case OMX_IndexConfigTransitionControl:
    {
      OMX_CONFIG_TRANSITIONCONTROLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_TRANSITIONCONTROLTYPE(format));
    }
      break;
    case OMX_IndexConfigPresentationOffset:
    {
      OMX_TIME_CONFIG_TIMESTAMPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_TIMESTAMPTYPE(format));
    }
      break;
    case OMX_IndexParamSourceFunctions:
    {
      OMX_PARAM_STILLSFUNCTIONTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_STILLSFUNCTIONTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioMonoTrackControl:
    {
      OMX_CONFIG_AUDIOMONOTRACKCONTROLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_AUDIOMONOTRACKCONTROLTYPE(format));
    }
      break;
    case OMX_IndexParamCameraImagePool:
    {
      OMX_PARAM_CAMERAIMAGEPOOLTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAMERAIMAGEPOOLTYPE(format));
    }
      break;
    case OMX_IndexConfigCameraISPOutputPoolHeight:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamImagePoolSize:
    {
      OMX_PARAM_IMAGEPOOLSIZETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_IMAGEPOOLSIZETYPE(format));
    }
      break;
    case OMX_IndexParamImagePoolExternal:
    {
      OMX_PARAM_IMAGEPOOLEXTERNALTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_IMAGEPOOLEXTERNALTYPE(format));
    }
      break;
    case OMX_IndexParamRUTILFifoInfo:
    {
      OMX_PARAM_RUTILFIFOINFOTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_RUTILFIFOINFOTYPE(format));
    }
      break;
    case OMX_IndexParamILFifoConfig:
    {
      OMX_PARAM_ILFIFOCONFIG format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_ILFIFOCONFIG(format));
    }
      break;
    case OMX_IndexConfigCameraSensorModes:
    {
      OMX_CONFIG_CAMERASENSORMODETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CAMERASENSORMODETYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmPortStats:
    {
      OMX_CONFIG_BRCMPORTSTATSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMPORTSTATSTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmPortBufferStats:
    {
      OMX_CONFIG_BRCMPORTBUFFERSTATSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMPORTBUFFERSTATSTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmCameraStats:
    {
      OMX_CONFIG_BRCMCAMERASTATSTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMCAMERASTATSTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmIOPerfStats:
    {
      OMX_CONFIG_BRCMIOPERFSTATSTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMIOPERFSTATSTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonSharpness:
    {
      OMX_CONFIG_SHARPNESSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_SHARPNESSTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonFlickerCancellation:
    {
      OMX_CONFIG_FLICKERCANCELTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_FLICKERCANCELTYPE(format));
    }
      break;
    case OMX_IndexParamCameraSwapImagePools:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamCameraSingleBufferCaptureInput:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonRedEyeRemoval:
    {
      OMX_CONFIG_REDEYEREMOVALTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_REDEYEREMOVALTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonFaceDetectionControl:
    {
      OMX_CONFIG_FACEDETECTIONCONTROLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_FACEDETECTIONCONTROLTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonFaceDetectionRegion:
    {
      OMX_CONFIG_FACEDETECTIONREGIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_FACEDETECTIONREGIONTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonInterlace:
    {
      OMX_CONFIG_INTERLACETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_INTERLACETYPE(format));
    }
      break;
    case OMX_IndexParamISPTunerName:
    {
      OMX_PARAM_CAMERAISPTUNERTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAMERAISPTUNERTYPE(format));
    }
      break;
    case OMX_IndexParamCameraDeviceNumber:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamCameraDevicesPresent:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigCameraInputFrame:
    {
      OMX_CONFIG_IMAGEPTRTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_IMAGEPTRTYPE(format));
    }
      break;
    case OMX_IndexConfigStillColourDenoiseEnable:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigVideoColourDenoiseEnable:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigAFAssistLight:
    {
      OMX_CONFIG_AFASSISTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_AFASSISTTYPE(format));
    }
      break;
    case OMX_IndexConfigSmartShakeReductionEnable:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigInputCropPercentages:
    {
      OMX_CONFIG_INPUTCROPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_INPUTCROPTYPE(format));
    }
      break;
    case OMX_IndexConfigStillsAntiShakeEnable:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigWaitForFocusBeforeCapture:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigAudioRenderingLatency:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigDrawBoxAroundFaces:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamCodecRequirements:
    {
      OMX_PARAM_CODECREQUIREMENTSTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CODECREQUIREMENTSTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmEGLImageMemHandle:
    {
      OMX_CONFIG_BRCMEGLIMAGEMEMHANDLETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMEGLIMAGEMEMHANDLETYPE(format));
    }
      break;
    case OMX_IndexConfigPrivacyIndicator:
    {
      OMX_CONFIG_PRIVACYINDICATORTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PRIVACYINDICATORTYPE(format));
    }
      break;
    case OMX_IndexParamCameraFlashType:
    {
      OMX_PARAM_CAMERAFLASHTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAMERAFLASHTYPE(format));
    }
      break;
    case OMX_IndexConfigCameraEnableStatsPass:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigCameraFlashConfig:
    {
      OMX_CONFIG_CAMERAFLASHCONFIGTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CAMERAFLASHCONFIGTYPE(format));
    }
      break;
    case OMX_IndexConfigCaptureRawImageURI:
    {
      OMX_PARAM_CONTENTURITYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CONTENTURITYPE(format));
    }
      break;
    case OMX_IndexConfigCameraStripeFuncMinLines:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigCameraAlgorithmVersionDeprecated:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigCameraIsoReferenceValue:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigCameraCaptureAbortsAutoFocus:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmClockMissCount:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigFlashChargeLevel:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoEncodedSliceSize:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmAudioTrackGaplessPlayback:
    {
      OMX_CONFIG_BRCMAUDIOTRACKGAPLESSPLAYBACKTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMAUDIOTRACKGAPLESSPLAYBACKTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmAudioTrackChangeControl:
    {
      OMX_CONFIG_BRCMAUDIOTRACKCHANGECONTROLTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMAUDIOTRACKCHANGECONTROLTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmPixelAspectRatio:
    {
      OMX_CONFIG_POINTTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_POINTTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmPixelValueRange:
    {
      OMX_PARAM_BRCMPIXELVALUERANGETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMPIXELVALUERANGETYPE(format));
    }
      break;
    case OMX_IndexParamCameraDisableAlgorithm:
    {
      OMX_PARAM_CAMERADISABLEALGORITHMTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAMERADISABLEALGORITHMTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoIntraPeriodTime:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoIntraPeriod:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmAudioEffectControl:
    {
      OMX_CONFIG_BRCMAUDIOEFFECTCONTROLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMAUDIOEFFECTCONTROLTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmMinimumProcessingLatency:
    {
      OMX_CONFIG_BRCMMINIMUMPROCESSINGLATENCY format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMMINIMUMPROCESSINGLATENCY(format));
    }
      break;
    case OMX_IndexParamBrcmVideoAVCSEIEnable:
    {
      OMX_PARAM_BRCMVIDEOAVCSEIENABLETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMVIDEOAVCSEIENABLETYPE(format));
    }
      break;
    case OMX_IndexParamBrcmAllowMemChange:
    {
      OMX_PARAM_BRCMALLOWMEMCHANGETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMALLOWMEMCHANGETYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoEncoderMBRowsPerSlice:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamCameraAFAssistDeviceNumber_Deprecated:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamCameraPrivacyIndicatorDeviceNumber_Deprecated:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigCameraUseCase:
    {
      OMX_CONFIG_CAMERAUSECASETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CAMERAUSECASETYPE(format));
    }
      break;
    case OMX_IndexParamBrcmDisableProprietaryTunnels:
    {
      OMX_PARAM_BRCMDISABLEPROPRIETARYTUNNELSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMDISABLEPROPRIETARYTUNNELSTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmOutputBufferSize:
    {
      OMX_PARAM_BRCMOUTPUTBUFFERSIZETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMOUTPUTBUFFERSIZETYPE(format));
    }
      break;
    case OMX_IndexParamBrcmRetainMemory:
    {
      OMX_PARAM_BRCMRETAINMEMORYTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMRETAINMEMORYTYPE(format));
    }
      break;
    case OMX_IndexConfigCanFocus_Deprecated:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmImmutableInput:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamDynamicParameterFile:
    {
      OMX_PARAM_CONTENTURITYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CONTENTURITYPE(format));
    }
      break;
    case OMX_IndexParamUseDynamicParameterFile:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigCameraInfo:
    {
      OMX_CONFIG_CAMERAINFOTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CAMERAINFOTYPE(format));
    }
      break;
    case OMX_IndexConfigCameraFeatures:
    {
      OMX_CONFIG_CAMERAFEATURESTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CAMERAFEATURESTYPE(format));
    }
      break;
    case OMX_IndexConfigRequestCallback:
    {
      OMX_CONFIG_REQUESTCALLBACKTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_REQUESTCALLBACKTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmOutputBufferFullCount:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigCommonFocusRegionXY:
    {
      OMX_CONFIG_FOCUSREGIONXYTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_FOCUSREGIONXYTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmDisableEXIF:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigUserSettingsId:
    {
      OMX_CONFIG_U8TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_U8TYPE(format));
    }
      break;
    case OMX_IndexConfigCameraSettings:
    {
      OMX_CONFIG_CAMERASETTINGSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CAMERASETTINGSTYPE(format));
    }
      break;
    case OMX_IndexConfigDrawBoxLineParams:
    {
      OMX_CONFIG_DRAWBOXLINEPARAMS format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_DRAWBOXLINEPARAMS(format));
    }
      break;
    case OMX_IndexParamCameraRmiControl_Deprecated:
    {
      OMX_PARAM_CAMERARMITYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAMERARMITYPE(format));
    }
      break;
    case OMX_IndexConfigBurstCapture:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmEnableIJGTableScaling:
    {
      OMX_PARAM_IJGSCALINGTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_IJGSCALINGTYPE(format));
    }
      break;
    case OMX_IndexConfigPowerDown:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmSyncOutput:
    {
      OMX_CONFIG_BRCMSYNCOUTPUTTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMSYNCOUTPUTTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoRequestIFrame:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmNALSSeparate:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigConfirmView:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigDrmView:
    {
      OMX_CONFIG_DRMVIEWTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_DRMVIEWTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoIntraRefresh:
    {
      OMX_VIDEO_PARAM_INTRAREFRESHTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_PARAM_INTRAREFRESHTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmMaxFileSize:
    {
      OMX_PARAM_BRCMU64TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMU64TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmCRCEnable:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmCRC:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigCameraRmiInUse_Deprecated:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmAudioSource:
    {
      OMX_CONFIG_BRCMAUDIOSOURCETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMAUDIOSOURCETYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmAudioDestination:
    {
      OMX_CONFIG_BRCMAUDIODESTINATIONTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMAUDIODESTINATIONTYPE(format));
    }
      break;
    case OMX_IndexParamAudioDdp:
    {
      OMX_AUDIO_PARAM_DDPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_DDPTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmThumbnail:
    {
      OMX_PARAM_BRCMTHUMBNAILTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMTHUMBNAILTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmDisableLegacyBlocks_Deprecated:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmCameraInputAspectRatio:
    {
      OMX_PARAM_BRCMASPECTRATIOTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMASPECTRATIOTYPE(format));
    }
      break;
    case OMX_IndexParamDynamicParameterFileFailFatal:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoDecodeErrorConcealment:
    {
      OMX_PARAM_BRCMVIDEODECODEERRORCONCEALMENTTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMVIDEODECODEERRORCONCEALMENTTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmInterpolateMissingTimestamps:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmSetCodecPerformanceMonitoring:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigFlashInfo:
    {
      OMX_CONFIG_FLASHINFOTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_FLASHINFOTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmMaxFrameSkips:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigDynamicRangeExpansion:
    {
      OMX_CONFIG_DYNAMICRANGEEXPANSIONTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_DYNAMICRANGEEXPANSIONTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmFlushCallbackId:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmTransposeBufferCount:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigFaceRecognitionControl:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigFaceRecognitionSaveFace:
    {
      OMX_PARAM_BRCMU64TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMU64TYPE(format));
    }
      break;
    case OMX_IndexConfigFaceRecognitionDatabaseUri:
    {
      OMX_PARAM_CONTENTURITYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CONTENTURITYPE(format));
    }
      break;
    case OMX_IndexConfigClockAdjustment:
    {
      OMX_TIME_CONFIG_TIMESTAMPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_TIMESTAMPTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmThreadAffinity:
    {
      OMX_PARAM_BRCMTHREADAFFINITYTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMTHREADAFFINITYTYPE(format));
    }
      break;
    case OMX_IndexParamAsynchronousOutput:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigAsynchronousFailureURI:
    {
      OMX_PARAM_CONTENTURITYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CONTENTURITYPE(format));
    }
      break;
    case OMX_IndexConfigCommonFaceBeautification:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonSceneDetectionControl:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigCommonSceneDetected:
    {
      OMX_CONFIG_SCENEDETECTTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_SCENEDETECTTYPE(format));
    }
      break;
    case OMX_IndexParamDisableVllPool:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmDrawStaticBox:
    {
      OMX_CONFIG_STATICBOXTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_STATICBOXTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmClockReferenceSource:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamPassBufferMarks:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigPortCapturing:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmDecoderPassThrough:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmMaxCorruptMBs:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmGlobalAudioMute:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamCameraCaptureMode:
    {
      OMX_PARAM_CAMERACAPTUREMODETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAMERACAPTUREMODETYPE(format));
    }
      break;
    case OMX_IndexParamBrcmDrmEncryption:
    {
      OMX_PARAM_BRCMDRMENCRYPTIONTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMDRMENCRYPTIONTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmCameraRnDPreprocess:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmCameraRnDPostprocess:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmAudioTrackChangeCount:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamCommonUseStcTimestamps:
    {
      OMX_PARAM_TIMESTAMPMODETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_TIMESTAMPMODETYPE(format));
    }
      break;
    case OMX_IndexConfigBufferStall:
    {
      OMX_CONFIG_BUFFERSTALLTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BUFFERSTALLTYPE(format));
    }
      break;
    case OMX_IndexConfigRefreshCodec:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamCaptureStatus:
    {
      OMX_PARAM_CAPTURESTATETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAPTURESTATETYPE(format));
    }
      break;
    case OMX_IndexConfigTimeInvalidStartTime:
    {
      OMX_TIME_CONFIG_TIMESTAMPTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_TIME_CONFIG_TIMESTAMPTYPE(format));
    }
      break;
    case OMX_IndexConfigLatencyTarget:
    {
      OMX_CONFIG_LATENCYTARGETTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_LATENCYTARGETTYPE(format));
    }
      break;
    case OMX_IndexConfigMinimiseFragmentation:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamPortMaxFrameSize:
    {
      OMX_FRAMESIZETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_FRAMESIZETYPE(format));
    }
      break;
    case OMX_IndexParamComponentName:
    {
      OMX_PARAM_COMPONENTROLETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_COMPONENTROLETYPE(format));
    }
      break;
    case OMX_IndexConfigEncLevelExtension:
    {
      OMX_VIDEO_CONFIG_LEVEL_EXTEND format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_CONFIG_LEVEL_EXTEND(format));
    }
      break;
    case OMX_IndexConfigTemporalDenoiseEnable:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmLazyImagePoolDestroy:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmEEDEEnable:
    {
      OMX_VIDEO_EEDE_ENABLE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_EEDE_ENABLE(format));
    }
      break;
    case OMX_IndexParamBrcmEEDELossRate:
    {
      OMX_VIDEO_EEDE_LOSSRATE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_VIDEO_EEDE_LOSSRATE(format));
    }
      break;
    case OMX_IndexParamAudioDts:
    {
      OMX_AUDIO_PARAM_DTSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_AUDIO_PARAM_DTSTYPE(format));
    }
      break;
    case OMX_IndexParamNumOutputChannels:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmHighDynamicRange:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmPoolMemAllocSize:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmBufferFlagFilter:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoEncodeMinQuant:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoEncodeMaxQuant:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamRateControlModel:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmExtraBuffers:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigFieldOfView:
    {
      OMX_CONFIG_BRCMFOVTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMFOVTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmAlignHoriz:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmAlignVert:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamColorSpace:
    {
      OMX_PARAM_COLORSPACETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_COLORSPACETYPE(format));
    }
      break;
    case OMX_IndexParamBrcmDroppablePFrames:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoInitialQuant:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoEncodeQpP:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoRCSliceDQuant:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoFrameLimitBits:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoPeakRate:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoH264DisableCABAC:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoH264LowLatency:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoH264AUDelimiters:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoH264DeblockIDC:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmVideoH264IntraMBMode:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexConfigContrastEnhance:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamCameraCustomSensorConfig:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmHeaderOnOpen:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmUseRegisterFile:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmRegisterFileFailFatal:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmConfigFileRegisters:
    {
      OMX_PARAM_BRCMCONFIGFILETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMCONFIGFILETYPE(format));
    }
      break;
    case OMX_IndexParamBrcmConfigFileChunkRegisters:
    {
      OMX_PARAM_BRCMCONFIGFILECHUNKTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMCONFIGFILECHUNKTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmAttachLog:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamCameraZeroShutterLag:
    {
      OMX_CONFIG_ZEROSHUTTERLAGTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_ZEROSHUTTERLAGTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmFpsRange:
    {
      OMX_PARAM_BRCMFRAMERATERANGETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMFRAMERATERANGETYPE(format));
    }
      break;
    case OMX_IndexParamCaptureExposureCompensation:
    {
      OMX_PARAM_S32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_S32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoPrecodeForQP:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoTimestampFifo:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamSWSharpenDisable:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmFlashRequired:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoDrmProtectBuffer:
    {
      OMX_PARAM_BRCMVIDEODRMPROTECTBUFFERTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMVIDEODRMPROTECTBUFFERTYPE(format));
    }
      break;
    case OMX_IndexParamSWSaturationDisable:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoDecodeConfigVD3:
    {
      OMX_PARAM_BRCMVIDEODECODECONFIGVD3TYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BRCMVIDEODECODECONFIGVD3TYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmPowerMonitor:
    {
      OMX_CONFIG_BOOLEANTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmZeroCopy:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoEGLRenderDiscardMode:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoAVC_VCLHRDEnable:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoAVC_LowDelayHRDEnable:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoCroppingDisable:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoAVCInlineHeaderEnable:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmAudioDownmixCoefficients:
    {
      OMX_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS(format));
    }
      break;
    case OMX_IndexConfigBrcmAudioDownmixCoefficients8x8:
    {
      OMX_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS8x8 format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMAUDIODOWNMIXCOEFFICIENTS8x8(format));
    }
      break;
    case OMX_IndexConfigBrcmAudioMaxSample:
    {
      OMX_CONFIG_BRCMAUDIOMAXSAMPLE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMAUDIOMAXSAMPLE(format));
    }
      break;
    case OMX_IndexConfigCustomAwbGains:
    {
      OMX_CONFIG_CUSTOMAWBGAINSTYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_CUSTOMAWBGAINSTYPE(format));
    }
      break;
    case OMX_IndexParamRemoveImagePadding:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoAVCInlineVectorsEnable:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmRenderStats:
    {
      OMX_CONFIG_BRCMRENDERSTATSTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMRENDERSTATSTYPE(format));
    }
      break;
    case OMX_IndexConfigBrcmCameraAnnotate:
    {
      OMX_CONFIG_BRCMANNOTATETYPE format;
      GetParameterTemplate(&format, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_BRCMANNOTATETYPE(format));
    }
      break;
    case OMX_IndexParamBrcmLockStepEnable:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmTimeScale:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamCameraInterface:
    {
      OMX_PARAM_CAMERAINTERFACETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAMERAINTERFACETYPE(format));
    }
      break;
    case OMX_IndexParamCameraClockingMode:
    {
      OMX_PARAM_CAMERACLOCKINGMODETYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAMERACLOCKINGMODETYPE(format));
    }
      break;
    case OMX_IndexParamCameraRxConfig:
    {
      OMX_PARAM_CAMERARXCONFIG_TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAMERARXCONFIG_TYPE(format));
    }
      break;
    case OMX_IndexParamCameraRxTiming:
    {
      OMX_PARAM_CAMERARXTIMING_TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_CAMERARXTIMING_TYPE(format));
    }
      break;
    case OMX_IndexParamDynamicParameterConfig:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    case OMX_IndexParamBrcmVideoAVCSPSTimingEnable:
    {
      OMX_CONFIG_PORTBOOLEANTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_CONFIG_PORTBOOLEANTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmBayerOrder:
    {
      OMX_PARAM_BAYERORDERTYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_BAYERORDERTYPE(format));
    }
      break;
    case OMX_IndexParamBrcmMaxNumCallbacks:
    {
      OMX_PARAM_U32TYPE format;
      GetParameterTemplate(&format, port, handle, nParamIndex);
      return scope.Escape(GET_PARAM_U32TYPE(format));
    }
      break;
    default:
      break;
  }
  return scope.Escape(ret);
}
