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