123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- /*
- * Copyright (c) 2016-2023, 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);
- int nvosd_gpu_apply(void *nvosd_ctx, int fd);
- #ifdef __cplusplus
- }
- #endif
- /** @} */
- #endif
|