V4L/DVB (4986): Removed unimplemented cx2341x API commands
[powerpc.git] / Documentation / video4linux / cx2341x / fw-encoder-api.txt
1 Encoder firmware API description
2 ================================
3
4 -------------------------------------------------------------------------------
5
6 Name    CX2341X_ENC_PING_FW
7 Enum    128/0x80
8 Description
9         Does nothing. Can be used to check if the firmware is responding.
10
11 -------------------------------------------------------------------------------
12
13 Name    CX2341X_ENC_START_CAPTURE
14 Enum    129/0x81
15 Description
16         Commences the capture of video, audio and/or VBI data. All encoding
17         parameters must be initialized prior to this API call. Captures frames
18         continuously or until a predefined number of frames have been captured.
19 Param[0]
20         Capture stream type:
21             0=MPEG
22             1=Raw
23             2=Raw passthrough
24             3=VBI
25
26 Param[1]
27         Bitmask:
28             Bit 0 when set, captures YUV
29             Bit 1 when set, captures PCM audio
30             Bit 2 when set, captures VBI (same as param[0]=3)
31             Bit 3 when set, the capture destination is the decoder
32                 (same as param[0]=2)
33             Bit 4 when set, the capture destination is the host
34         Note: this parameter is only meaningful for RAW capture type.
35
36 -------------------------------------------------------------------------------
37
38 Name    CX2341X_ENC_STOP_CAPTURE
39 Enum    130/0x82
40 Description
41         Ends a capture in progress
42 Param[0]
43         0=stop at end of GOP (generates IRQ)
44         1=stop immediate (no IRQ)
45 Param[1]
46         Stream type to stop, see param[0] of API 0x81
47 Param[2]
48         Subtype, see param[1] of API 0x81
49
50 -------------------------------------------------------------------------------
51
52 Name    CX2341X_ENC_SET_AUDIO_ID
53 Enum    137/0x89
54 Description
55         Assigns the transport stream ID of the encoded audio stream
56 Param[0]
57         Audio Stream ID
58
59 -------------------------------------------------------------------------------
60
61 Name    CX2341X_ENC_SET_VIDEO_ID
62 Enum    139/0x8B
63 Description
64         Set video transport stream ID
65 Param[0]
66         Video stream ID
67
68 -------------------------------------------------------------------------------
69
70 Name    CX2341X_ENC_SET_PCR_ID
71 Enum    141/0x8D
72 Description
73         Assigns the transport stream ID for PCR packets
74 Param[0]
75         PCR Stream ID
76
77 -------------------------------------------------------------------------------
78
79 Name    CX2341X_ENC_SET_FRAME_RATE
80 Enum    143/0x8F
81 Description
82         Set video frames per second. Change occurs at start of new GOP.
83 Param[0]
84         0=30fps
85         1=25fps
86
87 -------------------------------------------------------------------------------
88
89 Name    CX2341X_ENC_SET_FRAME_SIZE
90 Enum    145/0x91
91 Description
92         Select video stream encoding resolution.
93 Param[0]
94         Height in lines. Default 480
95 Param[1]
96         Width in pixels. Default 720
97
98 -------------------------------------------------------------------------------
99
100 Name    CX2341X_ENC_SET_BIT_RATE
101 Enum    149/0x95
102 Description
103         Assign average video stream bitrate. Note on the last three params:
104         Param[3] and [4] seem to be always 0, param [5] doesn't seem to be used.
105 Param[0]
106         0=variable bitrate, 1=constant bitrate
107 Param[1]
108         bitrate in bits per second
109 Param[2]
110         peak bitrate in bits per second, divided by 400
111 Param[3]
112         Mux bitrate in bits per second, divided by 400. May be 0 (default).
113 Param[4]
114         Rate Control VBR Padding
115 Param[5]
116         VBV Buffer used by encoder
117
118 -------------------------------------------------------------------------------
119
120 Name    CX2341X_ENC_SET_GOP_PROPERTIES
121 Enum    151/0x97
122 Description
123         Setup the GOP structure
124 Param[0]
125         GOP size (maximum is 34)
126 Param[1]
127         Number of B frames between the I and P frame, plus 1.
128         For example: IBBPBBPBBPBB --> GOP size: 12, number of B frames: 2+1 = 3
129         Note that GOP size must be a multiple of (B-frames + 1).
130
131 -------------------------------------------------------------------------------
132
133 Name    CX2341X_ENC_SET_ASPECT_RATIO
134 Enum    153/0x99
135 Description
136         Sets the encoding aspect ratio. Changes in the aspect ratio take effect
137         at the start of the next GOP.
138 Param[0]
139         '0000' forbidden
140         '0001' 1:1 square
141         '0010' 4:3
142         '0011' 16:9
143         '0100' 2.21:1
144         '0101' reserved
145          ....
146         '1111' reserved
147
148 -------------------------------------------------------------------------------
149
150 Name    CX2341X_ENC_SET_DNR_FILTER_MODE
151 Enum    155/0x9B
152 Description
153         Assign Dynamic Noise Reduction operating mode
154 Param[0]
155         Bit0: Spatial filter, set=auto, clear=manual
156         Bit1: Temporal filter, set=auto, clear=manual
157 Param[1]
158         Median filter:
159             0=Disabled
160             1=Horizontal
161             2=Vertical
162             3=Horiz/Vert
163             4=Diagonal
164
165 -------------------------------------------------------------------------------
166
167 Name    CX2341X_ENC_SET_DNR_FILTER_PROPS
168 Enum    157/0x9D
169 Description
170         These Dynamic Noise Reduction filter values are only meaningful when
171         the respective filter is set to "manual" (See API 0x9B)
172 Param[0]
173         Spatial filter: default 0, range 0:15
174 Param[1]
175         Temporal filter: default 0, range 0:31
176
177 -------------------------------------------------------------------------------
178
179 Name    CX2341X_ENC_SET_CORING_LEVELS
180 Enum    159/0x9F
181 Description
182         Assign Dynamic Noise Reduction median filter properties.
183 Param[0]
184         Threshold above which the luminance median filter is enabled.
185         Default: 0, range 0:255
186 Param[1]
187         Threshold below which the luminance median filter is enabled.
188         Default: 255, range 0:255
189 Param[2]
190         Threshold above which the chrominance median filter is enabled.
191         Default: 0, range 0:255
192 Param[3]
193         Threshold below which the chrominance median filter is enabled.
194         Default: 255, range 0:255
195
196 -------------------------------------------------------------------------------
197
198 Name    CX2341X_ENC_SET_SPATIAL_FILTER_TYPE
199 Enum    161/0xA1
200 Description
201         Assign spatial prefilter parameters
202 Param[0]
203         Luminance filter
204             0=Off
205             1=1D Horizontal
206             2=1D Vertical
207             3=2D H/V Separable (default)
208             4=2D Symmetric non-separable
209 Param[1]
210         Chrominance filter
211             0=Off
212             1=1D Horizontal (default)
213
214 -------------------------------------------------------------------------------
215
216 Name    CX2341X_ENC_SET_VBI_LINE
217 Enum    183/0xB7
218 Description
219         Selects VBI line number.
220 Param[0]
221         Bits 0:4        line number
222         Bit  31         0=top_field, 1=bottom_field
223         Bits 0:31       all set specifies "all lines"
224 Param[1]
225         VBI line information features: 0=disabled, 1=enabled
226 Param[2]
227         Slicing: 0=None, 1=Closed Caption
228         Almost certainly not implemented. Set to 0.
229 Param[3]
230         Luminance samples in this line.
231         Almost certainly not implemented. Set to 0.
232 Param[4]
233         Chrominance samples in this line
234         Almost certainly not implemented. Set to 0.
235
236 -------------------------------------------------------------------------------
237
238 Name    CX2341X_ENC_SET_STREAM_TYPE
239 Enum    185/0xB9
240 Description
241         Assign stream type
242         Note: Transport stream is not working in recent firmwares.
243         And in older firmwares the timestamps in the TS seem to be
244         unreliable.
245 Param[0]
246          0=Program stream
247          1=Transport stream
248          2=MPEG1 stream
249          3=PES A/V stream
250          5=PES Video stream
251          7=PES Audio stream
252         10=DVD stream
253         11=VCD stream
254         12=SVCD stream
255         13=DVD_S1 stream
256         14=DVD_S2 stream
257
258 -------------------------------------------------------------------------------
259
260 Name    CX2341X_ENC_SET_OUTPUT_PORT
261 Enum    187/0xBB
262 Description
263         Assign stream output port. Normally 0 when the data is copied through
264         the PCI bus (DMA), and 1 when the data is streamed to another chip
265         (pvrusb and cx88-blackbird).
266 Param[0]
267         0=Memory (default)
268         1=Streaming
269         2=Serial
270 Param[1]
271         Unknown, but leaving this to 0 seems to work best. Indications are that
272         this might have to do with USB support, although passing anything but 0
273         only breaks things.
274
275 -------------------------------------------------------------------------------
276
277 Name    CX2341X_ENC_SET_AUDIO_PROPERTIES
278 Enum    189/0xBD
279 Description
280         Set audio stream properties, may be called while encoding is in progress.
281         Note: all bitfields are consistent with ISO11172 documentation except
282         bits 2:3 which ISO docs define as:
283                 '11' Layer I
284                 '10' Layer II
285                 '01' Layer III
286                 '00' Undefined
287         This discrepancy may indicate a possible error in the documentation.
288         Testing indicated that only Layer II is actually working, and that
289         the minimum bitrate should be 192 kbps.
290 Param[0]
291         Bitmask:
292            0:1  '00' 44.1Khz
293                 '01' 48Khz
294                 '10' 32Khz
295                 '11' reserved
296
297            2:3  '01'=Layer I
298                 '10'=Layer II
299
300            4:7  Bitrate:
301                      Index | Layer I     | Layer II
302                      ------+-------------+------------
303                     '0000' | free format | free format
304                     '0001' |  32 kbit/s  |  32 kbit/s
305                     '0010' |  64 kbit/s  |  48 kbit/s
306                     '0011' |  96 kbit/s  |  56 kbit/s
307                     '0100' | 128 kbit/s  |  64 kbit/s
308                     '0101' | 160 kbit/s  |  80 kbit/s
309                     '0110' | 192 kbit/s  |  96 kbit/s
310                     '0111' | 224 kbit/s  | 112 kbit/s
311                     '1000' | 256 kbit/s  | 128 kbit/s
312                     '1001' | 288 kbit/s  | 160 kbit/s
313                     '1010' | 320 kbit/s  | 192 kbit/s
314                     '1011' | 352 kbit/s  | 224 kbit/s
315                     '1100' | 384 kbit/s  | 256 kbit/s
316                     '1101' | 416 kbit/s  | 320 kbit/s
317                     '1110' | 448 kbit/s  | 384 kbit/s
318                 Note: For Layer II, not all combinations of total bitrate
319                 and mode are allowed. See ISO11172-3 3-Annex B, Table 3-B.2
320
321            8:9  '00'=Stereo
322                 '01'=JointStereo
323                 '10'=Dual
324                 '11'=Mono
325                 Note: testing seems to indicate that Mono and possibly
326                 JointStereo are not working (default to stereo).
327                 Dual does work, though.
328
329           10:11 Mode Extension used in joint_stereo mode.
330                 In Layer I and II they indicate which subbands are in
331                 intensity_stereo. All other subbands are coded in stereo.
332                     '00' subbands 4-31 in intensity_stereo, bound==4
333                     '01' subbands 8-31 in intensity_stereo, bound==8
334                     '10' subbands 12-31 in intensity_stereo, bound==12
335                     '11' subbands 16-31 in intensity_stereo, bound==16
336
337           12:13 Emphasis:
338                     '00' None
339                     '01' 50/15uS
340                     '10' reserved
341                     '11' CCITT J.17
342
343           14    CRC:
344                     '0' off
345                     '1' on
346
347           15    Copyright:
348                     '0' off
349                     '1' on
350
351           16    Generation:
352                     '0' copy
353                     '1' original
354
355 -------------------------------------------------------------------------------
356
357 Name    CX2341X_ENC_HALT_FW
358 Enum    195/0xC3
359 Description
360         The firmware is halted and no further API calls are serviced until the
361         firmware is uploaded again.
362
363 -------------------------------------------------------------------------------
364
365 Name    CX2341X_ENC_GET_VERSION
366 Enum    196/0xC4
367 Description
368         Returns the version of the encoder firmware.
369 Result[0]
370         Version bitmask:
371             Bits  0:15 build
372             Bits 16:23 minor
373             Bits 24:31 major
374
375 -------------------------------------------------------------------------------
376
377 Name    CX2341X_ENC_SET_GOP_CLOSURE
378 Enum    197/0xC5
379 Description
380         Assigns the GOP open/close property.
381 Param[0]
382         0=Open
383         1=Closed
384
385 -------------------------------------------------------------------------------
386
387 Name    CX2341X_ENC_GET_SEQ_END
388 Enum    198/0xC6
389 Description
390         Obtains the sequence end code of the encoder's buffer. When a capture
391         is started a number of interrupts are still generated, the last of
392         which will have Result[0] set to 1 and Result[1] will contain the size
393         of the buffer.
394 Result[0]
395         State of the transfer (1 if last buffer)
396 Result[1]
397         If Result[0] is 1, this contains the size of the last buffer, undefined
398         otherwise.
399
400 -------------------------------------------------------------------------------
401
402 Name    CX2341X_ENC_SET_PGM_INDEX_INFO
403 Enum    199/0xC7
404 Description
405         Sets the Program Index Information.
406 Param[0]
407         Picture Mask:
408             0=No index capture
409             1=I frames
410             3=I,P frames
411             7=I,P,B frames
412 Param[1]
413         Elements requested (up to 400)
414 Result[0]
415         Offset in SDF memory of the table.
416 Result[1]
417         Number of allocated elements up to a maximum of Param[1]
418
419 -------------------------------------------------------------------------------
420
421 Name    CX2341X_ENC_SET_VBI_CONFIG
422 Enum    200/0xC8
423 Description
424         Configure VBI settings
425 Param[0]
426         Bitmap:
427             0    Mode '0' Sliced, '1' Raw
428             1:3  Insertion:
429                      '000' insert in extension & user data
430                      '001' insert in private packets
431                      '010' separate stream and user data
432                      '111' separate stream and private data
433             8:15 Stream ID (normally 0xBD)
434 Param[1]
435         Frames per interrupt (max 8). Only valid in raw mode.
436 Param[2]
437         Total raw VBI frames. Only valid in raw mode.
438 Param[3]
439         Start codes
440 Param[4]
441         Stop codes
442 Param[5]
443         Lines per frame
444 Param[6]
445         Byte per line
446 Result[0]
447         Observed frames per interrupt in raw mode only. Rage 1 to Param[1]
448 Result[1]
449         Observed number of frames in raw mode. Range 1 to Param[2]
450 Result[2]
451         Memory offset to start or raw VBI data
452
453 -------------------------------------------------------------------------------
454
455 Name    CX2341X_ENC_SET_DMA_BLOCK_SIZE
456 Enum    201/0xC9
457 Description
458         Set DMA transfer block size
459 Param[0]
460         DMA transfer block size in bytes or frames. When unit is bytes,
461         supported block sizes are 2^7, 2^8 and 2^9 bytes.
462 Param[1]
463         Unit: 0=bytes, 1=frames
464
465 -------------------------------------------------------------------------------
466
467 Name    CX2341X_ENC_GET_PREV_DMA_INFO_MB_10
468 Enum    202/0xCA
469 Description
470         Returns information on the previous DMA transfer in conjunction with
471         bit 27 of the interrupt mask. Uses mailbox 10.
472 Result[0]
473         Type of stream
474 Result[1]
475         Address Offset
476 Result[2]
477         Maximum size of transfer
478
479 -------------------------------------------------------------------------------
480
481 Name    CX2341X_ENC_GET_PREV_DMA_INFO_MB_9
482 Enum    203/0xCB
483 Description
484         Returns information on the previous DMA transfer in conjunction with
485         bit 27 of the interrupt mask. Uses mailbox 9.
486 Result[0]
487         Status bits:
488             Bit 0 set indicates transfer complete
489             Bit 2 set indicates transfer error
490             Bit 4 set indicates linked list error
491 Result[1]
492         DMA type
493 Result[2]
494         Presentation Time Stamp bits 0..31
495 Result[3]
496         Presentation Time Stamp bit 32
497
498 -------------------------------------------------------------------------------
499
500 Name    CX2341X_ENC_SCHED_DMA_TO_HOST
501 Enum    204/0xCC
502 Description
503         Setup DMA to host operation
504 Param[0]
505         Memory address of link list
506 Param[1]
507         Length of link list (wtf: what units ???)
508 Param[2]
509         DMA type (0=MPEG)
510
511 -------------------------------------------------------------------------------
512
513 Name    CX2341X_ENC_INITIALIZE_INPUT
514 Enum    205/0xCD
515 Description
516         Initializes the video input
517
518 -------------------------------------------------------------------------------
519
520 Name    CX2341X_ENC_SET_FRAME_DROP_RATE
521 Enum    208/0xD0
522 Description
523         For each frame captured, skip specified number of frames.
524 Param[0]
525         Number of frames to skip
526
527 -------------------------------------------------------------------------------
528
529 Name    CX2341X_ENC_PAUSE_ENCODER
530 Enum    210/0xD2
531 Description
532         During a pause condition, all frames are dropped instead of being encoded.
533 Param[0]
534         0=Pause encoding
535         1=Continue encoding
536
537 -------------------------------------------------------------------------------
538
539 Name    CX2341X_ENC_REFRESH_INPUT
540 Enum    211/0xD3
541 Description
542         Refreshes the video input
543
544 -------------------------------------------------------------------------------
545
546 Name    CX2341X_ENC_SET_COPYRIGHT
547 Enum    212/0xD4
548 Description
549         Sets stream copyright property
550 Param[0]
551         0=Stream is not copyrighted
552         1=Stream is copyrighted
553
554 -------------------------------------------------------------------------------
555
556 Name    CX2341X_ENC_SET_EVENT_NOTIFICATION
557 Enum    213/0xD5
558 Description
559         Setup firmware to notify the host about a particular event. Host must
560         unmask the interrupt bit.
561 Param[0]
562         Event (0=refresh encoder input)
563 Param[1]
564         Notification 0=disabled 1=enabled
565 Param[2]
566         Interrupt bit
567 Param[3]
568         Mailbox slot, -1 if no mailbox required.
569
570 -------------------------------------------------------------------------------
571
572 Name    CX2341X_ENC_SET_NUM_VSYNC_LINES
573 Enum    214/0xD6
574 Description
575         Depending on the analog video decoder used, this assigns the number
576         of lines for field 1 and 2.
577 Param[0]
578         Field 1 number of lines:
579             0x00EF for SAA7114
580             0x00F0 for SAA7115
581             0x0105 for Micronas
582 Param[1]
583         Field 2 number of lines:
584             0x00EF for SAA7114
585             0x00F0 for SAA7115
586             0x0106 for Micronas
587
588 -------------------------------------------------------------------------------
589
590 Name    CX2341X_ENC_SET_PLACEHOLDER
591 Enum    215/0xD7
592 Description
593         Provides a mechanism of inserting custom user data in the MPEG stream.
594 Param[0]
595         0=extension & user data
596         1=private packet with stream ID 0xBD
597 Param[1]
598         Rate at which to insert data, in units of frames (for private packet)
599         or GOPs (for ext. & user data)
600 Param[2]
601         Number of data DWORDs (below) to insert
602 Param[3]
603         Custom data 0
604 Param[4]
605         Custom data 1
606 Param[5]
607         Custom data 2
608 Param[6]
609         Custom data 3
610 Param[7]
611         Custom data 4
612 Param[8]
613         Custom data 5
614 Param[9]
615         Custom data 6
616 Param[10]
617         Custom data 7
618 Param[11]
619         Custom data 8
620
621 -------------------------------------------------------------------------------
622
623 Name    CX2341X_ENC_MUTE_VIDEO
624 Enum    217/0xD9
625 Description
626         Video muting
627 Param[0]
628         Bit usage:
629          0      '0'=video not muted
630                 '1'=video muted, creates frames with the YUV color defined below
631          1:7    Unused
632          8:15   V chrominance information
633         16:23   U chrominance information
634         24:31   Y luminance information
635
636 -------------------------------------------------------------------------------
637
638 Name    CX2341X_ENC_MUTE_AUDIO
639 Enum    218/0xDA
640 Description
641         Audio muting
642 Param[0]
643         0=audio not muted
644         1=audio muted (produces silent mpeg audio stream)
645
646 -------------------------------------------------------------------------------
647
648 Name    CX2341X_ENC_UNKNOWN
649 Enum    219/0xDB
650 Description
651         Unknown API, it's used by Hauppauge though.
652 Param[0]
653         0 This is the value Hauppauge uses, Unknown what it means.
654
655 -------------------------------------------------------------------------------
656
657 Name    CX2341X_ENC_MISC
658 Enum    220/0xDC
659 Description
660         Miscellaneous actions. Not known for 100% what it does. It's really a
661         sort of ioctl call. The first parameter is a command number, the second
662         the value.
663 Param[0]
664         Command number:
665          1=set initial SCR value when starting encoding.
666          2=set quality mode (apparently some test setting).
667          3=setup advanced VIM protection handling (supposedly only for the cx23416
668            for raw YUV).
669            Actually it looks like this should be 0 for saa7114/5 based card and 1
670            for cx25840 based cards.
671          4=generate artificial PTS timestamps
672          5=USB flush mode
673          6=something to do with the quantization matrix
674          7=set navigation pack insertion for DVD
675          8=enable scene change detection (seems to be a failure)
676          9=set history parameters of the video input module
677         10=set input field order of VIM
678         11=set quantization matrix
679         12=reset audio interface
680         13=set audio volume delay
681         14=set audio delay
682
683 Param[1]
684         Command value.