The cx2341x driver
==================

Memory at cx2341x chips
-----------------------

This section describes the cx2341x memory map and documents some of the
register space.

.. note:: the memory long words are little-endian ('intel format').

.. warning::

	This information was figured out from searching through the memory
	and registers, this information may not be correct and is certainly
	not complete, and was not derived from anything more than searching
	through the memory space with commands like:

	.. code-block:: none

		ivtvctl -O min=0x02000000,max=0x020000ff

	So take this as is, I'm always searching for more stuff, it's a large
	register space :-).

Memory Map
~~~~~~~~~~

The cx2341x exposes its entire 64M memory space to the PCI host via the PCI BAR0
(Base Address Register 0). The addresses here are offsets relative to the
address held in BAR0.

.. code-block:: none

	0x00000000-0x00ffffff Encoder memory space
	0x00000000-0x0003ffff Encode.rom
	???-???         MPEG buffer(s)
	???-???         Raw video capture buffer(s)
	???-???         Raw audio capture buffer(s)
	???-???         Display buffers (6 or 9)

	0x01000000-0x01ffffff Decoder memory space
	0x01000000-0x0103ffff Decode.rom
	???-???         MPEG buffers(s)
	0x0114b000-0x0115afff Audio.rom (deprecated?)

	0x02000000-0x0200ffff Register Space

Registers
~~~~~~~~~

The registers occupy the 64k space starting at the 0x02000000 offset from BAR0.
All of these registers are 32 bits wide.

.. code-block:: none

	DMA Registers 0x000-0xff:

	0x00 - Control:
		0=reset/cancel, 1=read, 2=write, 4=stop
	0x04 - DMA status:
		1=read busy, 2=write busy, 4=read error, 8=write error, 16=link list error
	0x08 - pci DMA pointer for read link list
	0x0c - pci DMA pointer for write link list
	0x10 - read/write DMA enable:
		1=read enable, 2=write enable
	0x14 - always 0xffffffff, if set any lower instability occurs, 0x00 crashes
	0x18 - ??
	0x1c - always 0x20 or 32, smaller values slow down DMA transactions
	0x20 - always value of 0x780a010a
	0x24-0x3c - usually just random values???
	0x40 - Interrupt status
	0x44 - Write a bit here and shows up in Interrupt status 0x40
	0x48 - Interrupt Mask
	0x4C - always value of 0xfffdffff,
		if changed to 0xffffffff DMA write interrupts break.
	0x50 - always 0xffffffff
	0x54 - always 0xffffffff (0x4c, 0x50, 0x54 seem like interrupt masks, are
		3 processors on chip, Java ones, VPU, SPU, APU, maybe these are the
		interrupt masks???).
	0x60-0x7C - random values
	0x80 - first write linked list reg, for Encoder Memory addr
	0x84 - first write linked list reg, for pci memory addr
	0x88 - first write linked list reg, for length of buffer in memory addr
		(|0x80000000 or this for last link)
	0x8c-0xdc - rest of write linked list reg, 8 sets of 3 total, DMA goes here
		from linked list addr in reg 0x0c, firmware must push through or
		something.
	0xe0 - first (and only) read linked list reg, for pci memory addr
	0xe4 - first (and only) read linked list reg, for Decoder memory addr
	0xe8 - first (and only) read linked list reg, for length of buffer
	0xec-0xff - Nothing seems to be in these registers, 0xec-f4 are 0x00000000.

Memory locations for Encoder Buffers 0x700-0x7ff:

These registers show offsets of memory locations pertaining to each
buffer area used for encoding, have to shift them by <<1 first.

- 0x07F8: Encoder SDRAM refresh
- 0x07FC: Encoder SDRAM pre-charge

Memory locations for Decoder Buffers 0x800-0x8ff:

These registers show offsets of memory locations pertaining to each
buffer area used for decoding, have to shift them by <<1 first.

- 0x08F8: Decoder SDRAM refresh
- 0x08FC: Decoder SDRAM pre-charge

Other memory locations:

- 0x2800: Video Display Module control
- 0x2D00: AO (audio output?) control
- 0x2D24: Bytes Flushed
- 0x7000: LSB I2C write clock bit (inverted)
- 0x7004: LSB I2C write data bit (inverted)
- 0x7008: LSB I2C read clock bit
- 0x700c: LSB I2C read data bit
- 0x9008: GPIO get input state
- 0x900c: GPIO set output state
- 0x9020: GPIO direction (Bit7 (GPIO 0..7) - 0:input, 1:output)
- 0x9050: SPU control
- 0x9054: Reset HW blocks
- 0x9058: VPU control
- 0xA018: Bit6: interrupt pending?
- 0xA064: APU command


Interrupt Status Register
~~~~~~~~~~~~~~~~~~~~~~~~~

The definition of the bits in the interrupt status register 0x0040, and the
interrupt mask 0x0048. If a bit is cleared in the mask, then we want our ISR to
execute.

- bit 31 Encoder Start Capture
- bit 30 Encoder EOS
- bit 29 Encoder VBI capture
- bit 28 Encoder Video Input Module reset event
- bit 27 Encoder DMA complete
- bit 24 Decoder audio mode change detection event (through event notification)
- bit 22 Decoder data request
- bit 20 Decoder DMA complete
- bit 19 Decoder VBI re-insertion
- bit 18 Decoder DMA err (linked-list bad)

Missing documentation
---------------------

- Encoder API post(?)
- Decoder API post(?)
- Decoder VTRACE event


The cx2341x firmware upload
---------------------------

This document describes how to upload the cx2341x firmware to the card.

How to find
~~~~~~~~~~~

See the web pages of the various projects that uses this chip for information
on how to obtain the firmware.

The firmware stored in a Windows driver can be detected as follows:

- Each firmware image is 256k bytes.
- The 1st 32-bit word of the Encoder image is 0x0000da7
- The 1st 32-bit word of the Decoder image is 0x00003a7
- The 2nd 32-bit word of both images is 0xaa55bb66

How to load
~~~~~~~~~~~

- Issue the FWapi command to stop the encoder if it is running. Wait for the
  command to complete.
- Issue the FWapi command to stop the decoder if it is running. Wait for the
  command to complete.
- Issue the I2C command to the digitizer to stop emitting VSYNC events.
- Issue the FWapi command to halt the encoder's firmware.
- Sleep for 10ms.
- Issue the FWapi command to halt the decoder's firmware.
- Sleep for 10ms.
- Write 0x00000000 to register 0x2800 to stop the Video Display Module.
- Write 0x00000005 to register 0x2D00 to stop the AO (audio output?).
- Write 0x00000000 to register 0xA064 to ping? the APU.
- Write 0xFFFFFFFE to register 0x9058 to stop the VPU.
- Write 0xFFFFFFFF to register 0x9054 to reset the HW blocks.
- Write 0x00000001 to register 0x9050 to stop the SPU.
- Sleep for 10ms.
- Write 0x0000001A to register 0x07FC to init the Encoder SDRAM's pre-charge.
- Write 0x80000640 to register 0x07F8 to init the Encoder SDRAM's refresh to 1us.
- Write 0x0000001A to register 0x08FC to init the Decoder SDRAM's pre-charge.
- Write 0x80000640 to register 0x08F8 to init the Decoder SDRAM's refresh to 1us.
- Sleep for 512ms. (600ms is recommended)
- Transfer the encoder's firmware image to offset 0 in Encoder memory space.
- Transfer the decoder's firmware image to offset 0 in Decoder memory space.
- Use a read-modify-write operation to Clear bit 0 of register 0x9050 to
  re-enable the SPU.
- Sleep for 1 second.
- Use a read-modify-write operation to Clear bits 3 and 0 of register 0x9058
  to re-enable the VPU.
- Sleep for 1 second.
- Issue status API commands to both firmware images to verify.


How to call the firmware API
----------------------------

The preferred calling convention is known as the firmware mailbox. The
mailboxes are basically a fixed length array that serves as the call-stack.

Firmware mailboxes can be located by searching the encoder and decoder memory
for a 16 byte signature. That signature will be located on a 256-byte boundary.

Signature:

.. code-block:: none

	0x78, 0x56, 0x34, 0x12, 0x12, 0x78, 0x56, 0x34,
	0x34, 0x12, 0x78, 0x56, 0x56, 0x34, 0x12, 0x78

The firmware implements 20 mailboxes of 20 32-bit words. The first 10 are
reserved for API calls. The second 10 are used by the firmware for event
notification.

  ====== =================
  Index  Name
  ====== =================
  0      Flags
  1      Command
  2      Return value
  3      Timeout
  4-19   Parameter/Result
  ====== =================


The flags are defined in the following table. The direction is from the
perspective of the firmware.

  ==== ========== ============================================
  Bit  Direction  Purpose
  ==== ========== ============================================
  2    O          Firmware has processed the command.
  1    I          Driver has finished setting the parameters.
  0    I          Driver is using this mailbox.
  ==== ========== ============================================

The command is a 32-bit enumerator. The API specifics may be found in this
chapter.

The return value is a 32-bit enumerator. Only two values are currently defined:

- 0=success
- -1=command undefined.

There are 16 parameters/results 32-bit fields. The driver populates these fields
with values for all the parameters required by the call. The driver overwrites
these fields with result values returned by the call.

The timeout value protects the card from a hung driver thread. If the driver
doesn't handle the completed call within the timeout specified, the firmware
will reset that mailbox.

To make an API call, the driver iterates over each mailbox looking for the
first one available (bit 0 has been cleared). The driver sets that bit, fills
in the command enumerator, the timeout value and any required parameters. The
driver then sets the parameter ready bit (bit 1). The firmware scans the
mailboxes for pending commands, processes them, sets the result code, populates
the result value array with that call's return values and sets the call
complete bit (bit 2). Once bit 2 is set, the driver should retrieve the results
and clear all the flags. If the driver does not perform this task within the
time set in the timeout register, the firmware will reset that mailbox.

Event notifications are sent from the firmware to the host. The host tells the
firmware which events it is interested in via an API call. That call tells the
firmware which notification mailbox to use. The firmware signals the host via
an interrupt. Only the 16 Results fields are used, the Flags, Command, Return
value and Timeout words are not used.


OSD firmware API description
----------------------------

.. note:: this API is part of the decoder firmware, so it's cx23415 only.



CX2341X_OSD_GET_FRAMEBUFFER
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 65/0x41

Description
^^^^^^^^^^^

Return base and length of contiguous OSD memory.

Result[0]
^^^^^^^^^

OSD base address

Result[1]
^^^^^^^^^

OSD length



CX2341X_OSD_GET_PIXEL_FORMAT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 66/0x42

Description
^^^^^^^^^^^

Query OSD format

Result[0]
^^^^^^^^^

0=8bit index
1=16bit RGB 5:6:5
2=16bit ARGB 1:5:5:5
3=16bit ARGB 1:4:4:4
4=32bit ARGB 8:8:8:8



CX2341X_OSD_SET_PIXEL_FORMAT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 67/0x43

Description
^^^^^^^^^^^

Assign pixel format

Param[0]
^^^^^^^^

- 0=8bit index
- 1=16bit RGB 5:6:5
- 2=16bit ARGB 1:5:5:5
- 3=16bit ARGB 1:4:4:4
- 4=32bit ARGB 8:8:8:8



CX2341X_OSD_GET_STATE
~~~~~~~~~~~~~~~~~~~~~

Enum: 68/0x44

Description
^^^^^^^^^^^

Query OSD state

Result[0]
^^^^^^^^^

- Bit  0   0=off, 1=on
- Bits 1:2 alpha control
- Bits 3:5 pixel format



CX2341X_OSD_SET_STATE
~~~~~~~~~~~~~~~~~~~~~

Enum: 69/0x45

Description
^^^^^^^^^^^

OSD switch

Param[0]
^^^^^^^^

0=off, 1=on



CX2341X_OSD_GET_OSD_COORDS
~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 70/0x46

Description
^^^^^^^^^^^

Retrieve coordinates of OSD area blended with video

Result[0]
^^^^^^^^^

OSD buffer address

Result[1]
^^^^^^^^^

Stride in pixels

Result[2]
^^^^^^^^^

Lines in OSD buffer

Result[3]
^^^^^^^^^

Horizontal offset in buffer

Result[4]
^^^^^^^^^

Vertical offset in buffer



CX2341X_OSD_SET_OSD_COORDS
~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 71/0x47

Description
^^^^^^^^^^^

Assign the coordinates of the OSD area to blend with video

Param[0]
^^^^^^^^

buffer address

Param[1]
^^^^^^^^

buffer stride in pixels

Param[2]
^^^^^^^^

lines in buffer

Param[3]
^^^^^^^^

horizontal offset

Param[4]
^^^^^^^^

vertical offset



CX2341X_OSD_GET_SCREEN_COORDS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 72/0x48

Description
^^^^^^^^^^^

Retrieve OSD screen area coordinates

Result[0]
^^^^^^^^^

top left horizontal offset

Result[1]
^^^^^^^^^

top left vertical offset

Result[2]
^^^^^^^^^

bottom right horizontal offset

Result[3]
^^^^^^^^^

bottom right vertical offset



CX2341X_OSD_SET_SCREEN_COORDS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 73/0x49

Description
^^^^^^^^^^^

Assign the coordinates of the screen area to blend with video

Param[0]
^^^^^^^^

top left horizontal offset

Param[1]
^^^^^^^^

top left vertical offset

Param[2]
^^^^^^^^

bottom left horizontal offset

Param[3]
^^^^^^^^

bottom left vertical offset



CX2341X_OSD_GET_GLOBAL_ALPHA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 74/0x4A

Description
^^^^^^^^^^^

Retrieve OSD global alpha

Result[0]
^^^^^^^^^

global alpha: 0=off, 1=on

Result[1]
^^^^^^^^^

bits 0:7 global alpha



CX2341X_OSD_SET_GLOBAL_ALPHA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 75/0x4B

Description
^^^^^^^^^^^

Update global alpha

Param[0]
^^^^^^^^

global alpha: 0=off, 1=on

Param[1]
^^^^^^^^

global alpha (8 bits)

Param[2]
^^^^^^^^

local alpha: 0=on, 1=off



CX2341X_OSD_SET_BLEND_COORDS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 78/0x4C

Description
^^^^^^^^^^^

Move start of blending area within display buffer

Param[0]
^^^^^^^^

horizontal offset in buffer

Param[1]
^^^^^^^^

vertical offset in buffer



CX2341X_OSD_GET_FLICKER_STATE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 79/0x4F

Description
^^^^^^^^^^^

Retrieve flicker reduction module state

Result[0]
^^^^^^^^^

flicker state: 0=off, 1=on



CX2341X_OSD_SET_FLICKER_STATE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 80/0x50

Description
^^^^^^^^^^^

Set flicker reduction module state

Param[0]
^^^^^^^^

State: 0=off, 1=on



CX2341X_OSD_BLT_COPY
~~~~~~~~~~~~~~~~~~~~

Enum: 82/0x52

Description
^^^^^^^^^^^

BLT copy

Param[0]
^^^^^^^^

.. code-block:: none

	'0000'  zero
	'0001' ~destination AND ~source
	'0010' ~destination AND  source
	'0011' ~destination
	'0100'  destination AND ~source
	'0101'                  ~source
	'0110'  destination XOR  source
	'0111' ~destination OR  ~source
	'1000' ~destination AND ~source
	'1001'  destination XNOR source
	'1010'                   source
	'1011' ~destination OR   source
	'1100'  destination
	'1101'  destination OR  ~source
	'1110'  destination OR   source
	'1111'  one


Param[1]
^^^^^^^^

Resulting alpha blending

- '01' source_alpha
- '10' destination_alpha
- '11' source_alpha*destination_alpha+1
  (zero if both source and destination alpha are zero)

Param[2]
^^^^^^^^

.. code-block:: none

	'00' output_pixel = source_pixel

	'01' if source_alpha=0:
		 output_pixel = destination_pixel
	     if 256 > source_alpha > 1:
		 output_pixel = ((source_alpha + 1)*source_pixel +
				 (255 - source_alpha)*destination_pixel)/256

	'10' if destination_alpha=0:
		 output_pixel = source_pixel
	      if 255 > destination_alpha > 0:
		 output_pixel = ((255 - destination_alpha)*source_pixel +
				 (destination_alpha + 1)*destination_pixel)/256

	'11' if source_alpha=0:
		 source_temp = 0
	     if source_alpha=255:
		 source_temp = source_pixel*256
	     if 255 > source_alpha > 0:
		 source_temp = source_pixel*(source_alpha + 1)
	     if destination_alpha=0:
		 destination_temp = 0
	     if destination_alpha=255:
		 destination_temp = destination_pixel*256
	     if 255 > destination_alpha > 0:
		 destination_temp = destination_pixel*(destination_alpha + 1)
	     output_pixel = (source_temp + destination_temp)/256

Param[3]
^^^^^^^^

width

Param[4]
^^^^^^^^

height

Param[5]
^^^^^^^^

destination pixel mask

Param[6]
^^^^^^^^

destination rectangle start address

Param[7]
^^^^^^^^

destination stride in dwords

Param[8]
^^^^^^^^

source stride in dwords

Param[9]
^^^^^^^^

source rectangle start address



CX2341X_OSD_BLT_FILL
~~~~~~~~~~~~~~~~~~~~

Enum: 83/0x53

Description
^^^^^^^^^^^

BLT fill color

Param[0]
^^^^^^^^

Same as Param[0] on API 0x52

Param[1]
^^^^^^^^

Same as Param[1] on API 0x52

Param[2]
^^^^^^^^

Same as Param[2] on API 0x52

Param[3]
^^^^^^^^

width

Param[4]
^^^^^^^^

height

Param[5]
^^^^^^^^

destination pixel mask

Param[6]
^^^^^^^^

destination rectangle start address

Param[7]
^^^^^^^^

destination stride in dwords

Param[8]
^^^^^^^^

color fill value



CX2341X_OSD_BLT_TEXT
~~~~~~~~~~~~~~~~~~~~

Enum: 84/0x54

Description
^^^^^^^^^^^

BLT for 8 bit alpha text source

Param[0]
^^^^^^^^

Same as Param[0] on API 0x52

Param[1]
^^^^^^^^

Same as Param[1] on API 0x52

Param[2]
^^^^^^^^

Same as Param[2] on API 0x52

Param[3]
^^^^^^^^

width

Param[4]
^^^^^^^^

height

Param[5]
^^^^^^^^

destination pixel mask

Param[6]
^^^^^^^^

destination rectangle start address

Param[7]
^^^^^^^^

destination stride in dwords

Param[8]
^^^^^^^^

source stride in dwords

Param[9]
^^^^^^^^

source rectangle start address

Param[10]
^^^^^^^^^

color fill value



CX2341X_OSD_SET_FRAMEBUFFER_WINDOW
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 86/0x56

Description
^^^^^^^^^^^

Positions the main output window on the screen. The coordinates must be
such that the entire window fits on the screen.

Param[0]
^^^^^^^^

window width

Param[1]
^^^^^^^^

window height

Param[2]
^^^^^^^^

top left window corner horizontal offset

Param[3]
^^^^^^^^

top left window corner vertical offset



CX2341X_OSD_SET_CHROMA_KEY
~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 96/0x60

Description
^^^^^^^^^^^

Chroma key switch and color

Param[0]
^^^^^^^^

state: 0=off, 1=on

Param[1]
^^^^^^^^

color



CX2341X_OSD_GET_ALPHA_CONTENT_INDEX
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 97/0x61

Description
^^^^^^^^^^^

Retrieve alpha content index

Result[0]
^^^^^^^^^

alpha content index, Range 0:15



CX2341X_OSD_SET_ALPHA_CONTENT_INDEX
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 98/0x62

Description
^^^^^^^^^^^

Assign alpha content index

Param[0]
^^^^^^^^

alpha content index, range 0:15


Encoder firmware API description
--------------------------------

CX2341X_ENC_PING_FW
~~~~~~~~~~~~~~~~~~~

Enum: 128/0x80

Description
^^^^^^^^^^^

Does nothing. Can be used to check if the firmware is responding.



CX2341X_ENC_START_CAPTURE
~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 129/0x81

Description
^^^^^^^^^^^

Commences the capture of video, audio and/or VBI data. All encoding
parameters must be initialized prior to this API call. Captures frames
continuously or until a predefined number of frames have been captured.

Param[0]
^^^^^^^^

Capture stream type:

	- 0=MPEG
	- 1=Raw
	- 2=Raw passthrough
	- 3=VBI


Param[1]
^^^^^^^^

Bitmask:

	- Bit 0 when set, captures YUV
	- Bit 1 when set, captures PCM audio
	- Bit 2 when set, captures VBI (same as param[0]=3)
	- Bit 3 when set, the capture destination is the decoder
	  (same as param[0]=2)
	- Bit 4 when set, the capture destination is the host

.. note:: this parameter is only meaningful for RAW capture type.



CX2341X_ENC_STOP_CAPTURE
~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 130/0x82

Description
^^^^^^^^^^^

Ends a capture in progress

Param[0]
^^^^^^^^

- 0=stop at end of GOP (generates IRQ)
- 1=stop immediate (no IRQ)

Param[1]
^^^^^^^^

Stream type to stop, see param[0] of API 0x81

Param[2]
^^^^^^^^

Subtype, see param[1] of API 0x81



CX2341X_ENC_SET_AUDIO_ID
~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 137/0x89

Description
^^^^^^^^^^^

Assigns the transport stream ID of the encoded audio stream

Param[0]
^^^^^^^^

Audio Stream ID



CX2341X_ENC_SET_VIDEO_ID
~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 139/0x8B

Description
^^^^^^^^^^^

Set video transport stream ID

Param[0]
^^^^^^^^

Video stream ID



CX2341X_ENC_SET_PCR_ID
~~~~~~~~~~~~~~~~~~~~~~

Enum: 141/0x8D

Description
^^^^^^^^^^^

Assigns the transport stream ID for PCR packets

Param[0]
^^^^^^^^

PCR Stream ID



CX2341X_ENC_SET_FRAME_RATE
~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 143/0x8F

Description
^^^^^^^^^^^

Set video frames per second. Change occurs at start of new GOP.

Param[0]
^^^^^^^^

- 0=30fps
- 1=25fps



CX2341X_ENC_SET_FRAME_SIZE
~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 145/0x91

Description
^^^^^^^^^^^

Select video stream encoding resolution.

Param[0]
^^^^^^^^

Height in lines. Default 480

Param[1]
^^^^^^^^

Width in pixels. Default 720



CX2341X_ENC_SET_BIT_RATE
~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 149/0x95

Description
^^^^^^^^^^^

Assign average video stream bitrate.

Param[0]
^^^^^^^^

0=variable bitrate, 1=constant bitrate

Param[1]
^^^^^^^^

bitrate in bits per second

Param[2]
^^^^^^^^

peak bitrate in bits per second, divided by 400

Param[3]
^^^^^^^^

Mux bitrate in bits per second, divided by 400. May be 0 (default).

Param[4]
^^^^^^^^

Rate Control VBR Padding

Param[5]
^^^^^^^^

VBV Buffer used by encoder

.. note::

	#) Param\[3\] and Param\[4\] seem to be always 0
	#) Param\[5\] doesn't seem to be used.



CX2341X_ENC_SET_GOP_PROPERTIES
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 151/0x97

Description
^^^^^^^^^^^

Setup the GOP structure

Param[0]
^^^^^^^^

GOP size (maximum is 34)

Param[1]
^^^^^^^^

Number of B frames between the I and P frame, plus 1.
For example: IBBPBBPBBPBB --> GOP size: 12, number of B frames: 2+1 = 3

.. note::

	GOP size must be a multiple of (B-frames + 1).



CX2341X_ENC_SET_ASPECT_RATIO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 153/0x99

Description
^^^^^^^^^^^

Sets the encoding aspect ratio. Changes in the aspect ratio take effect
at the start of the next GOP.

Param[0]
^^^^^^^^

- '0000' forbidden
- '0001' 1:1 square
- '0010' 4:3
- '0011' 16:9
- '0100' 2.21:1
- '0101' to '1111' reserved



CX2341X_ENC_SET_DNR_FILTER_MODE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 155/0x9B

Description
^^^^^^^^^^^

Assign Dynamic Noise Reduction operating mode

Param[0]
^^^^^^^^

Bit0: Spatial filter, set=auto, clear=manual
Bit1: Temporal filter, set=auto, clear=manual

Param[1]
^^^^^^^^

Median filter:

- 0=Disabled
- 1=Horizontal
- 2=Vertical
- 3=Horiz/Vert
- 4=Diagonal



CX2341X_ENC_SET_DNR_FILTER_PROPS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 157/0x9D

Description
^^^^^^^^^^^

These Dynamic Noise Reduction filter values are only meaningful when
the respective filter is set to "manual" (See API 0x9B)

Param[0]
^^^^^^^^

Spatial filter: default 0, range 0:15

Param[1]
^^^^^^^^

Temporal filter: default 0, range 0:31



CX2341X_ENC_SET_CORING_LEVELS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 159/0x9F

Description
^^^^^^^^^^^

Assign Dynamic Noise Reduction median filter properties.

Param[0]
^^^^^^^^

Threshold above which the luminance median filter is enabled.
Default: 0, range 0:255

Param[1]
^^^^^^^^

Threshold below which the luminance median filter is enabled.
Default: 255, range 0:255

Param[2]
^^^^^^^^

Threshold above which the chrominance median filter is enabled.
Default: 0, range 0:255

Param[3]
^^^^^^^^

Threshold below which the chrominance median filter is enabled.
Default: 255, range 0:255



CX2341X_ENC_SET_SPATIAL_FILTER_TYPE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 161/0xA1

Description
^^^^^^^^^^^

Assign spatial prefilter parameters

Param[0]
^^^^^^^^

Luminance filter

- 0=Off
- 1=1D Horizontal
- 2=1D Vertical
- 3=2D H/V Separable (default)
- 4=2D Symmetric non-separable

Param[1]
^^^^^^^^

Chrominance filter

- 0=Off
- 1=1D Horizontal (default)



CX2341X_ENC_SET_VBI_LINE
~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 183/0xB7

Description
^^^^^^^^^^^

Selects VBI line number.

Param[0]
^^^^^^^^

- Bits 0:4 	line number
- Bit  31		0=top_field, 1=bottom_field
- Bits 0:31 	all set specifies "all lines"

Param[1]
^^^^^^^^

VBI line information features: 0=disabled, 1=enabled

Param[2]
^^^^^^^^

Slicing: 0=None, 1=Closed Caption
Almost certainly not implemented. Set to 0.

Param[3]
^^^^^^^^

Luminance samples in this line.
Almost certainly not implemented. Set to 0.

Param[4]
^^^^^^^^

Chrominance samples in this line
Almost certainly not implemented. Set to 0.



CX2341X_ENC_SET_STREAM_TYPE
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 185/0xB9

Description
^^^^^^^^^^^

Assign stream type

.. note::

	Transport stream is not working in recent firmwares.
	And in older firmwares the timestamps in the TS seem to be
	unreliable.

Param[0]
^^^^^^^^

- 0=Program stream
- 1=Transport stream
- 2=MPEG1 stream
- 3=PES A/V stream
- 5=PES Video stream
- 7=PES Audio stream
- 10=DVD stream
- 11=VCD stream
- 12=SVCD stream
- 13=DVD_S1 stream
- 14=DVD_S2 stream



CX2341X_ENC_SET_OUTPUT_PORT
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 187/0xBB

Description
^^^^^^^^^^^

Assign stream output port. Normally 0 when the data is copied through
the PCI bus (DMA), and 1 when the data is streamed to another chip
(pvrusb and cx88-blackbird).

Param[0]
^^^^^^^^

- 0=Memory (default)
- 1=Streaming
- 2=Serial

Param[1]
^^^^^^^^

Unknown, but leaving this to 0 seems to work best. Indications are that
this might have to do with USB support, although passing anything but 0
only breaks things.



CX2341X_ENC_SET_AUDIO_PROPERTIES
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 189/0xBD

Description
^^^^^^^^^^^

Set audio stream properties, may be called while encoding is in progress.

.. note::

	All bitfields are consistent with ISO11172 documentation except
	bits 2:3 which ISO docs define as:

	- '11' Layer I
	- '10' Layer II
	- '01' Layer III
	- '00' Undefined

	This discrepancy may indicate a possible error in the documentation.
	Testing indicated that only Layer II is actually working, and that
	the minimum bitrate should be 192 kbps.

Param[0]
^^^^^^^^

Bitmask:

.. code-block:: none

	   0:1  '00' 44.1Khz
		'01' 48Khz
		'10' 32Khz
		'11' reserved

	   2:3  '01'=Layer I
		'10'=Layer II

	   4:7  Bitrate:
		     Index | Layer I     | Layer II
		     ------+-------------+------------
		    '0000' | free format | free format
		    '0001' |  32 kbit/s  |  32 kbit/s
		    '0010' |  64 kbit/s  |  48 kbit/s
		    '0011' |  96 kbit/s  |  56 kbit/s
		    '0100' | 128 kbit/s  |  64 kbit/s
		    '0101' | 160 kbit/s  |  80 kbit/s
		    '0110' | 192 kbit/s  |  96 kbit/s
		    '0111' | 224 kbit/s  | 112 kbit/s
		    '1000' | 256 kbit/s  | 128 kbit/s
		    '1001' | 288 kbit/s  | 160 kbit/s
		    '1010' | 320 kbit/s  | 192 kbit/s
		    '1011' | 352 kbit/s  | 224 kbit/s
		    '1100' | 384 kbit/s  | 256 kbit/s
		    '1101' | 416 kbit/s  | 320 kbit/s
		    '1110' | 448 kbit/s  | 384 kbit/s

		.. note::

			For Layer II, not all combinations of total bitrate
			and mode are allowed. See ISO11172-3 3-Annex B,
			Table 3-B.2

	   8:9  '00'=Stereo
		'01'=JointStereo
		'10'=Dual
		'11'=Mono

		.. note::

			The cx23415 cannot decode Joint Stereo properly.

	  10:11 Mode Extension used in joint_stereo mode.
		In Layer I and II they indicate which subbands are in
		intensity_stereo. All other subbands are coded in stereo.
		    '00' subbands 4-31 in intensity_stereo, bound==4
		    '01' subbands 8-31 in intensity_stereo, bound==8
		    '10' subbands 12-31 in intensity_stereo, bound==12
		    '11' subbands 16-31 in intensity_stereo, bound==16

	  12:13 Emphasis:
		    '00' None
		    '01' 50/15uS
		    '10' reserved
		    '11' CCITT J.17

	  14 	CRC:
		    '0' off
		    '1' on

	  15    Copyright:
		    '0' off
		    '1' on

	  16    Generation:
		    '0' copy
		    '1' original



CX2341X_ENC_HALT_FW
~~~~~~~~~~~~~~~~~~~

Enum: 195/0xC3

Description
^^^^^^^^^^^

The firmware is halted and no further API calls are serviced until the
firmware is uploaded again.



CX2341X_ENC_GET_VERSION
~~~~~~~~~~~~~~~~~~~~~~~

Enum: 196/0xC4

Description
^^^^^^^^^^^

Returns the version of the encoder firmware.

Result[0]
^^^^^^^^^

Version bitmask:
- Bits  0:15 build
- Bits 16:23 minor
- Bits 24:31 major



CX2341X_ENC_SET_GOP_CLOSURE
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 197/0xC5

Description
^^^^^^^^^^^

Assigns the GOP open/close property.

Param[0]
^^^^^^^^

- 0=Open
- 1=Closed



CX2341X_ENC_GET_SEQ_END
~~~~~~~~~~~~~~~~~~~~~~~

Enum: 198/0xC6

Description
^^^^^^^^^^^

Obtains the sequence end code of the encoder's buffer. When a capture
is started a number of interrupts are still generated, the last of
which will have Result[0] set to 1 and Result[1] will contain the size
of the buffer.

Result[0]
^^^^^^^^^

State of the transfer (1 if last buffer)

Result[1]
^^^^^^^^^

If Result[0] is 1, this contains the size of the last buffer, undefined
otherwise.



CX2341X_ENC_SET_PGM_INDEX_INFO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 199/0xC7

Description
^^^^^^^^^^^

Sets the Program Index Information.
The information is stored as follows:

.. code-block:: c

	struct info {
		u32 length;		// Length of this frame
		u32 offset_low;		// Offset in the file of the
		u32 offset_high;	// start of this frame
		u32 mask1;		// Bits 0-2 are the type mask:
					// 1=I, 2=P, 4=B
					// 0=End of Program Index, other fields
					//   are invalid.
		u32 pts;		// The PTS of the frame
		u32 mask2;		// Bit 0 is bit 32 of the pts.
	};
	u32 table_ptr;
	struct info index[400];

The table_ptr is the encoder memory address in the table were
*new* entries will be written.

.. note:: This is a ringbuffer, so the table_ptr will wraparound.

Param[0]
^^^^^^^^

Picture Mask:
- 0=No index capture
- 1=I frames
- 3=I,P frames
- 7=I,P,B frames

(Seems to be ignored, it always indexes I, P and B frames)

Param[1]
^^^^^^^^

Elements requested (up to 400)

Result[0]
^^^^^^^^^

Offset in the encoder memory of the start of the table.

Result[1]
^^^^^^^^^

Number of allocated elements up to a maximum of Param[1]



CX2341X_ENC_SET_VBI_CONFIG
~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 200/0xC8

Description
^^^^^^^^^^^

Configure VBI settings

Param[0]
^^^^^^^^

Bitmap:

.. code-block:: none

	    0    Mode '0' Sliced, '1' Raw
	    1:3  Insertion:
		     '000' insert in extension & user data
		     '001' insert in private packets
		     '010' separate stream and user data
		     '111' separate stream and private data
	    8:15 Stream ID (normally 0xBD)

Param[1]
^^^^^^^^

Frames per interrupt (max 8). Only valid in raw mode.

Param[2]
^^^^^^^^

Total raw VBI frames. Only valid in raw mode.

Param[3]
^^^^^^^^

Start codes

Param[4]
^^^^^^^^

Stop codes

Param[5]
^^^^^^^^

Lines per frame

Param[6]
^^^^^^^^

Byte per line

Result[0]
^^^^^^^^^

Observed frames per interrupt in raw mode only. Rage 1 to Param[1]

Result[1]
^^^^^^^^^

Observed number of frames in raw mode. Range 1 to Param[2]

Result[2]
^^^^^^^^^

Memory offset to start or raw VBI data



CX2341X_ENC_SET_DMA_BLOCK_SIZE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 201/0xC9

Description
^^^^^^^^^^^

Set DMA transfer block size

Param[0]
^^^^^^^^

DMA transfer block size in bytes or frames. When unit is bytes,
supported block sizes are 2^7, 2^8 and 2^9 bytes.

Param[1]
^^^^^^^^

Unit: 0=bytes, 1=frames



CX2341X_ENC_GET_PREV_DMA_INFO_MB_10
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 202/0xCA

Description
^^^^^^^^^^^

Returns information on the previous DMA transfer in conjunction with
bit 27 of the interrupt mask. Uses mailbox 10.

Result[0]
^^^^^^^^^

Type of stream

Result[1]
^^^^^^^^^

Address Offset

Result[2]
^^^^^^^^^

Maximum size of transfer



CX2341X_ENC_GET_PREV_DMA_INFO_MB_9
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 203/0xCB

Description
^^^^^^^^^^^

Returns information on the previous DMA transfer in conjunction with
bit 27 or 18 of the interrupt mask. Uses mailbox 9.

Result[0]
^^^^^^^^^

Status bits:
- 0   read completed
- 1   write completed
- 2   DMA read error
- 3   DMA write error
- 4   Scatter-Gather array error

Result[1]
^^^^^^^^^

DMA type

Result[2]
^^^^^^^^^

Presentation Time Stamp bits 0..31

Result[3]
^^^^^^^^^

Presentation Time Stamp bit 32



CX2341X_ENC_SCHED_DMA_TO_HOST
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 204/0xCC

Description
^^^^^^^^^^^

Setup DMA to host operation

Param[0]
^^^^^^^^

Memory address of link list

Param[1]
^^^^^^^^

Length of link list (wtf: what units ???)

Param[2]
^^^^^^^^

DMA type (0=MPEG)



CX2341X_ENC_INITIALIZE_INPUT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 205/0xCD

Description
^^^^^^^^^^^

Initializes the video input



CX2341X_ENC_SET_FRAME_DROP_RATE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 208/0xD0

Description
^^^^^^^^^^^

For each frame captured, skip specified number of frames.

Param[0]
^^^^^^^^

Number of frames to skip



CX2341X_ENC_PAUSE_ENCODER
~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 210/0xD2

Description
^^^^^^^^^^^

During a pause condition, all frames are dropped instead of being encoded.

Param[0]
^^^^^^^^

- 0=Pause encoding
- 1=Continue encoding



CX2341X_ENC_REFRESH_INPUT
~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 211/0xD3

Description
^^^^^^^^^^^

Refreshes the video input



CX2341X_ENC_SET_COPYRIGHT
~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 212/0xD4

Description
^^^^^^^^^^^

Sets stream copyright property

Param[0]
^^^^^^^^


- 0=Stream is not copyrighted
- 1=Stream is copyrighted



CX2341X_ENC_SET_EVENT_NOTIFICATION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 213/0xD5

Description
^^^^^^^^^^^

Setup firmware to notify the host about a particular event. Host must
unmask the interrupt bit.

Param[0]
^^^^^^^^

Event (0=refresh encoder input)

Param[1]
^^^^^^^^

Notification 0=disabled 1=enabled

Param[2]
^^^^^^^^

Interrupt bit

Param[3]
^^^^^^^^

Mailbox slot, -1 if no mailbox required.



CX2341X_ENC_SET_NUM_VSYNC_LINES
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 214/0xD6

Description
^^^^^^^^^^^

Depending on the analog video decoder used, this assigns the number
of lines for field 1 and 2.

Param[0]
^^^^^^^^

Field 1 number of lines:
- 0x00EF for SAA7114
- 0x00F0 for SAA7115
- 0x0105 for Micronas

Param[1]
^^^^^^^^

Field 2 number of lines:
- 0x00EF for SAA7114
- 0x00F0 for SAA7115
- 0x0106 for Micronas



CX2341X_ENC_SET_PLACEHOLDER
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 215/0xD7

Description
^^^^^^^^^^^

Provides a mechanism of inserting custom user data in the MPEG stream.

Param[0]
^^^^^^^^

- 0=extension & user data
- 1=private packet with stream ID 0xBD

Param[1]
^^^^^^^^

Rate at which to insert data, in units of frames (for private packet)
or GOPs (for ext. & user data)

Param[2]
^^^^^^^^

Number of data DWORDs (below) to insert

Param[3]
^^^^^^^^

Custom data 0

Param[4]
^^^^^^^^

Custom data 1

Param[5]
^^^^^^^^

Custom data 2

Param[6]
^^^^^^^^

Custom data 3

Param[7]
^^^^^^^^

Custom data 4

Param[8]
^^^^^^^^

Custom data 5

Param[9]
^^^^^^^^

Custom data 6

Param[10]
^^^^^^^^^

Custom data 7

Param[11]
^^^^^^^^^

Custom data 8



CX2341X_ENC_MUTE_VIDEO
~~~~~~~~~~~~~~~~~~~~~~

Enum: 217/0xD9

Description
^^^^^^^^^^^

Video muting

Param[0]
^^^^^^^^

Bit usage:

.. code-block:: none

	 0    	'0'=video not muted
		'1'=video muted, creates frames with the YUV color defined below
	 1:7  	Unused
	 8:15 	V chrominance information
	16:23 	U chrominance information
	24:31 	Y luminance information



CX2341X_ENC_MUTE_AUDIO
~~~~~~~~~~~~~~~~~~~~~~

Enum: 218/0xDA

Description
^^^^^^^^^^^

Audio muting

Param[0]
^^^^^^^^

- 0=audio not muted
- 1=audio muted (produces silent mpeg audio stream)



CX2341X_ENC_SET_VERT_CROP_LINE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 219/0xDB

Description
^^^^^^^^^^^

Something to do with 'Vertical Crop Line'

Param[0]
^^^^^^^^

If saa7114 and raw VBI capture and 60 Hz, then set to 10001.
Else 0.



CX2341X_ENC_MISC
~~~~~~~~~~~~~~~~

Enum: 220/0xDC

Description
^^^^^^^^^^^

Miscellaneous actions. Not known for 100% what it does. It's really a
sort of ioctl call. The first parameter is a command number, the second
the value.

Param[0]
^^^^^^^^

Command number:

.. code-block:: none

	 1=set initial SCR value when starting encoding (works).
	 2=set quality mode (apparently some test setting).
	 3=setup advanced VIM protection handling.
	   Always 1 for the cx23416 and 0 for cx23415.
	 4=generate DVD compatible PTS timestamps
	 5=USB flush mode
	 6=something to do with the quantization matrix
	 7=set navigation pack insertion for DVD: adds 0xbf (private stream 2)
	   packets to the MPEG. The size of these packets is 2048 bytes (including
	   the header of 6 bytes: 0x000001bf + length). The payload is zeroed and
	   it is up to the application to fill them in. These packets are apparently
	   inserted every four frames.
	 8=enable scene change detection (seems to be a failure)
	 9=set history parameters of the video input module
	10=set input field order of VIM
	11=set quantization matrix
	12=reset audio interface after channel change or input switch (has no argument).
	   Needed for the cx2584x, not needed for the mspx4xx, but it doesn't seem to
	   do any harm calling it regardless.
	13=set audio volume delay
	14=set audio delay


Param[1]
^^^^^^^^

Command value.

Decoder firmware API description
--------------------------------

.. note:: this API is part of the decoder firmware, so it's cx23415 only.



CX2341X_DEC_PING_FW
~~~~~~~~~~~~~~~~~~~

Enum: 0/0x00

Description
^^^^^^^^^^^

This API call does nothing. It may be used to check if the firmware
is responding.



CX2341X_DEC_START_PLAYBACK
~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 1/0x01

Description
^^^^^^^^^^^

Begin or resume playback.

Param[0]
^^^^^^^^

0 based frame number in GOP to begin playback from.

Param[1]
^^^^^^^^

Specifies the number of muted audio frames to play before normal
audio resumes. (This is not implemented in the firmware, leave at 0)



CX2341X_DEC_STOP_PLAYBACK
~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 2/0x02

Description
^^^^^^^^^^^

Ends playback and clears all decoder buffers. If PTS is not zero,
playback stops at specified PTS.

Param[0]
^^^^^^^^

Display 0=last frame, 1=black

.. note::

	this takes effect immediately, so if you want to wait for a PTS,
	then use '0', otherwise the screen goes to black at once.
	You can call this later (even if there is no playback) with a 1 value
	to set the screen to black.

Param[1]
^^^^^^^^

PTS low

Param[2]
^^^^^^^^

PTS high



CX2341X_DEC_SET_PLAYBACK_SPEED
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 3/0x03

Description
^^^^^^^^^^^

Playback stream at speed other than normal. There are two modes of
operation:

	- Smooth: host transfers entire stream and firmware drops unused
	  frames.
	- Coarse: host drops frames based on indexing as required to achieve
	  desired speed.

Param[0]
^^^^^^^^

.. code-block:: none

	Bitmap:
	    0:7  0 normal
		 1 fast only "1.5 times"
		 n nX fast, 1/nX slow
	    30   Framedrop:
		     '0' during 1.5 times play, every other B frame is dropped
		     '1' during 1.5 times play, stream is unchanged (bitrate
			 must not exceed 8mbps)
	    31   Speed:
		     '0' slow
		     '1' fast

.. note::

	n is limited to 2. Anything higher does not result in
	faster playback. Instead the host should start dropping frames.

Param[1]
^^^^^^^^

Direction: 0=forward, 1=reverse

.. note::

	to make reverse playback work you have to write full GOPs in
	reverse order.

Param[2]
^^^^^^^^

.. code-block:: none

	Picture mask:
	    1=I frames
	    3=I, P frames
	    7=I, P, B frames

Param[3]
^^^^^^^^

B frames per GOP (for reverse play only)

.. note::

	for reverse playback the Picture Mask should be set to I or I, P.
	Adding B frames to the mask will result in corrupt video. This field
	has to be set to the correct value in order to keep the timing correct.

Param[4]
^^^^^^^^

Mute audio: 0=disable, 1=enable

Param[5]
^^^^^^^^

Display 0=frame, 1=field

Param[6]
^^^^^^^^

Specifies the number of muted audio frames to play before normal audio
resumes. (Not implemented in the firmware, leave at 0)



CX2341X_DEC_STEP_VIDEO
~~~~~~~~~~~~~~~~~~~~~~

Enum: 5/0x05

Description
^^^^^^^^^^^

Each call to this API steps the playback to the next unit defined below
in the current playback direction.

Param[0]
^^^^^^^^

0=frame, 1=top field, 2=bottom field



CX2341X_DEC_SET_DMA_BLOCK_SIZE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 8/0x08

Description
^^^^^^^^^^^

Set DMA transfer block size. Counterpart to API 0xC9

Param[0]
^^^^^^^^

DMA transfer block size in bytes. A different size may be specified
when issuing the DMA transfer command.



CX2341X_DEC_GET_XFER_INFO
~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 9/0x09

Description
^^^^^^^^^^^

This API call may be used to detect an end of stream condition.

Result[0]
^^^^^^^^^

Stream type

Result[1]
^^^^^^^^^

Address offset

Result[2]
^^^^^^^^^

Maximum bytes to transfer

Result[3]
^^^^^^^^^

Buffer fullness



CX2341X_DEC_GET_DMA_STATUS
~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 10/0x0A

Description
^^^^^^^^^^^

Status of the last DMA transfer

Result[0]
^^^^^^^^^

Bit 1 set means transfer complete
Bit 2 set means DMA error
Bit 3 set means linked list error

Result[1]
^^^^^^^^^

DMA type: 0=MPEG, 1=OSD, 2=YUV



CX2341X_DEC_SCHED_DMA_FROM_HOST
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 11/0x0B

Description
^^^^^^^^^^^

Setup DMA from host operation. Counterpart to API 0xCC

Param[0]
^^^^^^^^

Memory address of link list

Param[1]
^^^^^^^^

Total # of bytes to transfer

Param[2]
^^^^^^^^

DMA type (0=MPEG, 1=OSD, 2=YUV)



CX2341X_DEC_PAUSE_PLAYBACK
~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 13/0x0D

Description
^^^^^^^^^^^

Freeze playback immediately. In this mode, when internal buffers are
full, no more data will be accepted and data request IRQs will be
masked.

Param[0]
^^^^^^^^

Display: 0=last frame, 1=black



CX2341X_DEC_HALT_FW
~~~~~~~~~~~~~~~~~~~

Enum: 14/0x0E

Description
^^^^^^^^^^^

The firmware is halted and no further API calls are serviced until
the firmware is uploaded again.



CX2341X_DEC_SET_STANDARD
~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 16/0x10

Description
^^^^^^^^^^^

Selects display standard

Param[0]
^^^^^^^^

0=NTSC, 1=PAL



CX2341X_DEC_GET_VERSION
~~~~~~~~~~~~~~~~~~~~~~~

Enum: 17/0x11

Description
^^^^^^^^^^^

Returns decoder firmware version information

Result[0]
^^^^^^^^^

Version bitmask:
	- Bits  0:15 build
	- Bits 16:23 minor
	- Bits 24:31 major



CX2341X_DEC_SET_STREAM_INPUT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 20/0x14

Description
^^^^^^^^^^^

Select decoder stream input port

Param[0]
^^^^^^^^

0=memory (default), 1=streaming



CX2341X_DEC_GET_TIMING_INFO
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 21/0x15

Description
^^^^^^^^^^^

Returns timing information from start of playback

Result[0]
^^^^^^^^^

Frame count by decode order

Result[1]
^^^^^^^^^

Video PTS bits 0:31 by display order

Result[2]
^^^^^^^^^

Video PTS bit 32 by display order

Result[3]
^^^^^^^^^

SCR bits 0:31 by display order

Result[4]
^^^^^^^^^

SCR bit 32 by display order



CX2341X_DEC_SET_AUDIO_MODE
~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 22/0x16

Description
^^^^^^^^^^^

Select audio mode

Param[0]
^^^^^^^^

Dual mono mode action
	0=Stereo, 1=Left, 2=Right, 3=Mono, 4=Swap, -1=Unchanged

Param[1]
^^^^^^^^

Stereo mode action:
	0=Stereo, 1=Left, 2=Right, 3=Mono, 4=Swap, -1=Unchanged



CX2341X_DEC_SET_EVENT_NOTIFICATION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 23/0x17

Description
^^^^^^^^^^^

Setup firmware to notify the host about a particular event.
Counterpart to API 0xD5

Param[0]
^^^^^^^^

Event:
	- 0=Audio mode change between mono, (joint) stereo and dual channel.
	- 3=Decoder started
	- 4=Unknown: goes off 10-15 times per second while decoding.
	- 5=Some sync event: goes off once per frame.

Param[1]
^^^^^^^^

Notification 0=disabled, 1=enabled

Param[2]
^^^^^^^^

Interrupt bit

Param[3]
^^^^^^^^

Mailbox slot, -1 if no mailbox required.



CX2341X_DEC_SET_DISPLAY_BUFFERS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 24/0x18

Description
^^^^^^^^^^^

Number of display buffers. To decode all frames in reverse playback you
must use nine buffers.

Param[0]
^^^^^^^^

0=six buffers, 1=nine buffers



CX2341X_DEC_EXTRACT_VBI
~~~~~~~~~~~~~~~~~~~~~~~

Enum: 25/0x19

Description
^^^^^^^^^^^

Extracts VBI data

Param[0]
^^^^^^^^

0=extract from extension & user data, 1=extract from private packets

Result[0]
^^^^^^^^^

VBI table location

Result[1]
^^^^^^^^^

VBI table size



CX2341X_DEC_SET_DECODER_SOURCE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 26/0x1A

Description
^^^^^^^^^^^

Selects decoder source. Ensure that the parameters passed to this
API match the encoder settings.

Param[0]
^^^^^^^^

Mode: 0=MPEG from host, 1=YUV from encoder, 2=YUV from host

Param[1]
^^^^^^^^

YUV picture width

Param[2]
^^^^^^^^

YUV picture height

Param[3]
^^^^^^^^

Bitmap: see Param[0] of API 0xBD



CX2341X_DEC_SET_PREBUFFERING
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enum: 30/0x1E

Description
^^^^^^^^^^^

Decoder prebuffering, when enabled up to 128KB are buffered for
streams <8mpbs or 640KB for streams >8mbps

Param[0]
^^^^^^^^

0=off, 1=on

PVR350 Video decoder registers 0x02002800 -> 0x02002B00
-------------------------------------------------------

Author: Ian Armstrong <ian@iarmst.demon.co.uk>

Version: v0.4

Date: 12 March 2007


This list has been worked out through trial and error. There will be mistakes
and omissions. Some registers have no obvious effect so it's hard to say what
they do, while others interact with each other, or require a certain load
sequence. Horizontal filter setup is one example, with six registers working
in unison and requiring a certain load sequence to correctly configure. The
indexed colour palette is much easier to set at just two registers, but again
it requires a certain load sequence.

Some registers are fussy about what they are set to. Load in a bad value & the
decoder will fail. A firmware reload will often recover, but sometimes a reset
is required. For registers containing size information, setting them to 0 is
generally a bad idea. For other control registers i.e. 2878, you'll only find
out what values are bad when it hangs.

.. code-block:: none

	--------------------------------------------------------------------------------
	2800
	bit 0
		Decoder enable
		0 = disable
		1 = enable
	--------------------------------------------------------------------------------
	2804
	bits 0:31
		Decoder horizontal Y alias register 1
	---------------
	2808
	bits 0:31
		Decoder horizontal Y alias register 2
	---------------
	280C
	bits 0:31
		Decoder horizontal Y alias register 3
	---------------
	2810
	bits 0:31
		Decoder horizontal Y alias register 4
	---------------
	2814
	bits 0:31
		Decoder horizontal Y alias register 5
	---------------
	2818
	bits 0:31
		Decoder horizontal Y alias trigger

	These six registers control the horizontal aliasing filter for the Y plane.
	The first five registers must all be loaded before accessing the trigger
	(2818), as this register actually clocks the data through for the first
	five.

	To correctly program set the filter, this whole procedure must be done 16
	times. The actual register contents are copied from a lookup-table in the
	firmware which contains 4 different filter settings.

	--------------------------------------------------------------------------------
	281C
	bits 0:31
		Decoder horizontal UV alias register 1
	---------------
	2820
	bits 0:31
		Decoder horizontal UV alias register 2
	---------------
	2824
	bits 0:31
		Decoder horizontal UV alias register 3
	---------------
	2828
	bits 0:31
		Decoder horizontal UV alias register 4
	---------------
	282C
	bits 0:31
		Decoder horizontal UV alias register 5
	---------------
	2830
	bits 0:31
		Decoder horizontal UV alias trigger

	These six registers control the horizontal aliasing for the UV plane.
	Operation is the same as the Y filter, with 2830 being the trigger
	register.

	--------------------------------------------------------------------------------
	2834
	bits 0:15
		Decoder Y source width in pixels

	bits 16:31
		Decoder Y destination width in pixels
	---------------
	2838
	bits 0:15
		Decoder UV source width in pixels

	bits 16:31
		Decoder UV destination width in pixels

	NOTE: For both registers, the resulting image must be fully visible on
	screen. If the image exceeds the right edge both the source and destination
	size must be adjusted to reflect the visible portion. For the source width,
	you must take into account the scaling when calculating the new value.
	--------------------------------------------------------------------------------

	283C
	bits 0:31
		Decoder Y horizontal scaling
			Normally = Reg 2854 >> 2
	---------------
	2840
	bits 0:31
		Decoder ?? unknown - horizontal scaling
		Usually 0x00080514
	---------------
	2844
	bits 0:31
		Decoder UV horizontal scaling
		Normally = Reg 2854 >> 2
	---------------
	2848
	bits 0:31
		Decoder ?? unknown - horizontal scaling
		Usually 0x00100514
	---------------
	284C
	bits 0:31
		Decoder ?? unknown - Y plane
		Usually 0x00200020
	---------------
	2850
	bits 0:31
		Decoder ?? unknown - UV plane
		Usually 0x00200020
	---------------
	2854
	bits 0:31
		Decoder 'master' value for horizontal scaling
	---------------
	2858
	bits 0:31
		Decoder ?? unknown
		Usually 0
	---------------
	285C
	bits 0:31
		Decoder ?? unknown
		Normally = Reg 2854 >> 1
	---------------
	2860
	bits 0:31
		Decoder ?? unknown
		Usually 0
	---------------
	2864
	bits 0:31
		Decoder ?? unknown
		Normally = Reg 2854 >> 1
	---------------
	2868
	bits 0:31
		Decoder ?? unknown
		Usually 0

	Most of these registers either control horizontal scaling, or appear linked
	to it in some way. Register 2854 contains the 'master' value & the other
	registers can be calculated from that one. You must also remember to
	correctly set the divider in Reg 2874.

	To enlarge:
		Reg 2854 = (source_width * 0x00200000) / destination_width
		Reg 2874 = No divide

	To reduce from full size down to half size:
		Reg 2854 = (source_width/2 * 0x00200000) / destination width
		Reg 2874 = Divide by 2

	To reduce from half size down to quarter size:
		Reg 2854 = (source_width/4 * 0x00200000) / destination width
		Reg 2874 = Divide by 4

	The result is always rounded up.

	--------------------------------------------------------------------------------
	286C
	bits 0:15
		Decoder horizontal Y buffer offset

	bits 15:31
		Decoder horizontal UV buffer offset

	Offset into the video image buffer. If the offset is gradually incremented,
	the on screen image will move left & wrap around higher up on the right.

	--------------------------------------------------------------------------------
	2870
	bits 0:15
		Decoder horizontal Y output offset

	bits 16:31
		Decoder horizontal UV output offset

	Offsets the actual video output. Controls output alignment of the Y & UV
	planes. The higher the value, the greater the shift to the left. Use
	reg 2890 to move the image right.

	--------------------------------------------------------------------------------
	2874
	bits 0:1
		Decoder horizontal Y output size divider
		00 = No divide
		01 = Divide by 2
		10 = Divide by 3

	bits 4:5
		Decoder horizontal UV output size divider
		00 = No divide
		01 = Divide by 2
		10 = Divide by 3

	bit 8
		Decoder ?? unknown
		0 = Normal
		1 = Affects video output levels

	bit 16
		Decoder ?? unknown
		0 = Normal
		1 = Disable horizontal filter

	--------------------------------------------------------------------------------
	2878
	bit 0
		?? unknown

	bit 1
		osd on/off
		0 = osd off
		1 = osd on

	bit 2
		Decoder + osd video timing
		0 = NTSC
		1 = PAL

	bits 3:4
		?? unknown

	bit 5
		Decoder + osd
		Swaps upper & lower fields

	--------------------------------------------------------------------------------
	287C
	bits 0:10
		Decoder & osd ?? unknown
		Moves entire screen horizontally. Starts at 0x005 with the screen
		shifted heavily to the right. Incrementing in steps of 0x004 will
		gradually shift the screen to the left.

	bits 11:31
		?? unknown

	Normally contents are 0x00101111 (NTSC) or 0x1010111d (PAL)

	--------------------------------------------------------------------------------
	2880  --------    ?? unknown
	2884  --------    ?? unknown
	--------------------------------------------------------------------------------
	2888
	bit 0
		Decoder + osd ?? unknown
		0 = Normal
		1 = Misaligned fields (Correctable through 289C & 28A4)

	bit 4
		?? unknown

	bit 8
		?? unknown

	Warning: Bad values will require a firmware reload to recover.
			Known to be bad are 0x000,0x011,0x100,0x111
	--------------------------------------------------------------------------------
	288C
	bits 0:15
		osd ?? unknown
		Appears to affect the osd position stability. The higher the value the
		more unstable it becomes. Decoder output remains stable.

	bits 16:31
		osd ?? unknown
		Same as bits 0:15

	--------------------------------------------------------------------------------
	2890
	bits 0:11
		Decoder output horizontal offset.

	Horizontal offset moves the video image right. A small left shift is
	possible, but it's better to use reg 2870 for that due to its greater
	range.

	NOTE: Video corruption will occur if video window is shifted off the right
	edge. To avoid this read the notes for 2834 & 2838.
	--------------------------------------------------------------------------------
	2894
	bits 0:23
		Decoder output video surround colour.

	Contains the colour (in yuv) used to fill the screen when the video is
	running in a window.
	--------------------------------------------------------------------------------
	2898
	bits 0:23
		Decoder video window colour
		Contains the colour (in yuv) used to fill the video window when the
		video is turned off.

	bit 24
		Decoder video output
		0 = Video on
		1 = Video off

	bit 28
		Decoder plane order
		0 = Y,UV
		1 = UV,Y

	bit 29
		Decoder second plane byte order
		0 = Normal (UV)
		1 = Swapped (VU)

	In normal usage, the first plane is Y & the second plane is UV. Though the
	order of the planes can be swapped, only the byte order of the second plane
	can be swapped. This isn't much use for the Y plane, but can be useful for
	the UV plane.

	--------------------------------------------------------------------------------
	289C
	bits 0:15
		Decoder vertical field offset 1

	bits 16:31
		Decoder vertical field offset 2

	Controls field output vertical alignment. The higher the number, the lower
	the image on screen. Known starting values are 0x011E0017 (NTSC) &
	0x01500017 (PAL)
	--------------------------------------------------------------------------------
	28A0
	bits 0:15
		Decoder & osd width in pixels

	bits 16:31
		Decoder & osd height in pixels

	All output from the decoder & osd are disabled beyond this area. Decoder
	output will simply go black outside of this region. If the osd tries to
	exceed this area it will become corrupt.
	--------------------------------------------------------------------------------
	28A4
	bits 0:11
		osd left shift.

	Has a range of 0x770->0x7FF. With the exception of 0, any value outside of
	this range corrupts the osd.
	--------------------------------------------------------------------------------
	28A8
	bits 0:15
		osd vertical field offset 1

	bits 16:31
		osd vertical field offset 2

	Controls field output vertical alignment. The higher the number, the lower
	the image on screen. Known starting values are 0x011E0017 (NTSC) &
	0x01500017 (PAL)
	--------------------------------------------------------------------------------
	28AC  --------    ?? unknown
	|
	V
	28BC  --------    ?? unknown
	--------------------------------------------------------------------------------
	28C0
	bit 0
		Current output field
		0 = first field
		1 = second field

	bits 16:31
		Current scanline
		The scanline counts from the top line of the first field
		through to the last line of the second field.
	--------------------------------------------------------------------------------
	28C4  --------    ?? unknown
	|
	V
	28F8  --------    ?? unknown
	--------------------------------------------------------------------------------
	28FC
	bit 0
		?? unknown
		0 = Normal
		1 = Breaks decoder & osd output
	--------------------------------------------------------------------------------
	2900
	bits 0:31
		Decoder vertical Y alias register 1
	---------------
	2904
	bits 0:31
		Decoder vertical Y alias register 2
	---------------
	2908
	bits 0:31
		Decoder vertical Y alias trigger

	These three registers control the vertical aliasing filter for the Y plane.
	Operation is similar to the horizontal Y filter (2804). The only real
	difference is that there are only two registers to set before accessing
	the trigger register (2908). As for the horizontal filter, the values are
	taken from a lookup table in the firmware, and the procedure must be
	repeated 16 times to fully program the filter.
	--------------------------------------------------------------------------------
	290C
	bits 0:31
		Decoder vertical UV alias register 1
	---------------
	2910
	bits 0:31
		Decoder vertical UV alias register 2
	---------------
	2914
	bits 0:31
		Decoder vertical UV alias trigger

	These three registers control the vertical aliasing filter for the UV
	plane. Operation is the same as the Y filter, with 2914 being the trigger.
	--------------------------------------------------------------------------------
	2918
	bits 0:15
		Decoder Y source height in pixels

	bits 16:31
		Decoder Y destination height in pixels
	---------------
	291C
	bits 0:15
		Decoder UV source height in pixels divided by 2

	bits 16:31
		Decoder UV destination height in pixels

	NOTE: For both registers, the resulting image must be fully visible on
	screen. If the image exceeds the bottom edge both the source and
	destination size must be adjusted to reflect the visible portion. For the
	source height, you must take into account the scaling when calculating the
	new value.
	--------------------------------------------------------------------------------
	2920
	bits 0:31
		Decoder Y vertical scaling
		Normally = Reg 2930 >> 2
	---------------
	2924
	bits 0:31
		Decoder Y vertical scaling
		Normally = Reg 2920 + 0x514
	---------------
	2928
	bits 0:31
		Decoder UV vertical scaling
		When enlarging = Reg 2930 >> 2
		When reducing = Reg 2930 >> 3
	---------------
	292C
	bits 0:31
		Decoder UV vertical scaling
		Normally = Reg 2928 + 0x514
	---------------
	2930
	bits 0:31
		Decoder 'master' value for vertical scaling
	---------------
	2934
	bits 0:31
		Decoder ?? unknown - Y vertical scaling
	---------------
	2938
	bits 0:31
		Decoder Y vertical scaling
		Normally = Reg 2930
	---------------
	293C
	bits 0:31
		Decoder ?? unknown - Y vertical scaling
	---------------
	2940
	bits 0:31
		Decoder UV vertical scaling
		When enlarging = Reg 2930 >> 1
		When reducing = Reg 2930
	---------------
	2944
	bits 0:31
		Decoder ?? unknown - UV vertical scaling
	---------------
	2948
	bits 0:31
		Decoder UV vertical scaling
		Normally = Reg 2940
	---------------
	294C
	bits 0:31
		Decoder ?? unknown - UV vertical scaling

	Most of these registers either control vertical scaling, or appear linked
	to it in some way. Register 2930 contains the 'master' value & all other
	registers can be calculated from that one. You must also remember to
	correctly set the divider in Reg 296C

	To enlarge:
		Reg 2930 = (source_height * 0x00200000) / destination_height
		Reg 296C = No divide

	To reduce from full size down to half size:
		Reg 2930 = (source_height/2 * 0x00200000) / destination height
		Reg 296C = Divide by 2

	To reduce from half down to quarter.
		Reg 2930 = (source_height/4 * 0x00200000) / destination height
		Reg 296C = Divide by 4

	--------------------------------------------------------------------------------
	2950
	bits 0:15
		Decoder Y line index into display buffer, first field

	bits 16:31
		Decoder Y vertical line skip, first field
	--------------------------------------------------------------------------------
	2954
	bits 0:15
		Decoder Y line index into display buffer, second field

	bits 16:31
		Decoder Y vertical line skip, second field
	--------------------------------------------------------------------------------
	2958
	bits 0:15
		Decoder UV line index into display buffer, first field

	bits 16:31
		Decoder UV vertical line skip, first field
	--------------------------------------------------------------------------------
	295C
	bits 0:15
		Decoder UV line index into display buffer, second field

	bits 16:31
		Decoder UV vertical line skip, second field
	--------------------------------------------------------------------------------
	2960
	bits 0:15
		Decoder destination height minus 1

	bits 16:31
		Decoder destination height divided by 2
	--------------------------------------------------------------------------------
	2964
	bits 0:15
		Decoder Y vertical offset, second field

	bits 16:31
		Decoder Y vertical offset, first field

	These two registers shift the Y plane up. The higher the number, the
	greater the shift.
	--------------------------------------------------------------------------------
	2968
	bits 0:15
		Decoder UV vertical offset, second field

	bits 16:31
		Decoder UV vertical offset, first field

	These two registers shift the UV plane up. The higher the number, the
	greater the shift.
	--------------------------------------------------------------------------------
	296C
	bits 0:1
		Decoder vertical Y output size divider
		00 = No divide
		01 = Divide by 2
		10 = Divide by 4

	bits 8:9
		Decoder vertical UV output size divider
		00 = No divide
		01 = Divide by 2
		10 = Divide by 4
	--------------------------------------------------------------------------------
	2970
	bit 0
		Decoder ?? unknown
		0 = Normal
		1 = Affect video output levels

	bit 16
		Decoder ?? unknown
		0 = Normal
		1 = Disable vertical filter

	--------------------------------------------------------------------------------
	2974  --------   ?? unknown
	|
	V
	29EF  --------   ?? unknown
	--------------------------------------------------------------------------------
	2A00
	bits 0:2
		osd colour mode
		000 = 8 bit indexed
		001 = 16 bit (565)
		010 = 15 bit (555)
		011 = 12 bit (444)
		100 = 32 bit (8888)

	bits 4:5
		osd display bpp
		01 = 8 bit
		10 = 16 bit
		11 = 32 bit

	bit 8
		osd global alpha
		0 = Off
		1 = On

	bit 9
		osd local alpha
		0 = Off
		1 = On

	bit 10
		osd colour key
		0 = Off
		1 = On

	bit 11
		osd ?? unknown
		Must be 1

	bit 13
		osd colour space
		0 = ARGB
		1 = AYVU

	bits 16:31
		osd ?? unknown
		Must be 0x001B (some kind of buffer pointer ?)

	When the bits-per-pixel is set to 8, the colour mode is ignored and
	assumed to be 8 bit indexed. For 16 & 32 bits-per-pixel the colour depth
	is honoured, and when using a colour depth that requires fewer bytes than
	allocated the extra bytes are used as padding. So for a 32 bpp with 8 bit
	index colour, there are 3 padding bytes per pixel. It's also possible to
	select 16bpp with a 32 bit colour mode. This results in the pixel width
	being doubled, but the color key will not work as expected in this mode.

	Colour key is as it suggests. You designate a colour which will become
	completely transparent. When using 565, 555 or 444 colour modes, the
	colour key is always 16 bits wide. The colour to key on is set in Reg 2A18.

	Local alpha works differently depending on the colour mode. For 32bpp & 8
	bit indexed, local alpha is a per-pixel 256 step transparency, with 0 being
	transparent and 255 being solid. For the 16bpp modes 555 & 444, the unused
	bit(s) act as a simple transparency switch, with 0 being solid & 1 being
	fully transparent. There is no local alpha support for 16bit 565.

	Global alpha is a 256 step transparency that applies to the entire osd,
	with 0 being transparent & 255 being solid.

	It's possible to combine colour key, local alpha & global alpha.
	--------------------------------------------------------------------------------
	2A04
	bits 0:15
		osd x coord for left edge

	bits 16:31
		osd y coord for top edge
	---------------
	2A08
	bits 0:15
		osd x coord for right edge

	bits 16:31
		osd y coord for bottom edge

	For both registers, (0,0) = top left corner of the display area. These
	registers do not control the osd size, only where it's positioned & how
	much is visible. The visible osd area cannot exceed the right edge of the
	display, otherwise the osd will become corrupt. See reg 2A10 for
	setting osd width.
	--------------------------------------------------------------------------------
	2A0C
	bits 0:31
		osd buffer index

	An index into the osd buffer. Slowly incrementing this moves the osd left,
	wrapping around onto the right edge
	--------------------------------------------------------------------------------
	2A10
	bits 0:11
		osd buffer 32 bit word width

	Contains the width of the osd measured in 32 bit words. This means that all
	colour modes are restricted to a byte width which is divisible by 4.
	--------------------------------------------------------------------------------
	2A14
	bits 0:15
		osd height in pixels

	bits 16:32
		osd line index into buffer
		osd will start displaying from this line.
	--------------------------------------------------------------------------------
	2A18
	bits 0:31
		osd colour key

	Contains the colour value which will be transparent.
	--------------------------------------------------------------------------------
	2A1C
	bits 0:7
		osd global alpha

	Contains the global alpha value (equiv ivtvfbctl --alpha XX)
	--------------------------------------------------------------------------------
	2A20  --------    ?? unknown
	|
	V
	2A2C  --------    ?? unknown
	--------------------------------------------------------------------------------
	2A30
	bits 0:7
		osd colour to change in indexed palette
	---------------
	2A34
	bits 0:31
		osd colour for indexed palette

	To set the new palette, first load the index of the colour to change into
	2A30, then load the new colour into 2A34. The full palette is 256 colours,
	so the index range is 0x00-0xFF
	--------------------------------------------------------------------------------
	2A38  --------    ?? unknown
	2A3C  --------    ?? unknown
	--------------------------------------------------------------------------------
	2A40
	bits 0:31
		osd ?? unknown

	Affects overall brightness, wrapping around to black
	--------------------------------------------------------------------------------
	2A44
	bits 0:31
		osd ?? unknown

	Green tint
	--------------------------------------------------------------------------------
	2A48
	bits 0:31
		osd ?? unknown

	Red tint
	--------------------------------------------------------------------------------
	2A4C
	bits 0:31
		osd ?? unknown

	Affects overall brightness, wrapping around to black
	--------------------------------------------------------------------------------
	2A50
	bits 0:31
		osd ?? unknown

	Colour shift
	--------------------------------------------------------------------------------
	2A54
	bits 0:31
		osd ?? unknown

	Colour shift
	--------------------------------------------------------------------------------
	2A58  --------    ?? unknown
	|
	V
	2AFC  --------    ?? unknown
	--------------------------------------------------------------------------------
	2B00
	bit 0
		osd filter control
		0 = filter off
		1 = filter on

	bits 1:4
		osd ?? unknown

	--------------------------------------------------------------------------------

The cx231xx DMA engine
----------------------


This page describes the structures and procedures used by the cx2341x DMA
engine.

Introduction
~~~~~~~~~~~~

The cx2341x PCI interface is busmaster capable. This means it has a DMA
engine to efficiently transfer large volumes of data between the card and main
memory without requiring help from a CPU. Like most hardware, it must operate
on contiguous physical memory. This is difficult to come by in large quantities
on virtual memory machines.

Therefore, it also supports a technique called "scatter-gather". The card can
transfer multiple buffers in one operation. Instead of allocating one large
contiguous buffer, the driver can allocate several smaller buffers.

In practice, I've seen the average transfer to be roughly 80K, but transfers
above 128K were not uncommon, particularly at startup. The 128K figure is
important, because that is the largest block that the kernel can normally
allocate. Even still, 128K blocks are hard to come by, so the driver writer is
urged to choose a smaller block size and learn the scatter-gather technique.

Mailbox #10 is reserved for DMA transfer information.

Note: the hardware expects little-endian data ('intel format').

Flow
~~~~

This section describes, in general, the order of events when handling DMA
transfers. Detailed information follows this section.

- The card raises the Encoder interrupt.
- The driver reads the transfer type, offset and size from Mailbox #10.
- The driver constructs the scatter-gather array from enough free dma buffers
  to cover the size.
- The driver schedules the DMA transfer via the ScheduleDMAtoHost API call.
- The card raises the DMA Complete interrupt.
- The driver checks the DMA status register for any errors.
- The driver post-processes the newly transferred buffers.

NOTE! It is possible that the Encoder and DMA Complete interrupts get raised
simultaneously. (End of the last, start of the next, etc.)

Mailbox #10
~~~~~~~~~~~

The Flags, Command, Return Value and Timeout fields are ignored.

- Name:       Mailbox #10
- Results[0]: Type: 0: MPEG.
- Results[1]: Offset: The position relative to the card's memory space.
- Results[2]: Size: The exact number of bytes to transfer.

My speculation is that since the StartCapture API has a capture type of "RAW"
available, that the type field will have other values that correspond to YUV
and PCM data.

Scatter-Gather Array
~~~~~~~~~~~~~~~~~~~~

The scatter-gather array is a contiguously allocated block of memory that
tells the card the source and destination of each data-block to transfer.
Card "addresses" are derived from the offset supplied by Mailbox #10. Host
addresses are the physical memory location of the target DMA buffer.

Each S-G array element is a struct of three 32-bit words. The first word is
the source address, the second is the destination address. Both take up the
entire 32 bits. The lowest 18 bits of the third word is the transfer byte
count. The high-bit of the third word is the "last" flag. The last-flag tells
the card to raise the DMA_DONE interrupt. From hard personal experience, if
you forget to set this bit, the card will still "work" but the stream will
most likely get corrupted.

The transfer count must be a multiple of 256. Therefore, the driver will need
to track how much data in the target buffer is valid and deal with it
accordingly.

Array Element:

- 32-bit Source Address
- 32-bit Destination Address
- 14-bit reserved (high bit is the last flag)
- 18-bit byte count

DMA Transfer Status
~~~~~~~~~~~~~~~~~~~

Register 0x0004 holds the DMA Transfer Status:

- bit 0:   read completed
- bit 1:   write completed
- bit 2:   DMA read error
- bit 3:   DMA write error
- bit 4:   Scatter-Gather array error

Non-compressed file format
--------------------------

The cx23416 can produce (and the cx23415 can also read) raw YUV output. The
format of a YUV frame is specific to this chip and is called HM12. 'HM' stands
for 'Hauppauge Macroblock', which is a misnomer as 'Conexant Macroblock' would
be more accurate.

The format is YUV 4:2:0 which uses 1 Y byte per pixel and 1 U and V byte per
four pixels.

The data is encoded as two macroblock planes, the first containing the Y
values, the second containing UV macroblocks.

The Y plane is divided into blocks of 16x16 pixels from left to right
and from top to bottom. Each block is transmitted in turn, line-by-line.

So the first 16 bytes are the first line of the top-left block, the
second 16 bytes are the second line of the top-left block, etc. After
transmitting this block the first line of the block on the right to the
first block is transmitted, etc.

The UV plane is divided into blocks of 16x8 UV values going from left
to right, top to bottom. Each block is transmitted in turn, line-by-line.

So the first 16 bytes are the first line of the top-left block and
contain 8 UV value pairs (16 bytes in total). The second 16 bytes are the
second line of 8 UV pairs of the top-left block, etc. After transmitting
this block the first line of the block on the right to the first block is
transmitted, etc.

The code below is given as an example on how to convert HM12 to separate
Y, U and V planes. This code assumes frames of 720x576 (PAL) pixels.

The width of a frame is always 720 pixels, regardless of the actual specified
width.

If the height is not a multiple of 32 lines, then the captured video is
missing macroblocks at the end and is unusable. So the height must be a
multiple of 32.

Raw format c example
~~~~~~~~~~~~~~~~~~~~

.. code-block:: c

	#include <stdio.h>
	#include <stdlib.h>
	#include <string.h>

	static unsigned char frame[576*720*3/2];
	static unsigned char framey[576*720];
	static unsigned char frameu[576*720 / 4];
	static unsigned char framev[576*720 / 4];

	static void de_macro_y(unsigned char* dst, unsigned char *src, int dstride, int w, int h)
	{
	unsigned int y, x, i;

	// descramble Y plane
	// dstride = 720 = w
	// The Y plane is divided into blocks of 16x16 pixels
	// Each block in transmitted in turn, line-by-line.
	for (y = 0; y < h; y += 16) {
		for (x = 0; x < w; x += 16) {
		for (i = 0; i < 16; i++) {
			memcpy(dst + x + (y + i) * dstride, src, 16);
			src += 16;
		}
		}
	}
	}

	static void de_macro_uv(unsigned char *dstu, unsigned char *dstv, unsigned char *src, int dstride, int w, int h)
	{
	unsigned int y, x, i;

	// descramble U/V plane
	// dstride = 720 / 2 = w
	// The U/V values are interlaced (UVUV...).
	// Again, the UV plane is divided into blocks of 16x16 UV values.
	// Each block in transmitted in turn, line-by-line.
	for (y = 0; y < h; y += 16) {
		for (x = 0; x < w; x += 8) {
		for (i = 0; i < 16; i++) {
			int idx = x + (y + i) * dstride;

			dstu[idx+0] = src[0];  dstv[idx+0] = src[1];
			dstu[idx+1] = src[2];  dstv[idx+1] = src[3];
			dstu[idx+2] = src[4];  dstv[idx+2] = src[5];
			dstu[idx+3] = src[6];  dstv[idx+3] = src[7];
			dstu[idx+4] = src[8];  dstv[idx+4] = src[9];
			dstu[idx+5] = src[10]; dstv[idx+5] = src[11];
			dstu[idx+6] = src[12]; dstv[idx+6] = src[13];
			dstu[idx+7] = src[14]; dstv[idx+7] = src[15];
			src += 16;
		}
		}
	}
	}

	/*************************************************************************/
	int main(int argc, char **argv)
	{
	FILE *fin;
	int i;

	if (argc == 1) fin = stdin;
	else fin = fopen(argv[1], "r");

	if (fin == NULL) {
		fprintf(stderr, "cannot open input\n");
		exit(-1);
	}
	while (fread(frame, sizeof(frame), 1, fin) == 1) {
		de_macro_y(framey, frame, 720, 720, 576);
		de_macro_uv(frameu, framev, frame + 720 * 576, 720 / 2, 720 / 2, 576 / 2);
		fwrite(framey, sizeof(framey), 1, stdout);
		fwrite(framev, sizeof(framev), 1, stdout);
		fwrite(frameu, sizeof(frameu), 1, stdout);
	}
	fclose(fin);
	return 0;
	}


Format of embedded V4L2_MPEG_STREAM_VBI_FMT_IVTV VBI data
---------------------------------------------------------

Author: Hans Verkuil <hverkuil@xs4all.nl>


This section describes the V4L2_MPEG_STREAM_VBI_FMT_IVTV format of the VBI data
embedded in an MPEG-2 program stream. This format is in part dictated by some
hardware limitations of the ivtv driver (the driver for the Conexant cx23415/6
chips), in particular a maximum size for the VBI data. Anything longer is cut
off when the MPEG stream is played back through the cx23415.

The advantage of this format is it is very compact and that all VBI data for
all lines can be stored while still fitting within the maximum allowed size.

The stream ID of the VBI data is 0xBD. The maximum size of the embedded data is
4 + 43 * 36, which is 4 bytes for a header and 2 * 18 VBI lines with a 1 byte
header and a 42 bytes payload each. Anything beyond this limit is cut off by
the cx23415/6 firmware. Besides the data for the VBI lines we also need 36 bits
for a bitmask determining which lines are captured and 4 bytes for a magic cookie,
signifying that this data package contains V4L2_MPEG_STREAM_VBI_FMT_IVTV VBI data.
If all lines are used, then there is no longer room for the bitmask. To solve this
two different magic numbers were introduced:

'itv0': After this magic number two unsigned longs follow. Bits 0-17 of the first
unsigned long denote which lines of the first field are captured. Bits 18-31 of
the first unsigned long and bits 0-3 of the second unsigned long are used for the
second field.

'ITV0': This magic number assumes all VBI lines are captured, i.e. it implicitly
implies that the bitmasks are 0xffffffff and 0xf.

After these magic cookies (and the 8 byte bitmask in case of cookie 'itv0') the
captured VBI lines start:

For each line the least significant 4 bits of the first byte contain the data type.
Possible values are shown in the table below. The payload is in the following 42
bytes.

Here is the list of possible data types:

.. code-block:: c

	#define IVTV_SLICED_TYPE_TELETEXT       0x1     // Teletext (uses lines 6-22 for PAL)
	#define IVTV_SLICED_TYPE_CC             0x4     // Closed Captions (line 21 NTSC)
	#define IVTV_SLICED_TYPE_WSS            0x5     // Wide Screen Signal (line 23 PAL)
	#define IVTV_SLICED_TYPE_VPS            0x7     // Video Programming System (PAL) (line 16)

