884 lines · plain
1.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later OR GPL-2.02 3.. c:namespace:: dtv.legacy.osd4 5.. _dvb_osd:6 7==============8DVB OSD Device9==============10 11.. attention:: Do **not** use in new drivers!12 See: :ref:`legacy_dvb_decoder_notes`13 14The DVB OSD device controls the OnScreen-Display of the AV7110 based15DVB-cards with hardware MPEG2 decoder. It can be accessed through16``/dev/dvb/adapter?/osd0``.17Data types and ioctl definitions can be accessed by including18``linux/dvb/osd.h`` in your application.19 20The OSD is not a frame-buffer like on many other cards.21It is a kind of canvas one can draw on.22The color-depth is limited depending on the memory size installed.23An appropriate palette of colors has to be set up.24The installed memory size can be identified with the `OSD_GET_CAPABILITY`_25ioctl.26 27OSD Data Types28==============29 30OSD_Command31-----------32 33Synopsis34~~~~~~~~35 36.. code-block:: c37 38 typedef enum {39 /* All functions return -2 on "not open" */40 OSD_Close = 1,41 OSD_Open,42 OSD_Show,43 OSD_Hide,44 OSD_Clear,45 OSD_Fill,46 OSD_SetColor,47 OSD_SetPalette,48 OSD_SetTrans,49 OSD_SetPixel,50 OSD_GetPixel,51 OSD_SetRow,52 OSD_SetBlock,53 OSD_FillRow,54 OSD_FillBlock,55 OSD_Line,56 OSD_Query,57 OSD_Test,58 OSD_Text,59 OSD_SetWindow,60 OSD_MoveWindow,61 OSD_OpenRaw,62 } OSD_Command;63 64Commands65~~~~~~~~66 67.. note:: All functions return -2 on "not open"68 69.. flat-table::70 :header-rows: 171 :stub-columns: 072 73 - ..74 75 - Command76 77 - | Used variables of ``struct`` `osd_cmd_t`_.78 | Usage{variable} if alternative use.79 80 - :cspan:`2` Description81 82 83 84 - ..85 86 - ``OSD_Close``87 88 - -89 90 - | Disables OSD and releases the buffers.91 | Returns 0 on success.92 93 - ..94 95 - ``OSD_Open``96 97 - | x0,y0,x1,y1,98 | BitPerPixel[2/4/8]{color&0x0F},99 | mix[0..15]{color&0xF0}100 101 - | Opens OSD with this size and bit depth102 | Returns 0 on success,103 | -1 on DRAM allocation error,104 | -2 on "already open".105 106 - ..107 108 - ``OSD_Show``109 110 - -111 112 - | Enables OSD mode.113 | Returns 0 on success.114 115 - ..116 117 - ``OSD_Hide``118 119 - -120 121 - | Disables OSD mode.122 | Returns 0 on success.123 124 - ..125 126 - ``OSD_Clear``127 128 - -129 130 - | Sets all pixel to color 0.131 | Returns 0 on success.132 133 - ..134 135 - ``OSD_Fill``136 137 - color138 139 - | Sets all pixel to color <color>.140 | Returns 0 on success.141 142 - ..143 144 - ``OSD_SetColor``145 146 - | color,147 | R{x0},G{y0},B{x1},148 | opacity{y1}149 150 - | Set palette entry <num> to <r,g,b>, <mix> and <trans> apply151 | R,G,B: 0..255152 | R=Red, G=Green, B=Blue153 | opacity=0: pixel opacity 0% (only video pixel shows)154 | opacity=1..254: pixel opacity as specified in header155 | opacity=255: pixel opacity 100% (only OSD pixel shows)156 | Returns 0 on success, -1 on error.157 158 - ..159 160 - ``OSD_SetPalette``161 162 - | firstcolor{color},163 | lastcolor{x0},data164 165 - | Set a number of entries in the palette.166 | Sets the entries "firstcolor" through "lastcolor" from the167 array "data".168 | Data has 4 byte for each color:169 | R,G,B, and a opacity value: 0->transparent, 1..254->mix,170 255->pixel171 172 - ..173 174 - ``OSD_SetTrans``175 176 - transparency{color}177 178 - | Sets transparency of mixed pixel (0..15).179 | Returns 0 on success.180 181 - ..182 183 - ``OSD_SetPixel``184 185 - x0,y0,color186 187 - | Sets pixel <x>,<y> to color number <color>.188 | Returns 0 on success, -1 on error.189 190 - ..191 192 - ``OSD_GetPixel``193 194 - x0,y0195 196 - | Returns color number of pixel <x>,<y>, or -1.197 | Command currently not supported by the AV7110!198 199 - ..200 201 - ``OSD_SetRow``202 203 - x0,y0,x1,data204 205 - | Fills pixels x0,y through x1,y with the content of data[].206 | Returns 0 on success, -1 on clipping all pixel (no pixel207 drawn).208 209 - ..210 211 - ``OSD_SetBlock``212 213 - | x0,y0,x1,y1,214 | increment{color},215 | data216 217 - | Fills pixels x0,y0 through x1,y1 with the content of data[].218 | Inc contains the width of one line in the data block,219 | inc<=0 uses block width as line width.220 | Returns 0 on success, -1 on clipping all pixel.221 222 - ..223 224 - ``OSD_FillRow``225 226 - x0,y0,x1,color227 228 - | Fills pixels x0,y through x1,y with the color <color>.229 | Returns 0 on success, -1 on clipping all pixel.230 231 - ..232 233 - ``OSD_FillBlock``234 235 - x0,y0,x1,y1,color236 237 - | Fills pixels x0,y0 through x1,y1 with the color <color>.238 | Returns 0 on success, -1 on clipping all pixel.239 240 - ..241 242 - ``OSD_Line``243 244 - x0,y0,x1,y1,color245 246 - | Draw a line from x0,y0 to x1,y1 with the color <color>.247 | Returns 0 on success.248 249 - ..250 251 - ``OSD_Query``252 253 - | x0,y0,x1,y1,254 | xasp{color}; yasp=11255 256 - | Fills parameters with the picture dimensions and the pixel257 aspect ratio.258 | Returns 0 on success.259 | Command currently not supported by the AV7110!260 261 - ..262 263 - ``OSD_Test``264 265 - -266 267 - | Draws a test picture.268 | For debugging purposes only.269 | Returns 0 on success.270 - ..271 272 - ``OSD_Text``273 274 - x0,y0,size,color,text275 276 - Draws a text at position x0,y0 with the color <color>.277 278 - ..279 280 - ``OSD_SetWindow``281 282 - x0283 284 - Set window with number 0<x0<8 as current.285 286 - ..287 288 - ``OSD_MoveWindow``289 290 - x0,y0291 292 - Move current window to (x0, y0).293 294 - ..295 296 - ``OSD_OpenRaw``297 298 - | x0,y0,x1,y1,299 | `osd_raw_window_t`_ {color}300 301 - Open other types of OSD windows.302 303Description304~~~~~~~~~~~305 306The ``OSD_Command`` data type is used with the `OSD_SEND_CMD`_ ioctl to307tell the driver which OSD_Command to execute.308 309 310-----311 312osd_cmd_t313---------314 315Synopsis316~~~~~~~~317 318.. code-block:: c319 320 typedef struct osd_cmd_s {321 OSD_Command cmd;322 int x0;323 int y0;324 int x1;325 int y1;326 int color;327 void __user *data;328 } osd_cmd_t;329 330Variables331~~~~~~~~~332 333.. flat-table::334 :header-rows: 0335 :stub-columns: 0336 337 - ..338 339 - ``OSD_Command cmd``340 341 - `OSD_Command`_ to be executed.342 343 - ..344 345 - ``int x0``346 347 - First horizontal position.348 349 - ..350 351 - ``int y0``352 353 - First vertical position.354 355 - ..356 357 - ``int x1``358 359 - Second horizontal position.360 361 - ..362 363 - ``int y1``364 365 - Second vertical position.366 367 - ..368 369 - ``int color``370 371 - Number of the color in the palette.372 373 - ..374 375 - ``void __user *data``376 377 - Command specific Data.378 379Description380~~~~~~~~~~~381 382The ``osd_cmd_t`` data type is used with the `OSD_SEND_CMD`_ ioctl.383It contains the data for the OSD_Command and the `OSD_Command`_ itself.384The structure has to be passed to the driver and the components may be385modified by it.386 387 388-----389 390 391osd_raw_window_t392----------------393 394Synopsis395~~~~~~~~396 397.. code-block:: c398 399 typedef enum {400 OSD_BITMAP1,401 OSD_BITMAP2,402 OSD_BITMAP4,403 OSD_BITMAP8,404 OSD_BITMAP1HR,405 OSD_BITMAP2HR,406 OSD_BITMAP4HR,407 OSD_BITMAP8HR,408 OSD_YCRCB422,409 OSD_YCRCB444,410 OSD_YCRCB444HR,411 OSD_VIDEOTSIZE,412 OSD_VIDEOHSIZE,413 OSD_VIDEOQSIZE,414 OSD_VIDEODSIZE,415 OSD_VIDEOTHSIZE,416 OSD_VIDEOTQSIZE,417 OSD_VIDEOTDSIZE,418 OSD_VIDEONSIZE,419 OSD_CURSOR420 } osd_raw_window_t;421 422Constants423~~~~~~~~~424 425.. flat-table::426 :header-rows: 0427 :stub-columns: 0428 429 - ..430 431 - ``OSD_BITMAP1``432 433 - :cspan:`1` 1 bit bitmap434 435 - ..436 437 - ``OSD_BITMAP2``438 439 - 2 bit bitmap440 441 - ..442 443 - ``OSD_BITMAP4``444 445 - 4 bit bitmap446 447 - ..448 449 - ``OSD_BITMAP8``450 451 - 8 bit bitmap452 453 - ..454 455 - ``OSD_BITMAP1HR``456 457 - 1 Bit bitmap half resolution458 459 - ..460 461 - ``OSD_BITMAP2HR``462 463 - 2 Bit bitmap half resolution464 465 - ..466 467 - ``OSD_BITMAP4HR``468 469 - 4 Bit bitmap half resolution470 471 - ..472 473 - ``OSD_BITMAP8HR``474 475 - 8 Bit bitmap half resolution476 477 - ..478 479 - ``OSD_YCRCB422``480 481 - 4:2:2 YCRCB Graphic Display482 483 - ..484 485 - ``OSD_YCRCB444``486 487 - 4:4:4 YCRCB Graphic Display488 489 - ..490 491 - ``OSD_YCRCB444HR``492 493 - 4:4:4 YCRCB graphic half resolution494 495 - ..496 497 - ``OSD_VIDEOTSIZE``498 499 - True Size Normal MPEG Video Display500 501 - ..502 503 - ``OSD_VIDEOHSIZE``504 505 - MPEG Video Display Half Resolution506 507 - ..508 509 - ``OSD_VIDEOQSIZE``510 511 - MPEG Video Display Quarter Resolution512 513 - ..514 515 - ``OSD_VIDEODSIZE``516 517 - MPEG Video Display Double Resolution518 519 - ..520 521 - ``OSD_VIDEOTHSIZE``522 523 - True Size MPEG Video Display Half Resolution524 525 - ..526 527 - ``OSD_VIDEOTQSIZE``528 529 - True Size MPEG Video Display Quarter Resolution530 531 - ..532 533 - ``OSD_VIDEOTDSIZE``534 535 - True Size MPEG Video Display Double Resolution536 537 - ..538 539 - ``OSD_VIDEONSIZE``540 541 - Full Size MPEG Video Display542 543 - ..544 545 - ``OSD_CURSOR``546 547 - Cursor548 549Description550~~~~~~~~~~~551 552The ``osd_raw_window_t`` data type is used with the `OSD_Command`_553OSD_OpenRaw to tell the driver which type of OSD to open.554 555 556-----557 558 559osd_cap_t560---------561 562Synopsis563~~~~~~~~564 565.. code-block:: c566 567 typedef struct osd_cap_s {568 int cmd;569 #define OSD_CAP_MEMSIZE 1570 long val;571 } osd_cap_t;572 573Variables574~~~~~~~~~575 576.. flat-table::577 :header-rows: 0578 :stub-columns: 0579 580 - ..581 582 - ``int cmd``583 584 - Capability to query.585 586 - ..587 588 - ``long val``589 590 - Used to store the Data.591 592Supported capabilities593~~~~~~~~~~~~~~~~~~~~~~594 595.. flat-table::596 :header-rows: 0597 :stub-columns: 0598 599 - ..600 601 - ``OSD_CAP_MEMSIZE``602 603 - Memory size installed on the card.604 605Description606~~~~~~~~~~~607 608This structure of data used with the `OSD_GET_CAPABILITY`_ call.609 610 611-----612 613 614OSD Function Calls615==================616 617OSD_SEND_CMD618------------619 620Synopsis621~~~~~~~~622 623.. c:macro:: OSD_SEND_CMD624 625.. code-block:: c626 627 int ioctl(int fd, int request = OSD_SEND_CMD, enum osd_cmd_t *cmd)628 629 630Arguments631~~~~~~~~~632 633.. flat-table::634 :header-rows: 0635 :stub-columns: 0636 637 - ..638 639 - ``int fd``640 641 - :cspan:`1` File descriptor returned by a previous call642 to `open()`_.643 644 - ..645 646 - ``int request``647 648 - Pointer to the location of the structure `osd_cmd_t`_ for this649 command.650 651Description652~~~~~~~~~~~653 654.. attention:: Do **not** use in new drivers!655 See: :ref:`legacy_dvb_decoder_notes`656 657This ioctl sends the `OSD_Command`_ to the card.658 659Return Value660~~~~~~~~~~~~661 662On success 0 is returned, on error -1 and the ``errno`` variable is set663appropriately. The generic error codes are described at the664:ref:`Generic Error Codes <gen-errors>` chapter.665 666.. flat-table::667 :header-rows: 0668 :stub-columns: 0669 670 - ..671 672 - ``EINVAL``673 674 - Command is out of range.675 676 677-----678 679 680OSD_GET_CAPABILITY681------------------682 683Synopsis684~~~~~~~~685 686.. c:macro:: OSD_GET_CAPABILITY687 688.. code-block:: c689 690 int ioctl(int fd, int request = OSD_GET_CAPABILITY,691 struct osd_cap_t *cap)692 693Arguments694~~~~~~~~~695 696.. flat-table::697 :header-rows: 0698 :stub-columns: 0699 700 - ..701 702 - ``int fd``703 704 - :cspan:`1` File descriptor returned by a previous call705 to `open()`_.706 707 - ..708 709 - ``int request``710 711 - Equals ``OSD_GET_CAPABILITY`` for this command.712 713 - ..714 715 - ``unsigned int *cap``716 717 - Pointer to the location of the structure `osd_cap_t`_ for this718 command.719 720Description721~~~~~~~~~~~722 723.. attention:: Do **not** use in new drivers!724 See: :ref:`legacy_dvb_decoder_notes`725 726This ioctl is used to get the capabilities of the OSD of the AV7110 based727DVB-decoder-card in use.728 729.. note::730 The structure osd_cap_t has to be setup by the user and passed to the731 driver.732 733Return Value734~~~~~~~~~~~~735 736On success 0 is returned, on error -1 and the ``errno`` variable is set737appropriately. The generic error codes are described at the738:ref:`Generic Error Codes <gen-errors>` chapter.739 740.. flat-table::741 :header-rows: 0742 :stub-columns: 0743 744 745 - ..746 747 - ``EINVAL``748 749 - Unsupported capability.750 751 752-----753 754 755open()756------757 758Synopsis759~~~~~~~~760 761.. code-block:: c762 763 #include <fcntl.h>764 765.. c:function:: int open(const char *deviceName, int flags)766 767Arguments768~~~~~~~~~769 770.. flat-table::771 :header-rows: 0772 :stub-columns: 0773 774 - ..775 776 - ``const char *deviceName``777 778 - Name of specific OSD device.779 780 - ..781 782 - :rspan:`3` ``int flags``783 784 - :cspan:`1` A bit-wise OR of the following flags:785 786 - ..787 788 - ``O_RDONLY``789 790 - read-only access791 792 - ..793 794 - ``O_RDWR``795 796 - read/write access797 798 - ..799 800 - ``O_NONBLOCK``801 - | Open in non-blocking mode802 | (blocking mode is the default)803 804Description805~~~~~~~~~~~806 807This system call opens a named OSD device (e.g.808``/dev/dvb/adapter?/osd0``) for subsequent use.809 810Return Value811~~~~~~~~~~~~812 813.. flat-table::814 :header-rows: 0815 :stub-columns: 0816 817 - ..818 819 - ``ENODEV``820 821 - Device driver not loaded/available.822 823 - ..824 825 - ``EINTERNAL``826 827 - Internal error.828 829 - ..830 831 - ``EBUSY``832 833 - Device or resource busy.834 835 - ..836 837 - ``EINVAL``838 839 - Invalid argument.840 841 842-----843 844 845close()846-------847 848Synopsis849~~~~~~~~850 851.. c:function:: int close(int fd)852 853Arguments854~~~~~~~~~855 856.. flat-table::857 :header-rows: 0858 :stub-columns: 0859 860 - ..861 862 - ``int fd``863 864 - :cspan:`1` File descriptor returned by a previous call865 to `open()`_ .866 867Description868~~~~~~~~~~~869 870This system call closes a previously opened OSD device.871 872Return Value873~~~~~~~~~~~~874 875.. flat-table::876 :header-rows: 0877 :stub-columns: 0878 879 - ..880 881 - ``EBADF``882 883 - fd is not a valid open file descriptor.884