| Encoder firmware API description |
| ================================ |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_PING_FW |
| Enum 128/0x80 |
| Description |
| Does nothing. Can be used to check if the firmware is responding. |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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. |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_SET_AUDIO_ID |
| Enum 137/0x89 |
| Description |
| Assigns the transport stream ID of the encoded audio stream |
| Param[0] |
| Audio Stream ID |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_SET_VIDEO_ID |
| Enum 139/0x8B |
| Description |
| Set video transport stream ID |
| Param[0] |
| Video stream ID |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_SET_PCR_ID |
| Enum 141/0x8D |
| Description |
| Assigns the transport stream ID for PCR packets |
| Param[0] |
| PCR Stream ID |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_SET_BIT_RATE |
| Enum 149/0x95 |
| Description |
| Assign average video stream bitrate. Note on the last three params: |
| Param[3] and [4] seem to be always 0, param [5] doesn't seem to be used. |
| 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 that GOP size must be a multiple of (B-frames + 1). |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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' reserved |
| .... |
| '1111' reserved |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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) |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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. |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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. |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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: |
| 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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. |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_SET_GOP_CLOSURE |
| Enum 197/0xC5 |
| Description |
| Assigns the GOP open/close property. |
| Param[0] |
| 0=Open |
| 1=Closed |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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. |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_SET_PGM_INDEX_INFO |
| Enum 199/0xC7 |
| Description |
| Sets the Program Index Information. |
| The information is stored as follows: |
| |
| 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-1 are the type mask: |
| // 1=I, 2=P, 4=B |
| 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 that 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] |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_SET_VBI_CONFIG |
| Enum 200/0xC8 |
| Description |
| Configure VBI settings |
| Param[0] |
| Bitmap: |
| 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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) |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_INITIALIZE_INPUT |
| Enum 205/0xCD |
| Description |
| Initializes the video input |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_REFRESH_INPUT |
| Enum 211/0xD3 |
| Description |
| Refreshes the video input |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_SET_COPYRIGHT |
| Enum 212/0xD4 |
| Description |
| Sets stream copyright property |
| Param[0] |
| 0=Stream is not copyrighted |
| 1=Stream is copyrighted |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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. |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_MUTE_VIDEO |
| Enum 217/0xD9 |
| Description |
| Video muting |
| Param[0] |
| Bit usage: |
| 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 |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_MUTE_AUDIO |
| Enum 218/0xDA |
| Description |
| Audio muting |
| Param[0] |
| 0=audio not muted |
| 1=audio muted (produces silent mpeg audio stream) |
| |
| ------------------------------------------------------------------------------- |
| |
| Name CX2341X_ENC_UNKNOWN |
| Enum 219/0xDB |
| Description |
| Unknown API, it's used by Hauppauge though. |
| Param[0] |
| 0 This is the value Hauppauge uses, Unknown what it means. |
| |
| ------------------------------------------------------------------------------- |
| |
| Name 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: |
| 1=set initial SCR value when starting encoding (works). |
| 2=set quality mode (apparently some test setting). |
| 3=setup advanced VIM protection handling (supposedly only for the cx23416 |
| for raw YUV). |
| Actually it looks like this should be 0 for saa7114/5 based card and 1 |
| for cx25840 based cards. |
| 4=generate artificial 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 |
| 13=set audio volume delay |
| 14=set audio delay |
| |
| Param[1] |
| Command value. |