![Ian Armstrong](/assets/img/avatar_default.png)
Adds more osd mode switching information. Corrects some information regarding mode selection & local alpha operation for 16 bit modes. Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
351 lines
7.7 KiB
Text
351 lines
7.7 KiB
Text
OSD firmware API description
|
|
============================
|
|
|
|
Note: this API is part of the decoder firmware, so it's cx23415 only.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_GET_FRAMEBUFFER
|
|
Enum 65/0x41
|
|
Description
|
|
Return base and length of contiguous OSD memory.
|
|
Result[0]
|
|
OSD base address
|
|
Result[1]
|
|
OSD length
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_GET_PIXEL_FORMAT
|
|
Enum 66/0x42
|
|
Description
|
|
Query OSD format
|
|
Result[0]
|
|
0=8bit index
|
|
1=16bit RGB 5:6:5
|
|
2=16bit ARGB 1:5:5:5
|
|
3=16bit ARGB 1:4:4:4
|
|
4=32bit ARGB 8:8:8:8
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_SET_PIXEL_FORMAT
|
|
Enum 67/0x43
|
|
Description
|
|
Assign pixel format
|
|
Param[0]
|
|
0=8bit index
|
|
1=16bit RGB 5:6:5
|
|
2=16bit ARGB 1:5:5:5
|
|
3=16bit ARGB 1:4:4:4
|
|
4=32bit ARGB 8:8:8:8
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_GET_STATE
|
|
Enum 68/0x44
|
|
Description
|
|
Query OSD state
|
|
Result[0]
|
|
Bit 0 0=off, 1=on
|
|
Bits 1:2 alpha control
|
|
Bits 3:5 pixel format
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_SET_STATE
|
|
Enum 69/0x45
|
|
Description
|
|
OSD switch
|
|
Param[0]
|
|
0=off, 1=on
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_GET_OSD_COORDS
|
|
Enum 70/0x46
|
|
Description
|
|
Retrieve coordinates of OSD area blended with video
|
|
Result[0]
|
|
OSD buffer address
|
|
Result[1]
|
|
Stride in pixels
|
|
Result[2]
|
|
Lines in OSD buffer
|
|
Result[3]
|
|
Horizontal offset in buffer
|
|
Result[4]
|
|
Vertical offset in buffer
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_SET_OSD_COORDS
|
|
Enum 71/0x47
|
|
Description
|
|
Assign the coordinates of the OSD area to blend with video
|
|
Param[0]
|
|
buffer address
|
|
Param[1]
|
|
buffer stride in pixels
|
|
Param[2]
|
|
lines in buffer
|
|
Param[3]
|
|
horizontal offset
|
|
Param[4]
|
|
vertical offset
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_GET_SCREEN_COORDS
|
|
Enum 72/0x48
|
|
Description
|
|
Retrieve OSD screen area coordinates
|
|
Result[0]
|
|
top left horizontal offset
|
|
Result[1]
|
|
top left vertical offset
|
|
Result[2]
|
|
bottom right horizontal offset
|
|
Result[3]
|
|
bottom right vertical offset
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_SET_SCREEN_COORDS
|
|
Enum 73/0x49
|
|
Description
|
|
Assign the coordinates of the screen area to blend with video
|
|
Param[0]
|
|
top left horizontal offset
|
|
Param[1]
|
|
top left vertical offset
|
|
Param[2]
|
|
bottom left horizontal offset
|
|
Param[3]
|
|
bottom left vertical offset
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_GET_GLOBAL_ALPHA
|
|
Enum 74/0x4A
|
|
Description
|
|
Retrieve OSD global alpha
|
|
Result[0]
|
|
global alpha: 0=off, 1=on
|
|
Result[1]
|
|
bits 0:7 global alpha
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_SET_GLOBAL_ALPHA
|
|
Enum 75/0x4B
|
|
Description
|
|
Update global alpha
|
|
Param[0]
|
|
global alpha: 0=off, 1=on
|
|
Param[1]
|
|
global alpha (8 bits)
|
|
Param[2]
|
|
local alpha: 0=on, 1=off
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_SET_BLEND_COORDS
|
|
Enum 78/0x4C
|
|
Description
|
|
Move start of blending area within display buffer
|
|
Param[0]
|
|
horizontal offset in buffer
|
|
Param[1]
|
|
vertical offset in buffer
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_GET_FLICKER_STATE
|
|
Enum 79/0x4F
|
|
Description
|
|
Retrieve flicker reduction module state
|
|
Result[0]
|
|
flicker state: 0=off, 1=on
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_SET_FLICKER_STATE
|
|
Enum 80/0x50
|
|
Description
|
|
Set flicker reduction module state
|
|
Param[0]
|
|
State: 0=off, 1=on
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_BLT_COPY
|
|
Enum 82/0x52
|
|
Description
|
|
BLT copy
|
|
Param[0]
|
|
'0000' zero
|
|
'0001' ~destination AND ~source
|
|
'0010' ~destination AND source
|
|
'0011' ~destination
|
|
'0100' destination AND ~source
|
|
'0101' ~source
|
|
'0110' destination XOR source
|
|
'0111' ~destination OR ~source
|
|
'1000' ~destination AND ~source
|
|
'1001' destination XNOR source
|
|
'1010' source
|
|
'1011' ~destination OR source
|
|
'1100' destination
|
|
'1101' destination OR ~source
|
|
'1110' destination OR source
|
|
'1111' one
|
|
|
|
Param[1]
|
|
Resulting alpha blending
|
|
'01' source_alpha
|
|
'10' destination_alpha
|
|
'11' source_alpha*destination_alpha+1
|
|
(zero if both source and destination alpha are zero)
|
|
Param[2]
|
|
'00' output_pixel = source_pixel
|
|
|
|
'01' if source_alpha=0:
|
|
output_pixel = destination_pixel
|
|
if 256 > source_alpha > 1:
|
|
output_pixel = ((source_alpha + 1)*source_pixel +
|
|
(255 - source_alpha)*destination_pixel)/256
|
|
|
|
'10' if destination_alpha=0:
|
|
output_pixel = source_pixel
|
|
if 255 > destination_alpha > 0:
|
|
output_pixel = ((255 - destination_alpha)*source_pixel +
|
|
(destination_alpha + 1)*destination_pixel)/256
|
|
|
|
'11' if source_alpha=0:
|
|
source_temp = 0
|
|
if source_alpha=255:
|
|
source_temp = source_pixel*256
|
|
if 255 > source_alpha > 0:
|
|
source_temp = source_pixel*(source_alpha + 1)
|
|
if destination_alpha=0:
|
|
destination_temp = 0
|
|
if destination_alpha=255:
|
|
destination_temp = destination_pixel*256
|
|
if 255 > destination_alpha > 0:
|
|
destination_temp = destination_pixel*(destination_alpha + 1)
|
|
output_pixel = (source_temp + destination_temp)/256
|
|
Param[3]
|
|
width
|
|
Param[4]
|
|
height
|
|
Param[5]
|
|
destination pixel mask
|
|
Param[6]
|
|
destination rectangle start address
|
|
Param[7]
|
|
destination stride in dwords
|
|
Param[8]
|
|
source stride in dwords
|
|
Param[9]
|
|
source rectangle start address
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_BLT_FILL
|
|
Enum 83/0x53
|
|
Description
|
|
BLT fill color
|
|
Param[0]
|
|
Same as Param[0] on API 0x52
|
|
Param[1]
|
|
Same as Param[1] on API 0x52
|
|
Param[2]
|
|
Same as Param[2] on API 0x52
|
|
Param[3]
|
|
width
|
|
Param[4]
|
|
height
|
|
Param[5]
|
|
destination pixel mask
|
|
Param[6]
|
|
destination rectangle start address
|
|
Param[7]
|
|
destination stride in dwords
|
|
Param[8]
|
|
color fill value
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_BLT_TEXT
|
|
Enum 84/0x54
|
|
Description
|
|
BLT for 8 bit alpha text source
|
|
Param[0]
|
|
Same as Param[0] on API 0x52
|
|
Param[1]
|
|
Same as Param[1] on API 0x52
|
|
Param[2]
|
|
Same as Param[2] on API 0x52
|
|
Param[3]
|
|
width
|
|
Param[4]
|
|
height
|
|
Param[5]
|
|
destination pixel mask
|
|
Param[6]
|
|
destination rectangle start address
|
|
Param[7]
|
|
destination stride in dwords
|
|
Param[8]
|
|
source stride in dwords
|
|
Param[9]
|
|
source rectangle start address
|
|
Param[10]
|
|
color fill value
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_SET_FRAMEBUFFER_WINDOW
|
|
Enum 86/0x56
|
|
Description
|
|
Positions the main output window on the screen. The coordinates must be
|
|
such that the entire window fits on the screen.
|
|
Param[0]
|
|
window width
|
|
Param[1]
|
|
window height
|
|
Param[2]
|
|
top left window corner horizontal offset
|
|
Param[3]
|
|
top left window corner vertical offset
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_SET_CHROMA_KEY
|
|
Enum 96/0x60
|
|
Description
|
|
Chroma key switch and color
|
|
Param[0]
|
|
state: 0=off, 1=on
|
|
Param[1]
|
|
color
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_GET_ALPHA_CONTENT_INDEX
|
|
Enum 97/0x61
|
|
Description
|
|
Retrieve alpha content index
|
|
Result[0]
|
|
alpha content index, Range 0:15
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Name CX2341X_OSD_SET_ALPHA_CONTENT_INDEX
|
|
Enum 98/0x62
|
|
Description
|
|
Assign alpha content index
|
|
Param[0]
|
|
alpha content index, range 0:15
|