162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ciThe cx2341x driver
462306a36Sopenharmony_ci==================
562306a36Sopenharmony_ci
662306a36Sopenharmony_ciMemory at cx2341x chips
762306a36Sopenharmony_ci-----------------------
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciThis section describes the cx2341x memory map and documents some of the
1062306a36Sopenharmony_ciregister space.
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci.. note:: the memory long words are little-endian ('intel format').
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci.. warning::
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci	This information was figured out from searching through the memory
1762306a36Sopenharmony_ci	and registers, this information may not be correct and is certainly
1862306a36Sopenharmony_ci	not complete, and was not derived from anything more than searching
1962306a36Sopenharmony_ci	through the memory space with commands like:
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	.. code-block:: none
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci		ivtvctl -O min=0x02000000,max=0x020000ff
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	So take this as is, I'm always searching for more stuff, it's a large
2662306a36Sopenharmony_ci	register space :-).
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciMemory Map
2962306a36Sopenharmony_ci~~~~~~~~~~
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciThe cx2341x exposes its entire 64M memory space to the PCI host via the PCI BAR0
3262306a36Sopenharmony_ci(Base Address Register 0). The addresses here are offsets relative to the
3362306a36Sopenharmony_ciaddress held in BAR0.
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci.. code-block:: none
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	0x00000000-0x00ffffff Encoder memory space
3862306a36Sopenharmony_ci	0x00000000-0x0003ffff Encode.rom
3962306a36Sopenharmony_ci	???-???         MPEG buffer(s)
4062306a36Sopenharmony_ci	???-???         Raw video capture buffer(s)
4162306a36Sopenharmony_ci	???-???         Raw audio capture buffer(s)
4262306a36Sopenharmony_ci	???-???         Display buffers (6 or 9)
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	0x01000000-0x01ffffff Decoder memory space
4562306a36Sopenharmony_ci	0x01000000-0x0103ffff Decode.rom
4662306a36Sopenharmony_ci	???-???         MPEG buffers(s)
4762306a36Sopenharmony_ci	0x0114b000-0x0115afff Audio.rom (deprecated?)
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci	0x02000000-0x0200ffff Register Space
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ciRegisters
5262306a36Sopenharmony_ci~~~~~~~~~
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ciThe registers occupy the 64k space starting at the 0x02000000 offset from BAR0.
5562306a36Sopenharmony_ciAll of these registers are 32 bits wide.
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci.. code-block:: none
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci	DMA Registers 0x000-0xff:
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci	0x00 - Control:
6262306a36Sopenharmony_ci		0=reset/cancel, 1=read, 2=write, 4=stop
6362306a36Sopenharmony_ci	0x04 - DMA status:
6462306a36Sopenharmony_ci		1=read busy, 2=write busy, 4=read error, 8=write error, 16=link list error
6562306a36Sopenharmony_ci	0x08 - pci DMA pointer for read link list
6662306a36Sopenharmony_ci	0x0c - pci DMA pointer for write link list
6762306a36Sopenharmony_ci	0x10 - read/write DMA enable:
6862306a36Sopenharmony_ci		1=read enable, 2=write enable
6962306a36Sopenharmony_ci	0x14 - always 0xffffffff, if set any lower instability occurs, 0x00 crashes
7062306a36Sopenharmony_ci	0x18 - ??
7162306a36Sopenharmony_ci	0x1c - always 0x20 or 32, smaller values slow down DMA transactions
7262306a36Sopenharmony_ci	0x20 - always value of 0x780a010a
7362306a36Sopenharmony_ci	0x24-0x3c - usually just random values???
7462306a36Sopenharmony_ci	0x40 - Interrupt status
7562306a36Sopenharmony_ci	0x44 - Write a bit here and shows up in Interrupt status 0x40
7662306a36Sopenharmony_ci	0x48 - Interrupt Mask
7762306a36Sopenharmony_ci	0x4C - always value of 0xfffdffff,
7862306a36Sopenharmony_ci		if changed to 0xffffffff DMA write interrupts break.
7962306a36Sopenharmony_ci	0x50 - always 0xffffffff
8062306a36Sopenharmony_ci	0x54 - always 0xffffffff (0x4c, 0x50, 0x54 seem like interrupt masks, are
8162306a36Sopenharmony_ci		3 processors on chip, Java ones, VPU, SPU, APU, maybe these are the
8262306a36Sopenharmony_ci		interrupt masks???).
8362306a36Sopenharmony_ci	0x60-0x7C - random values
8462306a36Sopenharmony_ci	0x80 - first write linked list reg, for Encoder Memory addr
8562306a36Sopenharmony_ci	0x84 - first write linked list reg, for pci memory addr
8662306a36Sopenharmony_ci	0x88 - first write linked list reg, for length of buffer in memory addr
8762306a36Sopenharmony_ci		(|0x80000000 or this for last link)
8862306a36Sopenharmony_ci	0x8c-0xdc - rest of write linked list reg, 8 sets of 3 total, DMA goes here
8962306a36Sopenharmony_ci		from linked list addr in reg 0x0c, firmware must push through or
9062306a36Sopenharmony_ci		something.
9162306a36Sopenharmony_ci	0xe0 - first (and only) read linked list reg, for pci memory addr
9262306a36Sopenharmony_ci	0xe4 - first (and only) read linked list reg, for Decoder memory addr
9362306a36Sopenharmony_ci	0xe8 - first (and only) read linked list reg, for length of buffer
9462306a36Sopenharmony_ci	0xec-0xff - Nothing seems to be in these registers, 0xec-f4 are 0x00000000.
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ciMemory locations for Encoder Buffers 0x700-0x7ff:
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ciThese registers show offsets of memory locations pertaining to each
9962306a36Sopenharmony_cibuffer area used for encoding, have to shift them by <<1 first.
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci- 0x07F8: Encoder SDRAM refresh
10262306a36Sopenharmony_ci- 0x07FC: Encoder SDRAM pre-charge
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ciMemory locations for Decoder Buffers 0x800-0x8ff:
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ciThese registers show offsets of memory locations pertaining to each
10762306a36Sopenharmony_cibuffer area used for decoding, have to shift them by <<1 first.
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci- 0x08F8: Decoder SDRAM refresh
11062306a36Sopenharmony_ci- 0x08FC: Decoder SDRAM pre-charge
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ciOther memory locations:
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci- 0x2800: Video Display Module control
11562306a36Sopenharmony_ci- 0x2D00: AO (audio output?) control
11662306a36Sopenharmony_ci- 0x2D24: Bytes Flushed
11762306a36Sopenharmony_ci- 0x7000: LSB I2C write clock bit (inverted)
11862306a36Sopenharmony_ci- 0x7004: LSB I2C write data bit (inverted)
11962306a36Sopenharmony_ci- 0x7008: LSB I2C read clock bit
12062306a36Sopenharmony_ci- 0x700c: LSB I2C read data bit
12162306a36Sopenharmony_ci- 0x9008: GPIO get input state
12262306a36Sopenharmony_ci- 0x900c: GPIO set output state
12362306a36Sopenharmony_ci- 0x9020: GPIO direction (Bit7 (GPIO 0..7) - 0:input, 1:output)
12462306a36Sopenharmony_ci- 0x9050: SPU control
12562306a36Sopenharmony_ci- 0x9054: Reset HW blocks
12662306a36Sopenharmony_ci- 0x9058: VPU control
12762306a36Sopenharmony_ci- 0xA018: Bit6: interrupt pending?
12862306a36Sopenharmony_ci- 0xA064: APU command
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ciInterrupt Status Register
13262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ciThe definition of the bits in the interrupt status register 0x0040, and the
13562306a36Sopenharmony_ciinterrupt mask 0x0048. If a bit is cleared in the mask, then we want our ISR to
13662306a36Sopenharmony_ciexecute.
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci- bit 31 Encoder Start Capture
13962306a36Sopenharmony_ci- bit 30 Encoder EOS
14062306a36Sopenharmony_ci- bit 29 Encoder VBI capture
14162306a36Sopenharmony_ci- bit 28 Encoder Video Input Module reset event
14262306a36Sopenharmony_ci- bit 27 Encoder DMA complete
14362306a36Sopenharmony_ci- bit 24 Decoder audio mode change detection event (through event notification)
14462306a36Sopenharmony_ci- bit 22 Decoder data request
14562306a36Sopenharmony_ci- bit 20 Decoder DMA complete
14662306a36Sopenharmony_ci- bit 19 Decoder VBI re-insertion
14762306a36Sopenharmony_ci- bit 18 Decoder DMA err (linked-list bad)
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ciMissing documentation
15062306a36Sopenharmony_ci---------------------
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci- Encoder API post(?)
15362306a36Sopenharmony_ci- Decoder API post(?)
15462306a36Sopenharmony_ci- Decoder VTRACE event
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ciThe cx2341x firmware upload
15862306a36Sopenharmony_ci---------------------------
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ciThis document describes how to upload the cx2341x firmware to the card.
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ciHow to find
16362306a36Sopenharmony_ci~~~~~~~~~~~
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ciSee the web pages of the various projects that uses this chip for information
16662306a36Sopenharmony_cion how to obtain the firmware.
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ciThe firmware stored in a Windows driver can be detected as follows:
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_ci- Each firmware image is 256k bytes.
17162306a36Sopenharmony_ci- The 1st 32-bit word of the Encoder image is 0x0000da7
17262306a36Sopenharmony_ci- The 1st 32-bit word of the Decoder image is 0x00003a7
17362306a36Sopenharmony_ci- The 2nd 32-bit word of both images is 0xaa55bb66
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ciHow to load
17662306a36Sopenharmony_ci~~~~~~~~~~~
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci- Issue the FWapi command to stop the encoder if it is running. Wait for the
17962306a36Sopenharmony_ci  command to complete.
18062306a36Sopenharmony_ci- Issue the FWapi command to stop the decoder if it is running. Wait for the
18162306a36Sopenharmony_ci  command to complete.
18262306a36Sopenharmony_ci- Issue the I2C command to the digitizer to stop emitting VSYNC events.
18362306a36Sopenharmony_ci- Issue the FWapi command to halt the encoder's firmware.
18462306a36Sopenharmony_ci- Sleep for 10ms.
18562306a36Sopenharmony_ci- Issue the FWapi command to halt the decoder's firmware.
18662306a36Sopenharmony_ci- Sleep for 10ms.
18762306a36Sopenharmony_ci- Write 0x00000000 to register 0x2800 to stop the Video Display Module.
18862306a36Sopenharmony_ci- Write 0x00000005 to register 0x2D00 to stop the AO (audio output?).
18962306a36Sopenharmony_ci- Write 0x00000000 to register 0xA064 to ping? the APU.
19062306a36Sopenharmony_ci- Write 0xFFFFFFFE to register 0x9058 to stop the VPU.
19162306a36Sopenharmony_ci- Write 0xFFFFFFFF to register 0x9054 to reset the HW blocks.
19262306a36Sopenharmony_ci- Write 0x00000001 to register 0x9050 to stop the SPU.
19362306a36Sopenharmony_ci- Sleep for 10ms.
19462306a36Sopenharmony_ci- Write 0x0000001A to register 0x07FC to init the Encoder SDRAM's pre-charge.
19562306a36Sopenharmony_ci- Write 0x80000640 to register 0x07F8 to init the Encoder SDRAM's refresh to 1us.
19662306a36Sopenharmony_ci- Write 0x0000001A to register 0x08FC to init the Decoder SDRAM's pre-charge.
19762306a36Sopenharmony_ci- Write 0x80000640 to register 0x08F8 to init the Decoder SDRAM's refresh to 1us.
19862306a36Sopenharmony_ci- Sleep for 512ms. (600ms is recommended)
19962306a36Sopenharmony_ci- Transfer the encoder's firmware image to offset 0 in Encoder memory space.
20062306a36Sopenharmony_ci- Transfer the decoder's firmware image to offset 0 in Decoder memory space.
20162306a36Sopenharmony_ci- Use a read-modify-write operation to Clear bit 0 of register 0x9050 to
20262306a36Sopenharmony_ci  re-enable the SPU.
20362306a36Sopenharmony_ci- Sleep for 1 second.
20462306a36Sopenharmony_ci- Use a read-modify-write operation to Clear bits 3 and 0 of register 0x9058
20562306a36Sopenharmony_ci  to re-enable the VPU.
20662306a36Sopenharmony_ci- Sleep for 1 second.
20762306a36Sopenharmony_ci- Issue status API commands to both firmware images to verify.
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ciHow to call the firmware API
21162306a36Sopenharmony_ci----------------------------
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ciThe preferred calling convention is known as the firmware mailbox. The
21462306a36Sopenharmony_cimailboxes are basically a fixed length array that serves as the call-stack.
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ciFirmware mailboxes can be located by searching the encoder and decoder memory
21762306a36Sopenharmony_cifor a 16 byte signature. That signature will be located on a 256-byte boundary.
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ciSignature:
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ci.. code-block:: none
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_ci	0x78, 0x56, 0x34, 0x12, 0x12, 0x78, 0x56, 0x34,
22462306a36Sopenharmony_ci	0x34, 0x12, 0x78, 0x56, 0x56, 0x34, 0x12, 0x78
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_ciThe firmware implements 20 mailboxes of 20 32-bit words. The first 10 are
22762306a36Sopenharmony_cireserved for API calls. The second 10 are used by the firmware for event
22862306a36Sopenharmony_cinotification.
22962306a36Sopenharmony_ci
23062306a36Sopenharmony_ci  ====== =================
23162306a36Sopenharmony_ci  Index  Name
23262306a36Sopenharmony_ci  ====== =================
23362306a36Sopenharmony_ci  0      Flags
23462306a36Sopenharmony_ci  1      Command
23562306a36Sopenharmony_ci  2      Return value
23662306a36Sopenharmony_ci  3      Timeout
23762306a36Sopenharmony_ci  4-19   Parameter/Result
23862306a36Sopenharmony_ci  ====== =================
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ciThe flags are defined in the following table. The direction is from the
24262306a36Sopenharmony_ciperspective of the firmware.
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ci  ==== ========== ============================================
24562306a36Sopenharmony_ci  Bit  Direction  Purpose
24662306a36Sopenharmony_ci  ==== ========== ============================================
24762306a36Sopenharmony_ci  2    O          Firmware has processed the command.
24862306a36Sopenharmony_ci  1    I          Driver has finished setting the parameters.
24962306a36Sopenharmony_ci  0    I          Driver is using this mailbox.
25062306a36Sopenharmony_ci  ==== ========== ============================================
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ciThe command is a 32-bit enumerator. The API specifics may be found in this
25362306a36Sopenharmony_cichapter.
25462306a36Sopenharmony_ci
25562306a36Sopenharmony_ciThe return value is a 32-bit enumerator. Only two values are currently defined:
25662306a36Sopenharmony_ci
25762306a36Sopenharmony_ci- 0=success
25862306a36Sopenharmony_ci- -1=command undefined.
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_ciThere are 16 parameters/results 32-bit fields. The driver populates these fields
26162306a36Sopenharmony_ciwith values for all the parameters required by the call. The driver overwrites
26262306a36Sopenharmony_cithese fields with result values returned by the call.
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ciThe timeout value protects the card from a hung driver thread. If the driver
26562306a36Sopenharmony_cidoesn't handle the completed call within the timeout specified, the firmware
26662306a36Sopenharmony_ciwill reset that mailbox.
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_ciTo make an API call, the driver iterates over each mailbox looking for the
26962306a36Sopenharmony_cifirst one available (bit 0 has been cleared). The driver sets that bit, fills
27062306a36Sopenharmony_ciin the command enumerator, the timeout value and any required parameters. The
27162306a36Sopenharmony_cidriver then sets the parameter ready bit (bit 1). The firmware scans the
27262306a36Sopenharmony_cimailboxes for pending commands, processes them, sets the result code, populates
27362306a36Sopenharmony_cithe result value array with that call's return values and sets the call
27462306a36Sopenharmony_cicomplete bit (bit 2). Once bit 2 is set, the driver should retrieve the results
27562306a36Sopenharmony_ciand clear all the flags. If the driver does not perform this task within the
27662306a36Sopenharmony_citime set in the timeout register, the firmware will reset that mailbox.
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ciEvent notifications are sent from the firmware to the host. The host tells the
27962306a36Sopenharmony_cifirmware which events it is interested in via an API call. That call tells the
28062306a36Sopenharmony_cifirmware which notification mailbox to use. The firmware signals the host via
28162306a36Sopenharmony_cian interrupt. Only the 16 Results fields are used, the Flags, Command, Return
28262306a36Sopenharmony_civalue and Timeout words are not used.
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_ciOSD firmware API description
28662306a36Sopenharmony_ci----------------------------
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ci.. note:: this API is part of the decoder firmware, so it's cx23415 only.
28962306a36Sopenharmony_ci
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ciCX2341X_OSD_GET_FRAMEBUFFER
29362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~
29462306a36Sopenharmony_ci
29562306a36Sopenharmony_ciEnum: 65/0x41
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_ciDescription
29862306a36Sopenharmony_ci^^^^^^^^^^^
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ciReturn base and length of contiguous OSD memory.
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ciResult[0]
30362306a36Sopenharmony_ci^^^^^^^^^
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_ciOSD base address
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ciResult[1]
30862306a36Sopenharmony_ci^^^^^^^^^
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ciOSD length
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ciCX2341X_OSD_GET_PIXEL_FORMAT
31562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31662306a36Sopenharmony_ci
31762306a36Sopenharmony_ciEnum: 66/0x42
31862306a36Sopenharmony_ci
31962306a36Sopenharmony_ciDescription
32062306a36Sopenharmony_ci^^^^^^^^^^^
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ciQuery OSD format
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_ciResult[0]
32562306a36Sopenharmony_ci^^^^^^^^^
32662306a36Sopenharmony_ci
32762306a36Sopenharmony_ci0=8bit index
32862306a36Sopenharmony_ci1=16bit RGB 5:6:5
32962306a36Sopenharmony_ci2=16bit ARGB 1:5:5:5
33062306a36Sopenharmony_ci3=16bit ARGB 1:4:4:4
33162306a36Sopenharmony_ci4=32bit ARGB 8:8:8:8
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ci
33562306a36Sopenharmony_ciCX2341X_OSD_SET_PIXEL_FORMAT
33662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_ciEnum: 67/0x43
33962306a36Sopenharmony_ci
34062306a36Sopenharmony_ciDescription
34162306a36Sopenharmony_ci^^^^^^^^^^^
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ciAssign pixel format
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ciParam[0]
34662306a36Sopenharmony_ci^^^^^^^^
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_ci- 0=8bit index
34962306a36Sopenharmony_ci- 1=16bit RGB 5:6:5
35062306a36Sopenharmony_ci- 2=16bit ARGB 1:5:5:5
35162306a36Sopenharmony_ci- 3=16bit ARGB 1:4:4:4
35262306a36Sopenharmony_ci- 4=32bit ARGB 8:8:8:8
35362306a36Sopenharmony_ci
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_ciCX2341X_OSD_GET_STATE
35762306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ciEnum: 68/0x44
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ciDescription
36262306a36Sopenharmony_ci^^^^^^^^^^^
36362306a36Sopenharmony_ci
36462306a36Sopenharmony_ciQuery OSD state
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ciResult[0]
36762306a36Sopenharmony_ci^^^^^^^^^
36862306a36Sopenharmony_ci
36962306a36Sopenharmony_ci- Bit  0   0=off, 1=on
37062306a36Sopenharmony_ci- Bits 1:2 alpha control
37162306a36Sopenharmony_ci- Bits 3:5 pixel format
37262306a36Sopenharmony_ci
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_ciCX2341X_OSD_SET_STATE
37662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~
37762306a36Sopenharmony_ci
37862306a36Sopenharmony_ciEnum: 69/0x45
37962306a36Sopenharmony_ci
38062306a36Sopenharmony_ciDescription
38162306a36Sopenharmony_ci^^^^^^^^^^^
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ciOSD switch
38462306a36Sopenharmony_ci
38562306a36Sopenharmony_ciParam[0]
38662306a36Sopenharmony_ci^^^^^^^^
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ci0=off, 1=on
38962306a36Sopenharmony_ci
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ci
39262306a36Sopenharmony_ciCX2341X_OSD_GET_OSD_COORDS
39362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~
39462306a36Sopenharmony_ci
39562306a36Sopenharmony_ciEnum: 70/0x46
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ciDescription
39862306a36Sopenharmony_ci^^^^^^^^^^^
39962306a36Sopenharmony_ci
40062306a36Sopenharmony_ciRetrieve coordinates of OSD area blended with video
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ciResult[0]
40362306a36Sopenharmony_ci^^^^^^^^^
40462306a36Sopenharmony_ci
40562306a36Sopenharmony_ciOSD buffer address
40662306a36Sopenharmony_ci
40762306a36Sopenharmony_ciResult[1]
40862306a36Sopenharmony_ci^^^^^^^^^
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_ciStride in pixels
41162306a36Sopenharmony_ci
41262306a36Sopenharmony_ciResult[2]
41362306a36Sopenharmony_ci^^^^^^^^^
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_ciLines in OSD buffer
41662306a36Sopenharmony_ci
41762306a36Sopenharmony_ciResult[3]
41862306a36Sopenharmony_ci^^^^^^^^^
41962306a36Sopenharmony_ci
42062306a36Sopenharmony_ciHorizontal offset in buffer
42162306a36Sopenharmony_ci
42262306a36Sopenharmony_ciResult[4]
42362306a36Sopenharmony_ci^^^^^^^^^
42462306a36Sopenharmony_ci
42562306a36Sopenharmony_ciVertical offset in buffer
42662306a36Sopenharmony_ci
42762306a36Sopenharmony_ci
42862306a36Sopenharmony_ci
42962306a36Sopenharmony_ciCX2341X_OSD_SET_OSD_COORDS
43062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~
43162306a36Sopenharmony_ci
43262306a36Sopenharmony_ciEnum: 71/0x47
43362306a36Sopenharmony_ci
43462306a36Sopenharmony_ciDescription
43562306a36Sopenharmony_ci^^^^^^^^^^^
43662306a36Sopenharmony_ci
43762306a36Sopenharmony_ciAssign the coordinates of the OSD area to blend with video
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_ciParam[0]
44062306a36Sopenharmony_ci^^^^^^^^
44162306a36Sopenharmony_ci
44262306a36Sopenharmony_cibuffer address
44362306a36Sopenharmony_ci
44462306a36Sopenharmony_ciParam[1]
44562306a36Sopenharmony_ci^^^^^^^^
44662306a36Sopenharmony_ci
44762306a36Sopenharmony_cibuffer stride in pixels
44862306a36Sopenharmony_ci
44962306a36Sopenharmony_ciParam[2]
45062306a36Sopenharmony_ci^^^^^^^^
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_cilines in buffer
45362306a36Sopenharmony_ci
45462306a36Sopenharmony_ciParam[3]
45562306a36Sopenharmony_ci^^^^^^^^
45662306a36Sopenharmony_ci
45762306a36Sopenharmony_cihorizontal offset
45862306a36Sopenharmony_ci
45962306a36Sopenharmony_ciParam[4]
46062306a36Sopenharmony_ci^^^^^^^^
46162306a36Sopenharmony_ci
46262306a36Sopenharmony_civertical offset
46362306a36Sopenharmony_ci
46462306a36Sopenharmony_ci
46562306a36Sopenharmony_ci
46662306a36Sopenharmony_ciCX2341X_OSD_GET_SCREEN_COORDS
46762306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
46862306a36Sopenharmony_ci
46962306a36Sopenharmony_ciEnum: 72/0x48
47062306a36Sopenharmony_ci
47162306a36Sopenharmony_ciDescription
47262306a36Sopenharmony_ci^^^^^^^^^^^
47362306a36Sopenharmony_ci
47462306a36Sopenharmony_ciRetrieve OSD screen area coordinates
47562306a36Sopenharmony_ci
47662306a36Sopenharmony_ciResult[0]
47762306a36Sopenharmony_ci^^^^^^^^^
47862306a36Sopenharmony_ci
47962306a36Sopenharmony_citop left horizontal offset
48062306a36Sopenharmony_ci
48162306a36Sopenharmony_ciResult[1]
48262306a36Sopenharmony_ci^^^^^^^^^
48362306a36Sopenharmony_ci
48462306a36Sopenharmony_citop left vertical offset
48562306a36Sopenharmony_ci
48662306a36Sopenharmony_ciResult[2]
48762306a36Sopenharmony_ci^^^^^^^^^
48862306a36Sopenharmony_ci
48962306a36Sopenharmony_cibottom right horizontal offset
49062306a36Sopenharmony_ci
49162306a36Sopenharmony_ciResult[3]
49262306a36Sopenharmony_ci^^^^^^^^^
49362306a36Sopenharmony_ci
49462306a36Sopenharmony_cibottom right vertical offset
49562306a36Sopenharmony_ci
49662306a36Sopenharmony_ci
49762306a36Sopenharmony_ci
49862306a36Sopenharmony_ciCX2341X_OSD_SET_SCREEN_COORDS
49962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50062306a36Sopenharmony_ci
50162306a36Sopenharmony_ciEnum: 73/0x49
50262306a36Sopenharmony_ci
50362306a36Sopenharmony_ciDescription
50462306a36Sopenharmony_ci^^^^^^^^^^^
50562306a36Sopenharmony_ci
50662306a36Sopenharmony_ciAssign the coordinates of the screen area to blend with video
50762306a36Sopenharmony_ci
50862306a36Sopenharmony_ciParam[0]
50962306a36Sopenharmony_ci^^^^^^^^
51062306a36Sopenharmony_ci
51162306a36Sopenharmony_citop left horizontal offset
51262306a36Sopenharmony_ci
51362306a36Sopenharmony_ciParam[1]
51462306a36Sopenharmony_ci^^^^^^^^
51562306a36Sopenharmony_ci
51662306a36Sopenharmony_citop left vertical offset
51762306a36Sopenharmony_ci
51862306a36Sopenharmony_ciParam[2]
51962306a36Sopenharmony_ci^^^^^^^^
52062306a36Sopenharmony_ci
52162306a36Sopenharmony_cibottom left horizontal offset
52262306a36Sopenharmony_ci
52362306a36Sopenharmony_ciParam[3]
52462306a36Sopenharmony_ci^^^^^^^^
52562306a36Sopenharmony_ci
52662306a36Sopenharmony_cibottom left vertical offset
52762306a36Sopenharmony_ci
52862306a36Sopenharmony_ci
52962306a36Sopenharmony_ci
53062306a36Sopenharmony_ciCX2341X_OSD_GET_GLOBAL_ALPHA
53162306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
53262306a36Sopenharmony_ci
53362306a36Sopenharmony_ciEnum: 74/0x4A
53462306a36Sopenharmony_ci
53562306a36Sopenharmony_ciDescription
53662306a36Sopenharmony_ci^^^^^^^^^^^
53762306a36Sopenharmony_ci
53862306a36Sopenharmony_ciRetrieve OSD global alpha
53962306a36Sopenharmony_ci
54062306a36Sopenharmony_ciResult[0]
54162306a36Sopenharmony_ci^^^^^^^^^
54262306a36Sopenharmony_ci
54362306a36Sopenharmony_ciglobal alpha: 0=off, 1=on
54462306a36Sopenharmony_ci
54562306a36Sopenharmony_ciResult[1]
54662306a36Sopenharmony_ci^^^^^^^^^
54762306a36Sopenharmony_ci
54862306a36Sopenharmony_cibits 0:7 global alpha
54962306a36Sopenharmony_ci
55062306a36Sopenharmony_ci
55162306a36Sopenharmony_ci
55262306a36Sopenharmony_ciCX2341X_OSD_SET_GLOBAL_ALPHA
55362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55462306a36Sopenharmony_ci
55562306a36Sopenharmony_ciEnum: 75/0x4B
55662306a36Sopenharmony_ci
55762306a36Sopenharmony_ciDescription
55862306a36Sopenharmony_ci^^^^^^^^^^^
55962306a36Sopenharmony_ci
56062306a36Sopenharmony_ciUpdate global alpha
56162306a36Sopenharmony_ci
56262306a36Sopenharmony_ciParam[0]
56362306a36Sopenharmony_ci^^^^^^^^
56462306a36Sopenharmony_ci
56562306a36Sopenharmony_ciglobal alpha: 0=off, 1=on
56662306a36Sopenharmony_ci
56762306a36Sopenharmony_ciParam[1]
56862306a36Sopenharmony_ci^^^^^^^^
56962306a36Sopenharmony_ci
57062306a36Sopenharmony_ciglobal alpha (8 bits)
57162306a36Sopenharmony_ci
57262306a36Sopenharmony_ciParam[2]
57362306a36Sopenharmony_ci^^^^^^^^
57462306a36Sopenharmony_ci
57562306a36Sopenharmony_cilocal alpha: 0=on, 1=off
57662306a36Sopenharmony_ci
57762306a36Sopenharmony_ci
57862306a36Sopenharmony_ci
57962306a36Sopenharmony_ciCX2341X_OSD_SET_BLEND_COORDS
58062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58162306a36Sopenharmony_ci
58262306a36Sopenharmony_ciEnum: 78/0x4C
58362306a36Sopenharmony_ci
58462306a36Sopenharmony_ciDescription
58562306a36Sopenharmony_ci^^^^^^^^^^^
58662306a36Sopenharmony_ci
58762306a36Sopenharmony_ciMove start of blending area within display buffer
58862306a36Sopenharmony_ci
58962306a36Sopenharmony_ciParam[0]
59062306a36Sopenharmony_ci^^^^^^^^
59162306a36Sopenharmony_ci
59262306a36Sopenharmony_cihorizontal offset in buffer
59362306a36Sopenharmony_ci
59462306a36Sopenharmony_ciParam[1]
59562306a36Sopenharmony_ci^^^^^^^^
59662306a36Sopenharmony_ci
59762306a36Sopenharmony_civertical offset in buffer
59862306a36Sopenharmony_ci
59962306a36Sopenharmony_ci
60062306a36Sopenharmony_ci
60162306a36Sopenharmony_ciCX2341X_OSD_GET_FLICKER_STATE
60262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60362306a36Sopenharmony_ci
60462306a36Sopenharmony_ciEnum: 79/0x4F
60562306a36Sopenharmony_ci
60662306a36Sopenharmony_ciDescription
60762306a36Sopenharmony_ci^^^^^^^^^^^
60862306a36Sopenharmony_ci
60962306a36Sopenharmony_ciRetrieve flicker reduction module state
61062306a36Sopenharmony_ci
61162306a36Sopenharmony_ciResult[0]
61262306a36Sopenharmony_ci^^^^^^^^^
61362306a36Sopenharmony_ci
61462306a36Sopenharmony_ciflicker state: 0=off, 1=on
61562306a36Sopenharmony_ci
61662306a36Sopenharmony_ci
61762306a36Sopenharmony_ci
61862306a36Sopenharmony_ciCX2341X_OSD_SET_FLICKER_STATE
61962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62062306a36Sopenharmony_ci
62162306a36Sopenharmony_ciEnum: 80/0x50
62262306a36Sopenharmony_ci
62362306a36Sopenharmony_ciDescription
62462306a36Sopenharmony_ci^^^^^^^^^^^
62562306a36Sopenharmony_ci
62662306a36Sopenharmony_ciSet flicker reduction module state
62762306a36Sopenharmony_ci
62862306a36Sopenharmony_ciParam[0]
62962306a36Sopenharmony_ci^^^^^^^^
63062306a36Sopenharmony_ci
63162306a36Sopenharmony_ciState: 0=off, 1=on
63262306a36Sopenharmony_ci
63362306a36Sopenharmony_ci
63462306a36Sopenharmony_ci
63562306a36Sopenharmony_ciCX2341X_OSD_BLT_COPY
63662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~
63762306a36Sopenharmony_ci
63862306a36Sopenharmony_ciEnum: 82/0x52
63962306a36Sopenharmony_ci
64062306a36Sopenharmony_ciDescription
64162306a36Sopenharmony_ci^^^^^^^^^^^
64262306a36Sopenharmony_ci
64362306a36Sopenharmony_ciBLT copy
64462306a36Sopenharmony_ci
64562306a36Sopenharmony_ciParam[0]
64662306a36Sopenharmony_ci^^^^^^^^
64762306a36Sopenharmony_ci
64862306a36Sopenharmony_ci.. code-block:: none
64962306a36Sopenharmony_ci
65062306a36Sopenharmony_ci	'0000'  zero
65162306a36Sopenharmony_ci	'0001' ~destination AND ~source
65262306a36Sopenharmony_ci	'0010' ~destination AND  source
65362306a36Sopenharmony_ci	'0011' ~destination
65462306a36Sopenharmony_ci	'0100'  destination AND ~source
65562306a36Sopenharmony_ci	'0101'                  ~source
65662306a36Sopenharmony_ci	'0110'  destination XOR  source
65762306a36Sopenharmony_ci	'0111' ~destination OR  ~source
65862306a36Sopenharmony_ci	'1000' ~destination AND ~source
65962306a36Sopenharmony_ci	'1001'  destination XNOR source
66062306a36Sopenharmony_ci	'1010'                   source
66162306a36Sopenharmony_ci	'1011' ~destination OR   source
66262306a36Sopenharmony_ci	'1100'  destination
66362306a36Sopenharmony_ci	'1101'  destination OR  ~source
66462306a36Sopenharmony_ci	'1110'  destination OR   source
66562306a36Sopenharmony_ci	'1111'  one
66662306a36Sopenharmony_ci
66762306a36Sopenharmony_ci
66862306a36Sopenharmony_ciParam[1]
66962306a36Sopenharmony_ci^^^^^^^^
67062306a36Sopenharmony_ci
67162306a36Sopenharmony_ciResulting alpha blending
67262306a36Sopenharmony_ci
67362306a36Sopenharmony_ci- '01' source_alpha
67462306a36Sopenharmony_ci- '10' destination_alpha
67562306a36Sopenharmony_ci- '11' source_alpha*destination_alpha+1
67662306a36Sopenharmony_ci  (zero if both source and destination alpha are zero)
67762306a36Sopenharmony_ci
67862306a36Sopenharmony_ciParam[2]
67962306a36Sopenharmony_ci^^^^^^^^
68062306a36Sopenharmony_ci
68162306a36Sopenharmony_ci.. code-block:: none
68262306a36Sopenharmony_ci
68362306a36Sopenharmony_ci	'00' output_pixel = source_pixel
68462306a36Sopenharmony_ci
68562306a36Sopenharmony_ci	'01' if source_alpha=0:
68662306a36Sopenharmony_ci		 output_pixel = destination_pixel
68762306a36Sopenharmony_ci	     if 256 > source_alpha > 1:
68862306a36Sopenharmony_ci		 output_pixel = ((source_alpha + 1)*source_pixel +
68962306a36Sopenharmony_ci				 (255 - source_alpha)*destination_pixel)/256
69062306a36Sopenharmony_ci
69162306a36Sopenharmony_ci	'10' if destination_alpha=0:
69262306a36Sopenharmony_ci		 output_pixel = source_pixel
69362306a36Sopenharmony_ci	      if 255 > destination_alpha > 0:
69462306a36Sopenharmony_ci		 output_pixel = ((255 - destination_alpha)*source_pixel +
69562306a36Sopenharmony_ci				 (destination_alpha + 1)*destination_pixel)/256
69662306a36Sopenharmony_ci
69762306a36Sopenharmony_ci	'11' if source_alpha=0:
69862306a36Sopenharmony_ci		 source_temp = 0
69962306a36Sopenharmony_ci	     if source_alpha=255:
70062306a36Sopenharmony_ci		 source_temp = source_pixel*256
70162306a36Sopenharmony_ci	     if 255 > source_alpha > 0:
70262306a36Sopenharmony_ci		 source_temp = source_pixel*(source_alpha + 1)
70362306a36Sopenharmony_ci	     if destination_alpha=0:
70462306a36Sopenharmony_ci		 destination_temp = 0
70562306a36Sopenharmony_ci	     if destination_alpha=255:
70662306a36Sopenharmony_ci		 destination_temp = destination_pixel*256
70762306a36Sopenharmony_ci	     if 255 > destination_alpha > 0:
70862306a36Sopenharmony_ci		 destination_temp = destination_pixel*(destination_alpha + 1)
70962306a36Sopenharmony_ci	     output_pixel = (source_temp + destination_temp)/256
71062306a36Sopenharmony_ci
71162306a36Sopenharmony_ciParam[3]
71262306a36Sopenharmony_ci^^^^^^^^
71362306a36Sopenharmony_ci
71462306a36Sopenharmony_ciwidth
71562306a36Sopenharmony_ci
71662306a36Sopenharmony_ciParam[4]
71762306a36Sopenharmony_ci^^^^^^^^
71862306a36Sopenharmony_ci
71962306a36Sopenharmony_ciheight
72062306a36Sopenharmony_ci
72162306a36Sopenharmony_ciParam[5]
72262306a36Sopenharmony_ci^^^^^^^^
72362306a36Sopenharmony_ci
72462306a36Sopenharmony_cidestination pixel mask
72562306a36Sopenharmony_ci
72662306a36Sopenharmony_ciParam[6]
72762306a36Sopenharmony_ci^^^^^^^^
72862306a36Sopenharmony_ci
72962306a36Sopenharmony_cidestination rectangle start address
73062306a36Sopenharmony_ci
73162306a36Sopenharmony_ciParam[7]
73262306a36Sopenharmony_ci^^^^^^^^
73362306a36Sopenharmony_ci
73462306a36Sopenharmony_cidestination stride in dwords
73562306a36Sopenharmony_ci
73662306a36Sopenharmony_ciParam[8]
73762306a36Sopenharmony_ci^^^^^^^^
73862306a36Sopenharmony_ci
73962306a36Sopenharmony_cisource stride in dwords
74062306a36Sopenharmony_ci
74162306a36Sopenharmony_ciParam[9]
74262306a36Sopenharmony_ci^^^^^^^^
74362306a36Sopenharmony_ci
74462306a36Sopenharmony_cisource rectangle start address
74562306a36Sopenharmony_ci
74662306a36Sopenharmony_ci
74762306a36Sopenharmony_ci
74862306a36Sopenharmony_ciCX2341X_OSD_BLT_FILL
74962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~
75062306a36Sopenharmony_ci
75162306a36Sopenharmony_ciEnum: 83/0x53
75262306a36Sopenharmony_ci
75362306a36Sopenharmony_ciDescription
75462306a36Sopenharmony_ci^^^^^^^^^^^
75562306a36Sopenharmony_ci
75662306a36Sopenharmony_ciBLT fill color
75762306a36Sopenharmony_ci
75862306a36Sopenharmony_ciParam[0]
75962306a36Sopenharmony_ci^^^^^^^^
76062306a36Sopenharmony_ci
76162306a36Sopenharmony_ciSame as Param[0] on API 0x52
76262306a36Sopenharmony_ci
76362306a36Sopenharmony_ciParam[1]
76462306a36Sopenharmony_ci^^^^^^^^
76562306a36Sopenharmony_ci
76662306a36Sopenharmony_ciSame as Param[1] on API 0x52
76762306a36Sopenharmony_ci
76862306a36Sopenharmony_ciParam[2]
76962306a36Sopenharmony_ci^^^^^^^^
77062306a36Sopenharmony_ci
77162306a36Sopenharmony_ciSame as Param[2] on API 0x52
77262306a36Sopenharmony_ci
77362306a36Sopenharmony_ciParam[3]
77462306a36Sopenharmony_ci^^^^^^^^
77562306a36Sopenharmony_ci
77662306a36Sopenharmony_ciwidth
77762306a36Sopenharmony_ci
77862306a36Sopenharmony_ciParam[4]
77962306a36Sopenharmony_ci^^^^^^^^
78062306a36Sopenharmony_ci
78162306a36Sopenharmony_ciheight
78262306a36Sopenharmony_ci
78362306a36Sopenharmony_ciParam[5]
78462306a36Sopenharmony_ci^^^^^^^^
78562306a36Sopenharmony_ci
78662306a36Sopenharmony_cidestination pixel mask
78762306a36Sopenharmony_ci
78862306a36Sopenharmony_ciParam[6]
78962306a36Sopenharmony_ci^^^^^^^^
79062306a36Sopenharmony_ci
79162306a36Sopenharmony_cidestination rectangle start address
79262306a36Sopenharmony_ci
79362306a36Sopenharmony_ciParam[7]
79462306a36Sopenharmony_ci^^^^^^^^
79562306a36Sopenharmony_ci
79662306a36Sopenharmony_cidestination stride in dwords
79762306a36Sopenharmony_ci
79862306a36Sopenharmony_ciParam[8]
79962306a36Sopenharmony_ci^^^^^^^^
80062306a36Sopenharmony_ci
80162306a36Sopenharmony_cicolor fill value
80262306a36Sopenharmony_ci
80362306a36Sopenharmony_ci
80462306a36Sopenharmony_ci
80562306a36Sopenharmony_ciCX2341X_OSD_BLT_TEXT
80662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~
80762306a36Sopenharmony_ci
80862306a36Sopenharmony_ciEnum: 84/0x54
80962306a36Sopenharmony_ci
81062306a36Sopenharmony_ciDescription
81162306a36Sopenharmony_ci^^^^^^^^^^^
81262306a36Sopenharmony_ci
81362306a36Sopenharmony_ciBLT for 8 bit alpha text source
81462306a36Sopenharmony_ci
81562306a36Sopenharmony_ciParam[0]
81662306a36Sopenharmony_ci^^^^^^^^
81762306a36Sopenharmony_ci
81862306a36Sopenharmony_ciSame as Param[0] on API 0x52
81962306a36Sopenharmony_ci
82062306a36Sopenharmony_ciParam[1]
82162306a36Sopenharmony_ci^^^^^^^^
82262306a36Sopenharmony_ci
82362306a36Sopenharmony_ciSame as Param[1] on API 0x52
82462306a36Sopenharmony_ci
82562306a36Sopenharmony_ciParam[2]
82662306a36Sopenharmony_ci^^^^^^^^
82762306a36Sopenharmony_ci
82862306a36Sopenharmony_ciSame as Param[2] on API 0x52
82962306a36Sopenharmony_ci
83062306a36Sopenharmony_ciParam[3]
83162306a36Sopenharmony_ci^^^^^^^^
83262306a36Sopenharmony_ci
83362306a36Sopenharmony_ciwidth
83462306a36Sopenharmony_ci
83562306a36Sopenharmony_ciParam[4]
83662306a36Sopenharmony_ci^^^^^^^^
83762306a36Sopenharmony_ci
83862306a36Sopenharmony_ciheight
83962306a36Sopenharmony_ci
84062306a36Sopenharmony_ciParam[5]
84162306a36Sopenharmony_ci^^^^^^^^
84262306a36Sopenharmony_ci
84362306a36Sopenharmony_cidestination pixel mask
84462306a36Sopenharmony_ci
84562306a36Sopenharmony_ciParam[6]
84662306a36Sopenharmony_ci^^^^^^^^
84762306a36Sopenharmony_ci
84862306a36Sopenharmony_cidestination rectangle start address
84962306a36Sopenharmony_ci
85062306a36Sopenharmony_ciParam[7]
85162306a36Sopenharmony_ci^^^^^^^^
85262306a36Sopenharmony_ci
85362306a36Sopenharmony_cidestination stride in dwords
85462306a36Sopenharmony_ci
85562306a36Sopenharmony_ciParam[8]
85662306a36Sopenharmony_ci^^^^^^^^
85762306a36Sopenharmony_ci
85862306a36Sopenharmony_cisource stride in dwords
85962306a36Sopenharmony_ci
86062306a36Sopenharmony_ciParam[9]
86162306a36Sopenharmony_ci^^^^^^^^
86262306a36Sopenharmony_ci
86362306a36Sopenharmony_cisource rectangle start address
86462306a36Sopenharmony_ci
86562306a36Sopenharmony_ciParam[10]
86662306a36Sopenharmony_ci^^^^^^^^^
86762306a36Sopenharmony_ci
86862306a36Sopenharmony_cicolor fill value
86962306a36Sopenharmony_ci
87062306a36Sopenharmony_ci
87162306a36Sopenharmony_ci
87262306a36Sopenharmony_ciCX2341X_OSD_SET_FRAMEBUFFER_WINDOW
87362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
87462306a36Sopenharmony_ci
87562306a36Sopenharmony_ciEnum: 86/0x56
87662306a36Sopenharmony_ci
87762306a36Sopenharmony_ciDescription
87862306a36Sopenharmony_ci^^^^^^^^^^^
87962306a36Sopenharmony_ci
88062306a36Sopenharmony_ciPositions the main output window on the screen. The coordinates must be
88162306a36Sopenharmony_cisuch that the entire window fits on the screen.
88262306a36Sopenharmony_ci
88362306a36Sopenharmony_ciParam[0]
88462306a36Sopenharmony_ci^^^^^^^^
88562306a36Sopenharmony_ci
88662306a36Sopenharmony_ciwindow width
88762306a36Sopenharmony_ci
88862306a36Sopenharmony_ciParam[1]
88962306a36Sopenharmony_ci^^^^^^^^
89062306a36Sopenharmony_ci
89162306a36Sopenharmony_ciwindow height
89262306a36Sopenharmony_ci
89362306a36Sopenharmony_ciParam[2]
89462306a36Sopenharmony_ci^^^^^^^^
89562306a36Sopenharmony_ci
89662306a36Sopenharmony_citop left window corner horizontal offset
89762306a36Sopenharmony_ci
89862306a36Sopenharmony_ciParam[3]
89962306a36Sopenharmony_ci^^^^^^^^
90062306a36Sopenharmony_ci
90162306a36Sopenharmony_citop left window corner vertical offset
90262306a36Sopenharmony_ci
90362306a36Sopenharmony_ci
90462306a36Sopenharmony_ci
90562306a36Sopenharmony_ciCX2341X_OSD_SET_CHROMA_KEY
90662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~
90762306a36Sopenharmony_ci
90862306a36Sopenharmony_ciEnum: 96/0x60
90962306a36Sopenharmony_ci
91062306a36Sopenharmony_ciDescription
91162306a36Sopenharmony_ci^^^^^^^^^^^
91262306a36Sopenharmony_ci
91362306a36Sopenharmony_ciChroma key switch and color
91462306a36Sopenharmony_ci
91562306a36Sopenharmony_ciParam[0]
91662306a36Sopenharmony_ci^^^^^^^^
91762306a36Sopenharmony_ci
91862306a36Sopenharmony_cistate: 0=off, 1=on
91962306a36Sopenharmony_ci
92062306a36Sopenharmony_ciParam[1]
92162306a36Sopenharmony_ci^^^^^^^^
92262306a36Sopenharmony_ci
92362306a36Sopenharmony_cicolor
92462306a36Sopenharmony_ci
92562306a36Sopenharmony_ci
92662306a36Sopenharmony_ci
92762306a36Sopenharmony_ciCX2341X_OSD_GET_ALPHA_CONTENT_INDEX
92862306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
92962306a36Sopenharmony_ci
93062306a36Sopenharmony_ciEnum: 97/0x61
93162306a36Sopenharmony_ci
93262306a36Sopenharmony_ciDescription
93362306a36Sopenharmony_ci^^^^^^^^^^^
93462306a36Sopenharmony_ci
93562306a36Sopenharmony_ciRetrieve alpha content index
93662306a36Sopenharmony_ci
93762306a36Sopenharmony_ciResult[0]
93862306a36Sopenharmony_ci^^^^^^^^^
93962306a36Sopenharmony_ci
94062306a36Sopenharmony_cialpha content index, Range 0:15
94162306a36Sopenharmony_ci
94262306a36Sopenharmony_ci
94362306a36Sopenharmony_ci
94462306a36Sopenharmony_ciCX2341X_OSD_SET_ALPHA_CONTENT_INDEX
94562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
94662306a36Sopenharmony_ci
94762306a36Sopenharmony_ciEnum: 98/0x62
94862306a36Sopenharmony_ci
94962306a36Sopenharmony_ciDescription
95062306a36Sopenharmony_ci^^^^^^^^^^^
95162306a36Sopenharmony_ci
95262306a36Sopenharmony_ciAssign alpha content index
95362306a36Sopenharmony_ci
95462306a36Sopenharmony_ciParam[0]
95562306a36Sopenharmony_ci^^^^^^^^
95662306a36Sopenharmony_ci
95762306a36Sopenharmony_cialpha content index, range 0:15
95862306a36Sopenharmony_ci
95962306a36Sopenharmony_ci
96062306a36Sopenharmony_ciEncoder firmware API description
96162306a36Sopenharmony_ci--------------------------------
96262306a36Sopenharmony_ci
96362306a36Sopenharmony_ciCX2341X_ENC_PING_FW
96462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~
96562306a36Sopenharmony_ci
96662306a36Sopenharmony_ciEnum: 128/0x80
96762306a36Sopenharmony_ci
96862306a36Sopenharmony_ciDescription
96962306a36Sopenharmony_ci^^^^^^^^^^^
97062306a36Sopenharmony_ci
97162306a36Sopenharmony_ciDoes nothing. Can be used to check if the firmware is responding.
97262306a36Sopenharmony_ci
97362306a36Sopenharmony_ci
97462306a36Sopenharmony_ci
97562306a36Sopenharmony_ciCX2341X_ENC_START_CAPTURE
97662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~
97762306a36Sopenharmony_ci
97862306a36Sopenharmony_ciEnum: 129/0x81
97962306a36Sopenharmony_ci
98062306a36Sopenharmony_ciDescription
98162306a36Sopenharmony_ci^^^^^^^^^^^
98262306a36Sopenharmony_ci
98362306a36Sopenharmony_ciCommences the capture of video, audio and/or VBI data. All encoding
98462306a36Sopenharmony_ciparameters must be initialized prior to this API call. Captures frames
98562306a36Sopenharmony_cicontinuously or until a predefined number of frames have been captured.
98662306a36Sopenharmony_ci
98762306a36Sopenharmony_ciParam[0]
98862306a36Sopenharmony_ci^^^^^^^^
98962306a36Sopenharmony_ci
99062306a36Sopenharmony_ciCapture stream type:
99162306a36Sopenharmony_ci
99262306a36Sopenharmony_ci	- 0=MPEG
99362306a36Sopenharmony_ci	- 1=Raw
99462306a36Sopenharmony_ci	- 2=Raw passthrough
99562306a36Sopenharmony_ci	- 3=VBI
99662306a36Sopenharmony_ci
99762306a36Sopenharmony_ci
99862306a36Sopenharmony_ciParam[1]
99962306a36Sopenharmony_ci^^^^^^^^
100062306a36Sopenharmony_ci
100162306a36Sopenharmony_ciBitmask:
100262306a36Sopenharmony_ci
100362306a36Sopenharmony_ci	- Bit 0 when set, captures YUV
100462306a36Sopenharmony_ci	- Bit 1 when set, captures PCM audio
100562306a36Sopenharmony_ci	- Bit 2 when set, captures VBI (same as param[0]=3)
100662306a36Sopenharmony_ci	- Bit 3 when set, the capture destination is the decoder
100762306a36Sopenharmony_ci	  (same as param[0]=2)
100862306a36Sopenharmony_ci	- Bit 4 when set, the capture destination is the host
100962306a36Sopenharmony_ci
101062306a36Sopenharmony_ci.. note:: this parameter is only meaningful for RAW capture type.
101162306a36Sopenharmony_ci
101262306a36Sopenharmony_ci
101362306a36Sopenharmony_ci
101462306a36Sopenharmony_ciCX2341X_ENC_STOP_CAPTURE
101562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~
101662306a36Sopenharmony_ci
101762306a36Sopenharmony_ciEnum: 130/0x82
101862306a36Sopenharmony_ci
101962306a36Sopenharmony_ciDescription
102062306a36Sopenharmony_ci^^^^^^^^^^^
102162306a36Sopenharmony_ci
102262306a36Sopenharmony_ciEnds a capture in progress
102362306a36Sopenharmony_ci
102462306a36Sopenharmony_ciParam[0]
102562306a36Sopenharmony_ci^^^^^^^^
102662306a36Sopenharmony_ci
102762306a36Sopenharmony_ci- 0=stop at end of GOP (generates IRQ)
102862306a36Sopenharmony_ci- 1=stop immediate (no IRQ)
102962306a36Sopenharmony_ci
103062306a36Sopenharmony_ciParam[1]
103162306a36Sopenharmony_ci^^^^^^^^
103262306a36Sopenharmony_ci
103362306a36Sopenharmony_ciStream type to stop, see param[0] of API 0x81
103462306a36Sopenharmony_ci
103562306a36Sopenharmony_ciParam[2]
103662306a36Sopenharmony_ci^^^^^^^^
103762306a36Sopenharmony_ci
103862306a36Sopenharmony_ciSubtype, see param[1] of API 0x81
103962306a36Sopenharmony_ci
104062306a36Sopenharmony_ci
104162306a36Sopenharmony_ci
104262306a36Sopenharmony_ciCX2341X_ENC_SET_AUDIO_ID
104362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~
104462306a36Sopenharmony_ci
104562306a36Sopenharmony_ciEnum: 137/0x89
104662306a36Sopenharmony_ci
104762306a36Sopenharmony_ciDescription
104862306a36Sopenharmony_ci^^^^^^^^^^^
104962306a36Sopenharmony_ci
105062306a36Sopenharmony_ciAssigns the transport stream ID of the encoded audio stream
105162306a36Sopenharmony_ci
105262306a36Sopenharmony_ciParam[0]
105362306a36Sopenharmony_ci^^^^^^^^
105462306a36Sopenharmony_ci
105562306a36Sopenharmony_ciAudio Stream ID
105662306a36Sopenharmony_ci
105762306a36Sopenharmony_ci
105862306a36Sopenharmony_ci
105962306a36Sopenharmony_ciCX2341X_ENC_SET_VIDEO_ID
106062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~
106162306a36Sopenharmony_ci
106262306a36Sopenharmony_ciEnum: 139/0x8B
106362306a36Sopenharmony_ci
106462306a36Sopenharmony_ciDescription
106562306a36Sopenharmony_ci^^^^^^^^^^^
106662306a36Sopenharmony_ci
106762306a36Sopenharmony_ciSet video transport stream ID
106862306a36Sopenharmony_ci
106962306a36Sopenharmony_ciParam[0]
107062306a36Sopenharmony_ci^^^^^^^^
107162306a36Sopenharmony_ci
107262306a36Sopenharmony_ciVideo stream ID
107362306a36Sopenharmony_ci
107462306a36Sopenharmony_ci
107562306a36Sopenharmony_ci
107662306a36Sopenharmony_ciCX2341X_ENC_SET_PCR_ID
107762306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~
107862306a36Sopenharmony_ci
107962306a36Sopenharmony_ciEnum: 141/0x8D
108062306a36Sopenharmony_ci
108162306a36Sopenharmony_ciDescription
108262306a36Sopenharmony_ci^^^^^^^^^^^
108362306a36Sopenharmony_ci
108462306a36Sopenharmony_ciAssigns the transport stream ID for PCR packets
108562306a36Sopenharmony_ci
108662306a36Sopenharmony_ciParam[0]
108762306a36Sopenharmony_ci^^^^^^^^
108862306a36Sopenharmony_ci
108962306a36Sopenharmony_ciPCR Stream ID
109062306a36Sopenharmony_ci
109162306a36Sopenharmony_ci
109262306a36Sopenharmony_ci
109362306a36Sopenharmony_ciCX2341X_ENC_SET_FRAME_RATE
109462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~
109562306a36Sopenharmony_ci
109662306a36Sopenharmony_ciEnum: 143/0x8F
109762306a36Sopenharmony_ci
109862306a36Sopenharmony_ciDescription
109962306a36Sopenharmony_ci^^^^^^^^^^^
110062306a36Sopenharmony_ci
110162306a36Sopenharmony_ciSet video frames per second. Change occurs at start of new GOP.
110262306a36Sopenharmony_ci
110362306a36Sopenharmony_ciParam[0]
110462306a36Sopenharmony_ci^^^^^^^^
110562306a36Sopenharmony_ci
110662306a36Sopenharmony_ci- 0=30fps
110762306a36Sopenharmony_ci- 1=25fps
110862306a36Sopenharmony_ci
110962306a36Sopenharmony_ci
111062306a36Sopenharmony_ci
111162306a36Sopenharmony_ciCX2341X_ENC_SET_FRAME_SIZE
111262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~
111362306a36Sopenharmony_ci
111462306a36Sopenharmony_ciEnum: 145/0x91
111562306a36Sopenharmony_ci
111662306a36Sopenharmony_ciDescription
111762306a36Sopenharmony_ci^^^^^^^^^^^
111862306a36Sopenharmony_ci
111962306a36Sopenharmony_ciSelect video stream encoding resolution.
112062306a36Sopenharmony_ci
112162306a36Sopenharmony_ciParam[0]
112262306a36Sopenharmony_ci^^^^^^^^
112362306a36Sopenharmony_ci
112462306a36Sopenharmony_ciHeight in lines. Default 480
112562306a36Sopenharmony_ci
112662306a36Sopenharmony_ciParam[1]
112762306a36Sopenharmony_ci^^^^^^^^
112862306a36Sopenharmony_ci
112962306a36Sopenharmony_ciWidth in pixels. Default 720
113062306a36Sopenharmony_ci
113162306a36Sopenharmony_ci
113262306a36Sopenharmony_ci
113362306a36Sopenharmony_ciCX2341X_ENC_SET_BIT_RATE
113462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~
113562306a36Sopenharmony_ci
113662306a36Sopenharmony_ciEnum: 149/0x95
113762306a36Sopenharmony_ci
113862306a36Sopenharmony_ciDescription
113962306a36Sopenharmony_ci^^^^^^^^^^^
114062306a36Sopenharmony_ci
114162306a36Sopenharmony_ciAssign average video stream bitrate.
114262306a36Sopenharmony_ci
114362306a36Sopenharmony_ciParam[0]
114462306a36Sopenharmony_ci^^^^^^^^
114562306a36Sopenharmony_ci
114662306a36Sopenharmony_ci0=variable bitrate, 1=constant bitrate
114762306a36Sopenharmony_ci
114862306a36Sopenharmony_ciParam[1]
114962306a36Sopenharmony_ci^^^^^^^^
115062306a36Sopenharmony_ci
115162306a36Sopenharmony_cibitrate in bits per second
115262306a36Sopenharmony_ci
115362306a36Sopenharmony_ciParam[2]
115462306a36Sopenharmony_ci^^^^^^^^
115562306a36Sopenharmony_ci
115662306a36Sopenharmony_cipeak bitrate in bits per second, divided by 400
115762306a36Sopenharmony_ci
115862306a36Sopenharmony_ciParam[3]
115962306a36Sopenharmony_ci^^^^^^^^
116062306a36Sopenharmony_ci
116162306a36Sopenharmony_ciMux bitrate in bits per second, divided by 400. May be 0 (default).
116262306a36Sopenharmony_ci
116362306a36Sopenharmony_ciParam[4]
116462306a36Sopenharmony_ci^^^^^^^^
116562306a36Sopenharmony_ci
116662306a36Sopenharmony_ciRate Control VBR Padding
116762306a36Sopenharmony_ci
116862306a36Sopenharmony_ciParam[5]
116962306a36Sopenharmony_ci^^^^^^^^
117062306a36Sopenharmony_ci
117162306a36Sopenharmony_ciVBV Buffer used by encoder
117262306a36Sopenharmony_ci
117362306a36Sopenharmony_ci.. note::
117462306a36Sopenharmony_ci
117562306a36Sopenharmony_ci	#) Param\[3\] and Param\[4\] seem to be always 0
117662306a36Sopenharmony_ci	#) Param\[5\] doesn't seem to be used.
117762306a36Sopenharmony_ci
117862306a36Sopenharmony_ci
117962306a36Sopenharmony_ci
118062306a36Sopenharmony_ciCX2341X_ENC_SET_GOP_PROPERTIES
118162306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
118262306a36Sopenharmony_ci
118362306a36Sopenharmony_ciEnum: 151/0x97
118462306a36Sopenharmony_ci
118562306a36Sopenharmony_ciDescription
118662306a36Sopenharmony_ci^^^^^^^^^^^
118762306a36Sopenharmony_ci
118862306a36Sopenharmony_ciSetup the GOP structure
118962306a36Sopenharmony_ci
119062306a36Sopenharmony_ciParam[0]
119162306a36Sopenharmony_ci^^^^^^^^
119262306a36Sopenharmony_ci
119362306a36Sopenharmony_ciGOP size (maximum is 34)
119462306a36Sopenharmony_ci
119562306a36Sopenharmony_ciParam[1]
119662306a36Sopenharmony_ci^^^^^^^^
119762306a36Sopenharmony_ci
119862306a36Sopenharmony_ciNumber of B frames between the I and P frame, plus 1.
119962306a36Sopenharmony_ciFor example: IBBPBBPBBPBB --> GOP size: 12, number of B frames: 2+1 = 3
120062306a36Sopenharmony_ci
120162306a36Sopenharmony_ci.. note::
120262306a36Sopenharmony_ci
120362306a36Sopenharmony_ci	GOP size must be a multiple of (B-frames + 1).
120462306a36Sopenharmony_ci
120562306a36Sopenharmony_ci
120662306a36Sopenharmony_ci
120762306a36Sopenharmony_ciCX2341X_ENC_SET_ASPECT_RATIO
120862306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
120962306a36Sopenharmony_ci
121062306a36Sopenharmony_ciEnum: 153/0x99
121162306a36Sopenharmony_ci
121262306a36Sopenharmony_ciDescription
121362306a36Sopenharmony_ci^^^^^^^^^^^
121462306a36Sopenharmony_ci
121562306a36Sopenharmony_ciSets the encoding aspect ratio. Changes in the aspect ratio take effect
121662306a36Sopenharmony_ciat the start of the next GOP.
121762306a36Sopenharmony_ci
121862306a36Sopenharmony_ciParam[0]
121962306a36Sopenharmony_ci^^^^^^^^
122062306a36Sopenharmony_ci
122162306a36Sopenharmony_ci- '0000' forbidden
122262306a36Sopenharmony_ci- '0001' 1:1 square
122362306a36Sopenharmony_ci- '0010' 4:3
122462306a36Sopenharmony_ci- '0011' 16:9
122562306a36Sopenharmony_ci- '0100' 2.21:1
122662306a36Sopenharmony_ci- '0101' to '1111' reserved
122762306a36Sopenharmony_ci
122862306a36Sopenharmony_ci
122962306a36Sopenharmony_ci
123062306a36Sopenharmony_ciCX2341X_ENC_SET_DNR_FILTER_MODE
123162306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
123262306a36Sopenharmony_ci
123362306a36Sopenharmony_ciEnum: 155/0x9B
123462306a36Sopenharmony_ci
123562306a36Sopenharmony_ciDescription
123662306a36Sopenharmony_ci^^^^^^^^^^^
123762306a36Sopenharmony_ci
123862306a36Sopenharmony_ciAssign Dynamic Noise Reduction operating mode
123962306a36Sopenharmony_ci
124062306a36Sopenharmony_ciParam[0]
124162306a36Sopenharmony_ci^^^^^^^^
124262306a36Sopenharmony_ci
124362306a36Sopenharmony_ciBit0: Spatial filter, set=auto, clear=manual
124462306a36Sopenharmony_ciBit1: Temporal filter, set=auto, clear=manual
124562306a36Sopenharmony_ci
124662306a36Sopenharmony_ciParam[1]
124762306a36Sopenharmony_ci^^^^^^^^
124862306a36Sopenharmony_ci
124962306a36Sopenharmony_ciMedian filter:
125062306a36Sopenharmony_ci
125162306a36Sopenharmony_ci- 0=Disabled
125262306a36Sopenharmony_ci- 1=Horizontal
125362306a36Sopenharmony_ci- 2=Vertical
125462306a36Sopenharmony_ci- 3=Horiz/Vert
125562306a36Sopenharmony_ci- 4=Diagonal
125662306a36Sopenharmony_ci
125762306a36Sopenharmony_ci
125862306a36Sopenharmony_ci
125962306a36Sopenharmony_ciCX2341X_ENC_SET_DNR_FILTER_PROPS
126062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
126162306a36Sopenharmony_ci
126262306a36Sopenharmony_ciEnum: 157/0x9D
126362306a36Sopenharmony_ci
126462306a36Sopenharmony_ciDescription
126562306a36Sopenharmony_ci^^^^^^^^^^^
126662306a36Sopenharmony_ci
126762306a36Sopenharmony_ciThese Dynamic Noise Reduction filter values are only meaningful when
126862306a36Sopenharmony_cithe respective filter is set to "manual" (See API 0x9B)
126962306a36Sopenharmony_ci
127062306a36Sopenharmony_ciParam[0]
127162306a36Sopenharmony_ci^^^^^^^^
127262306a36Sopenharmony_ci
127362306a36Sopenharmony_ciSpatial filter: default 0, range 0:15
127462306a36Sopenharmony_ci
127562306a36Sopenharmony_ciParam[1]
127662306a36Sopenharmony_ci^^^^^^^^
127762306a36Sopenharmony_ci
127862306a36Sopenharmony_ciTemporal filter: default 0, range 0:31
127962306a36Sopenharmony_ci
128062306a36Sopenharmony_ci
128162306a36Sopenharmony_ci
128262306a36Sopenharmony_ciCX2341X_ENC_SET_CORING_LEVELS
128362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
128462306a36Sopenharmony_ci
128562306a36Sopenharmony_ciEnum: 159/0x9F
128662306a36Sopenharmony_ci
128762306a36Sopenharmony_ciDescription
128862306a36Sopenharmony_ci^^^^^^^^^^^
128962306a36Sopenharmony_ci
129062306a36Sopenharmony_ciAssign Dynamic Noise Reduction median filter properties.
129162306a36Sopenharmony_ci
129262306a36Sopenharmony_ciParam[0]
129362306a36Sopenharmony_ci^^^^^^^^
129462306a36Sopenharmony_ci
129562306a36Sopenharmony_ciThreshold above which the luminance median filter is enabled.
129662306a36Sopenharmony_ciDefault: 0, range 0:255
129762306a36Sopenharmony_ci
129862306a36Sopenharmony_ciParam[1]
129962306a36Sopenharmony_ci^^^^^^^^
130062306a36Sopenharmony_ci
130162306a36Sopenharmony_ciThreshold below which the luminance median filter is enabled.
130262306a36Sopenharmony_ciDefault: 255, range 0:255
130362306a36Sopenharmony_ci
130462306a36Sopenharmony_ciParam[2]
130562306a36Sopenharmony_ci^^^^^^^^
130662306a36Sopenharmony_ci
130762306a36Sopenharmony_ciThreshold above which the chrominance median filter is enabled.
130862306a36Sopenharmony_ciDefault: 0, range 0:255
130962306a36Sopenharmony_ci
131062306a36Sopenharmony_ciParam[3]
131162306a36Sopenharmony_ci^^^^^^^^
131262306a36Sopenharmony_ci
131362306a36Sopenharmony_ciThreshold below which the chrominance median filter is enabled.
131462306a36Sopenharmony_ciDefault: 255, range 0:255
131562306a36Sopenharmony_ci
131662306a36Sopenharmony_ci
131762306a36Sopenharmony_ci
131862306a36Sopenharmony_ciCX2341X_ENC_SET_SPATIAL_FILTER_TYPE
131962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
132062306a36Sopenharmony_ci
132162306a36Sopenharmony_ciEnum: 161/0xA1
132262306a36Sopenharmony_ci
132362306a36Sopenharmony_ciDescription
132462306a36Sopenharmony_ci^^^^^^^^^^^
132562306a36Sopenharmony_ci
132662306a36Sopenharmony_ciAssign spatial prefilter parameters
132762306a36Sopenharmony_ci
132862306a36Sopenharmony_ciParam[0]
132962306a36Sopenharmony_ci^^^^^^^^
133062306a36Sopenharmony_ci
133162306a36Sopenharmony_ciLuminance filter
133262306a36Sopenharmony_ci
133362306a36Sopenharmony_ci- 0=Off
133462306a36Sopenharmony_ci- 1=1D Horizontal
133562306a36Sopenharmony_ci- 2=1D Vertical
133662306a36Sopenharmony_ci- 3=2D H/V Separable (default)
133762306a36Sopenharmony_ci- 4=2D Symmetric non-separable
133862306a36Sopenharmony_ci
133962306a36Sopenharmony_ciParam[1]
134062306a36Sopenharmony_ci^^^^^^^^
134162306a36Sopenharmony_ci
134262306a36Sopenharmony_ciChrominance filter
134362306a36Sopenharmony_ci
134462306a36Sopenharmony_ci- 0=Off
134562306a36Sopenharmony_ci- 1=1D Horizontal (default)
134662306a36Sopenharmony_ci
134762306a36Sopenharmony_ci
134862306a36Sopenharmony_ci
134962306a36Sopenharmony_ciCX2341X_ENC_SET_VBI_LINE
135062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~
135162306a36Sopenharmony_ci
135262306a36Sopenharmony_ciEnum: 183/0xB7
135362306a36Sopenharmony_ci
135462306a36Sopenharmony_ciDescription
135562306a36Sopenharmony_ci^^^^^^^^^^^
135662306a36Sopenharmony_ci
135762306a36Sopenharmony_ciSelects VBI line number.
135862306a36Sopenharmony_ci
135962306a36Sopenharmony_ciParam[0]
136062306a36Sopenharmony_ci^^^^^^^^
136162306a36Sopenharmony_ci
136262306a36Sopenharmony_ci- Bits 0:4 	line number
136362306a36Sopenharmony_ci- Bit  31		0=top_field, 1=bottom_field
136462306a36Sopenharmony_ci- Bits 0:31 	all set specifies "all lines"
136562306a36Sopenharmony_ci
136662306a36Sopenharmony_ciParam[1]
136762306a36Sopenharmony_ci^^^^^^^^
136862306a36Sopenharmony_ci
136962306a36Sopenharmony_ciVBI line information features: 0=disabled, 1=enabled
137062306a36Sopenharmony_ci
137162306a36Sopenharmony_ciParam[2]
137262306a36Sopenharmony_ci^^^^^^^^
137362306a36Sopenharmony_ci
137462306a36Sopenharmony_ciSlicing: 0=None, 1=Closed Caption
137562306a36Sopenharmony_ciAlmost certainly not implemented. Set to 0.
137662306a36Sopenharmony_ci
137762306a36Sopenharmony_ciParam[3]
137862306a36Sopenharmony_ci^^^^^^^^
137962306a36Sopenharmony_ci
138062306a36Sopenharmony_ciLuminance samples in this line.
138162306a36Sopenharmony_ciAlmost certainly not implemented. Set to 0.
138262306a36Sopenharmony_ci
138362306a36Sopenharmony_ciParam[4]
138462306a36Sopenharmony_ci^^^^^^^^
138562306a36Sopenharmony_ci
138662306a36Sopenharmony_ciChrominance samples in this line
138762306a36Sopenharmony_ciAlmost certainly not implemented. Set to 0.
138862306a36Sopenharmony_ci
138962306a36Sopenharmony_ci
139062306a36Sopenharmony_ci
139162306a36Sopenharmony_ciCX2341X_ENC_SET_STREAM_TYPE
139262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~
139362306a36Sopenharmony_ci
139462306a36Sopenharmony_ciEnum: 185/0xB9
139562306a36Sopenharmony_ci
139662306a36Sopenharmony_ciDescription
139762306a36Sopenharmony_ci^^^^^^^^^^^
139862306a36Sopenharmony_ci
139962306a36Sopenharmony_ciAssign stream type
140062306a36Sopenharmony_ci
140162306a36Sopenharmony_ci.. note::
140262306a36Sopenharmony_ci
140362306a36Sopenharmony_ci	Transport stream is not working in recent firmwares.
140462306a36Sopenharmony_ci	And in older firmwares the timestamps in the TS seem to be
140562306a36Sopenharmony_ci	unreliable.
140662306a36Sopenharmony_ci
140762306a36Sopenharmony_ciParam[0]
140862306a36Sopenharmony_ci^^^^^^^^
140962306a36Sopenharmony_ci
141062306a36Sopenharmony_ci- 0=Program stream
141162306a36Sopenharmony_ci- 1=Transport stream
141262306a36Sopenharmony_ci- 2=MPEG1 stream
141362306a36Sopenharmony_ci- 3=PES A/V stream
141462306a36Sopenharmony_ci- 5=PES Video stream
141562306a36Sopenharmony_ci- 7=PES Audio stream
141662306a36Sopenharmony_ci- 10=DVD stream
141762306a36Sopenharmony_ci- 11=VCD stream
141862306a36Sopenharmony_ci- 12=SVCD stream
141962306a36Sopenharmony_ci- 13=DVD_S1 stream
142062306a36Sopenharmony_ci- 14=DVD_S2 stream
142162306a36Sopenharmony_ci
142262306a36Sopenharmony_ci
142362306a36Sopenharmony_ci
142462306a36Sopenharmony_ciCX2341X_ENC_SET_OUTPUT_PORT
142562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~
142662306a36Sopenharmony_ci
142762306a36Sopenharmony_ciEnum: 187/0xBB
142862306a36Sopenharmony_ci
142962306a36Sopenharmony_ciDescription
143062306a36Sopenharmony_ci^^^^^^^^^^^
143162306a36Sopenharmony_ci
143262306a36Sopenharmony_ciAssign stream output port. Normally 0 when the data is copied through
143362306a36Sopenharmony_cithe PCI bus (DMA), and 1 when the data is streamed to another chip
143462306a36Sopenharmony_ci(pvrusb and cx88-blackbird).
143562306a36Sopenharmony_ci
143662306a36Sopenharmony_ciParam[0]
143762306a36Sopenharmony_ci^^^^^^^^
143862306a36Sopenharmony_ci
143962306a36Sopenharmony_ci- 0=Memory (default)
144062306a36Sopenharmony_ci- 1=Streaming
144162306a36Sopenharmony_ci- 2=Serial
144262306a36Sopenharmony_ci
144362306a36Sopenharmony_ciParam[1]
144462306a36Sopenharmony_ci^^^^^^^^
144562306a36Sopenharmony_ci
144662306a36Sopenharmony_ciUnknown, but leaving this to 0 seems to work best. Indications are that
144762306a36Sopenharmony_cithis might have to do with USB support, although passing anything but 0
144862306a36Sopenharmony_cionly breaks things.
144962306a36Sopenharmony_ci
145062306a36Sopenharmony_ci
145162306a36Sopenharmony_ci
145262306a36Sopenharmony_ciCX2341X_ENC_SET_AUDIO_PROPERTIES
145362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
145462306a36Sopenharmony_ci
145562306a36Sopenharmony_ciEnum: 189/0xBD
145662306a36Sopenharmony_ci
145762306a36Sopenharmony_ciDescription
145862306a36Sopenharmony_ci^^^^^^^^^^^
145962306a36Sopenharmony_ci
146062306a36Sopenharmony_ciSet audio stream properties, may be called while encoding is in progress.
146162306a36Sopenharmony_ci
146262306a36Sopenharmony_ci.. note::
146362306a36Sopenharmony_ci
146462306a36Sopenharmony_ci	All bitfields are consistent with ISO11172 documentation except
146562306a36Sopenharmony_ci	bits 2:3 which ISO docs define as:
146662306a36Sopenharmony_ci
146762306a36Sopenharmony_ci	- '11' Layer I
146862306a36Sopenharmony_ci	- '10' Layer II
146962306a36Sopenharmony_ci	- '01' Layer III
147062306a36Sopenharmony_ci	- '00' Undefined
147162306a36Sopenharmony_ci
147262306a36Sopenharmony_ci	This discrepancy may indicate a possible error in the documentation.
147362306a36Sopenharmony_ci	Testing indicated that only Layer II is actually working, and that
147462306a36Sopenharmony_ci	the minimum bitrate should be 192 kbps.
147562306a36Sopenharmony_ci
147662306a36Sopenharmony_ciParam[0]
147762306a36Sopenharmony_ci^^^^^^^^
147862306a36Sopenharmony_ci
147962306a36Sopenharmony_ciBitmask:
148062306a36Sopenharmony_ci
148162306a36Sopenharmony_ci.. code-block:: none
148262306a36Sopenharmony_ci
148362306a36Sopenharmony_ci	   0:1  '00' 44.1Khz
148462306a36Sopenharmony_ci		'01' 48Khz
148562306a36Sopenharmony_ci		'10' 32Khz
148662306a36Sopenharmony_ci		'11' reserved
148762306a36Sopenharmony_ci
148862306a36Sopenharmony_ci	   2:3  '01'=Layer I
148962306a36Sopenharmony_ci		'10'=Layer II
149062306a36Sopenharmony_ci
149162306a36Sopenharmony_ci	   4:7  Bitrate:
149262306a36Sopenharmony_ci		     Index | Layer I     | Layer II
149362306a36Sopenharmony_ci		     ------+-------------+------------
149462306a36Sopenharmony_ci		    '0000' | free format | free format
149562306a36Sopenharmony_ci		    '0001' |  32 kbit/s  |  32 kbit/s
149662306a36Sopenharmony_ci		    '0010' |  64 kbit/s  |  48 kbit/s
149762306a36Sopenharmony_ci		    '0011' |  96 kbit/s  |  56 kbit/s
149862306a36Sopenharmony_ci		    '0100' | 128 kbit/s  |  64 kbit/s
149962306a36Sopenharmony_ci		    '0101' | 160 kbit/s  |  80 kbit/s
150062306a36Sopenharmony_ci		    '0110' | 192 kbit/s  |  96 kbit/s
150162306a36Sopenharmony_ci		    '0111' | 224 kbit/s  | 112 kbit/s
150262306a36Sopenharmony_ci		    '1000' | 256 kbit/s  | 128 kbit/s
150362306a36Sopenharmony_ci		    '1001' | 288 kbit/s  | 160 kbit/s
150462306a36Sopenharmony_ci		    '1010' | 320 kbit/s  | 192 kbit/s
150562306a36Sopenharmony_ci		    '1011' | 352 kbit/s  | 224 kbit/s
150662306a36Sopenharmony_ci		    '1100' | 384 kbit/s  | 256 kbit/s
150762306a36Sopenharmony_ci		    '1101' | 416 kbit/s  | 320 kbit/s
150862306a36Sopenharmony_ci		    '1110' | 448 kbit/s  | 384 kbit/s
150962306a36Sopenharmony_ci
151062306a36Sopenharmony_ci		.. note::
151162306a36Sopenharmony_ci
151262306a36Sopenharmony_ci			For Layer II, not all combinations of total bitrate
151362306a36Sopenharmony_ci			and mode are allowed. See ISO11172-3 3-Annex B,
151462306a36Sopenharmony_ci			Table 3-B.2
151562306a36Sopenharmony_ci
151662306a36Sopenharmony_ci	   8:9  '00'=Stereo
151762306a36Sopenharmony_ci		'01'=JointStereo
151862306a36Sopenharmony_ci		'10'=Dual
151962306a36Sopenharmony_ci		'11'=Mono
152062306a36Sopenharmony_ci
152162306a36Sopenharmony_ci		.. note::
152262306a36Sopenharmony_ci
152362306a36Sopenharmony_ci			The cx23415 cannot decode Joint Stereo properly.
152462306a36Sopenharmony_ci
152562306a36Sopenharmony_ci	  10:11 Mode Extension used in joint_stereo mode.
152662306a36Sopenharmony_ci		In Layer I and II they indicate which subbands are in
152762306a36Sopenharmony_ci		intensity_stereo. All other subbands are coded in stereo.
152862306a36Sopenharmony_ci		    '00' subbands 4-31 in intensity_stereo, bound==4
152962306a36Sopenharmony_ci		    '01' subbands 8-31 in intensity_stereo, bound==8
153062306a36Sopenharmony_ci		    '10' subbands 12-31 in intensity_stereo, bound==12
153162306a36Sopenharmony_ci		    '11' subbands 16-31 in intensity_stereo, bound==16
153262306a36Sopenharmony_ci
153362306a36Sopenharmony_ci	  12:13 Emphasis:
153462306a36Sopenharmony_ci		    '00' None
153562306a36Sopenharmony_ci		    '01' 50/15uS
153662306a36Sopenharmony_ci		    '10' reserved
153762306a36Sopenharmony_ci		    '11' CCITT J.17
153862306a36Sopenharmony_ci
153962306a36Sopenharmony_ci	  14 	CRC:
154062306a36Sopenharmony_ci		    '0' off
154162306a36Sopenharmony_ci		    '1' on
154262306a36Sopenharmony_ci
154362306a36Sopenharmony_ci	  15    Copyright:
154462306a36Sopenharmony_ci		    '0' off
154562306a36Sopenharmony_ci		    '1' on
154662306a36Sopenharmony_ci
154762306a36Sopenharmony_ci	  16    Generation:
154862306a36Sopenharmony_ci		    '0' copy
154962306a36Sopenharmony_ci		    '1' original
155062306a36Sopenharmony_ci
155162306a36Sopenharmony_ci
155262306a36Sopenharmony_ci
155362306a36Sopenharmony_ciCX2341X_ENC_HALT_FW
155462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~
155562306a36Sopenharmony_ci
155662306a36Sopenharmony_ciEnum: 195/0xC3
155762306a36Sopenharmony_ci
155862306a36Sopenharmony_ciDescription
155962306a36Sopenharmony_ci^^^^^^^^^^^
156062306a36Sopenharmony_ci
156162306a36Sopenharmony_ciThe firmware is halted and no further API calls are serviced until the
156262306a36Sopenharmony_cifirmware is uploaded again.
156362306a36Sopenharmony_ci
156462306a36Sopenharmony_ci
156562306a36Sopenharmony_ci
156662306a36Sopenharmony_ciCX2341X_ENC_GET_VERSION
156762306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~
156862306a36Sopenharmony_ci
156962306a36Sopenharmony_ciEnum: 196/0xC4
157062306a36Sopenharmony_ci
157162306a36Sopenharmony_ciDescription
157262306a36Sopenharmony_ci^^^^^^^^^^^
157362306a36Sopenharmony_ci
157462306a36Sopenharmony_ciReturns the version of the encoder firmware.
157562306a36Sopenharmony_ci
157662306a36Sopenharmony_ciResult[0]
157762306a36Sopenharmony_ci^^^^^^^^^
157862306a36Sopenharmony_ci
157962306a36Sopenharmony_ciVersion bitmask:
158062306a36Sopenharmony_ci- Bits  0:15 build
158162306a36Sopenharmony_ci- Bits 16:23 minor
158262306a36Sopenharmony_ci- Bits 24:31 major
158362306a36Sopenharmony_ci
158462306a36Sopenharmony_ci
158562306a36Sopenharmony_ci
158662306a36Sopenharmony_ciCX2341X_ENC_SET_GOP_CLOSURE
158762306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~
158862306a36Sopenharmony_ci
158962306a36Sopenharmony_ciEnum: 197/0xC5
159062306a36Sopenharmony_ci
159162306a36Sopenharmony_ciDescription
159262306a36Sopenharmony_ci^^^^^^^^^^^
159362306a36Sopenharmony_ci
159462306a36Sopenharmony_ciAssigns the GOP open/close property.
159562306a36Sopenharmony_ci
159662306a36Sopenharmony_ciParam[0]
159762306a36Sopenharmony_ci^^^^^^^^
159862306a36Sopenharmony_ci
159962306a36Sopenharmony_ci- 0=Open
160062306a36Sopenharmony_ci- 1=Closed
160162306a36Sopenharmony_ci
160262306a36Sopenharmony_ci
160362306a36Sopenharmony_ci
160462306a36Sopenharmony_ciCX2341X_ENC_GET_SEQ_END
160562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~
160662306a36Sopenharmony_ci
160762306a36Sopenharmony_ciEnum: 198/0xC6
160862306a36Sopenharmony_ci
160962306a36Sopenharmony_ciDescription
161062306a36Sopenharmony_ci^^^^^^^^^^^
161162306a36Sopenharmony_ci
161262306a36Sopenharmony_ciObtains the sequence end code of the encoder's buffer. When a capture
161362306a36Sopenharmony_ciis started a number of interrupts are still generated, the last of
161462306a36Sopenharmony_ciwhich will have Result[0] set to 1 and Result[1] will contain the size
161562306a36Sopenharmony_ciof the buffer.
161662306a36Sopenharmony_ci
161762306a36Sopenharmony_ciResult[0]
161862306a36Sopenharmony_ci^^^^^^^^^
161962306a36Sopenharmony_ci
162062306a36Sopenharmony_ciState of the transfer (1 if last buffer)
162162306a36Sopenharmony_ci
162262306a36Sopenharmony_ciResult[1]
162362306a36Sopenharmony_ci^^^^^^^^^
162462306a36Sopenharmony_ci
162562306a36Sopenharmony_ciIf Result[0] is 1, this contains the size of the last buffer, undefined
162662306a36Sopenharmony_ciotherwise.
162762306a36Sopenharmony_ci
162862306a36Sopenharmony_ci
162962306a36Sopenharmony_ci
163062306a36Sopenharmony_ciCX2341X_ENC_SET_PGM_INDEX_INFO
163162306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
163262306a36Sopenharmony_ci
163362306a36Sopenharmony_ciEnum: 199/0xC7
163462306a36Sopenharmony_ci
163562306a36Sopenharmony_ciDescription
163662306a36Sopenharmony_ci^^^^^^^^^^^
163762306a36Sopenharmony_ci
163862306a36Sopenharmony_ciSets the Program Index Information.
163962306a36Sopenharmony_ciThe information is stored as follows:
164062306a36Sopenharmony_ci
164162306a36Sopenharmony_ci.. code-block:: c
164262306a36Sopenharmony_ci
164362306a36Sopenharmony_ci	struct info {
164462306a36Sopenharmony_ci		u32 length;		// Length of this frame
164562306a36Sopenharmony_ci		u32 offset_low;		// Offset in the file of the
164662306a36Sopenharmony_ci		u32 offset_high;	// start of this frame
164762306a36Sopenharmony_ci		u32 mask1;		// Bits 0-2 are the type mask:
164862306a36Sopenharmony_ci					// 1=I, 2=P, 4=B
164962306a36Sopenharmony_ci					// 0=End of Program Index, other fields
165062306a36Sopenharmony_ci					//   are invalid.
165162306a36Sopenharmony_ci		u32 pts;		// The PTS of the frame
165262306a36Sopenharmony_ci		u32 mask2;		// Bit 0 is bit 32 of the pts.
165362306a36Sopenharmony_ci	};
165462306a36Sopenharmony_ci	u32 table_ptr;
165562306a36Sopenharmony_ci	struct info index[400];
165662306a36Sopenharmony_ci
165762306a36Sopenharmony_ciThe table_ptr is the encoder memory address in the table were
165862306a36Sopenharmony_ci*new* entries will be written.
165962306a36Sopenharmony_ci
166062306a36Sopenharmony_ci.. note:: This is a ringbuffer, so the table_ptr will wraparound.
166162306a36Sopenharmony_ci
166262306a36Sopenharmony_ciParam[0]
166362306a36Sopenharmony_ci^^^^^^^^
166462306a36Sopenharmony_ci
166562306a36Sopenharmony_ciPicture Mask:
166662306a36Sopenharmony_ci- 0=No index capture
166762306a36Sopenharmony_ci- 1=I frames
166862306a36Sopenharmony_ci- 3=I,P frames
166962306a36Sopenharmony_ci- 7=I,P,B frames
167062306a36Sopenharmony_ci
167162306a36Sopenharmony_ci(Seems to be ignored, it always indexes I, P and B frames)
167262306a36Sopenharmony_ci
167362306a36Sopenharmony_ciParam[1]
167462306a36Sopenharmony_ci^^^^^^^^
167562306a36Sopenharmony_ci
167662306a36Sopenharmony_ciElements requested (up to 400)
167762306a36Sopenharmony_ci
167862306a36Sopenharmony_ciResult[0]
167962306a36Sopenharmony_ci^^^^^^^^^
168062306a36Sopenharmony_ci
168162306a36Sopenharmony_ciOffset in the encoder memory of the start of the table.
168262306a36Sopenharmony_ci
168362306a36Sopenharmony_ciResult[1]
168462306a36Sopenharmony_ci^^^^^^^^^
168562306a36Sopenharmony_ci
168662306a36Sopenharmony_ciNumber of allocated elements up to a maximum of Param[1]
168762306a36Sopenharmony_ci
168862306a36Sopenharmony_ci
168962306a36Sopenharmony_ci
169062306a36Sopenharmony_ciCX2341X_ENC_SET_VBI_CONFIG
169162306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~
169262306a36Sopenharmony_ci
169362306a36Sopenharmony_ciEnum: 200/0xC8
169462306a36Sopenharmony_ci
169562306a36Sopenharmony_ciDescription
169662306a36Sopenharmony_ci^^^^^^^^^^^
169762306a36Sopenharmony_ci
169862306a36Sopenharmony_ciConfigure VBI settings
169962306a36Sopenharmony_ci
170062306a36Sopenharmony_ciParam[0]
170162306a36Sopenharmony_ci^^^^^^^^
170262306a36Sopenharmony_ci
170362306a36Sopenharmony_ciBitmap:
170462306a36Sopenharmony_ci
170562306a36Sopenharmony_ci.. code-block:: none
170662306a36Sopenharmony_ci
170762306a36Sopenharmony_ci	    0    Mode '0' Sliced, '1' Raw
170862306a36Sopenharmony_ci	    1:3  Insertion:
170962306a36Sopenharmony_ci		     '000' insert in extension & user data
171062306a36Sopenharmony_ci		     '001' insert in private packets
171162306a36Sopenharmony_ci		     '010' separate stream and user data
171262306a36Sopenharmony_ci		     '111' separate stream and private data
171362306a36Sopenharmony_ci	    8:15 Stream ID (normally 0xBD)
171462306a36Sopenharmony_ci
171562306a36Sopenharmony_ciParam[1]
171662306a36Sopenharmony_ci^^^^^^^^
171762306a36Sopenharmony_ci
171862306a36Sopenharmony_ciFrames per interrupt (max 8). Only valid in raw mode.
171962306a36Sopenharmony_ci
172062306a36Sopenharmony_ciParam[2]
172162306a36Sopenharmony_ci^^^^^^^^
172262306a36Sopenharmony_ci
172362306a36Sopenharmony_ciTotal raw VBI frames. Only valid in raw mode.
172462306a36Sopenharmony_ci
172562306a36Sopenharmony_ciParam[3]
172662306a36Sopenharmony_ci^^^^^^^^
172762306a36Sopenharmony_ci
172862306a36Sopenharmony_ciStart codes
172962306a36Sopenharmony_ci
173062306a36Sopenharmony_ciParam[4]
173162306a36Sopenharmony_ci^^^^^^^^
173262306a36Sopenharmony_ci
173362306a36Sopenharmony_ciStop codes
173462306a36Sopenharmony_ci
173562306a36Sopenharmony_ciParam[5]
173662306a36Sopenharmony_ci^^^^^^^^
173762306a36Sopenharmony_ci
173862306a36Sopenharmony_ciLines per frame
173962306a36Sopenharmony_ci
174062306a36Sopenharmony_ciParam[6]
174162306a36Sopenharmony_ci^^^^^^^^
174262306a36Sopenharmony_ci
174362306a36Sopenharmony_ciByte per line
174462306a36Sopenharmony_ci
174562306a36Sopenharmony_ciResult[0]
174662306a36Sopenharmony_ci^^^^^^^^^
174762306a36Sopenharmony_ci
174862306a36Sopenharmony_ciObserved frames per interrupt in raw mode only. Rage 1 to Param[1]
174962306a36Sopenharmony_ci
175062306a36Sopenharmony_ciResult[1]
175162306a36Sopenharmony_ci^^^^^^^^^
175262306a36Sopenharmony_ci
175362306a36Sopenharmony_ciObserved number of frames in raw mode. Range 1 to Param[2]
175462306a36Sopenharmony_ci
175562306a36Sopenharmony_ciResult[2]
175662306a36Sopenharmony_ci^^^^^^^^^
175762306a36Sopenharmony_ci
175862306a36Sopenharmony_ciMemory offset to start or raw VBI data
175962306a36Sopenharmony_ci
176062306a36Sopenharmony_ci
176162306a36Sopenharmony_ci
176262306a36Sopenharmony_ciCX2341X_ENC_SET_DMA_BLOCK_SIZE
176362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
176462306a36Sopenharmony_ci
176562306a36Sopenharmony_ciEnum: 201/0xC9
176662306a36Sopenharmony_ci
176762306a36Sopenharmony_ciDescription
176862306a36Sopenharmony_ci^^^^^^^^^^^
176962306a36Sopenharmony_ci
177062306a36Sopenharmony_ciSet DMA transfer block size
177162306a36Sopenharmony_ci
177262306a36Sopenharmony_ciParam[0]
177362306a36Sopenharmony_ci^^^^^^^^
177462306a36Sopenharmony_ci
177562306a36Sopenharmony_ciDMA transfer block size in bytes or frames. When unit is bytes,
177662306a36Sopenharmony_cisupported block sizes are 2^7, 2^8 and 2^9 bytes.
177762306a36Sopenharmony_ci
177862306a36Sopenharmony_ciParam[1]
177962306a36Sopenharmony_ci^^^^^^^^
178062306a36Sopenharmony_ci
178162306a36Sopenharmony_ciUnit: 0=bytes, 1=frames
178262306a36Sopenharmony_ci
178362306a36Sopenharmony_ci
178462306a36Sopenharmony_ci
178562306a36Sopenharmony_ciCX2341X_ENC_GET_PREV_DMA_INFO_MB_10
178662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
178762306a36Sopenharmony_ci
178862306a36Sopenharmony_ciEnum: 202/0xCA
178962306a36Sopenharmony_ci
179062306a36Sopenharmony_ciDescription
179162306a36Sopenharmony_ci^^^^^^^^^^^
179262306a36Sopenharmony_ci
179362306a36Sopenharmony_ciReturns information on the previous DMA transfer in conjunction with
179462306a36Sopenharmony_cibit 27 of the interrupt mask. Uses mailbox 10.
179562306a36Sopenharmony_ci
179662306a36Sopenharmony_ciResult[0]
179762306a36Sopenharmony_ci^^^^^^^^^
179862306a36Sopenharmony_ci
179962306a36Sopenharmony_ciType of stream
180062306a36Sopenharmony_ci
180162306a36Sopenharmony_ciResult[1]
180262306a36Sopenharmony_ci^^^^^^^^^
180362306a36Sopenharmony_ci
180462306a36Sopenharmony_ciAddress Offset
180562306a36Sopenharmony_ci
180662306a36Sopenharmony_ciResult[2]
180762306a36Sopenharmony_ci^^^^^^^^^
180862306a36Sopenharmony_ci
180962306a36Sopenharmony_ciMaximum size of transfer
181062306a36Sopenharmony_ci
181162306a36Sopenharmony_ci
181262306a36Sopenharmony_ci
181362306a36Sopenharmony_ciCX2341X_ENC_GET_PREV_DMA_INFO_MB_9
181462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
181562306a36Sopenharmony_ci
181662306a36Sopenharmony_ciEnum: 203/0xCB
181762306a36Sopenharmony_ci
181862306a36Sopenharmony_ciDescription
181962306a36Sopenharmony_ci^^^^^^^^^^^
182062306a36Sopenharmony_ci
182162306a36Sopenharmony_ciReturns information on the previous DMA transfer in conjunction with
182262306a36Sopenharmony_cibit 27 or 18 of the interrupt mask. Uses mailbox 9.
182362306a36Sopenharmony_ci
182462306a36Sopenharmony_ciResult[0]
182562306a36Sopenharmony_ci^^^^^^^^^
182662306a36Sopenharmony_ci
182762306a36Sopenharmony_ciStatus bits:
182862306a36Sopenharmony_ci- 0   read completed
182962306a36Sopenharmony_ci- 1   write completed
183062306a36Sopenharmony_ci- 2   DMA read error
183162306a36Sopenharmony_ci- 3   DMA write error
183262306a36Sopenharmony_ci- 4   Scatter-Gather array error
183362306a36Sopenharmony_ci
183462306a36Sopenharmony_ciResult[1]
183562306a36Sopenharmony_ci^^^^^^^^^
183662306a36Sopenharmony_ci
183762306a36Sopenharmony_ciDMA type
183862306a36Sopenharmony_ci
183962306a36Sopenharmony_ciResult[2]
184062306a36Sopenharmony_ci^^^^^^^^^
184162306a36Sopenharmony_ci
184262306a36Sopenharmony_ciPresentation Time Stamp bits 0..31
184362306a36Sopenharmony_ci
184462306a36Sopenharmony_ciResult[3]
184562306a36Sopenharmony_ci^^^^^^^^^
184662306a36Sopenharmony_ci
184762306a36Sopenharmony_ciPresentation Time Stamp bit 32
184862306a36Sopenharmony_ci
184962306a36Sopenharmony_ci
185062306a36Sopenharmony_ci
185162306a36Sopenharmony_ciCX2341X_ENC_SCHED_DMA_TO_HOST
185262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
185362306a36Sopenharmony_ci
185462306a36Sopenharmony_ciEnum: 204/0xCC
185562306a36Sopenharmony_ci
185662306a36Sopenharmony_ciDescription
185762306a36Sopenharmony_ci^^^^^^^^^^^
185862306a36Sopenharmony_ci
185962306a36Sopenharmony_ciSetup DMA to host operation
186062306a36Sopenharmony_ci
186162306a36Sopenharmony_ciParam[0]
186262306a36Sopenharmony_ci^^^^^^^^
186362306a36Sopenharmony_ci
186462306a36Sopenharmony_ciMemory address of link list
186562306a36Sopenharmony_ci
186662306a36Sopenharmony_ciParam[1]
186762306a36Sopenharmony_ci^^^^^^^^
186862306a36Sopenharmony_ci
186962306a36Sopenharmony_ciLength of link list (wtf: what units ???)
187062306a36Sopenharmony_ci
187162306a36Sopenharmony_ciParam[2]
187262306a36Sopenharmony_ci^^^^^^^^
187362306a36Sopenharmony_ci
187462306a36Sopenharmony_ciDMA type (0=MPEG)
187562306a36Sopenharmony_ci
187662306a36Sopenharmony_ci
187762306a36Sopenharmony_ci
187862306a36Sopenharmony_ciCX2341X_ENC_INITIALIZE_INPUT
187962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
188062306a36Sopenharmony_ci
188162306a36Sopenharmony_ciEnum: 205/0xCD
188262306a36Sopenharmony_ci
188362306a36Sopenharmony_ciDescription
188462306a36Sopenharmony_ci^^^^^^^^^^^
188562306a36Sopenharmony_ci
188662306a36Sopenharmony_ciInitializes the video input
188762306a36Sopenharmony_ci
188862306a36Sopenharmony_ci
188962306a36Sopenharmony_ci
189062306a36Sopenharmony_ciCX2341X_ENC_SET_FRAME_DROP_RATE
189162306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
189262306a36Sopenharmony_ci
189362306a36Sopenharmony_ciEnum: 208/0xD0
189462306a36Sopenharmony_ci
189562306a36Sopenharmony_ciDescription
189662306a36Sopenharmony_ci^^^^^^^^^^^
189762306a36Sopenharmony_ci
189862306a36Sopenharmony_ciFor each frame captured, skip specified number of frames.
189962306a36Sopenharmony_ci
190062306a36Sopenharmony_ciParam[0]
190162306a36Sopenharmony_ci^^^^^^^^
190262306a36Sopenharmony_ci
190362306a36Sopenharmony_ciNumber of frames to skip
190462306a36Sopenharmony_ci
190562306a36Sopenharmony_ci
190662306a36Sopenharmony_ci
190762306a36Sopenharmony_ciCX2341X_ENC_PAUSE_ENCODER
190862306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~
190962306a36Sopenharmony_ci
191062306a36Sopenharmony_ciEnum: 210/0xD2
191162306a36Sopenharmony_ci
191262306a36Sopenharmony_ciDescription
191362306a36Sopenharmony_ci^^^^^^^^^^^
191462306a36Sopenharmony_ci
191562306a36Sopenharmony_ciDuring a pause condition, all frames are dropped instead of being encoded.
191662306a36Sopenharmony_ci
191762306a36Sopenharmony_ciParam[0]
191862306a36Sopenharmony_ci^^^^^^^^
191962306a36Sopenharmony_ci
192062306a36Sopenharmony_ci- 0=Pause encoding
192162306a36Sopenharmony_ci- 1=Continue encoding
192262306a36Sopenharmony_ci
192362306a36Sopenharmony_ci
192462306a36Sopenharmony_ci
192562306a36Sopenharmony_ciCX2341X_ENC_REFRESH_INPUT
192662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~
192762306a36Sopenharmony_ci
192862306a36Sopenharmony_ciEnum: 211/0xD3
192962306a36Sopenharmony_ci
193062306a36Sopenharmony_ciDescription
193162306a36Sopenharmony_ci^^^^^^^^^^^
193262306a36Sopenharmony_ci
193362306a36Sopenharmony_ciRefreshes the video input
193462306a36Sopenharmony_ci
193562306a36Sopenharmony_ci
193662306a36Sopenharmony_ci
193762306a36Sopenharmony_ciCX2341X_ENC_SET_COPYRIGHT
193862306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~
193962306a36Sopenharmony_ci
194062306a36Sopenharmony_ciEnum: 212/0xD4
194162306a36Sopenharmony_ci
194262306a36Sopenharmony_ciDescription
194362306a36Sopenharmony_ci^^^^^^^^^^^
194462306a36Sopenharmony_ci
194562306a36Sopenharmony_ciSets stream copyright property
194662306a36Sopenharmony_ci
194762306a36Sopenharmony_ciParam[0]
194862306a36Sopenharmony_ci^^^^^^^^
194962306a36Sopenharmony_ci
195062306a36Sopenharmony_ci
195162306a36Sopenharmony_ci- 0=Stream is not copyrighted
195262306a36Sopenharmony_ci- 1=Stream is copyrighted
195362306a36Sopenharmony_ci
195462306a36Sopenharmony_ci
195562306a36Sopenharmony_ci
195662306a36Sopenharmony_ciCX2341X_ENC_SET_EVENT_NOTIFICATION
195762306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
195862306a36Sopenharmony_ci
195962306a36Sopenharmony_ciEnum: 213/0xD5
196062306a36Sopenharmony_ci
196162306a36Sopenharmony_ciDescription
196262306a36Sopenharmony_ci^^^^^^^^^^^
196362306a36Sopenharmony_ci
196462306a36Sopenharmony_ciSetup firmware to notify the host about a particular event. Host must
196562306a36Sopenharmony_ciunmask the interrupt bit.
196662306a36Sopenharmony_ci
196762306a36Sopenharmony_ciParam[0]
196862306a36Sopenharmony_ci^^^^^^^^
196962306a36Sopenharmony_ci
197062306a36Sopenharmony_ciEvent (0=refresh encoder input)
197162306a36Sopenharmony_ci
197262306a36Sopenharmony_ciParam[1]
197362306a36Sopenharmony_ci^^^^^^^^
197462306a36Sopenharmony_ci
197562306a36Sopenharmony_ciNotification 0=disabled 1=enabled
197662306a36Sopenharmony_ci
197762306a36Sopenharmony_ciParam[2]
197862306a36Sopenharmony_ci^^^^^^^^
197962306a36Sopenharmony_ci
198062306a36Sopenharmony_ciInterrupt bit
198162306a36Sopenharmony_ci
198262306a36Sopenharmony_ciParam[3]
198362306a36Sopenharmony_ci^^^^^^^^
198462306a36Sopenharmony_ci
198562306a36Sopenharmony_ciMailbox slot, -1 if no mailbox required.
198662306a36Sopenharmony_ci
198762306a36Sopenharmony_ci
198862306a36Sopenharmony_ci
198962306a36Sopenharmony_ciCX2341X_ENC_SET_NUM_VSYNC_LINES
199062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
199162306a36Sopenharmony_ci
199262306a36Sopenharmony_ciEnum: 214/0xD6
199362306a36Sopenharmony_ci
199462306a36Sopenharmony_ciDescription
199562306a36Sopenharmony_ci^^^^^^^^^^^
199662306a36Sopenharmony_ci
199762306a36Sopenharmony_ciDepending on the analog video decoder used, this assigns the number
199862306a36Sopenharmony_ciof lines for field 1 and 2.
199962306a36Sopenharmony_ci
200062306a36Sopenharmony_ciParam[0]
200162306a36Sopenharmony_ci^^^^^^^^
200262306a36Sopenharmony_ci
200362306a36Sopenharmony_ciField 1 number of lines:
200462306a36Sopenharmony_ci- 0x00EF for SAA7114
200562306a36Sopenharmony_ci- 0x00F0 for SAA7115
200662306a36Sopenharmony_ci- 0x0105 for Micronas
200762306a36Sopenharmony_ci
200862306a36Sopenharmony_ciParam[1]
200962306a36Sopenharmony_ci^^^^^^^^
201062306a36Sopenharmony_ci
201162306a36Sopenharmony_ciField 2 number of lines:
201262306a36Sopenharmony_ci- 0x00EF for SAA7114
201362306a36Sopenharmony_ci- 0x00F0 for SAA7115
201462306a36Sopenharmony_ci- 0x0106 for Micronas
201562306a36Sopenharmony_ci
201662306a36Sopenharmony_ci
201762306a36Sopenharmony_ci
201862306a36Sopenharmony_ciCX2341X_ENC_SET_PLACEHOLDER
201962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~
202062306a36Sopenharmony_ci
202162306a36Sopenharmony_ciEnum: 215/0xD7
202262306a36Sopenharmony_ci
202362306a36Sopenharmony_ciDescription
202462306a36Sopenharmony_ci^^^^^^^^^^^
202562306a36Sopenharmony_ci
202662306a36Sopenharmony_ciProvides a mechanism of inserting custom user data in the MPEG stream.
202762306a36Sopenharmony_ci
202862306a36Sopenharmony_ciParam[0]
202962306a36Sopenharmony_ci^^^^^^^^
203062306a36Sopenharmony_ci
203162306a36Sopenharmony_ci- 0=extension & user data
203262306a36Sopenharmony_ci- 1=private packet with stream ID 0xBD
203362306a36Sopenharmony_ci
203462306a36Sopenharmony_ciParam[1]
203562306a36Sopenharmony_ci^^^^^^^^
203662306a36Sopenharmony_ci
203762306a36Sopenharmony_ciRate at which to insert data, in units of frames (for private packet)
203862306a36Sopenharmony_cior GOPs (for ext. & user data)
203962306a36Sopenharmony_ci
204062306a36Sopenharmony_ciParam[2]
204162306a36Sopenharmony_ci^^^^^^^^
204262306a36Sopenharmony_ci
204362306a36Sopenharmony_ciNumber of data DWORDs (below) to insert
204462306a36Sopenharmony_ci
204562306a36Sopenharmony_ciParam[3]
204662306a36Sopenharmony_ci^^^^^^^^
204762306a36Sopenharmony_ci
204862306a36Sopenharmony_ciCustom data 0
204962306a36Sopenharmony_ci
205062306a36Sopenharmony_ciParam[4]
205162306a36Sopenharmony_ci^^^^^^^^
205262306a36Sopenharmony_ci
205362306a36Sopenharmony_ciCustom data 1
205462306a36Sopenharmony_ci
205562306a36Sopenharmony_ciParam[5]
205662306a36Sopenharmony_ci^^^^^^^^
205762306a36Sopenharmony_ci
205862306a36Sopenharmony_ciCustom data 2
205962306a36Sopenharmony_ci
206062306a36Sopenharmony_ciParam[6]
206162306a36Sopenharmony_ci^^^^^^^^
206262306a36Sopenharmony_ci
206362306a36Sopenharmony_ciCustom data 3
206462306a36Sopenharmony_ci
206562306a36Sopenharmony_ciParam[7]
206662306a36Sopenharmony_ci^^^^^^^^
206762306a36Sopenharmony_ci
206862306a36Sopenharmony_ciCustom data 4
206962306a36Sopenharmony_ci
207062306a36Sopenharmony_ciParam[8]
207162306a36Sopenharmony_ci^^^^^^^^
207262306a36Sopenharmony_ci
207362306a36Sopenharmony_ciCustom data 5
207462306a36Sopenharmony_ci
207562306a36Sopenharmony_ciParam[9]
207662306a36Sopenharmony_ci^^^^^^^^
207762306a36Sopenharmony_ci
207862306a36Sopenharmony_ciCustom data 6
207962306a36Sopenharmony_ci
208062306a36Sopenharmony_ciParam[10]
208162306a36Sopenharmony_ci^^^^^^^^^
208262306a36Sopenharmony_ci
208362306a36Sopenharmony_ciCustom data 7
208462306a36Sopenharmony_ci
208562306a36Sopenharmony_ciParam[11]
208662306a36Sopenharmony_ci^^^^^^^^^
208762306a36Sopenharmony_ci
208862306a36Sopenharmony_ciCustom data 8
208962306a36Sopenharmony_ci
209062306a36Sopenharmony_ci
209162306a36Sopenharmony_ci
209262306a36Sopenharmony_ciCX2341X_ENC_MUTE_VIDEO
209362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~
209462306a36Sopenharmony_ci
209562306a36Sopenharmony_ciEnum: 217/0xD9
209662306a36Sopenharmony_ci
209762306a36Sopenharmony_ciDescription
209862306a36Sopenharmony_ci^^^^^^^^^^^
209962306a36Sopenharmony_ci
210062306a36Sopenharmony_ciVideo muting
210162306a36Sopenharmony_ci
210262306a36Sopenharmony_ciParam[0]
210362306a36Sopenharmony_ci^^^^^^^^
210462306a36Sopenharmony_ci
210562306a36Sopenharmony_ciBit usage:
210662306a36Sopenharmony_ci
210762306a36Sopenharmony_ci.. code-block:: none
210862306a36Sopenharmony_ci
210962306a36Sopenharmony_ci	 0    	'0'=video not muted
211062306a36Sopenharmony_ci		'1'=video muted, creates frames with the YUV color defined below
211162306a36Sopenharmony_ci	 1:7  	Unused
211262306a36Sopenharmony_ci	 8:15 	V chrominance information
211362306a36Sopenharmony_ci	16:23 	U chrominance information
211462306a36Sopenharmony_ci	24:31 	Y luminance information
211562306a36Sopenharmony_ci
211662306a36Sopenharmony_ci
211762306a36Sopenharmony_ci
211862306a36Sopenharmony_ciCX2341X_ENC_MUTE_AUDIO
211962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~
212062306a36Sopenharmony_ci
212162306a36Sopenharmony_ciEnum: 218/0xDA
212262306a36Sopenharmony_ci
212362306a36Sopenharmony_ciDescription
212462306a36Sopenharmony_ci^^^^^^^^^^^
212562306a36Sopenharmony_ci
212662306a36Sopenharmony_ciAudio muting
212762306a36Sopenharmony_ci
212862306a36Sopenharmony_ciParam[0]
212962306a36Sopenharmony_ci^^^^^^^^
213062306a36Sopenharmony_ci
213162306a36Sopenharmony_ci- 0=audio not muted
213262306a36Sopenharmony_ci- 1=audio muted (produces silent mpeg audio stream)
213362306a36Sopenharmony_ci
213462306a36Sopenharmony_ci
213562306a36Sopenharmony_ci
213662306a36Sopenharmony_ciCX2341X_ENC_SET_VERT_CROP_LINE
213762306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
213862306a36Sopenharmony_ci
213962306a36Sopenharmony_ciEnum: 219/0xDB
214062306a36Sopenharmony_ci
214162306a36Sopenharmony_ciDescription
214262306a36Sopenharmony_ci^^^^^^^^^^^
214362306a36Sopenharmony_ci
214462306a36Sopenharmony_ciSomething to do with 'Vertical Crop Line'
214562306a36Sopenharmony_ci
214662306a36Sopenharmony_ciParam[0]
214762306a36Sopenharmony_ci^^^^^^^^
214862306a36Sopenharmony_ci
214962306a36Sopenharmony_ciIf saa7114 and raw VBI capture and 60 Hz, then set to 10001.
215062306a36Sopenharmony_ciElse 0.
215162306a36Sopenharmony_ci
215262306a36Sopenharmony_ci
215362306a36Sopenharmony_ci
215462306a36Sopenharmony_ciCX2341X_ENC_MISC
215562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~
215662306a36Sopenharmony_ci
215762306a36Sopenharmony_ciEnum: 220/0xDC
215862306a36Sopenharmony_ci
215962306a36Sopenharmony_ciDescription
216062306a36Sopenharmony_ci^^^^^^^^^^^
216162306a36Sopenharmony_ci
216262306a36Sopenharmony_ciMiscellaneous actions. Not known for 100% what it does. It's really a
216362306a36Sopenharmony_cisort of ioctl call. The first parameter is a command number, the second
216462306a36Sopenharmony_cithe value.
216562306a36Sopenharmony_ci
216662306a36Sopenharmony_ciParam[0]
216762306a36Sopenharmony_ci^^^^^^^^
216862306a36Sopenharmony_ci
216962306a36Sopenharmony_ciCommand number:
217062306a36Sopenharmony_ci
217162306a36Sopenharmony_ci.. code-block:: none
217262306a36Sopenharmony_ci
217362306a36Sopenharmony_ci	 1=set initial SCR value when starting encoding (works).
217462306a36Sopenharmony_ci	 2=set quality mode (apparently some test setting).
217562306a36Sopenharmony_ci	 3=setup advanced VIM protection handling.
217662306a36Sopenharmony_ci	   Always 1 for the cx23416 and 0 for cx23415.
217762306a36Sopenharmony_ci	 4=generate DVD compatible PTS timestamps
217862306a36Sopenharmony_ci	 5=USB flush mode
217962306a36Sopenharmony_ci	 6=something to do with the quantization matrix
218062306a36Sopenharmony_ci	 7=set navigation pack insertion for DVD: adds 0xbf (private stream 2)
218162306a36Sopenharmony_ci	   packets to the MPEG. The size of these packets is 2048 bytes (including
218262306a36Sopenharmony_ci	   the header of 6 bytes: 0x000001bf + length). The payload is zeroed and
218362306a36Sopenharmony_ci	   it is up to the application to fill them in. These packets are apparently
218462306a36Sopenharmony_ci	   inserted every four frames.
218562306a36Sopenharmony_ci	 8=enable scene change detection (seems to be a failure)
218662306a36Sopenharmony_ci	 9=set history parameters of the video input module
218762306a36Sopenharmony_ci	10=set input field order of VIM
218862306a36Sopenharmony_ci	11=set quantization matrix
218962306a36Sopenharmony_ci	12=reset audio interface after channel change or input switch (has no argument).
219062306a36Sopenharmony_ci	   Needed for the cx2584x, not needed for the mspx4xx, but it doesn't seem to
219162306a36Sopenharmony_ci	   do any harm calling it regardless.
219262306a36Sopenharmony_ci	13=set audio volume delay
219362306a36Sopenharmony_ci	14=set audio delay
219462306a36Sopenharmony_ci
219562306a36Sopenharmony_ci
219662306a36Sopenharmony_ciParam[1]
219762306a36Sopenharmony_ci^^^^^^^^
219862306a36Sopenharmony_ci
219962306a36Sopenharmony_ciCommand value.
220062306a36Sopenharmony_ci
220162306a36Sopenharmony_ciDecoder firmware API description
220262306a36Sopenharmony_ci--------------------------------
220362306a36Sopenharmony_ci
220462306a36Sopenharmony_ci.. note:: this API is part of the decoder firmware, so it's cx23415 only.
220562306a36Sopenharmony_ci
220662306a36Sopenharmony_ci
220762306a36Sopenharmony_ci
220862306a36Sopenharmony_ciCX2341X_DEC_PING_FW
220962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~
221062306a36Sopenharmony_ci
221162306a36Sopenharmony_ciEnum: 0/0x00
221262306a36Sopenharmony_ci
221362306a36Sopenharmony_ciDescription
221462306a36Sopenharmony_ci^^^^^^^^^^^
221562306a36Sopenharmony_ci
221662306a36Sopenharmony_ciThis API call does nothing. It may be used to check if the firmware
221762306a36Sopenharmony_ciis responding.
221862306a36Sopenharmony_ci
221962306a36Sopenharmony_ci
222062306a36Sopenharmony_ci
222162306a36Sopenharmony_ciCX2341X_DEC_START_PLAYBACK
222262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~
222362306a36Sopenharmony_ci
222462306a36Sopenharmony_ciEnum: 1/0x01
222562306a36Sopenharmony_ci
222662306a36Sopenharmony_ciDescription
222762306a36Sopenharmony_ci^^^^^^^^^^^
222862306a36Sopenharmony_ci
222962306a36Sopenharmony_ciBegin or resume playback.
223062306a36Sopenharmony_ci
223162306a36Sopenharmony_ciParam[0]
223262306a36Sopenharmony_ci^^^^^^^^
223362306a36Sopenharmony_ci
223462306a36Sopenharmony_ci0 based frame number in GOP to begin playback from.
223562306a36Sopenharmony_ci
223662306a36Sopenharmony_ciParam[1]
223762306a36Sopenharmony_ci^^^^^^^^
223862306a36Sopenharmony_ci
223962306a36Sopenharmony_ciSpecifies the number of muted audio frames to play before normal
224062306a36Sopenharmony_ciaudio resumes. (This is not implemented in the firmware, leave at 0)
224162306a36Sopenharmony_ci
224262306a36Sopenharmony_ci
224362306a36Sopenharmony_ci
224462306a36Sopenharmony_ciCX2341X_DEC_STOP_PLAYBACK
224562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~
224662306a36Sopenharmony_ci
224762306a36Sopenharmony_ciEnum: 2/0x02
224862306a36Sopenharmony_ci
224962306a36Sopenharmony_ciDescription
225062306a36Sopenharmony_ci^^^^^^^^^^^
225162306a36Sopenharmony_ci
225262306a36Sopenharmony_ciEnds playback and clears all decoder buffers. If PTS is not zero,
225362306a36Sopenharmony_ciplayback stops at specified PTS.
225462306a36Sopenharmony_ci
225562306a36Sopenharmony_ciParam[0]
225662306a36Sopenharmony_ci^^^^^^^^
225762306a36Sopenharmony_ci
225862306a36Sopenharmony_ciDisplay 0=last frame, 1=black
225962306a36Sopenharmony_ci
226062306a36Sopenharmony_ci.. note::
226162306a36Sopenharmony_ci
226262306a36Sopenharmony_ci	this takes effect immediately, so if you want to wait for a PTS,
226362306a36Sopenharmony_ci	then use '0', otherwise the screen goes to black at once.
226462306a36Sopenharmony_ci	You can call this later (even if there is no playback) with a 1 value
226562306a36Sopenharmony_ci	to set the screen to black.
226662306a36Sopenharmony_ci
226762306a36Sopenharmony_ciParam[1]
226862306a36Sopenharmony_ci^^^^^^^^
226962306a36Sopenharmony_ci
227062306a36Sopenharmony_ciPTS low
227162306a36Sopenharmony_ci
227262306a36Sopenharmony_ciParam[2]
227362306a36Sopenharmony_ci^^^^^^^^
227462306a36Sopenharmony_ci
227562306a36Sopenharmony_ciPTS high
227662306a36Sopenharmony_ci
227762306a36Sopenharmony_ci
227862306a36Sopenharmony_ci
227962306a36Sopenharmony_ciCX2341X_DEC_SET_PLAYBACK_SPEED
228062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
228162306a36Sopenharmony_ci
228262306a36Sopenharmony_ciEnum: 3/0x03
228362306a36Sopenharmony_ci
228462306a36Sopenharmony_ciDescription
228562306a36Sopenharmony_ci^^^^^^^^^^^
228662306a36Sopenharmony_ci
228762306a36Sopenharmony_ciPlayback stream at speed other than normal. There are two modes of
228862306a36Sopenharmony_cioperation:
228962306a36Sopenharmony_ci
229062306a36Sopenharmony_ci	- Smooth: host transfers entire stream and firmware drops unused
229162306a36Sopenharmony_ci	  frames.
229262306a36Sopenharmony_ci	- Coarse: host drops frames based on indexing as required to achieve
229362306a36Sopenharmony_ci	  desired speed.
229462306a36Sopenharmony_ci
229562306a36Sopenharmony_ciParam[0]
229662306a36Sopenharmony_ci^^^^^^^^
229762306a36Sopenharmony_ci
229862306a36Sopenharmony_ci.. code-block:: none
229962306a36Sopenharmony_ci
230062306a36Sopenharmony_ci	Bitmap:
230162306a36Sopenharmony_ci	    0:7  0 normal
230262306a36Sopenharmony_ci		 1 fast only "1.5 times"
230362306a36Sopenharmony_ci		 n nX fast, 1/nX slow
230462306a36Sopenharmony_ci	    30   Framedrop:
230562306a36Sopenharmony_ci		     '0' during 1.5 times play, every other B frame is dropped
230662306a36Sopenharmony_ci		     '1' during 1.5 times play, stream is unchanged (bitrate
230762306a36Sopenharmony_ci			 must not exceed 8mbps)
230862306a36Sopenharmony_ci	    31   Speed:
230962306a36Sopenharmony_ci		     '0' slow
231062306a36Sopenharmony_ci		     '1' fast
231162306a36Sopenharmony_ci
231262306a36Sopenharmony_ci.. note::
231362306a36Sopenharmony_ci
231462306a36Sopenharmony_ci	n is limited to 2. Anything higher does not result in
231562306a36Sopenharmony_ci	faster playback. Instead the host should start dropping frames.
231662306a36Sopenharmony_ci
231762306a36Sopenharmony_ciParam[1]
231862306a36Sopenharmony_ci^^^^^^^^
231962306a36Sopenharmony_ci
232062306a36Sopenharmony_ciDirection: 0=forward, 1=reverse
232162306a36Sopenharmony_ci
232262306a36Sopenharmony_ci.. note::
232362306a36Sopenharmony_ci
232462306a36Sopenharmony_ci	to make reverse playback work you have to write full GOPs in
232562306a36Sopenharmony_ci	reverse order.
232662306a36Sopenharmony_ci
232762306a36Sopenharmony_ciParam[2]
232862306a36Sopenharmony_ci^^^^^^^^
232962306a36Sopenharmony_ci
233062306a36Sopenharmony_ci.. code-block:: none
233162306a36Sopenharmony_ci
233262306a36Sopenharmony_ci	Picture mask:
233362306a36Sopenharmony_ci	    1=I frames
233462306a36Sopenharmony_ci	    3=I, P frames
233562306a36Sopenharmony_ci	    7=I, P, B frames
233662306a36Sopenharmony_ci
233762306a36Sopenharmony_ciParam[3]
233862306a36Sopenharmony_ci^^^^^^^^
233962306a36Sopenharmony_ci
234062306a36Sopenharmony_ciB frames per GOP (for reverse play only)
234162306a36Sopenharmony_ci
234262306a36Sopenharmony_ci.. note::
234362306a36Sopenharmony_ci
234462306a36Sopenharmony_ci	for reverse playback the Picture Mask should be set to I or I, P.
234562306a36Sopenharmony_ci	Adding B frames to the mask will result in corrupt video. This field
234662306a36Sopenharmony_ci	has to be set to the correct value in order to keep the timing correct.
234762306a36Sopenharmony_ci
234862306a36Sopenharmony_ciParam[4]
234962306a36Sopenharmony_ci^^^^^^^^
235062306a36Sopenharmony_ci
235162306a36Sopenharmony_ciMute audio: 0=disable, 1=enable
235262306a36Sopenharmony_ci
235362306a36Sopenharmony_ciParam[5]
235462306a36Sopenharmony_ci^^^^^^^^
235562306a36Sopenharmony_ci
235662306a36Sopenharmony_ciDisplay 0=frame, 1=field
235762306a36Sopenharmony_ci
235862306a36Sopenharmony_ciParam[6]
235962306a36Sopenharmony_ci^^^^^^^^
236062306a36Sopenharmony_ci
236162306a36Sopenharmony_ciSpecifies the number of muted audio frames to play before normal audio
236262306a36Sopenharmony_ciresumes. (Not implemented in the firmware, leave at 0)
236362306a36Sopenharmony_ci
236462306a36Sopenharmony_ci
236562306a36Sopenharmony_ci
236662306a36Sopenharmony_ciCX2341X_DEC_STEP_VIDEO
236762306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~
236862306a36Sopenharmony_ci
236962306a36Sopenharmony_ciEnum: 5/0x05
237062306a36Sopenharmony_ci
237162306a36Sopenharmony_ciDescription
237262306a36Sopenharmony_ci^^^^^^^^^^^
237362306a36Sopenharmony_ci
237462306a36Sopenharmony_ciEach call to this API steps the playback to the next unit defined below
237562306a36Sopenharmony_ciin the current playback direction.
237662306a36Sopenharmony_ci
237762306a36Sopenharmony_ciParam[0]
237862306a36Sopenharmony_ci^^^^^^^^
237962306a36Sopenharmony_ci
238062306a36Sopenharmony_ci0=frame, 1=top field, 2=bottom field
238162306a36Sopenharmony_ci
238262306a36Sopenharmony_ci
238362306a36Sopenharmony_ci
238462306a36Sopenharmony_ciCX2341X_DEC_SET_DMA_BLOCK_SIZE
238562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
238662306a36Sopenharmony_ci
238762306a36Sopenharmony_ciEnum: 8/0x08
238862306a36Sopenharmony_ci
238962306a36Sopenharmony_ciDescription
239062306a36Sopenharmony_ci^^^^^^^^^^^
239162306a36Sopenharmony_ci
239262306a36Sopenharmony_ciSet DMA transfer block size. Counterpart to API 0xC9
239362306a36Sopenharmony_ci
239462306a36Sopenharmony_ciParam[0]
239562306a36Sopenharmony_ci^^^^^^^^
239662306a36Sopenharmony_ci
239762306a36Sopenharmony_ciDMA transfer block size in bytes. A different size may be specified
239862306a36Sopenharmony_ciwhen issuing the DMA transfer command.
239962306a36Sopenharmony_ci
240062306a36Sopenharmony_ci
240162306a36Sopenharmony_ci
240262306a36Sopenharmony_ciCX2341X_DEC_GET_XFER_INFO
240362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~
240462306a36Sopenharmony_ci
240562306a36Sopenharmony_ciEnum: 9/0x09
240662306a36Sopenharmony_ci
240762306a36Sopenharmony_ciDescription
240862306a36Sopenharmony_ci^^^^^^^^^^^
240962306a36Sopenharmony_ci
241062306a36Sopenharmony_ciThis API call may be used to detect an end of stream condition.
241162306a36Sopenharmony_ci
241262306a36Sopenharmony_ciResult[0]
241362306a36Sopenharmony_ci^^^^^^^^^
241462306a36Sopenharmony_ci
241562306a36Sopenharmony_ciStream type
241662306a36Sopenharmony_ci
241762306a36Sopenharmony_ciResult[1]
241862306a36Sopenharmony_ci^^^^^^^^^
241962306a36Sopenharmony_ci
242062306a36Sopenharmony_ciAddress offset
242162306a36Sopenharmony_ci
242262306a36Sopenharmony_ciResult[2]
242362306a36Sopenharmony_ci^^^^^^^^^
242462306a36Sopenharmony_ci
242562306a36Sopenharmony_ciMaximum bytes to transfer
242662306a36Sopenharmony_ci
242762306a36Sopenharmony_ciResult[3]
242862306a36Sopenharmony_ci^^^^^^^^^
242962306a36Sopenharmony_ci
243062306a36Sopenharmony_ciBuffer fullness
243162306a36Sopenharmony_ci
243262306a36Sopenharmony_ci
243362306a36Sopenharmony_ci
243462306a36Sopenharmony_ciCX2341X_DEC_GET_DMA_STATUS
243562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~
243662306a36Sopenharmony_ci
243762306a36Sopenharmony_ciEnum: 10/0x0A
243862306a36Sopenharmony_ci
243962306a36Sopenharmony_ciDescription
244062306a36Sopenharmony_ci^^^^^^^^^^^
244162306a36Sopenharmony_ci
244262306a36Sopenharmony_ciStatus of the last DMA transfer
244362306a36Sopenharmony_ci
244462306a36Sopenharmony_ciResult[0]
244562306a36Sopenharmony_ci^^^^^^^^^
244662306a36Sopenharmony_ci
244762306a36Sopenharmony_ciBit 1 set means transfer complete
244862306a36Sopenharmony_ciBit 2 set means DMA error
244962306a36Sopenharmony_ciBit 3 set means linked list error
245062306a36Sopenharmony_ci
245162306a36Sopenharmony_ciResult[1]
245262306a36Sopenharmony_ci^^^^^^^^^
245362306a36Sopenharmony_ci
245462306a36Sopenharmony_ciDMA type: 0=MPEG, 1=OSD, 2=YUV
245562306a36Sopenharmony_ci
245662306a36Sopenharmony_ci
245762306a36Sopenharmony_ci
245862306a36Sopenharmony_ciCX2341X_DEC_SCHED_DMA_FROM_HOST
245962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
246062306a36Sopenharmony_ci
246162306a36Sopenharmony_ciEnum: 11/0x0B
246262306a36Sopenharmony_ci
246362306a36Sopenharmony_ciDescription
246462306a36Sopenharmony_ci^^^^^^^^^^^
246562306a36Sopenharmony_ci
246662306a36Sopenharmony_ciSetup DMA from host operation. Counterpart to API 0xCC
246762306a36Sopenharmony_ci
246862306a36Sopenharmony_ciParam[0]
246962306a36Sopenharmony_ci^^^^^^^^
247062306a36Sopenharmony_ci
247162306a36Sopenharmony_ciMemory address of link list
247262306a36Sopenharmony_ci
247362306a36Sopenharmony_ciParam[1]
247462306a36Sopenharmony_ci^^^^^^^^
247562306a36Sopenharmony_ci
247662306a36Sopenharmony_ciTotal # of bytes to transfer
247762306a36Sopenharmony_ci
247862306a36Sopenharmony_ciParam[2]
247962306a36Sopenharmony_ci^^^^^^^^
248062306a36Sopenharmony_ci
248162306a36Sopenharmony_ciDMA type (0=MPEG, 1=OSD, 2=YUV)
248262306a36Sopenharmony_ci
248362306a36Sopenharmony_ci
248462306a36Sopenharmony_ci
248562306a36Sopenharmony_ciCX2341X_DEC_PAUSE_PLAYBACK
248662306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~
248762306a36Sopenharmony_ci
248862306a36Sopenharmony_ciEnum: 13/0x0D
248962306a36Sopenharmony_ci
249062306a36Sopenharmony_ciDescription
249162306a36Sopenharmony_ci^^^^^^^^^^^
249262306a36Sopenharmony_ci
249362306a36Sopenharmony_ciFreeze playback immediately. In this mode, when internal buffers are
249462306a36Sopenharmony_cifull, no more data will be accepted and data request IRQs will be
249562306a36Sopenharmony_cimasked.
249662306a36Sopenharmony_ci
249762306a36Sopenharmony_ciParam[0]
249862306a36Sopenharmony_ci^^^^^^^^
249962306a36Sopenharmony_ci
250062306a36Sopenharmony_ciDisplay: 0=last frame, 1=black
250162306a36Sopenharmony_ci
250262306a36Sopenharmony_ci
250362306a36Sopenharmony_ci
250462306a36Sopenharmony_ciCX2341X_DEC_HALT_FW
250562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~
250662306a36Sopenharmony_ci
250762306a36Sopenharmony_ciEnum: 14/0x0E
250862306a36Sopenharmony_ci
250962306a36Sopenharmony_ciDescription
251062306a36Sopenharmony_ci^^^^^^^^^^^
251162306a36Sopenharmony_ci
251262306a36Sopenharmony_ciThe firmware is halted and no further API calls are serviced until
251362306a36Sopenharmony_cithe firmware is uploaded again.
251462306a36Sopenharmony_ci
251562306a36Sopenharmony_ci
251662306a36Sopenharmony_ci
251762306a36Sopenharmony_ciCX2341X_DEC_SET_STANDARD
251862306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~
251962306a36Sopenharmony_ci
252062306a36Sopenharmony_ciEnum: 16/0x10
252162306a36Sopenharmony_ci
252262306a36Sopenharmony_ciDescription
252362306a36Sopenharmony_ci^^^^^^^^^^^
252462306a36Sopenharmony_ci
252562306a36Sopenharmony_ciSelects display standard
252662306a36Sopenharmony_ci
252762306a36Sopenharmony_ciParam[0]
252862306a36Sopenharmony_ci^^^^^^^^
252962306a36Sopenharmony_ci
253062306a36Sopenharmony_ci0=NTSC, 1=PAL
253162306a36Sopenharmony_ci
253262306a36Sopenharmony_ci
253362306a36Sopenharmony_ci
253462306a36Sopenharmony_ciCX2341X_DEC_GET_VERSION
253562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~
253662306a36Sopenharmony_ci
253762306a36Sopenharmony_ciEnum: 17/0x11
253862306a36Sopenharmony_ci
253962306a36Sopenharmony_ciDescription
254062306a36Sopenharmony_ci^^^^^^^^^^^
254162306a36Sopenharmony_ci
254262306a36Sopenharmony_ciReturns decoder firmware version information
254362306a36Sopenharmony_ci
254462306a36Sopenharmony_ciResult[0]
254562306a36Sopenharmony_ci^^^^^^^^^
254662306a36Sopenharmony_ci
254762306a36Sopenharmony_ciVersion bitmask:
254862306a36Sopenharmony_ci	- Bits  0:15 build
254962306a36Sopenharmony_ci	- Bits 16:23 minor
255062306a36Sopenharmony_ci	- Bits 24:31 major
255162306a36Sopenharmony_ci
255262306a36Sopenharmony_ci
255362306a36Sopenharmony_ci
255462306a36Sopenharmony_ciCX2341X_DEC_SET_STREAM_INPUT
255562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
255662306a36Sopenharmony_ci
255762306a36Sopenharmony_ciEnum: 20/0x14
255862306a36Sopenharmony_ci
255962306a36Sopenharmony_ciDescription
256062306a36Sopenharmony_ci^^^^^^^^^^^
256162306a36Sopenharmony_ci
256262306a36Sopenharmony_ciSelect decoder stream input port
256362306a36Sopenharmony_ci
256462306a36Sopenharmony_ciParam[0]
256562306a36Sopenharmony_ci^^^^^^^^
256662306a36Sopenharmony_ci
256762306a36Sopenharmony_ci0=memory (default), 1=streaming
256862306a36Sopenharmony_ci
256962306a36Sopenharmony_ci
257062306a36Sopenharmony_ci
257162306a36Sopenharmony_ciCX2341X_DEC_GET_TIMING_INFO
257262306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~
257362306a36Sopenharmony_ci
257462306a36Sopenharmony_ciEnum: 21/0x15
257562306a36Sopenharmony_ci
257662306a36Sopenharmony_ciDescription
257762306a36Sopenharmony_ci^^^^^^^^^^^
257862306a36Sopenharmony_ci
257962306a36Sopenharmony_ciReturns timing information from start of playback
258062306a36Sopenharmony_ci
258162306a36Sopenharmony_ciResult[0]
258262306a36Sopenharmony_ci^^^^^^^^^
258362306a36Sopenharmony_ci
258462306a36Sopenharmony_ciFrame count by decode order
258562306a36Sopenharmony_ci
258662306a36Sopenharmony_ciResult[1]
258762306a36Sopenharmony_ci^^^^^^^^^
258862306a36Sopenharmony_ci
258962306a36Sopenharmony_ciVideo PTS bits 0:31 by display order
259062306a36Sopenharmony_ci
259162306a36Sopenharmony_ciResult[2]
259262306a36Sopenharmony_ci^^^^^^^^^
259362306a36Sopenharmony_ci
259462306a36Sopenharmony_ciVideo PTS bit 32 by display order
259562306a36Sopenharmony_ci
259662306a36Sopenharmony_ciResult[3]
259762306a36Sopenharmony_ci^^^^^^^^^
259862306a36Sopenharmony_ci
259962306a36Sopenharmony_ciSCR bits 0:31 by display order
260062306a36Sopenharmony_ci
260162306a36Sopenharmony_ciResult[4]
260262306a36Sopenharmony_ci^^^^^^^^^
260362306a36Sopenharmony_ci
260462306a36Sopenharmony_ciSCR bit 32 by display order
260562306a36Sopenharmony_ci
260662306a36Sopenharmony_ci
260762306a36Sopenharmony_ci
260862306a36Sopenharmony_ciCX2341X_DEC_SET_AUDIO_MODE
260962306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~
261062306a36Sopenharmony_ci
261162306a36Sopenharmony_ciEnum: 22/0x16
261262306a36Sopenharmony_ci
261362306a36Sopenharmony_ciDescription
261462306a36Sopenharmony_ci^^^^^^^^^^^
261562306a36Sopenharmony_ci
261662306a36Sopenharmony_ciSelect audio mode
261762306a36Sopenharmony_ci
261862306a36Sopenharmony_ciParam[0]
261962306a36Sopenharmony_ci^^^^^^^^
262062306a36Sopenharmony_ci
262162306a36Sopenharmony_ciDual mono mode action
262262306a36Sopenharmony_ci	0=Stereo, 1=Left, 2=Right, 3=Mono, 4=Swap, -1=Unchanged
262362306a36Sopenharmony_ci
262462306a36Sopenharmony_ciParam[1]
262562306a36Sopenharmony_ci^^^^^^^^
262662306a36Sopenharmony_ci
262762306a36Sopenharmony_ciStereo mode action:
262862306a36Sopenharmony_ci	0=Stereo, 1=Left, 2=Right, 3=Mono, 4=Swap, -1=Unchanged
262962306a36Sopenharmony_ci
263062306a36Sopenharmony_ci
263162306a36Sopenharmony_ci
263262306a36Sopenharmony_ciCX2341X_DEC_SET_EVENT_NOTIFICATION
263362306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
263462306a36Sopenharmony_ci
263562306a36Sopenharmony_ciEnum: 23/0x17
263662306a36Sopenharmony_ci
263762306a36Sopenharmony_ciDescription
263862306a36Sopenharmony_ci^^^^^^^^^^^
263962306a36Sopenharmony_ci
264062306a36Sopenharmony_ciSetup firmware to notify the host about a particular event.
264162306a36Sopenharmony_ciCounterpart to API 0xD5
264262306a36Sopenharmony_ci
264362306a36Sopenharmony_ciParam[0]
264462306a36Sopenharmony_ci^^^^^^^^
264562306a36Sopenharmony_ci
264662306a36Sopenharmony_ciEvent:
264762306a36Sopenharmony_ci	- 0=Audio mode change between mono, (joint) stereo and dual channel.
264862306a36Sopenharmony_ci	- 3=Decoder started
264962306a36Sopenharmony_ci	- 4=Unknown: goes off 10-15 times per second while decoding.
265062306a36Sopenharmony_ci	- 5=Some sync event: goes off once per frame.
265162306a36Sopenharmony_ci
265262306a36Sopenharmony_ciParam[1]
265362306a36Sopenharmony_ci^^^^^^^^
265462306a36Sopenharmony_ci
265562306a36Sopenharmony_ciNotification 0=disabled, 1=enabled
265662306a36Sopenharmony_ci
265762306a36Sopenharmony_ciParam[2]
265862306a36Sopenharmony_ci^^^^^^^^
265962306a36Sopenharmony_ci
266062306a36Sopenharmony_ciInterrupt bit
266162306a36Sopenharmony_ci
266262306a36Sopenharmony_ciParam[3]
266362306a36Sopenharmony_ci^^^^^^^^
266462306a36Sopenharmony_ci
266562306a36Sopenharmony_ciMailbox slot, -1 if no mailbox required.
266662306a36Sopenharmony_ci
266762306a36Sopenharmony_ci
266862306a36Sopenharmony_ci
266962306a36Sopenharmony_ciCX2341X_DEC_SET_DISPLAY_BUFFERS
267062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
267162306a36Sopenharmony_ci
267262306a36Sopenharmony_ciEnum: 24/0x18
267362306a36Sopenharmony_ci
267462306a36Sopenharmony_ciDescription
267562306a36Sopenharmony_ci^^^^^^^^^^^
267662306a36Sopenharmony_ci
267762306a36Sopenharmony_ciNumber of display buffers. To decode all frames in reverse playback you
267862306a36Sopenharmony_cimust use nine buffers.
267962306a36Sopenharmony_ci
268062306a36Sopenharmony_ciParam[0]
268162306a36Sopenharmony_ci^^^^^^^^
268262306a36Sopenharmony_ci
268362306a36Sopenharmony_ci0=six buffers, 1=nine buffers
268462306a36Sopenharmony_ci
268562306a36Sopenharmony_ci
268662306a36Sopenharmony_ci
268762306a36Sopenharmony_ciCX2341X_DEC_EXTRACT_VBI
268862306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~
268962306a36Sopenharmony_ci
269062306a36Sopenharmony_ciEnum: 25/0x19
269162306a36Sopenharmony_ci
269262306a36Sopenharmony_ciDescription
269362306a36Sopenharmony_ci^^^^^^^^^^^
269462306a36Sopenharmony_ci
269562306a36Sopenharmony_ciExtracts VBI data
269662306a36Sopenharmony_ci
269762306a36Sopenharmony_ciParam[0]
269862306a36Sopenharmony_ci^^^^^^^^
269962306a36Sopenharmony_ci
270062306a36Sopenharmony_ci0=extract from extension & user data, 1=extract from private packets
270162306a36Sopenharmony_ci
270262306a36Sopenharmony_ciResult[0]
270362306a36Sopenharmony_ci^^^^^^^^^
270462306a36Sopenharmony_ci
270562306a36Sopenharmony_ciVBI table location
270662306a36Sopenharmony_ci
270762306a36Sopenharmony_ciResult[1]
270862306a36Sopenharmony_ci^^^^^^^^^
270962306a36Sopenharmony_ci
271062306a36Sopenharmony_ciVBI table size
271162306a36Sopenharmony_ci
271262306a36Sopenharmony_ci
271362306a36Sopenharmony_ci
271462306a36Sopenharmony_ciCX2341X_DEC_SET_DECODER_SOURCE
271562306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
271662306a36Sopenharmony_ci
271762306a36Sopenharmony_ciEnum: 26/0x1A
271862306a36Sopenharmony_ci
271962306a36Sopenharmony_ciDescription
272062306a36Sopenharmony_ci^^^^^^^^^^^
272162306a36Sopenharmony_ci
272262306a36Sopenharmony_ciSelects decoder source. Ensure that the parameters passed to this
272362306a36Sopenharmony_ciAPI match the encoder settings.
272462306a36Sopenharmony_ci
272562306a36Sopenharmony_ciParam[0]
272662306a36Sopenharmony_ci^^^^^^^^
272762306a36Sopenharmony_ci
272862306a36Sopenharmony_ciMode: 0=MPEG from host, 1=YUV from encoder, 2=YUV from host
272962306a36Sopenharmony_ci
273062306a36Sopenharmony_ciParam[1]
273162306a36Sopenharmony_ci^^^^^^^^
273262306a36Sopenharmony_ci
273362306a36Sopenharmony_ciYUV picture width
273462306a36Sopenharmony_ci
273562306a36Sopenharmony_ciParam[2]
273662306a36Sopenharmony_ci^^^^^^^^
273762306a36Sopenharmony_ci
273862306a36Sopenharmony_ciYUV picture height
273962306a36Sopenharmony_ci
274062306a36Sopenharmony_ciParam[3]
274162306a36Sopenharmony_ci^^^^^^^^
274262306a36Sopenharmony_ci
274362306a36Sopenharmony_ciBitmap: see Param[0] of API 0xBD
274462306a36Sopenharmony_ci
274562306a36Sopenharmony_ci
274662306a36Sopenharmony_ci
274762306a36Sopenharmony_ciCX2341X_DEC_SET_PREBUFFERING
274862306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~
274962306a36Sopenharmony_ci
275062306a36Sopenharmony_ciEnum: 30/0x1E
275162306a36Sopenharmony_ci
275262306a36Sopenharmony_ciDescription
275362306a36Sopenharmony_ci^^^^^^^^^^^
275462306a36Sopenharmony_ci
275562306a36Sopenharmony_ciDecoder prebuffering, when enabled up to 128KB are buffered for
275662306a36Sopenharmony_cistreams <8mpbs or 640KB for streams >8mbps
275762306a36Sopenharmony_ci
275862306a36Sopenharmony_ciParam[0]
275962306a36Sopenharmony_ci^^^^^^^^
276062306a36Sopenharmony_ci
276162306a36Sopenharmony_ci0=off, 1=on
276262306a36Sopenharmony_ci
276362306a36Sopenharmony_ciPVR350 Video decoder registers 0x02002800 -> 0x02002B00
276462306a36Sopenharmony_ci-------------------------------------------------------
276562306a36Sopenharmony_ci
276662306a36Sopenharmony_ciAuthor: Ian Armstrong <ian@iarmst.demon.co.uk>
276762306a36Sopenharmony_ci
276862306a36Sopenharmony_ciVersion: v0.4
276962306a36Sopenharmony_ci
277062306a36Sopenharmony_ciDate: 12 March 2007
277162306a36Sopenharmony_ci
277262306a36Sopenharmony_ci
277362306a36Sopenharmony_ciThis list has been worked out through trial and error. There will be mistakes
277462306a36Sopenharmony_ciand omissions. Some registers have no obvious effect so it's hard to say what
277562306a36Sopenharmony_cithey do, while others interact with each other, or require a certain load
277662306a36Sopenharmony_cisequence. Horizontal filter setup is one example, with six registers working
277762306a36Sopenharmony_ciin unison and requiring a certain load sequence to correctly configure. The
277862306a36Sopenharmony_ciindexed colour palette is much easier to set at just two registers, but again
277962306a36Sopenharmony_ciit requires a certain load sequence.
278062306a36Sopenharmony_ci
278162306a36Sopenharmony_ciSome registers are fussy about what they are set to. Load in a bad value & the
278262306a36Sopenharmony_cidecoder will fail. A firmware reload will often recover, but sometimes a reset
278362306a36Sopenharmony_ciis required. For registers containing size information, setting them to 0 is
278462306a36Sopenharmony_cigenerally a bad idea. For other control registers i.e. 2878, you'll only find
278562306a36Sopenharmony_ciout what values are bad when it hangs.
278662306a36Sopenharmony_ci
278762306a36Sopenharmony_ci.. code-block:: none
278862306a36Sopenharmony_ci
278962306a36Sopenharmony_ci	--------------------------------------------------------------------------------
279062306a36Sopenharmony_ci	2800
279162306a36Sopenharmony_ci	bit 0
279262306a36Sopenharmony_ci		Decoder enable
279362306a36Sopenharmony_ci		0 = disable
279462306a36Sopenharmony_ci		1 = enable
279562306a36Sopenharmony_ci	--------------------------------------------------------------------------------
279662306a36Sopenharmony_ci	2804
279762306a36Sopenharmony_ci	bits 0:31
279862306a36Sopenharmony_ci		Decoder horizontal Y alias register 1
279962306a36Sopenharmony_ci	---------------
280062306a36Sopenharmony_ci	2808
280162306a36Sopenharmony_ci	bits 0:31
280262306a36Sopenharmony_ci		Decoder horizontal Y alias register 2
280362306a36Sopenharmony_ci	---------------
280462306a36Sopenharmony_ci	280C
280562306a36Sopenharmony_ci	bits 0:31
280662306a36Sopenharmony_ci		Decoder horizontal Y alias register 3
280762306a36Sopenharmony_ci	---------------
280862306a36Sopenharmony_ci	2810
280962306a36Sopenharmony_ci	bits 0:31
281062306a36Sopenharmony_ci		Decoder horizontal Y alias register 4
281162306a36Sopenharmony_ci	---------------
281262306a36Sopenharmony_ci	2814
281362306a36Sopenharmony_ci	bits 0:31
281462306a36Sopenharmony_ci		Decoder horizontal Y alias register 5
281562306a36Sopenharmony_ci	---------------
281662306a36Sopenharmony_ci	2818
281762306a36Sopenharmony_ci	bits 0:31
281862306a36Sopenharmony_ci		Decoder horizontal Y alias trigger
281962306a36Sopenharmony_ci
282062306a36Sopenharmony_ci	These six registers control the horizontal aliasing filter for the Y plane.
282162306a36Sopenharmony_ci	The first five registers must all be loaded before accessing the trigger
282262306a36Sopenharmony_ci	(2818), as this register actually clocks the data through for the first
282362306a36Sopenharmony_ci	five.
282462306a36Sopenharmony_ci
282562306a36Sopenharmony_ci	To correctly program set the filter, this whole procedure must be done 16
282662306a36Sopenharmony_ci	times. The actual register contents are copied from a lookup-table in the
282762306a36Sopenharmony_ci	firmware which contains 4 different filter settings.
282862306a36Sopenharmony_ci
282962306a36Sopenharmony_ci	--------------------------------------------------------------------------------
283062306a36Sopenharmony_ci	281C
283162306a36Sopenharmony_ci	bits 0:31
283262306a36Sopenharmony_ci		Decoder horizontal UV alias register 1
283362306a36Sopenharmony_ci	---------------
283462306a36Sopenharmony_ci	2820
283562306a36Sopenharmony_ci	bits 0:31
283662306a36Sopenharmony_ci		Decoder horizontal UV alias register 2
283762306a36Sopenharmony_ci	---------------
283862306a36Sopenharmony_ci	2824
283962306a36Sopenharmony_ci	bits 0:31
284062306a36Sopenharmony_ci		Decoder horizontal UV alias register 3
284162306a36Sopenharmony_ci	---------------
284262306a36Sopenharmony_ci	2828
284362306a36Sopenharmony_ci	bits 0:31
284462306a36Sopenharmony_ci		Decoder horizontal UV alias register 4
284562306a36Sopenharmony_ci	---------------
284662306a36Sopenharmony_ci	282C
284762306a36Sopenharmony_ci	bits 0:31
284862306a36Sopenharmony_ci		Decoder horizontal UV alias register 5
284962306a36Sopenharmony_ci	---------------
285062306a36Sopenharmony_ci	2830
285162306a36Sopenharmony_ci	bits 0:31
285262306a36Sopenharmony_ci		Decoder horizontal UV alias trigger
285362306a36Sopenharmony_ci
285462306a36Sopenharmony_ci	These six registers control the horizontal aliasing for the UV plane.
285562306a36Sopenharmony_ci	Operation is the same as the Y filter, with 2830 being the trigger
285662306a36Sopenharmony_ci	register.
285762306a36Sopenharmony_ci
285862306a36Sopenharmony_ci	--------------------------------------------------------------------------------
285962306a36Sopenharmony_ci	2834
286062306a36Sopenharmony_ci	bits 0:15
286162306a36Sopenharmony_ci		Decoder Y source width in pixels
286262306a36Sopenharmony_ci
286362306a36Sopenharmony_ci	bits 16:31
286462306a36Sopenharmony_ci		Decoder Y destination width in pixels
286562306a36Sopenharmony_ci	---------------
286662306a36Sopenharmony_ci	2838
286762306a36Sopenharmony_ci	bits 0:15
286862306a36Sopenharmony_ci		Decoder UV source width in pixels
286962306a36Sopenharmony_ci
287062306a36Sopenharmony_ci	bits 16:31
287162306a36Sopenharmony_ci		Decoder UV destination width in pixels
287262306a36Sopenharmony_ci
287362306a36Sopenharmony_ci	NOTE: For both registers, the resulting image must be fully visible on
287462306a36Sopenharmony_ci	screen. If the image exceeds the right edge both the source and destination
287562306a36Sopenharmony_ci	size must be adjusted to reflect the visible portion. For the source width,
287662306a36Sopenharmony_ci	you must take into account the scaling when calculating the new value.
287762306a36Sopenharmony_ci	--------------------------------------------------------------------------------
287862306a36Sopenharmony_ci
287962306a36Sopenharmony_ci	283C
288062306a36Sopenharmony_ci	bits 0:31
288162306a36Sopenharmony_ci		Decoder Y horizontal scaling
288262306a36Sopenharmony_ci			Normally = Reg 2854 >> 2
288362306a36Sopenharmony_ci	---------------
288462306a36Sopenharmony_ci	2840
288562306a36Sopenharmony_ci	bits 0:31
288662306a36Sopenharmony_ci		Decoder ?? unknown - horizontal scaling
288762306a36Sopenharmony_ci		Usually 0x00080514
288862306a36Sopenharmony_ci	---------------
288962306a36Sopenharmony_ci	2844
289062306a36Sopenharmony_ci	bits 0:31
289162306a36Sopenharmony_ci		Decoder UV horizontal scaling
289262306a36Sopenharmony_ci		Normally = Reg 2854 >> 2
289362306a36Sopenharmony_ci	---------------
289462306a36Sopenharmony_ci	2848
289562306a36Sopenharmony_ci	bits 0:31
289662306a36Sopenharmony_ci		Decoder ?? unknown - horizontal scaling
289762306a36Sopenharmony_ci		Usually 0x00100514
289862306a36Sopenharmony_ci	---------------
289962306a36Sopenharmony_ci	284C
290062306a36Sopenharmony_ci	bits 0:31
290162306a36Sopenharmony_ci		Decoder ?? unknown - Y plane
290262306a36Sopenharmony_ci		Usually 0x00200020
290362306a36Sopenharmony_ci	---------------
290462306a36Sopenharmony_ci	2850
290562306a36Sopenharmony_ci	bits 0:31
290662306a36Sopenharmony_ci		Decoder ?? unknown - UV plane
290762306a36Sopenharmony_ci		Usually 0x00200020
290862306a36Sopenharmony_ci	---------------
290962306a36Sopenharmony_ci	2854
291062306a36Sopenharmony_ci	bits 0:31
291162306a36Sopenharmony_ci		Decoder 'master' value for horizontal scaling
291262306a36Sopenharmony_ci	---------------
291362306a36Sopenharmony_ci	2858
291462306a36Sopenharmony_ci	bits 0:31
291562306a36Sopenharmony_ci		Decoder ?? unknown
291662306a36Sopenharmony_ci		Usually 0
291762306a36Sopenharmony_ci	---------------
291862306a36Sopenharmony_ci	285C
291962306a36Sopenharmony_ci	bits 0:31
292062306a36Sopenharmony_ci		Decoder ?? unknown
292162306a36Sopenharmony_ci		Normally = Reg 2854 >> 1
292262306a36Sopenharmony_ci	---------------
292362306a36Sopenharmony_ci	2860
292462306a36Sopenharmony_ci	bits 0:31
292562306a36Sopenharmony_ci		Decoder ?? unknown
292662306a36Sopenharmony_ci		Usually 0
292762306a36Sopenharmony_ci	---------------
292862306a36Sopenharmony_ci	2864
292962306a36Sopenharmony_ci	bits 0:31
293062306a36Sopenharmony_ci		Decoder ?? unknown
293162306a36Sopenharmony_ci		Normally = Reg 2854 >> 1
293262306a36Sopenharmony_ci	---------------
293362306a36Sopenharmony_ci	2868
293462306a36Sopenharmony_ci	bits 0:31
293562306a36Sopenharmony_ci		Decoder ?? unknown
293662306a36Sopenharmony_ci		Usually 0
293762306a36Sopenharmony_ci
293862306a36Sopenharmony_ci	Most of these registers either control horizontal scaling, or appear linked
293962306a36Sopenharmony_ci	to it in some way. Register 2854 contains the 'master' value & the other
294062306a36Sopenharmony_ci	registers can be calculated from that one. You must also remember to
294162306a36Sopenharmony_ci	correctly set the divider in Reg 2874.
294262306a36Sopenharmony_ci
294362306a36Sopenharmony_ci	To enlarge:
294462306a36Sopenharmony_ci		Reg 2854 = (source_width * 0x00200000) / destination_width
294562306a36Sopenharmony_ci		Reg 2874 = No divide
294662306a36Sopenharmony_ci
294762306a36Sopenharmony_ci	To reduce from full size down to half size:
294862306a36Sopenharmony_ci		Reg 2854 = (source_width/2 * 0x00200000) / destination width
294962306a36Sopenharmony_ci		Reg 2874 = Divide by 2
295062306a36Sopenharmony_ci
295162306a36Sopenharmony_ci	To reduce from half size down to quarter size:
295262306a36Sopenharmony_ci		Reg 2854 = (source_width/4 * 0x00200000) / destination width
295362306a36Sopenharmony_ci		Reg 2874 = Divide by 4
295462306a36Sopenharmony_ci
295562306a36Sopenharmony_ci	The result is always rounded up.
295662306a36Sopenharmony_ci
295762306a36Sopenharmony_ci	--------------------------------------------------------------------------------
295862306a36Sopenharmony_ci	286C
295962306a36Sopenharmony_ci	bits 0:15
296062306a36Sopenharmony_ci		Decoder horizontal Y buffer offset
296162306a36Sopenharmony_ci
296262306a36Sopenharmony_ci	bits 15:31
296362306a36Sopenharmony_ci		Decoder horizontal UV buffer offset
296462306a36Sopenharmony_ci
296562306a36Sopenharmony_ci	Offset into the video image buffer. If the offset is gradually incremented,
296662306a36Sopenharmony_ci	the on screen image will move left & wrap around higher up on the right.
296762306a36Sopenharmony_ci
296862306a36Sopenharmony_ci	--------------------------------------------------------------------------------
296962306a36Sopenharmony_ci	2870
297062306a36Sopenharmony_ci	bits 0:15
297162306a36Sopenharmony_ci		Decoder horizontal Y output offset
297262306a36Sopenharmony_ci
297362306a36Sopenharmony_ci	bits 16:31
297462306a36Sopenharmony_ci		Decoder horizontal UV output offset
297562306a36Sopenharmony_ci
297662306a36Sopenharmony_ci	Offsets the actual video output. Controls output alignment of the Y & UV
297762306a36Sopenharmony_ci	planes. The higher the value, the greater the shift to the left. Use
297862306a36Sopenharmony_ci	reg 2890 to move the image right.
297962306a36Sopenharmony_ci
298062306a36Sopenharmony_ci	--------------------------------------------------------------------------------
298162306a36Sopenharmony_ci	2874
298262306a36Sopenharmony_ci	bits 0:1
298362306a36Sopenharmony_ci		Decoder horizontal Y output size divider
298462306a36Sopenharmony_ci		00 = No divide
298562306a36Sopenharmony_ci		01 = Divide by 2
298662306a36Sopenharmony_ci		10 = Divide by 3
298762306a36Sopenharmony_ci
298862306a36Sopenharmony_ci	bits 4:5
298962306a36Sopenharmony_ci		Decoder horizontal UV output size divider
299062306a36Sopenharmony_ci		00 = No divide
299162306a36Sopenharmony_ci		01 = Divide by 2
299262306a36Sopenharmony_ci		10 = Divide by 3
299362306a36Sopenharmony_ci
299462306a36Sopenharmony_ci	bit 8
299562306a36Sopenharmony_ci		Decoder ?? unknown
299662306a36Sopenharmony_ci		0 = Normal
299762306a36Sopenharmony_ci		1 = Affects video output levels
299862306a36Sopenharmony_ci
299962306a36Sopenharmony_ci	bit 16
300062306a36Sopenharmony_ci		Decoder ?? unknown
300162306a36Sopenharmony_ci		0 = Normal
300262306a36Sopenharmony_ci		1 = Disable horizontal filter
300362306a36Sopenharmony_ci
300462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
300562306a36Sopenharmony_ci	2878
300662306a36Sopenharmony_ci	bit 0
300762306a36Sopenharmony_ci		?? unknown
300862306a36Sopenharmony_ci
300962306a36Sopenharmony_ci	bit 1
301062306a36Sopenharmony_ci		osd on/off
301162306a36Sopenharmony_ci		0 = osd off
301262306a36Sopenharmony_ci		1 = osd on
301362306a36Sopenharmony_ci
301462306a36Sopenharmony_ci	bit 2
301562306a36Sopenharmony_ci		Decoder + osd video timing
301662306a36Sopenharmony_ci		0 = NTSC
301762306a36Sopenharmony_ci		1 = PAL
301862306a36Sopenharmony_ci
301962306a36Sopenharmony_ci	bits 3:4
302062306a36Sopenharmony_ci		?? unknown
302162306a36Sopenharmony_ci
302262306a36Sopenharmony_ci	bit 5
302362306a36Sopenharmony_ci		Decoder + osd
302462306a36Sopenharmony_ci		Swaps upper & lower fields
302562306a36Sopenharmony_ci
302662306a36Sopenharmony_ci	--------------------------------------------------------------------------------
302762306a36Sopenharmony_ci	287C
302862306a36Sopenharmony_ci	bits 0:10
302962306a36Sopenharmony_ci		Decoder & osd ?? unknown
303062306a36Sopenharmony_ci		Moves entire screen horizontally. Starts at 0x005 with the screen
303162306a36Sopenharmony_ci		shifted heavily to the right. Incrementing in steps of 0x004 will
303262306a36Sopenharmony_ci		gradually shift the screen to the left.
303362306a36Sopenharmony_ci
303462306a36Sopenharmony_ci	bits 11:31
303562306a36Sopenharmony_ci		?? unknown
303662306a36Sopenharmony_ci
303762306a36Sopenharmony_ci	Normally contents are 0x00101111 (NTSC) or 0x1010111d (PAL)
303862306a36Sopenharmony_ci
303962306a36Sopenharmony_ci	--------------------------------------------------------------------------------
304062306a36Sopenharmony_ci	2880  --------    ?? unknown
304162306a36Sopenharmony_ci	2884  --------    ?? unknown
304262306a36Sopenharmony_ci	--------------------------------------------------------------------------------
304362306a36Sopenharmony_ci	2888
304462306a36Sopenharmony_ci	bit 0
304562306a36Sopenharmony_ci		Decoder + osd ?? unknown
304662306a36Sopenharmony_ci		0 = Normal
304762306a36Sopenharmony_ci		1 = Misaligned fields (Correctable through 289C & 28A4)
304862306a36Sopenharmony_ci
304962306a36Sopenharmony_ci	bit 4
305062306a36Sopenharmony_ci		?? unknown
305162306a36Sopenharmony_ci
305262306a36Sopenharmony_ci	bit 8
305362306a36Sopenharmony_ci		?? unknown
305462306a36Sopenharmony_ci
305562306a36Sopenharmony_ci	Warning: Bad values will require a firmware reload to recover.
305662306a36Sopenharmony_ci			Known to be bad are 0x000,0x011,0x100,0x111
305762306a36Sopenharmony_ci	--------------------------------------------------------------------------------
305862306a36Sopenharmony_ci	288C
305962306a36Sopenharmony_ci	bits 0:15
306062306a36Sopenharmony_ci		osd ?? unknown
306162306a36Sopenharmony_ci		Appears to affect the osd position stability. The higher the value the
306262306a36Sopenharmony_ci		more unstable it becomes. Decoder output remains stable.
306362306a36Sopenharmony_ci
306462306a36Sopenharmony_ci	bits 16:31
306562306a36Sopenharmony_ci		osd ?? unknown
306662306a36Sopenharmony_ci		Same as bits 0:15
306762306a36Sopenharmony_ci
306862306a36Sopenharmony_ci	--------------------------------------------------------------------------------
306962306a36Sopenharmony_ci	2890
307062306a36Sopenharmony_ci	bits 0:11
307162306a36Sopenharmony_ci		Decoder output horizontal offset.
307262306a36Sopenharmony_ci
307362306a36Sopenharmony_ci	Horizontal offset moves the video image right. A small left shift is
307462306a36Sopenharmony_ci	possible, but it's better to use reg 2870 for that due to its greater
307562306a36Sopenharmony_ci	range.
307662306a36Sopenharmony_ci
307762306a36Sopenharmony_ci	NOTE: Video corruption will occur if video window is shifted off the right
307862306a36Sopenharmony_ci	edge. To avoid this read the notes for 2834 & 2838.
307962306a36Sopenharmony_ci	--------------------------------------------------------------------------------
308062306a36Sopenharmony_ci	2894
308162306a36Sopenharmony_ci	bits 0:23
308262306a36Sopenharmony_ci		Decoder output video surround colour.
308362306a36Sopenharmony_ci
308462306a36Sopenharmony_ci	Contains the colour (in yuv) used to fill the screen when the video is
308562306a36Sopenharmony_ci	running in a window.
308662306a36Sopenharmony_ci	--------------------------------------------------------------------------------
308762306a36Sopenharmony_ci	2898
308862306a36Sopenharmony_ci	bits 0:23
308962306a36Sopenharmony_ci		Decoder video window colour
309062306a36Sopenharmony_ci		Contains the colour (in yuv) used to fill the video window when the
309162306a36Sopenharmony_ci		video is turned off.
309262306a36Sopenharmony_ci
309362306a36Sopenharmony_ci	bit 24
309462306a36Sopenharmony_ci		Decoder video output
309562306a36Sopenharmony_ci		0 = Video on
309662306a36Sopenharmony_ci		1 = Video off
309762306a36Sopenharmony_ci
309862306a36Sopenharmony_ci	bit 28
309962306a36Sopenharmony_ci		Decoder plane order
310062306a36Sopenharmony_ci		0 = Y,UV
310162306a36Sopenharmony_ci		1 = UV,Y
310262306a36Sopenharmony_ci
310362306a36Sopenharmony_ci	bit 29
310462306a36Sopenharmony_ci		Decoder second plane byte order
310562306a36Sopenharmony_ci		0 = Normal (UV)
310662306a36Sopenharmony_ci		1 = Swapped (VU)
310762306a36Sopenharmony_ci
310862306a36Sopenharmony_ci	In normal usage, the first plane is Y & the second plane is UV. Though the
310962306a36Sopenharmony_ci	order of the planes can be swapped, only the byte order of the second plane
311062306a36Sopenharmony_ci	can be swapped. This isn't much use for the Y plane, but can be useful for
311162306a36Sopenharmony_ci	the UV plane.
311262306a36Sopenharmony_ci
311362306a36Sopenharmony_ci	--------------------------------------------------------------------------------
311462306a36Sopenharmony_ci	289C
311562306a36Sopenharmony_ci	bits 0:15
311662306a36Sopenharmony_ci		Decoder vertical field offset 1
311762306a36Sopenharmony_ci
311862306a36Sopenharmony_ci	bits 16:31
311962306a36Sopenharmony_ci		Decoder vertical field offset 2
312062306a36Sopenharmony_ci
312162306a36Sopenharmony_ci	Controls field output vertical alignment. The higher the number, the lower
312262306a36Sopenharmony_ci	the image on screen. Known starting values are 0x011E0017 (NTSC) &
312362306a36Sopenharmony_ci	0x01500017 (PAL)
312462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
312562306a36Sopenharmony_ci	28A0
312662306a36Sopenharmony_ci	bits 0:15
312762306a36Sopenharmony_ci		Decoder & osd width in pixels
312862306a36Sopenharmony_ci
312962306a36Sopenharmony_ci	bits 16:31
313062306a36Sopenharmony_ci		Decoder & osd height in pixels
313162306a36Sopenharmony_ci
313262306a36Sopenharmony_ci	All output from the decoder & osd are disabled beyond this area. Decoder
313362306a36Sopenharmony_ci	output will simply go black outside of this region. If the osd tries to
313462306a36Sopenharmony_ci	exceed this area it will become corrupt.
313562306a36Sopenharmony_ci	--------------------------------------------------------------------------------
313662306a36Sopenharmony_ci	28A4
313762306a36Sopenharmony_ci	bits 0:11
313862306a36Sopenharmony_ci		osd left shift.
313962306a36Sopenharmony_ci
314062306a36Sopenharmony_ci	Has a range of 0x770->0x7FF. With the exception of 0, any value outside of
314162306a36Sopenharmony_ci	this range corrupts the osd.
314262306a36Sopenharmony_ci	--------------------------------------------------------------------------------
314362306a36Sopenharmony_ci	28A8
314462306a36Sopenharmony_ci	bits 0:15
314562306a36Sopenharmony_ci		osd vertical field offset 1
314662306a36Sopenharmony_ci
314762306a36Sopenharmony_ci	bits 16:31
314862306a36Sopenharmony_ci		osd vertical field offset 2
314962306a36Sopenharmony_ci
315062306a36Sopenharmony_ci	Controls field output vertical alignment. The higher the number, the lower
315162306a36Sopenharmony_ci	the image on screen. Known starting values are 0x011E0017 (NTSC) &
315262306a36Sopenharmony_ci	0x01500017 (PAL)
315362306a36Sopenharmony_ci	--------------------------------------------------------------------------------
315462306a36Sopenharmony_ci	28AC  --------    ?? unknown
315562306a36Sopenharmony_ci	|
315662306a36Sopenharmony_ci	V
315762306a36Sopenharmony_ci	28BC  --------    ?? unknown
315862306a36Sopenharmony_ci	--------------------------------------------------------------------------------
315962306a36Sopenharmony_ci	28C0
316062306a36Sopenharmony_ci	bit 0
316162306a36Sopenharmony_ci		Current output field
316262306a36Sopenharmony_ci		0 = first field
316362306a36Sopenharmony_ci		1 = second field
316462306a36Sopenharmony_ci
316562306a36Sopenharmony_ci	bits 16:31
316662306a36Sopenharmony_ci		Current scanline
316762306a36Sopenharmony_ci		The scanline counts from the top line of the first field
316862306a36Sopenharmony_ci		through to the last line of the second field.
316962306a36Sopenharmony_ci	--------------------------------------------------------------------------------
317062306a36Sopenharmony_ci	28C4  --------    ?? unknown
317162306a36Sopenharmony_ci	|
317262306a36Sopenharmony_ci	V
317362306a36Sopenharmony_ci	28F8  --------    ?? unknown
317462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
317562306a36Sopenharmony_ci	28FC
317662306a36Sopenharmony_ci	bit 0
317762306a36Sopenharmony_ci		?? unknown
317862306a36Sopenharmony_ci		0 = Normal
317962306a36Sopenharmony_ci		1 = Breaks decoder & osd output
318062306a36Sopenharmony_ci	--------------------------------------------------------------------------------
318162306a36Sopenharmony_ci	2900
318262306a36Sopenharmony_ci	bits 0:31
318362306a36Sopenharmony_ci		Decoder vertical Y alias register 1
318462306a36Sopenharmony_ci	---------------
318562306a36Sopenharmony_ci	2904
318662306a36Sopenharmony_ci	bits 0:31
318762306a36Sopenharmony_ci		Decoder vertical Y alias register 2
318862306a36Sopenharmony_ci	---------------
318962306a36Sopenharmony_ci	2908
319062306a36Sopenharmony_ci	bits 0:31
319162306a36Sopenharmony_ci		Decoder vertical Y alias trigger
319262306a36Sopenharmony_ci
319362306a36Sopenharmony_ci	These three registers control the vertical aliasing filter for the Y plane.
319462306a36Sopenharmony_ci	Operation is similar to the horizontal Y filter (2804). The only real
319562306a36Sopenharmony_ci	difference is that there are only two registers to set before accessing
319662306a36Sopenharmony_ci	the trigger register (2908). As for the horizontal filter, the values are
319762306a36Sopenharmony_ci	taken from a lookup table in the firmware, and the procedure must be
319862306a36Sopenharmony_ci	repeated 16 times to fully program the filter.
319962306a36Sopenharmony_ci	--------------------------------------------------------------------------------
320062306a36Sopenharmony_ci	290C
320162306a36Sopenharmony_ci	bits 0:31
320262306a36Sopenharmony_ci		Decoder vertical UV alias register 1
320362306a36Sopenharmony_ci	---------------
320462306a36Sopenharmony_ci	2910
320562306a36Sopenharmony_ci	bits 0:31
320662306a36Sopenharmony_ci		Decoder vertical UV alias register 2
320762306a36Sopenharmony_ci	---------------
320862306a36Sopenharmony_ci	2914
320962306a36Sopenharmony_ci	bits 0:31
321062306a36Sopenharmony_ci		Decoder vertical UV alias trigger
321162306a36Sopenharmony_ci
321262306a36Sopenharmony_ci	These three registers control the vertical aliasing filter for the UV
321362306a36Sopenharmony_ci	plane. Operation is the same as the Y filter, with 2914 being the trigger.
321462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
321562306a36Sopenharmony_ci	2918
321662306a36Sopenharmony_ci	bits 0:15
321762306a36Sopenharmony_ci		Decoder Y source height in pixels
321862306a36Sopenharmony_ci
321962306a36Sopenharmony_ci	bits 16:31
322062306a36Sopenharmony_ci		Decoder Y destination height in pixels
322162306a36Sopenharmony_ci	---------------
322262306a36Sopenharmony_ci	291C
322362306a36Sopenharmony_ci	bits 0:15
322462306a36Sopenharmony_ci		Decoder UV source height in pixels divided by 2
322562306a36Sopenharmony_ci
322662306a36Sopenharmony_ci	bits 16:31
322762306a36Sopenharmony_ci		Decoder UV destination height in pixels
322862306a36Sopenharmony_ci
322962306a36Sopenharmony_ci	NOTE: For both registers, the resulting image must be fully visible on
323062306a36Sopenharmony_ci	screen. If the image exceeds the bottom edge both the source and
323162306a36Sopenharmony_ci	destination size must be adjusted to reflect the visible portion. For the
323262306a36Sopenharmony_ci	source height, you must take into account the scaling when calculating the
323362306a36Sopenharmony_ci	new value.
323462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
323562306a36Sopenharmony_ci	2920
323662306a36Sopenharmony_ci	bits 0:31
323762306a36Sopenharmony_ci		Decoder Y vertical scaling
323862306a36Sopenharmony_ci		Normally = Reg 2930 >> 2
323962306a36Sopenharmony_ci	---------------
324062306a36Sopenharmony_ci	2924
324162306a36Sopenharmony_ci	bits 0:31
324262306a36Sopenharmony_ci		Decoder Y vertical scaling
324362306a36Sopenharmony_ci		Normally = Reg 2920 + 0x514
324462306a36Sopenharmony_ci	---------------
324562306a36Sopenharmony_ci	2928
324662306a36Sopenharmony_ci	bits 0:31
324762306a36Sopenharmony_ci		Decoder UV vertical scaling
324862306a36Sopenharmony_ci		When enlarging = Reg 2930 >> 2
324962306a36Sopenharmony_ci		When reducing = Reg 2930 >> 3
325062306a36Sopenharmony_ci	---------------
325162306a36Sopenharmony_ci	292C
325262306a36Sopenharmony_ci	bits 0:31
325362306a36Sopenharmony_ci		Decoder UV vertical scaling
325462306a36Sopenharmony_ci		Normally = Reg 2928 + 0x514
325562306a36Sopenharmony_ci	---------------
325662306a36Sopenharmony_ci	2930
325762306a36Sopenharmony_ci	bits 0:31
325862306a36Sopenharmony_ci		Decoder 'master' value for vertical scaling
325962306a36Sopenharmony_ci	---------------
326062306a36Sopenharmony_ci	2934
326162306a36Sopenharmony_ci	bits 0:31
326262306a36Sopenharmony_ci		Decoder ?? unknown - Y vertical scaling
326362306a36Sopenharmony_ci	---------------
326462306a36Sopenharmony_ci	2938
326562306a36Sopenharmony_ci	bits 0:31
326662306a36Sopenharmony_ci		Decoder Y vertical scaling
326762306a36Sopenharmony_ci		Normally = Reg 2930
326862306a36Sopenharmony_ci	---------------
326962306a36Sopenharmony_ci	293C
327062306a36Sopenharmony_ci	bits 0:31
327162306a36Sopenharmony_ci		Decoder ?? unknown - Y vertical scaling
327262306a36Sopenharmony_ci	---------------
327362306a36Sopenharmony_ci	2940
327462306a36Sopenharmony_ci	bits 0:31
327562306a36Sopenharmony_ci		Decoder UV vertical scaling
327662306a36Sopenharmony_ci		When enlarging = Reg 2930 >> 1
327762306a36Sopenharmony_ci		When reducing = Reg 2930
327862306a36Sopenharmony_ci	---------------
327962306a36Sopenharmony_ci	2944
328062306a36Sopenharmony_ci	bits 0:31
328162306a36Sopenharmony_ci		Decoder ?? unknown - UV vertical scaling
328262306a36Sopenharmony_ci	---------------
328362306a36Sopenharmony_ci	2948
328462306a36Sopenharmony_ci	bits 0:31
328562306a36Sopenharmony_ci		Decoder UV vertical scaling
328662306a36Sopenharmony_ci		Normally = Reg 2940
328762306a36Sopenharmony_ci	---------------
328862306a36Sopenharmony_ci	294C
328962306a36Sopenharmony_ci	bits 0:31
329062306a36Sopenharmony_ci		Decoder ?? unknown - UV vertical scaling
329162306a36Sopenharmony_ci
329262306a36Sopenharmony_ci	Most of these registers either control vertical scaling, or appear linked
329362306a36Sopenharmony_ci	to it in some way. Register 2930 contains the 'master' value & all other
329462306a36Sopenharmony_ci	registers can be calculated from that one. You must also remember to
329562306a36Sopenharmony_ci	correctly set the divider in Reg 296C
329662306a36Sopenharmony_ci
329762306a36Sopenharmony_ci	To enlarge:
329862306a36Sopenharmony_ci		Reg 2930 = (source_height * 0x00200000) / destination_height
329962306a36Sopenharmony_ci		Reg 296C = No divide
330062306a36Sopenharmony_ci
330162306a36Sopenharmony_ci	To reduce from full size down to half size:
330262306a36Sopenharmony_ci		Reg 2930 = (source_height/2 * 0x00200000) / destination height
330362306a36Sopenharmony_ci		Reg 296C = Divide by 2
330462306a36Sopenharmony_ci
330562306a36Sopenharmony_ci	To reduce from half down to quarter.
330662306a36Sopenharmony_ci		Reg 2930 = (source_height/4 * 0x00200000) / destination height
330762306a36Sopenharmony_ci		Reg 296C = Divide by 4
330862306a36Sopenharmony_ci
330962306a36Sopenharmony_ci	--------------------------------------------------------------------------------
331062306a36Sopenharmony_ci	2950
331162306a36Sopenharmony_ci	bits 0:15
331262306a36Sopenharmony_ci		Decoder Y line index into display buffer, first field
331362306a36Sopenharmony_ci
331462306a36Sopenharmony_ci	bits 16:31
331562306a36Sopenharmony_ci		Decoder Y vertical line skip, first field
331662306a36Sopenharmony_ci	--------------------------------------------------------------------------------
331762306a36Sopenharmony_ci	2954
331862306a36Sopenharmony_ci	bits 0:15
331962306a36Sopenharmony_ci		Decoder Y line index into display buffer, second field
332062306a36Sopenharmony_ci
332162306a36Sopenharmony_ci	bits 16:31
332262306a36Sopenharmony_ci		Decoder Y vertical line skip, second field
332362306a36Sopenharmony_ci	--------------------------------------------------------------------------------
332462306a36Sopenharmony_ci	2958
332562306a36Sopenharmony_ci	bits 0:15
332662306a36Sopenharmony_ci		Decoder UV line index into display buffer, first field
332762306a36Sopenharmony_ci
332862306a36Sopenharmony_ci	bits 16:31
332962306a36Sopenharmony_ci		Decoder UV vertical line skip, first field
333062306a36Sopenharmony_ci	--------------------------------------------------------------------------------
333162306a36Sopenharmony_ci	295C
333262306a36Sopenharmony_ci	bits 0:15
333362306a36Sopenharmony_ci		Decoder UV line index into display buffer, second field
333462306a36Sopenharmony_ci
333562306a36Sopenharmony_ci	bits 16:31
333662306a36Sopenharmony_ci		Decoder UV vertical line skip, second field
333762306a36Sopenharmony_ci	--------------------------------------------------------------------------------
333862306a36Sopenharmony_ci	2960
333962306a36Sopenharmony_ci	bits 0:15
334062306a36Sopenharmony_ci		Decoder destination height minus 1
334162306a36Sopenharmony_ci
334262306a36Sopenharmony_ci	bits 16:31
334362306a36Sopenharmony_ci		Decoder destination height divided by 2
334462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
334562306a36Sopenharmony_ci	2964
334662306a36Sopenharmony_ci	bits 0:15
334762306a36Sopenharmony_ci		Decoder Y vertical offset, second field
334862306a36Sopenharmony_ci
334962306a36Sopenharmony_ci	bits 16:31
335062306a36Sopenharmony_ci		Decoder Y vertical offset, first field
335162306a36Sopenharmony_ci
335262306a36Sopenharmony_ci	These two registers shift the Y plane up. The higher the number, the
335362306a36Sopenharmony_ci	greater the shift.
335462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
335562306a36Sopenharmony_ci	2968
335662306a36Sopenharmony_ci	bits 0:15
335762306a36Sopenharmony_ci		Decoder UV vertical offset, second field
335862306a36Sopenharmony_ci
335962306a36Sopenharmony_ci	bits 16:31
336062306a36Sopenharmony_ci		Decoder UV vertical offset, first field
336162306a36Sopenharmony_ci
336262306a36Sopenharmony_ci	These two registers shift the UV plane up. The higher the number, the
336362306a36Sopenharmony_ci	greater the shift.
336462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
336562306a36Sopenharmony_ci	296C
336662306a36Sopenharmony_ci	bits 0:1
336762306a36Sopenharmony_ci		Decoder vertical Y output size divider
336862306a36Sopenharmony_ci		00 = No divide
336962306a36Sopenharmony_ci		01 = Divide by 2
337062306a36Sopenharmony_ci		10 = Divide by 4
337162306a36Sopenharmony_ci
337262306a36Sopenharmony_ci	bits 8:9
337362306a36Sopenharmony_ci		Decoder vertical UV output size divider
337462306a36Sopenharmony_ci		00 = No divide
337562306a36Sopenharmony_ci		01 = Divide by 2
337662306a36Sopenharmony_ci		10 = Divide by 4
337762306a36Sopenharmony_ci	--------------------------------------------------------------------------------
337862306a36Sopenharmony_ci	2970
337962306a36Sopenharmony_ci	bit 0
338062306a36Sopenharmony_ci		Decoder ?? unknown
338162306a36Sopenharmony_ci		0 = Normal
338262306a36Sopenharmony_ci		1 = Affect video output levels
338362306a36Sopenharmony_ci
338462306a36Sopenharmony_ci	bit 16
338562306a36Sopenharmony_ci		Decoder ?? unknown
338662306a36Sopenharmony_ci		0 = Normal
338762306a36Sopenharmony_ci		1 = Disable vertical filter
338862306a36Sopenharmony_ci
338962306a36Sopenharmony_ci	--------------------------------------------------------------------------------
339062306a36Sopenharmony_ci	2974  --------   ?? unknown
339162306a36Sopenharmony_ci	|
339262306a36Sopenharmony_ci	V
339362306a36Sopenharmony_ci	29EF  --------   ?? unknown
339462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
339562306a36Sopenharmony_ci	2A00
339662306a36Sopenharmony_ci	bits 0:2
339762306a36Sopenharmony_ci		osd colour mode
339862306a36Sopenharmony_ci		000 = 8 bit indexed
339962306a36Sopenharmony_ci		001 = 16 bit (565)
340062306a36Sopenharmony_ci		010 = 15 bit (555)
340162306a36Sopenharmony_ci		011 = 12 bit (444)
340262306a36Sopenharmony_ci		100 = 32 bit (8888)
340362306a36Sopenharmony_ci
340462306a36Sopenharmony_ci	bits 4:5
340562306a36Sopenharmony_ci		osd display bpp
340662306a36Sopenharmony_ci		01 = 8 bit
340762306a36Sopenharmony_ci		10 = 16 bit
340862306a36Sopenharmony_ci		11 = 32 bit
340962306a36Sopenharmony_ci
341062306a36Sopenharmony_ci	bit 8
341162306a36Sopenharmony_ci		osd global alpha
341262306a36Sopenharmony_ci		0 = Off
341362306a36Sopenharmony_ci		1 = On
341462306a36Sopenharmony_ci
341562306a36Sopenharmony_ci	bit 9
341662306a36Sopenharmony_ci		osd local alpha
341762306a36Sopenharmony_ci		0 = Off
341862306a36Sopenharmony_ci		1 = On
341962306a36Sopenharmony_ci
342062306a36Sopenharmony_ci	bit 10
342162306a36Sopenharmony_ci		osd colour key
342262306a36Sopenharmony_ci		0 = Off
342362306a36Sopenharmony_ci		1 = On
342462306a36Sopenharmony_ci
342562306a36Sopenharmony_ci	bit 11
342662306a36Sopenharmony_ci		osd ?? unknown
342762306a36Sopenharmony_ci		Must be 1
342862306a36Sopenharmony_ci
342962306a36Sopenharmony_ci	bit 13
343062306a36Sopenharmony_ci		osd colour space
343162306a36Sopenharmony_ci		0 = ARGB
343262306a36Sopenharmony_ci		1 = AYVU
343362306a36Sopenharmony_ci
343462306a36Sopenharmony_ci	bits 16:31
343562306a36Sopenharmony_ci		osd ?? unknown
343662306a36Sopenharmony_ci		Must be 0x001B (some kind of buffer pointer ?)
343762306a36Sopenharmony_ci
343862306a36Sopenharmony_ci	When the bits-per-pixel is set to 8, the colour mode is ignored and
343962306a36Sopenharmony_ci	assumed to be 8 bit indexed. For 16 & 32 bits-per-pixel the colour depth
344062306a36Sopenharmony_ci	is honoured, and when using a colour depth that requires fewer bytes than
344162306a36Sopenharmony_ci	allocated the extra bytes are used as padding. So for a 32 bpp with 8 bit
344262306a36Sopenharmony_ci	index colour, there are 3 padding bytes per pixel. It's also possible to
344362306a36Sopenharmony_ci	select 16bpp with a 32 bit colour mode. This results in the pixel width
344462306a36Sopenharmony_ci	being doubled, but the color key will not work as expected in this mode.
344562306a36Sopenharmony_ci
344662306a36Sopenharmony_ci	Colour key is as it suggests. You designate a colour which will become
344762306a36Sopenharmony_ci	completely transparent. When using 565, 555 or 444 colour modes, the
344862306a36Sopenharmony_ci	colour key is always 16 bits wide. The colour to key on is set in Reg 2A18.
344962306a36Sopenharmony_ci
345062306a36Sopenharmony_ci	Local alpha works differently depending on the colour mode. For 32bpp & 8
345162306a36Sopenharmony_ci	bit indexed, local alpha is a per-pixel 256 step transparency, with 0 being
345262306a36Sopenharmony_ci	transparent and 255 being solid. For the 16bpp modes 555 & 444, the unused
345362306a36Sopenharmony_ci	bit(s) act as a simple transparency switch, with 0 being solid & 1 being
345462306a36Sopenharmony_ci	fully transparent. There is no local alpha support for 16bit 565.
345562306a36Sopenharmony_ci
345662306a36Sopenharmony_ci	Global alpha is a 256 step transparency that applies to the entire osd,
345762306a36Sopenharmony_ci	with 0 being transparent & 255 being solid.
345862306a36Sopenharmony_ci
345962306a36Sopenharmony_ci	It's possible to combine colour key, local alpha & global alpha.
346062306a36Sopenharmony_ci	--------------------------------------------------------------------------------
346162306a36Sopenharmony_ci	2A04
346262306a36Sopenharmony_ci	bits 0:15
346362306a36Sopenharmony_ci		osd x coord for left edge
346462306a36Sopenharmony_ci
346562306a36Sopenharmony_ci	bits 16:31
346662306a36Sopenharmony_ci		osd y coord for top edge
346762306a36Sopenharmony_ci	---------------
346862306a36Sopenharmony_ci	2A08
346962306a36Sopenharmony_ci	bits 0:15
347062306a36Sopenharmony_ci		osd x coord for right edge
347162306a36Sopenharmony_ci
347262306a36Sopenharmony_ci	bits 16:31
347362306a36Sopenharmony_ci		osd y coord for bottom edge
347462306a36Sopenharmony_ci
347562306a36Sopenharmony_ci	For both registers, (0,0) = top left corner of the display area. These
347662306a36Sopenharmony_ci	registers do not control the osd size, only where it's positioned & how
347762306a36Sopenharmony_ci	much is visible. The visible osd area cannot exceed the right edge of the
347862306a36Sopenharmony_ci	display, otherwise the osd will become corrupt. See reg 2A10 for
347962306a36Sopenharmony_ci	setting osd width.
348062306a36Sopenharmony_ci	--------------------------------------------------------------------------------
348162306a36Sopenharmony_ci	2A0C
348262306a36Sopenharmony_ci	bits 0:31
348362306a36Sopenharmony_ci		osd buffer index
348462306a36Sopenharmony_ci
348562306a36Sopenharmony_ci	An index into the osd buffer. Slowly incrementing this moves the osd left,
348662306a36Sopenharmony_ci	wrapping around onto the right edge
348762306a36Sopenharmony_ci	--------------------------------------------------------------------------------
348862306a36Sopenharmony_ci	2A10
348962306a36Sopenharmony_ci	bits 0:11
349062306a36Sopenharmony_ci		osd buffer 32 bit word width
349162306a36Sopenharmony_ci
349262306a36Sopenharmony_ci	Contains the width of the osd measured in 32 bit words. This means that all
349362306a36Sopenharmony_ci	colour modes are restricted to a byte width which is divisible by 4.
349462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
349562306a36Sopenharmony_ci	2A14
349662306a36Sopenharmony_ci	bits 0:15
349762306a36Sopenharmony_ci		osd height in pixels
349862306a36Sopenharmony_ci
349962306a36Sopenharmony_ci	bits 16:32
350062306a36Sopenharmony_ci		osd line index into buffer
350162306a36Sopenharmony_ci		osd will start displaying from this line.
350262306a36Sopenharmony_ci	--------------------------------------------------------------------------------
350362306a36Sopenharmony_ci	2A18
350462306a36Sopenharmony_ci	bits 0:31
350562306a36Sopenharmony_ci		osd colour key
350662306a36Sopenharmony_ci
350762306a36Sopenharmony_ci	Contains the colour value which will be transparent.
350862306a36Sopenharmony_ci	--------------------------------------------------------------------------------
350962306a36Sopenharmony_ci	2A1C
351062306a36Sopenharmony_ci	bits 0:7
351162306a36Sopenharmony_ci		osd global alpha
351262306a36Sopenharmony_ci
351362306a36Sopenharmony_ci	Contains the global alpha value (equiv ivtvfbctl --alpha XX)
351462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
351562306a36Sopenharmony_ci	2A20  --------    ?? unknown
351662306a36Sopenharmony_ci	|
351762306a36Sopenharmony_ci	V
351862306a36Sopenharmony_ci	2A2C  --------    ?? unknown
351962306a36Sopenharmony_ci	--------------------------------------------------------------------------------
352062306a36Sopenharmony_ci	2A30
352162306a36Sopenharmony_ci	bits 0:7
352262306a36Sopenharmony_ci		osd colour to change in indexed palette
352362306a36Sopenharmony_ci	---------------
352462306a36Sopenharmony_ci	2A34
352562306a36Sopenharmony_ci	bits 0:31
352662306a36Sopenharmony_ci		osd colour for indexed palette
352762306a36Sopenharmony_ci
352862306a36Sopenharmony_ci	To set the new palette, first load the index of the colour to change into
352962306a36Sopenharmony_ci	2A30, then load the new colour into 2A34. The full palette is 256 colours,
353062306a36Sopenharmony_ci	so the index range is 0x00-0xFF
353162306a36Sopenharmony_ci	--------------------------------------------------------------------------------
353262306a36Sopenharmony_ci	2A38  --------    ?? unknown
353362306a36Sopenharmony_ci	2A3C  --------    ?? unknown
353462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
353562306a36Sopenharmony_ci	2A40
353662306a36Sopenharmony_ci	bits 0:31
353762306a36Sopenharmony_ci		osd ?? unknown
353862306a36Sopenharmony_ci
353962306a36Sopenharmony_ci	Affects overall brightness, wrapping around to black
354062306a36Sopenharmony_ci	--------------------------------------------------------------------------------
354162306a36Sopenharmony_ci	2A44
354262306a36Sopenharmony_ci	bits 0:31
354362306a36Sopenharmony_ci		osd ?? unknown
354462306a36Sopenharmony_ci
354562306a36Sopenharmony_ci	Green tint
354662306a36Sopenharmony_ci	--------------------------------------------------------------------------------
354762306a36Sopenharmony_ci	2A48
354862306a36Sopenharmony_ci	bits 0:31
354962306a36Sopenharmony_ci		osd ?? unknown
355062306a36Sopenharmony_ci
355162306a36Sopenharmony_ci	Red tint
355262306a36Sopenharmony_ci	--------------------------------------------------------------------------------
355362306a36Sopenharmony_ci	2A4C
355462306a36Sopenharmony_ci	bits 0:31
355562306a36Sopenharmony_ci		osd ?? unknown
355662306a36Sopenharmony_ci
355762306a36Sopenharmony_ci	Affects overall brightness, wrapping around to black
355862306a36Sopenharmony_ci	--------------------------------------------------------------------------------
355962306a36Sopenharmony_ci	2A50
356062306a36Sopenharmony_ci	bits 0:31
356162306a36Sopenharmony_ci		osd ?? unknown
356262306a36Sopenharmony_ci
356362306a36Sopenharmony_ci	Colour shift
356462306a36Sopenharmony_ci	--------------------------------------------------------------------------------
356562306a36Sopenharmony_ci	2A54
356662306a36Sopenharmony_ci	bits 0:31
356762306a36Sopenharmony_ci		osd ?? unknown
356862306a36Sopenharmony_ci
356962306a36Sopenharmony_ci	Colour shift
357062306a36Sopenharmony_ci	--------------------------------------------------------------------------------
357162306a36Sopenharmony_ci	2A58  --------    ?? unknown
357262306a36Sopenharmony_ci	|
357362306a36Sopenharmony_ci	V
357462306a36Sopenharmony_ci	2AFC  --------    ?? unknown
357562306a36Sopenharmony_ci	--------------------------------------------------------------------------------
357662306a36Sopenharmony_ci	2B00
357762306a36Sopenharmony_ci	bit 0
357862306a36Sopenharmony_ci		osd filter control
357962306a36Sopenharmony_ci		0 = filter off
358062306a36Sopenharmony_ci		1 = filter on
358162306a36Sopenharmony_ci
358262306a36Sopenharmony_ci	bits 1:4
358362306a36Sopenharmony_ci		osd ?? unknown
358462306a36Sopenharmony_ci
358562306a36Sopenharmony_ci	--------------------------------------------------------------------------------
358662306a36Sopenharmony_ci
358762306a36Sopenharmony_ciThe cx231xx DMA engine
358862306a36Sopenharmony_ci----------------------
358962306a36Sopenharmony_ci
359062306a36Sopenharmony_ci
359162306a36Sopenharmony_ciThis page describes the structures and procedures used by the cx2341x DMA
359262306a36Sopenharmony_ciengine.
359362306a36Sopenharmony_ci
359462306a36Sopenharmony_ciIntroduction
359562306a36Sopenharmony_ci~~~~~~~~~~~~
359662306a36Sopenharmony_ci
359762306a36Sopenharmony_ciThe cx2341x PCI interface is busmaster capable. This means it has a DMA
359862306a36Sopenharmony_ciengine to efficiently transfer large volumes of data between the card and main
359962306a36Sopenharmony_cimemory without requiring help from a CPU. Like most hardware, it must operate
360062306a36Sopenharmony_cion contiguous physical memory. This is difficult to come by in large quantities
360162306a36Sopenharmony_cion virtual memory machines.
360262306a36Sopenharmony_ci
360362306a36Sopenharmony_ciTherefore, it also supports a technique called "scatter-gather". The card can
360462306a36Sopenharmony_citransfer multiple buffers in one operation. Instead of allocating one large
360562306a36Sopenharmony_cicontiguous buffer, the driver can allocate several smaller buffers.
360662306a36Sopenharmony_ci
360762306a36Sopenharmony_ciIn practice, I've seen the average transfer to be roughly 80K, but transfers
360862306a36Sopenharmony_ciabove 128K were not uncommon, particularly at startup. The 128K figure is
360962306a36Sopenharmony_ciimportant, because that is the largest block that the kernel can normally
361062306a36Sopenharmony_ciallocate. Even still, 128K blocks are hard to come by, so the driver writer is
361162306a36Sopenharmony_ciurged to choose a smaller block size and learn the scatter-gather technique.
361262306a36Sopenharmony_ci
361362306a36Sopenharmony_ciMailbox #10 is reserved for DMA transfer information.
361462306a36Sopenharmony_ci
361562306a36Sopenharmony_ciNote: the hardware expects little-endian data ('intel format').
361662306a36Sopenharmony_ci
361762306a36Sopenharmony_ciFlow
361862306a36Sopenharmony_ci~~~~
361962306a36Sopenharmony_ci
362062306a36Sopenharmony_ciThis section describes, in general, the order of events when handling DMA
362162306a36Sopenharmony_citransfers. Detailed information follows this section.
362262306a36Sopenharmony_ci
362362306a36Sopenharmony_ci- The card raises the Encoder interrupt.
362462306a36Sopenharmony_ci- The driver reads the transfer type, offset and size from Mailbox #10.
362562306a36Sopenharmony_ci- The driver constructs the scatter-gather array from enough free dma buffers
362662306a36Sopenharmony_ci  to cover the size.
362762306a36Sopenharmony_ci- The driver schedules the DMA transfer via the ScheduleDMAtoHost API call.
362862306a36Sopenharmony_ci- The card raises the DMA Complete interrupt.
362962306a36Sopenharmony_ci- The driver checks the DMA status register for any errors.
363062306a36Sopenharmony_ci- The driver post-processes the newly transferred buffers.
363162306a36Sopenharmony_ci
363262306a36Sopenharmony_ciNOTE! It is possible that the Encoder and DMA Complete interrupts get raised
363362306a36Sopenharmony_cisimultaneously. (End of the last, start of the next, etc.)
363462306a36Sopenharmony_ci
363562306a36Sopenharmony_ciMailbox #10
363662306a36Sopenharmony_ci~~~~~~~~~~~
363762306a36Sopenharmony_ci
363862306a36Sopenharmony_ciThe Flags, Command, Return Value and Timeout fields are ignored.
363962306a36Sopenharmony_ci
364062306a36Sopenharmony_ci- Name:       Mailbox #10
364162306a36Sopenharmony_ci- Results[0]: Type: 0: MPEG.
364262306a36Sopenharmony_ci- Results[1]: Offset: The position relative to the card's memory space.
364362306a36Sopenharmony_ci- Results[2]: Size: The exact number of bytes to transfer.
364462306a36Sopenharmony_ci
364562306a36Sopenharmony_ciMy speculation is that since the StartCapture API has a capture type of "RAW"
364662306a36Sopenharmony_ciavailable, that the type field will have other values that correspond to YUV
364762306a36Sopenharmony_ciand PCM data.
364862306a36Sopenharmony_ci
364962306a36Sopenharmony_ciScatter-Gather Array
365062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~
365162306a36Sopenharmony_ci
365262306a36Sopenharmony_ciThe scatter-gather array is a contiguously allocated block of memory that
365362306a36Sopenharmony_citells the card the source and destination of each data-block to transfer.
365462306a36Sopenharmony_ciCard "addresses" are derived from the offset supplied by Mailbox #10. Host
365562306a36Sopenharmony_ciaddresses are the physical memory location of the target DMA buffer.
365662306a36Sopenharmony_ci
365762306a36Sopenharmony_ciEach S-G array element is a struct of three 32-bit words. The first word is
365862306a36Sopenharmony_cithe source address, the second is the destination address. Both take up the
365962306a36Sopenharmony_cientire 32 bits. The lowest 18 bits of the third word is the transfer byte
366062306a36Sopenharmony_cicount. The high-bit of the third word is the "last" flag. The last-flag tells
366162306a36Sopenharmony_cithe card to raise the DMA_DONE interrupt. From hard personal experience, if
366262306a36Sopenharmony_ciyou forget to set this bit, the card will still "work" but the stream will
366362306a36Sopenharmony_cimost likely get corrupted.
366462306a36Sopenharmony_ci
366562306a36Sopenharmony_ciThe transfer count must be a multiple of 256. Therefore, the driver will need
366662306a36Sopenharmony_cito track how much data in the target buffer is valid and deal with it
366762306a36Sopenharmony_ciaccordingly.
366862306a36Sopenharmony_ci
366962306a36Sopenharmony_ciArray Element:
367062306a36Sopenharmony_ci
367162306a36Sopenharmony_ci- 32-bit Source Address
367262306a36Sopenharmony_ci- 32-bit Destination Address
367362306a36Sopenharmony_ci- 14-bit reserved (high bit is the last flag)
367462306a36Sopenharmony_ci- 18-bit byte count
367562306a36Sopenharmony_ci
367662306a36Sopenharmony_ciDMA Transfer Status
367762306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~
367862306a36Sopenharmony_ci
367962306a36Sopenharmony_ciRegister 0x0004 holds the DMA Transfer Status:
368062306a36Sopenharmony_ci
368162306a36Sopenharmony_ci- bit 0:   read completed
368262306a36Sopenharmony_ci- bit 1:   write completed
368362306a36Sopenharmony_ci- bit 2:   DMA read error
368462306a36Sopenharmony_ci- bit 3:   DMA write error
368562306a36Sopenharmony_ci- bit 4:   Scatter-Gather array error
3686