/*
 * va_drm_utils.h - VA/DRM Utilities
 *
 * Copyright (c) 2012 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 INTEL 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.
 */

#ifndef VA_DRM_UTILS_H
#define VA_DRM_UTILS_H

#include <va/va_backend.h>

/**
 * \file va_drm_utils.h
 * \brief VA/DRM Utilities
 *
 * This file contains VA/DRM utility functions. The API herein defined is
 * internal to libva. Users include the VA/DRM API itself or VA/Android,
 * should it be based on DRM.
 */

#ifdef __cplusplus
extern "C" {
#endif
DLL_HIDDEN
VAStatus
VA_DRM_GetNumCandidates(VADriverContextP ctx, int * num_candidates);
/**
 * \brief Returns the VA driver name for the active display.
 *
 * This functions returns a newly allocated buffer in @driver_name_ptr that
 * contains the VA driver name for the active display. Active display means
 * the display obtained with any of the vaGetDisplay*() functions.
 *
 * The VADriverContext.drm_state structure must be valid, i.e. allocated
 * and containing an open DRM connection descriptor. The DRM connection
 * does *not* need to be authenticated as it only performs a call to
 * drmGetVersion().
 *
 * @param[in]   ctx     the pointer to a VADriverContext
 * @param[out]  driver_name_ptr the newly allocated buffer containing
 *     the VA driver name
 * @return VA_STATUS_SUCCESS if operation is successful, or another
 *     #VAStatus value otherwise.
 */
DLL_HIDDEN
VAStatus
VA_DRM_GetDriverName(VADriverContextP ctx, char **driver_name_ptr, int candidate_index);

/**
 * \brief Checks whether the file descriptor is a DRM Render-Nodes one
 *
 * This functions checks whether the supplied file descriptor @fd
 * falls into the set of DRM Render-Nodes.
 */
DLL_HIDDEN
int
VA_DRM_IsRenderNodeFd(int fd);

/**@}*/

#ifdef __cplusplus
}
#endif

#endif /* VA_DRM_UTILS_H */
