| .. 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 <color>. |
| | Returns 0 on success. |
| |
| - .. |
| |
| - ``OSD_SetColor`` |
| |
| - | color, |
| | R{x0},G{y0},B{x1}, |
| | opacity{y1} |
| |
| - | Set palette entry <num> to <r,g,b>, <mix> and <trans> 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 <x>,<y> to color number <color>. |
| | Returns 0 on success, -1 on error. |
| |
| - .. |
| |
| - ``OSD_GetPixel`` |
| |
| - x0,y0 |
| |
| - | Returns color number of pixel <x>,<y>, 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 <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 <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 <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 <color>. |
| |
| - .. |
| |
| - ``OSD_SetWindow`` |
| |
| - x0 |
| |
| - Set window with number 0<x0<8 as current. |
| |
| - .. |
| |
| - ``OSD_MoveWindow`` |
| |
| - x0,y0 |
| |
| - Move current window to (x0, y0). |
| |
| - .. |
| |
| - ``OSD_OpenRaw`` |
| |
| - | x0,y0,x1,y1, |
| | `osd_raw_window_t`_ {color} |
| |
| - Open other types of OSD windows. |
| |
| Description |
| ~~~~~~~~~~~ |
| |
| The ``OSD_Command`` data type is used with the `OSD_SEND_CMD`_ ioctl to |
| tell the driver which OSD_Command to execute. |
| |
| |
| ----- |
| |
| osd_cmd_t |
| --------- |
| |
| Synopsis |
| ~~~~~~~~ |
| |
| .. code-block:: c |
| |
| typedef struct osd_cmd_s { |
| OSD_Command cmd; |
| int x0; |
| int y0; |
| int x1; |
| int y1; |
| int color; |
| void __user *data; |
| } osd_cmd_t; |
| |
| Variables |
| ~~~~~~~~~ |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| |
| - .. |
| |
| - ``OSD_Command cmd`` |
| |
| - `OSD_Command`_ to be executed. |
| |
| - .. |
| |
| - ``int x0`` |
| |
| - First horizontal position. |
| |
| - .. |
| |
| - ``int y0`` |
| |
| - First vertical position. |
| |
| - .. |
| |
| - ``int x1`` |
| |
| - Second horizontal position. |
| |
| - .. |
| |
| - ``int y1`` |
| |
| - Second vertical position. |
| |
| - .. |
| |
| - ``int color`` |
| |
| - Number of the color in the palette. |
| |
| - .. |
| |
| - ``void __user *data`` |
| |
| - Command specific Data. |
| |
| Description |
| ~~~~~~~~~~~ |
| |
| The ``osd_cmd_t`` data type is used with the `OSD_SEND_CMD`_ ioctl. |
| It contains the data for the OSD_Command and the `OSD_Command`_ itself. |
| The structure has to be passed to the driver and the components may be |
| modified by it. |
| |
| |
| ----- |
| |
| |
| osd_raw_window_t |
| ---------------- |
| |
| Synopsis |
| ~~~~~~~~ |
| |
| .. code-block:: c |
| |
| typedef enum { |
| OSD_BITMAP1, |
| OSD_BITMAP2, |
| OSD_BITMAP4, |
| OSD_BITMAP8, |
| OSD_BITMAP1HR, |
| OSD_BITMAP2HR, |
| OSD_BITMAP4HR, |
| OSD_BITMAP8HR, |
| OSD_YCRCB422, |
| OSD_YCRCB444, |
| OSD_YCRCB444HR, |
| OSD_VIDEOTSIZE, |
| OSD_VIDEOHSIZE, |
| OSD_VIDEOQSIZE, |
| OSD_VIDEODSIZE, |
| OSD_VIDEOTHSIZE, |
| OSD_VIDEOTQSIZE, |
| OSD_VIDEOTDSIZE, |
| OSD_VIDEONSIZE, |
| OSD_CURSOR |
| } osd_raw_window_t; |
| |
| Constants |
| ~~~~~~~~~ |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| |
| - .. |
| |
| - ``OSD_BITMAP1`` |
| |
| - :cspan:`1` 1 bit bitmap |
| |
| - .. |
| |
| - ``OSD_BITMAP2`` |
| |
| - 2 bit bitmap |
| |
| - .. |
| |
| - ``OSD_BITMAP4`` |
| |
| - 4 bit bitmap |
| |
| - .. |
| |
| - ``OSD_BITMAP8`` |
| |
| - 8 bit bitmap |
| |
| - .. |
| |
| - ``OSD_BITMAP1HR`` |
| |
| - 1 Bit bitmap half resolution |
| |
| - .. |
| |
| - ``OSD_BITMAP2HR`` |
| |
| - 2 Bit bitmap half resolution |
| |
| - .. |
| |
| - ``OSD_BITMAP4HR`` |
| |
| - 4 Bit bitmap half resolution |
| |
| - .. |
| |
| - ``OSD_BITMAP8HR`` |
| |
| - 8 Bit bitmap half resolution |
| |
| - .. |
| |
| - ``OSD_YCRCB422`` |
| |
| - 4:2:2 YCRCB Graphic Display |
| |
| - .. |
| |
| - ``OSD_YCRCB444`` |
| |
| - 4:4:4 YCRCB Graphic Display |
| |
| - .. |
| |
| - ``OSD_YCRCB444HR`` |
| |
| - 4:4:4 YCRCB graphic half resolution |
| |
| - .. |
| |
| - ``OSD_VIDEOTSIZE`` |
| |
| - True Size Normal MPEG Video Display |
| |
| - .. |
| |
| - ``OSD_VIDEOHSIZE`` |
| |
| - MPEG Video Display Half Resolution |
| |
| - .. |
| |
| - ``OSD_VIDEOQSIZE`` |
| |
| - MPEG Video Display Quarter Resolution |
| |
| - .. |
| |
| - ``OSD_VIDEODSIZE`` |
| |
| - MPEG Video Display Double Resolution |
| |
| - .. |
| |
| - ``OSD_VIDEOTHSIZE`` |
| |
| - True Size MPEG Video Display Half Resolution |
| |
| - .. |
| |
| - ``OSD_VIDEOTQSIZE`` |
| |
| - True Size MPEG Video Display Quarter Resolution |
| |
| - .. |
| |
| - ``OSD_VIDEOTDSIZE`` |
| |
| - True Size MPEG Video Display Double Resolution |
| |
| - .. |
| |
| - ``OSD_VIDEONSIZE`` |
| |
| - Full Size MPEG Video Display |
| |
| - .. |
| |
| - ``OSD_CURSOR`` |
| |
| - Cursor |
| |
| Description |
| ~~~~~~~~~~~ |
| |
| The ``osd_raw_window_t`` data type is used with the `OSD_Command`_ |
| OSD_OpenRaw to tell the driver which type of OSD to open. |
| |
| |
| ----- |
| |
| |
| osd_cap_t |
| --------- |
| |
| Synopsis |
| ~~~~~~~~ |
| |
| .. code-block:: c |
| |
| typedef struct osd_cap_s { |
| int cmd; |
| #define OSD_CAP_MEMSIZE 1 |
| long val; |
| } osd_cap_t; |
| |
| Variables |
| ~~~~~~~~~ |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| |
| - .. |
| |
| - ``int cmd`` |
| |
| - Capability to query. |
| |
| - .. |
| |
| - ``long val`` |
| |
| - Used to store the Data. |
| |
| Supported capabilities |
| ~~~~~~~~~~~~~~~~~~~~~~ |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| |
| - .. |
| |
| - ``OSD_CAP_MEMSIZE`` |
| |
| - Memory size installed on the card. |
| |
| Description |
| ~~~~~~~~~~~ |
| |
| This structure of data used with the `OSD_GET_CAPABILITY`_ call. |
| |
| |
| ----- |
| |
| |
| OSD Function Calls |
| ================== |
| |
| OSD_SEND_CMD |
| ------------ |
| |
| Synopsis |
| ~~~~~~~~ |
| |
| .. c:macro:: OSD_SEND_CMD |
| |
| .. code-block:: c |
| |
| int ioctl(int fd, int request = OSD_SEND_CMD, enum osd_cmd_t *cmd) |
| |
| |
| Arguments |
| ~~~~~~~~~ |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| |
| - .. |
| |
| - ``int fd`` |
| |
| - :cspan:`1` File descriptor returned by a previous call |
| to `open()`_. |
| |
| - .. |
| |
| - ``int request`` |
| |
| - Pointer to the location of the structure `osd_cmd_t`_ for this |
| command. |
| |
| Description |
| ~~~~~~~~~~~ |
| |
| .. attention:: Do **not** use in new drivers! |
| See: :ref:`legacy_dvb_decoder_notes` |
| |
| This ioctl sends the `OSD_Command`_ to the card. |
| |
| 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 <gen-errors>` 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 <gen-errors>` chapter. |
| |
| .. flat-table:: |
| :header-rows: 0 |
| :stub-columns: 0 |
| |
| |
| - .. |
| |
| - ``EINVAL`` |
| |
| - Unsupported capability. |
| |
| |
| ----- |
| |
| |
| open() |
| ------ |
| |
| Synopsis |
| ~~~~~~~~ |
| |
| .. code-block:: c |
| |
| #include <fcntl.h> |
| |
| .. 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. |