/*
 * Copyright (c) 2017 Intel Corporation. All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sub license, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice (including the
 * next paragraph) shall be included in all copies or substantial portions
 * of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

#include "va_str.h"

#define TOSTR(enumCase) case enumCase: return #enumCase

const char *vaProfileStr(VAProfile profile)
{
    switch (profile) {
    TOSTR(VAProfileNone);
    TOSTR(VAProfileMPEG2Simple);
    TOSTR(VAProfileMPEG2Main);
    TOSTR(VAProfileMPEG4Simple);
    TOSTR(VAProfileMPEG4AdvancedSimple);
    TOSTR(VAProfileMPEG4Main);
    TOSTR(VAProfileH264Main);
    TOSTR(VAProfileH264High);
    TOSTR(VAProfileVC1Simple);
    TOSTR(VAProfileVC1Main);
    TOSTR(VAProfileVC1Advanced);
    TOSTR(VAProfileH263Baseline);
    TOSTR(VAProfileH264ConstrainedBaseline);
    TOSTR(VAProfileJPEGBaseline);
    TOSTR(VAProfileVP8Version0_3);
    TOSTR(VAProfileH264MultiviewHigh);
    TOSTR(VAProfileH264StereoHigh);
    TOSTR(VAProfileHEVCMain);
    TOSTR(VAProfileHEVCMain10);
    TOSTR(VAProfileVP9Profile0);
    TOSTR(VAProfileVP9Profile1);
    TOSTR(VAProfileVP9Profile2);
    TOSTR(VAProfileVP9Profile3);
    TOSTR(VAProfileHEVCMain12);
    TOSTR(VAProfileHEVCMain422_10);
    TOSTR(VAProfileHEVCMain422_12);
    TOSTR(VAProfileHEVCMain444);
    TOSTR(VAProfileHEVCMain444_10);
    TOSTR(VAProfileHEVCMain444_12);
    TOSTR(VAProfileHEVCSccMain);
    TOSTR(VAProfileHEVCSccMain10);
    TOSTR(VAProfileHEVCSccMain444);
    TOSTR(VAProfileAV1Profile0);
    TOSTR(VAProfileAV1Profile1);
    TOSTR(VAProfileHEVCSccMain444_10);
    default: break;
    }
    return "<unknown profile>";
}


const char *vaEntrypointStr(VAEntrypoint entrypoint)
{
    switch (entrypoint) {
    TOSTR(VAEntrypointVLD);
    TOSTR(VAEntrypointIZZ);
    TOSTR(VAEntrypointIDCT);
    TOSTR(VAEntrypointMoComp);
    TOSTR(VAEntrypointDeblocking);
    TOSTR(VAEntrypointEncSlice);
    TOSTR(VAEntrypointEncPicture);
    TOSTR(VAEntrypointEncSliceLP);
    TOSTR(VAEntrypointVideoProc);
    TOSTR(VAEntrypointFEI);
    TOSTR(VAEntrypointStats);
    }
    return "<unknown entrypoint>";
}

const char *vaConfigAttribTypeStr(VAConfigAttribType configAttribType)
{
    switch (configAttribType) {
    TOSTR(VAConfigAttribRTFormat);
    TOSTR(VAConfigAttribSpatialResidual);
    TOSTR(VAConfigAttribSpatialClipping);
    TOSTR(VAConfigAttribIntraResidual);
    TOSTR(VAConfigAttribEncryption);
    TOSTR(VAConfigAttribRateControl);
    TOSTR(VAConfigAttribDecSliceMode);
    TOSTR(VAConfigAttribEncPackedHeaders);
    TOSTR(VAConfigAttribEncInterlaced);
    TOSTR(VAConfigAttribEncMaxRefFrames);
    TOSTR(VAConfigAttribEncMaxSlices);
    TOSTR(VAConfigAttribEncSliceStructure);
    TOSTR(VAConfigAttribEncMacroblockInfo);
    TOSTR(VAConfigAttribEncJPEG);
    TOSTR(VAConfigAttribEncQualityRange);
    TOSTR(VAConfigAttribEncSkipFrame);
    TOSTR(VAConfigAttribEncROI);
    TOSTR(VAConfigAttribEncRateControlExt);
    TOSTR(VAConfigAttribFEIFunctionType);
    TOSTR(VAConfigAttribFEIMVPredictors);
    TOSTR(VAConfigAttribDecJPEG);
    TOSTR(VAConfigAttribMaxPictureWidth);
    TOSTR(VAConfigAttribMaxPictureHeight);
    TOSTR(VAConfigAttribEncQuantization);
    TOSTR(VAConfigAttribEncIntraRefresh);
    TOSTR(VAConfigAttribProcessingRate);
    TOSTR(VAConfigAttribEncDirtyRect);
    TOSTR(VAConfigAttribEncParallelRateControl);
    TOSTR(VAConfigAttribEncDynamicScaling);
    TOSTR(VAConfigAttribDecProcessing);
    TOSTR(VAConfigAttribFrameSizeToleranceSupport);
    TOSTR(VAConfigAttribEncTileSupport);
    TOSTR(VAConfigAttribCustomRoundingControl);
    TOSTR(VAConfigAttribQPBlockSize);
    TOSTR(VAConfigAttribStats);
    TOSTR(VAConfigAttribMaxFrameSize);
    TOSTR(VAConfigAttribPredictionDirection);
    TOSTR(VAConfigAttribMultipleFrame);
    TOSTR(VAConfigAttribContextPriority);
    case VAConfigAttribTypeMax: break;
    }
    return "<unknown config attribute type>";
}

const char *vaBufferTypeStr(VABufferType bufferType)
{
    switch (bufferType) {
    TOSTR(VAPictureParameterBufferType);
    TOSTR(VAIQMatrixBufferType);
    TOSTR(VABitPlaneBufferType);
    TOSTR(VASliceGroupMapBufferType);
    TOSTR(VASliceParameterBufferType);
    TOSTR(VASliceDataBufferType);
    TOSTR(VAMacroblockParameterBufferType);
    TOSTR(VAResidualDataBufferType);
    TOSTR(VADeblockingParameterBufferType);
    TOSTR(VAImageBufferType);
    TOSTR(VAProtectedSliceDataBufferType);
    TOSTR(VAQMatrixBufferType);
    TOSTR(VAHuffmanTableBufferType);
    TOSTR(VAProbabilityBufferType);
    TOSTR(VAEncCodedBufferType);
    TOSTR(VAEncSequenceParameterBufferType);
    TOSTR(VAEncPictureParameterBufferType);
    TOSTR(VAEncSliceParameterBufferType);
    TOSTR(VAEncPackedHeaderParameterBufferType);
    TOSTR(VAEncPackedHeaderDataBufferType);
    TOSTR(VAEncMiscParameterBufferType);
    TOSTR(VAEncMacroblockParameterBufferType);
    TOSTR(VAEncMacroblockMapBufferType);
    TOSTR(VAProcPipelineParameterBufferType);
    TOSTR(VAProcFilterParameterBufferType);
    TOSTR(VAEncQPBufferType);
    TOSTR(VAEncFEIMVBufferType);
    TOSTR(VAEncFEIMBCodeBufferType);
    TOSTR(VAEncFEIDistortionBufferType);
    TOSTR(VAEncFEIMBControlBufferType);
    TOSTR(VAEncFEIMVPredictorBufferType);
    TOSTR(VAEncMacroblockDisableSkipMapBufferType);
    TOSTR(VADecodeStreamoutBufferType);
    TOSTR(VAStatsStatisticsParameterBufferType);
    TOSTR(VAStatsStatisticsBufferType);
    TOSTR(VAStatsStatisticsBottomFieldBufferType);
    TOSTR(VAStatsMVBufferType);
    TOSTR(VAStatsMVPredictorBufferType);
    TOSTR(VAEncFEICTBCmdBufferType);
    TOSTR(VAEncFEICURecordBufferType);
    TOSTR(VASubsetsParameterBufferType);
    TOSTR(VAContextParameterUpdateBufferType);
    case VABufferTypeMax: break;
    }
    return "<unknown buffer type>";
}

const char *vaStatusStr(VAStatus status)
{
    switch(status){
        TOSTR(VA_STATUS_SUCCESS);
        TOSTR(VA_STATUS_ERROR_OPERATION_FAILED);
        TOSTR(VA_STATUS_ERROR_ALLOCATION_FAILED);
        TOSTR(VA_STATUS_ERROR_INVALID_DISPLAY);
        TOSTR(VA_STATUS_ERROR_INVALID_CONFIG);
        TOSTR(VA_STATUS_ERROR_INVALID_CONTEXT);
        TOSTR(VA_STATUS_ERROR_INVALID_SURFACE);
        TOSTR(VA_STATUS_ERROR_INVALID_BUFFER);
        TOSTR(VA_STATUS_ERROR_INVALID_IMAGE);
        TOSTR(VA_STATUS_ERROR_INVALID_SUBPICTURE);
        TOSTR(VA_STATUS_ERROR_ATTR_NOT_SUPPORTED);
        TOSTR(VA_STATUS_ERROR_MAX_NUM_EXCEEDED);
        TOSTR(VA_STATUS_ERROR_UNSUPPORTED_PROFILE);
        TOSTR(VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT);
        TOSTR(VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT);
        TOSTR(VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE);
        TOSTR(VA_STATUS_ERROR_SURFACE_BUSY);
        TOSTR(VA_STATUS_ERROR_FLAG_NOT_SUPPORTED);
        TOSTR(VA_STATUS_ERROR_INVALID_PARAMETER);
        TOSTR(VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED);
        TOSTR(VA_STATUS_ERROR_UNIMPLEMENTED);
        TOSTR(VA_STATUS_ERROR_SURFACE_IN_DISPLAYING);
        TOSTR(VA_STATUS_ERROR_INVALID_IMAGE_FORMAT);
        TOSTR(VA_STATUS_ERROR_DECODING_ERROR);
        TOSTR(VA_STATUS_ERROR_ENCODING_ERROR);
        TOSTR(VA_STATUS_ERROR_INVALID_VALUE);
        TOSTR(VA_STATUS_ERROR_UNSUPPORTED_FILTER);
        TOSTR(VA_STATUS_ERROR_INVALID_FILTER_CHAIN);
        TOSTR(VA_STATUS_ERROR_HW_BUSY);
        TOSTR(VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE);
        TOSTR(VA_STATUS_ERROR_NOT_ENOUGH_BUFFER);
        TOSTR(VA_STATUS_ERROR_UNKNOWN);
        default: break;
    }
    return "unknown return value";
}

#undef TOSTR
