VTrain_BothSides/tools/jetson_multimedia/include/nvosd.h

324 lines
11 KiB
C

/*
* Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. The names of its contributors may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file
* <b>NVIDIA Multimedia Utilities: On-Screen Display Manager</b>
*
* This file defines the NvOSD library to be used to draw rectangles and text over the frame
* for given parameters.
*/
/**
* @defgroup ee_nvosd_group On-Screen Display Manager
* Defines the NvOSD library to be used to draw rectangles and text over the frame
* for given parameters.
* @ingroup common_utility_group
* @{
*/
#ifndef __NVOSD_DEFS__
#define __NVOSD_DEFS__
#ifdef __cplusplus
extern "C"
{
#endif
#define NVOSD_MAX_NUM_RECTS 128
#define MAX_BG_CLR 20
/**
* Holds the color parameters of the box or text to be overlayed.
*/
typedef struct _NvOSD_ColorParams {
double red; /**< Holds red component of color.
Value must be in the range 0-1. */
double green; /**< Holds green component of color.
Value must be in the range 0-1.*/
double blue; /**< Holds blue component of color.
Value must be in the range 0-1.*/
double alpha; /**< Holds alpha component of color.
Value must be in the range 0-1.*/
}NvOSD_ColorParams;
/**
* Holds the font parameters of the text to be overlayed.
*/
typedef struct _NvOSD_FontParams {
char * font_name; /**< Holds pointer to the string containing
font name. */
unsigned int font_size; /**< Holds size of the font. */
NvOSD_ColorParams font_color; /**< Holds font color. */
}NvOSD_FontParams;
/**
* Holds the text parameters of the text to be overlayed.
*/
typedef struct _NvOSD_TextParams {
char * display_text; /**< Holds the text to be overlayed. */
unsigned int x_offset; /**< Holds horizontal offset w.r.t top left pixel of
the frame. */
unsigned int y_offset; /**< Holds vertical offset w.r.t top left pixel of
the frame. */
NvOSD_FontParams font_params; /**< font_params. */
int set_bg_clr; /**< Boolean to indicate text has background color. */
NvOSD_ColorParams text_bg_clr; /**< Background color for text. */
}NvOSD_TextParams;
typedef struct _NvOSD_Color_info {
int id;
NvOSD_ColorParams color;
}NvOSD_Color_info;
/**
* Holds the box parameters of the box to be overlayed.
*/
typedef struct _NvOSD_RectParams {
unsigned int left; /**< Holds left coordinate of the box in pixels. */
unsigned int top; /**< Holds top coordinate of the box in pixels. */
unsigned int width; /**< Holds width of the box in pixels. */
unsigned int height; /**< Holds height of the box in pixels. */
unsigned int border_width; /**< Holds border_width of the box in pixels. */
NvOSD_ColorParams border_color; /**< Holds color params of the border
of the box. */
unsigned int has_bg_color; /**< Holds boolean value indicating whether box
has background color. */
unsigned int reserved; /** Reserved field for future usage.
For internal purpose only */
NvOSD_ColorParams bg_color; /**< Holds background color of the box. */
int has_color_info;
int color_id;
}NvOSD_RectParams;
/**
* Holds the box parameters of the line to be overlayed.
*/
typedef struct _NvOSD_LineParams {
unsigned int x1; /**< Holds left coordinate of the box in pixels. */
unsigned int y1; /**< Holds top coordinate of the box in pixels. */
unsigned int x2; /**< Holds width of the box in pixels. */
unsigned int y2; /**< Holds height of the box in pixels. */
unsigned int line_width; /**< Holds border_width of the box in pixels. */
NvOSD_ColorParams line_color; /**< Holds color params of the border
of the box. */
} NvOSD_LineParams;
/**
* Holds the arrow parameters to be overlayed.
*/
typedef struct _NvOSD_ArrowParams {
unsigned int x1; /**< Holds start horizontal coordinate in pixels. */
unsigned int y1; /**< Holds start vertical coordinate in pixels. */
unsigned int x2; /**< Holds end horizontal coordinate in pixels. */
unsigned int y2; /**< Holds end vertical coordinate in pixels. */
unsigned int arrow_width; /**< Holds arrow_width in pixels. */
unsigned int start_arrow_head; /** Holds boolean value indicating whether
arrow head is at start or at end.
Setting to value 1 indicates arrow head is
at start. Otherwise it is at end. */
NvOSD_ColorParams arrow_color; /**< Holds color params of the arrow box. */
unsigned int reserved; /**< reserved field for future usage.
For internal purpose only. */
}NvOSD_ArrowParams;
/**
* Holds the circle parameters to be overlayed.
*/
typedef struct _NvOSD_CircleParams {
unsigned int xc; /**< Holds start horizontal coordinate in pixels. */
unsigned int yc; /**< Holds start vertical coordinate in pixels. */
unsigned int radius; /**< Holds radius of circle in pixels. */
NvOSD_ColorParams circle_color; /**< Holds color params of the arrow box. */
unsigned int reserved; /**< reserved field for future usage.
For internal purpose only. */
}NvOSD_CircleParams;
/**
* List modes used to overlay boxes and text.
*/
typedef enum{
MODE_CPU, /**< Selects CPU for OSD processing.
Works with RGBA data only */
MODE_GPU, /**< Selects GPU for OSD processing.
Yet to be implemented */
MODE_HW /**< Selects NV HW engine for rectangle draw and mask.
This mode works with both YUV and RGB data.
It does not consider alpha parameter.
Not applicable for drawing text. */
} NvOSD_Mode;
/**
* Creates NvOSD context.
*
* @returns A pointer to NvOSD context, NULL in case of failure.
*/
void *nvosd_create_context(void);
/**
* Destroys NvOSD context.
*
* @param[in] nvosd_ctx A pointer to NvOSD context.
*/
void nvosd_destroy_context(void *nvosd_ctx);
/**
* Sets clock parameters for the given context.
*
* The clock is overlayed when nvosd_put_text() is called.
* If no other text is to be overlayed, nvosd_put_text must be called with
* @a num_strings as 0 and @a text_params_list as NULL.
*
* @param[in] nvosd_ctx A pointer to NvOSD context.
* @param[in] clk_params A pointer to NvOSD_TextParams structure for the clock
* to be overlayed; NULL to disable the clock.
*/
void nvosd_set_clock_params(void *nvosd_ctx, NvOSD_TextParams *clk_params);
/**
* Overlays clock and given text at given location on a buffer.
*
* To overlay the clock, you must set clock params using
* nvosd_set_clock_params().
* You must ensure that the length of @a text_params_list is at least
* @a num_strings.
*
* @note Currently only #MODE_CPU is supported. Specifying other modes wil have
* no effect.
*
* @param[in] nvosd_ctx A pointer to NvOSD context.
* @param[in] mode Mode selection to draw the text.
* @param[in] fd DMABUF FD of buffer on which text is to be overlayed.
* @param[in] num_strings Number of strings to be overlayed.
* @param[in] text_params_list A pointer to an array of NvOSD_TextParams
* structure for the clock and text to be overlayed.
*
* @returns 0 for success, -1 for failure.
*/
int nvosd_put_text(void *nvosd_ctx, NvOSD_Mode mode, int fd, int num_strings,
NvOSD_TextParams *text_params_list);
/**
* Overlays boxes at given location on a buffer.
*
* Boxes can be configured with:
* a. Only border
* To draw boxes with only border, you must set @a border_width and set
* @a has_bg_color to 0 for the given box.
* b. Border and background color
* To draw boxes with border and background color, you must set @a
* border_width and set @a has_bg_color to 1, and specify background color
* parameters for the given box.
* c. Solid fill acting as mask region
* To draw boxes with solid fill acting as mask region, you must set @a
* border_width to 0 and @a has_bg_color to 1 for the given box.
*
*
* You must ensure that the length of @a rect_params_list is at least
* @a num_rects.
*
* @param[in] nvosd_ctx A pointer to NvOSD context.
* @param[in] mode Mode selection to draw the boxes.
* @param[in] fd DMABUF FD of buffer on which boxes are to be overlayed.
* @param[in] num_rects Number of boxes to be overlayed.
* @param[in] rect_params_list A pointer to an array of NvOSD_TextParams
* structure for the clock and text to be overlayed.
*
* @returns 0 for success, -1 for failure.
*/
int nvosd_draw_rectangles(void *nvosd_ctx, NvOSD_Mode mode, int fd,
int num_rects, NvOSD_RectParams *rect_params_list);
int nvosd_init_colors_for_hw_blend(void *nvosd_ctx, NvOSD_Color_info * color_info,
int num_classes);
int nvosd_draw_arrows(void *nvosd_ctx, NvOSD_Mode mode, int fd,
int num_arrows, NvOSD_ArrowParams *arrow_params_list);
int nvosd_draw_circles(void *nvosd_ctx, NvOSD_Mode mode, int fd,
int num_circles, NvOSD_CircleParams *circle_params_list);
int nvosd_draw_lines(void *nvosd_ctx, NvOSD_Mode mode, int fd,
int num_lines, NvOSD_LineParams *line_params_list);
#ifdef __cplusplus
}
#endif
/** @} */
#endif