.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later OR GPL-2.0 .. c:namespace:: dtv.legacy.osd .. _dvb_osd: ============== DVB OSD Device ============== .. attention:: Do **not** use in new drivers! See: :ref:`legacy_dvb_decoder_notes` The DVB OSD device controls the OnScreen-Display of the AV7110 based DVB-cards with hardware MPEG2 decoder. It can be accessed through ``/dev/dvb/adapter?/osd0``. Data types and ioctl definitions can be accessed by including ``linux/dvb/osd.h`` in your application. The OSD is not a frame-buffer like on many other cards. It is a kind of canvas one can draw on. The color-depth is limited depending on the memory size installed. An appropriate palette of colors has to be set up. The installed memory size can be identified with the `OSD_GET_CAPABILITY`_ ioctl. OSD Data Types ============== OSD_Command ----------- Synopsis ~~~~~~~~ .. code-block:: c typedef enum { /* All functions return -2 on "not open" */ OSD_Close = 1, OSD_Open, OSD_Show, OSD_Hide, OSD_Clear, OSD_Fill, OSD_SetColor, OSD_SetPalette, OSD_SetTrans, OSD_SetPixel, OSD_GetPixel, OSD_SetRow, OSD_SetBlock, OSD_FillRow, OSD_FillBlock, OSD_Line, OSD_Query, OSD_Test, OSD_Text, OSD_SetWindow, OSD_MoveWindow, OSD_OpenRaw, } OSD_Command; Commands ~~~~~~~~ .. note:: All functions return -2 on "not open" .. flat-table:: :header-rows: 1 :stub-columns: 0 - .. - Command - | Used variables of ``struct`` `osd_cmd_t`_. | Usage{variable} if alternative use. - :cspan:`2` Description - .. - ``OSD_Close`` - - - | Disables OSD and releases the buffers. | Returns 0 on success. - .. - ``OSD_Open`` - | x0,y0,x1,y1, | BitPerPixel[2/4/8]{color&0x0F}, | mix[0..15]{color&0xF0} - | Opens OSD with this size and bit depth | Returns 0 on success, | -1 on DRAM allocation error, | -2 on "already open". - .. - ``OSD_Show`` - - - | Enables OSD mode. | Returns 0 on success. - .. - ``OSD_Hide`` - - - | Disables OSD mode. | Returns 0 on success. - .. - ``OSD_Clear`` - - - | Sets all pixel to color 0. | Returns 0 on success. - .. - ``OSD_Fill`` - color - | Sets all pixel to color . | Returns 0 on success. - .. - ``OSD_SetColor`` - | color, | R{x0},G{y0},B{x1}, | opacity{y1} - | Set palette entry to , and apply | R,G,B: 0..255 | R=Red, G=Green, B=Blue | opacity=0: pixel opacity 0% (only video pixel shows) | opacity=1..254: pixel opacity as specified in header | opacity=255: pixel opacity 100% (only OSD pixel shows) | Returns 0 on success, -1 on error. - .. - ``OSD_SetPalette`` - | firstcolor{color}, | lastcolor{x0},data - | Set a number of entries in the palette. | Sets the entries "firstcolor" through "lastcolor" from the array "data". | Data has 4 byte for each color: | R,G,B, and a opacity value: 0->transparent, 1..254->mix, 255->pixel - .. - ``OSD_SetTrans`` - transparency{color} - | Sets transparency of mixed pixel (0..15). | Returns 0 on success. - .. - ``OSD_SetPixel`` - x0,y0,color - | Sets pixel , to color number . | Returns 0 on success, -1 on error. - .. - ``OSD_GetPixel`` - x0,y0 - | Returns color number of pixel ,, or -1. | Command currently not supported by the AV7110! - .. - ``OSD_SetRow`` - x0,y0,x1,data - | Fills pixels x0,y through x1,y with the content of data[]. | Returns 0 on success, -1 on clipping all pixel (no pixel drawn). - .. - ``OSD_SetBlock`` - | x0,y0,x1,y1, | increment{color}, | data - | Fills pixels x0,y0 through x1,y1 with the content of data[]. | Inc contains the width of one line in the data block, | inc<=0 uses block width as line width. | Returns 0 on success, -1 on clipping all pixel. - .. - ``OSD_FillRow`` - x0,y0,x1,color - | Fills pixels x0,y through x1,y with the color . | Returns 0 on success, -1 on clipping all pixel. - .. - ``OSD_FillBlock`` - x0,y0,x1,y1,color - | Fills pixels x0,y0 through x1,y1 with the color . | Returns 0 on success, -1 on clipping all pixel. - .. - ``OSD_Line`` - x0,y0,x1,y1,color - | Draw a line from x0,y0 to x1,y1 with the color . | Returns 0 on success. - .. - ``OSD_Query`` - | x0,y0,x1,y1, | xasp{color}; yasp=11 - | Fills parameters with the picture dimensions and the pixel aspect ratio. | Returns 0 on success. | Command currently not supported by the AV7110! - .. - ``OSD_Test`` - - - | Draws a test picture. | For debugging purposes only. | Returns 0 on success. - .. - ``OSD_Text`` - x0,y0,size,color,text - Draws a text at position x0,y0 with the color . - .. - ``OSD_SetWindow`` - x0 - Set window with number 0` chapter. .. flat-table:: :header-rows: 0 :stub-columns: 0 - .. - ``EINVAL`` - Command is out of range. ----- OSD_GET_CAPABILITY ------------------ Synopsis ~~~~~~~~ .. c:macro:: OSD_GET_CAPABILITY .. code-block:: c int ioctl(int fd, int request = OSD_GET_CAPABILITY, struct osd_cap_t *cap) Arguments ~~~~~~~~~ .. flat-table:: :header-rows: 0 :stub-columns: 0 - .. - ``int fd`` - :cspan:`1` File descriptor returned by a previous call to `open()`_. - .. - ``int request`` - Equals ``OSD_GET_CAPABILITY`` for this command. - .. - ``unsigned int *cap`` - Pointer to the location of the structure `osd_cap_t`_ for this command. Description ~~~~~~~~~~~ .. attention:: Do **not** use in new drivers! See: :ref:`legacy_dvb_decoder_notes` This ioctl is used to get the capabilities of the OSD of the AV7110 based DVB-decoder-card in use. .. note:: The structure osd_cap_t has to be setup by the user and passed to the driver. Return Value ~~~~~~~~~~~~ On success 0 is returned, on error -1 and the ``errno`` variable is set appropriately. The generic error codes are described at the :ref:`Generic Error Codes ` chapter. .. flat-table:: :header-rows: 0 :stub-columns: 0 - .. - ``EINVAL`` - Unsupported capability. ----- open() ------ Synopsis ~~~~~~~~ .. code-block:: c #include .. c:function:: int open(const char *deviceName, int flags) Arguments ~~~~~~~~~ .. flat-table:: :header-rows: 0 :stub-columns: 0 - .. - ``const char *deviceName`` - Name of specific OSD device. - .. - :rspan:`3` ``int flags`` - :cspan:`1` A bit-wise OR of the following flags: - .. - ``O_RDONLY`` - read-only access - .. - ``O_RDWR`` - read/write access - .. - ``O_NONBLOCK`` - | Open in non-blocking mode | (blocking mode is the default) Description ~~~~~~~~~~~ This system call opens a named OSD device (e.g. ``/dev/dvb/adapter?/osd0``) for subsequent use. Return Value ~~~~~~~~~~~~ .. flat-table:: :header-rows: 0 :stub-columns: 0 - .. - ``ENODEV`` - Device driver not loaded/available. - .. - ``EINTERNAL`` - Internal error. - .. - ``EBUSY`` - Device or resource busy. - .. - ``EINVAL`` - Invalid argument. ----- close() ------- Synopsis ~~~~~~~~ .. c:function:: int close(int fd) Arguments ~~~~~~~~~ .. flat-table:: :header-rows: 0 :stub-columns: 0 - .. - ``int fd`` - :cspan:`1` File descriptor returned by a previous call to `open()`_ . Description ~~~~~~~~~~~ This system call closes a previously opened OSD device. Return Value ~~~~~~~~~~~~ .. flat-table:: :header-rows: 0 :stub-columns: 0 - .. - ``EBADF`` - fd is not a valid open file descriptor.