1Encoder firmware API description 2================================ 3 4------------------------------------------------------------------------------- 5 6Name CX2341X_ENC_PING_FW 7Enum 128/0x80 8Description 9 Does nothing. Can be used to check if the firmware is responding. 10 11------------------------------------------------------------------------------- 12 13Name CX2341X_ENC_START_CAPTURE 14Enum 129/0x81 15Description 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. 19Param[0] 20 Capture stream type: 21 0=MPEG 22 1=Raw 23 2=Raw passthrough 24 3=VBI 25 26Param[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 38Name CX2341X_ENC_STOP_CAPTURE 39Enum 130/0x82 40Description 41 Ends a capture in progress 42Param[0] 43 0=stop at end of GOP (generates IRQ) 44 1=stop immediate (no IRQ) 45Param[1] 46 Stream type to stop, see param[0] of API 0x81 47Param[2] 48 Subtype, see param[1] of API 0x81 49 50------------------------------------------------------------------------------- 51 52Name CX2341X_ENC_SET_AUDIO_ID 53Enum 137/0x89 54Description 55 Assigns the transport stream ID of the encoded audio stream 56Param[0] 57 Audio Stream ID 58 59------------------------------------------------------------------------------- 60 61Name CX2341X_ENC_SET_VIDEO_ID 62Enum 139/0x8B 63Description 64 Set video transport stream ID 65Param[0] 66 Video stream ID 67 68------------------------------------------------------------------------------- 69 70Name CX2341X_ENC_SET_PCR_ID 71Enum 141/0x8D 72Description 73 Assigns the transport stream ID for PCR packets 74Param[0] 75 PCR Stream ID 76 77------------------------------------------------------------------------------- 78 79Name CX2341X_ENC_SET_FRAME_RATE 80Enum 143/0x8F 81Description 82 Set video frames per second. Change occurs at start of new GOP. 83Param[0] 84 0=30fps 85 1=25fps 86 87------------------------------------------------------------------------------- 88 89Name CX2341X_ENC_SET_FRAME_SIZE 90Enum 145/0x91 91Description 92 Select video stream encoding resolution. 93Param[0] 94 Height in lines. Default 480 95Param[1] 96 Width in pixels. Default 720 97 98------------------------------------------------------------------------------- 99 100Name CX2341X_ENC_SET_BIT_RATE 101Enum 149/0x95 102Description 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. 105Param[0] 106 0=variable bitrate, 1=constant bitrate 107Param[1] 108 bitrate in bits per second 109Param[2] 110 peak bitrate in bits per second, divided by 400 111Param[3] 112 Mux bitrate in bits per second, divided by 400. May be 0 (default). 113Param[4] 114 Rate Control VBR Padding 115Param[5] 116 VBV Buffer used by encoder 117 118------------------------------------------------------------------------------- 119 120Name CX2341X_ENC_SET_GOP_PROPERTIES 121Enum 151/0x97 122Description 123 Setup the GOP structure 124Param[0] 125 GOP size (maximum is 34) 126Param[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 133Name CX2341X_ENC_SET_ASPECT_RATIO 134Enum 153/0x99 135Description 136 Sets the encoding aspect ratio. Changes in the aspect ratio take effect 137 at the start of the next GOP. 138Param[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 150Name CX2341X_ENC_SET_DNR_FILTER_MODE 151Enum 155/0x9B 152Description 153 Assign Dynamic Noise Reduction operating mode 154Param[0] 155 Bit0: Spatial filter, set=auto, clear=manual 156 Bit1: Temporal filter, set=auto, clear=manual 157Param[1] 158 Median filter: 159 0=Disabled 160 1=Horizontal 161 2=Vertical 162 3=Horiz/Vert 163 4=Diagonal 164 165------------------------------------------------------------------------------- 166 167Name CX2341X_ENC_SET_DNR_FILTER_PROPS 168Enum 157/0x9D 169Description 170 These Dynamic Noise Reduction filter values are only meaningful when 171 the respective filter is set to "manual" (See API 0x9B) 172Param[0] 173 Spatial filter: default 0, range 0:15 174Param[1] 175 Temporal filter: default 0, range 0:31 176 177------------------------------------------------------------------------------- 178 179Name CX2341X_ENC_SET_CORING_LEVELS 180Enum 159/0x9F 181Description 182 Assign Dynamic Noise Reduction median filter properties. 183Param[0] 184 Threshold above which the luminance median filter is enabled. 185 Default: 0, range 0:255 186Param[1] 187 Threshold below which the luminance median filter is enabled. 188 Default: 255, range 0:255 189Param[2] 190 Threshold above which the chrominance median filter is enabled. 191 Default: 0, range 0:255 192Param[3] 193 Threshold below which the chrominance median filter is enabled. 194 Default: 255, range 0:255 195 196------------------------------------------------------------------------------- 197 198Name CX2341X_ENC_SET_SPATIAL_FILTER_TYPE 199Enum 161/0xA1 200Description 201 Assign spatial prefilter parameters 202Param[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 209Param[1] 210 Chrominance filter 211 0=Off 212 1=1D Horizontal (default) 213 214------------------------------------------------------------------------------- 215 216Name CX2341X_ENC_SET_VBI_LINE 217Enum 183/0xB7 218Description 219 Selects VBI line number. 220Param[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" 224Param[1] 225 VBI line information features: 0=disabled, 1=enabled 226Param[2] 227 Slicing: 0=None, 1=Closed Caption 228 Almost certainly not implemented. Set to 0. 229Param[3] 230 Luminance samples in this line. 231 Almost certainly not implemented. Set to 0. 232Param[4] 233 Chrominance samples in this line 234 Almost certainly not implemented. Set to 0. 235 236------------------------------------------------------------------------------- 237 238Name CX2341X_ENC_SET_STREAM_TYPE 239Enum 185/0xB9 240Description 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. 245Param[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 260Name CX2341X_ENC_SET_OUTPUT_PORT 261Enum 187/0xBB 262Description 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). 266Param[0] 267 0=Memory (default) 268 1=Streaming 269 2=Serial 270Param[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 277Name CX2341X_ENC_SET_AUDIO_PROPERTIES 278Enum 189/0xBD 279Description 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. 290Param[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: the cx23415 cannot decode Joint Stereo properly. 326 327 10:11 Mode Extension used in joint_stereo mode. 328 In Layer I and II they indicate which subbands are in 329 intensity_stereo. All other subbands are coded in stereo. 330 '00' subbands 4-31 in intensity_stereo, bound==4 331 '01' subbands 8-31 in intensity_stereo, bound==8 332 '10' subbands 12-31 in intensity_stereo, bound==12 333 '11' subbands 16-31 in intensity_stereo, bound==16 334 335 12:13 Emphasis: 336 '00' None 337 '01' 50/15uS 338 '10' reserved 339 '11' CCITT J.17 340 341 14 CRC: 342 '0' off 343 '1' on 344 345 15 Copyright: 346 '0' off 347 '1' on 348 349 16 Generation: 350 '0' copy 351 '1' original 352 353------------------------------------------------------------------------------- 354 355Name CX2341X_ENC_HALT_FW 356Enum 195/0xC3 357Description 358 The firmware is halted and no further API calls are serviced until the 359 firmware is uploaded again. 360 361------------------------------------------------------------------------------- 362 363Name CX2341X_ENC_GET_VERSION 364Enum 196/0xC4 365Description 366 Returns the version of the encoder firmware. 367Result[0] 368 Version bitmask: 369 Bits 0:15 build 370 Bits 16:23 minor 371 Bits 24:31 major 372 373------------------------------------------------------------------------------- 374 375Name CX2341X_ENC_SET_GOP_CLOSURE 376Enum 197/0xC5 377Description 378 Assigns the GOP open/close property. 379Param[0] 380 0=Open 381 1=Closed 382 383------------------------------------------------------------------------------- 384 385Name CX2341X_ENC_GET_SEQ_END 386Enum 198/0xC6 387Description 388 Obtains the sequence end code of the encoder's buffer. When a capture 389 is started a number of interrupts are still generated, the last of 390 which will have Result[0] set to 1 and Result[1] will contain the size 391 of the buffer. 392Result[0] 393 State of the transfer (1 if last buffer) 394Result[1] 395 If Result[0] is 1, this contains the size of the last buffer, undefined 396 otherwise. 397 398------------------------------------------------------------------------------- 399 400Name CX2341X_ENC_SET_PGM_INDEX_INFO 401Enum 199/0xC7 402Description 403 Sets the Program Index Information. 404 The information is stored as follows: 405 406 struct info { 407 u32 length; // Length of this frame 408 u32 offset_low; // Offset in the file of the 409 u32 offset_high; // start of this frame 410 u32 mask1; // Bits 0-2 are the type mask: 411 // 1=I, 2=P, 4=B 412 // 0=End of Program Index, other fields 413 // are invalid. 414 u32 pts; // The PTS of the frame 415 u32 mask2; // Bit 0 is bit 32 of the pts. 416 }; 417 u32 table_ptr; 418 struct info index[400]; 419 420 The table_ptr is the encoder memory address in the table were 421 *new* entries will be written. Note that this is a ringbuffer, 422 so the table_ptr will wraparound. 423Param[0] 424 Picture Mask: 425 0=No index capture 426 1=I frames 427 3=I,P frames 428 7=I,P,B frames 429 (Seems to be ignored, it always indexes I, P and B frames) 430Param[1] 431 Elements requested (up to 400) 432Result[0] 433 Offset in the encoder memory of the start of the table. 434Result[1] 435 Number of allocated elements up to a maximum of Param[1] 436 437------------------------------------------------------------------------------- 438 439Name CX2341X_ENC_SET_VBI_CONFIG 440Enum 200/0xC8 441Description 442 Configure VBI settings 443Param[0] 444 Bitmap: 445 0 Mode '0' Sliced, '1' Raw 446 1:3 Insertion: 447 '000' insert in extension & user data 448 '001' insert in private packets 449 '010' separate stream and user data 450 '111' separate stream and private data 451 8:15 Stream ID (normally 0xBD) 452Param[1] 453 Frames per interrupt (max 8). Only valid in raw mode. 454Param[2] 455 Total raw VBI frames. Only valid in raw mode. 456Param[3] 457 Start codes 458Param[4] 459 Stop codes 460Param[5] 461 Lines per frame 462Param[6] 463 Byte per line 464Result[0] 465 Observed frames per interrupt in raw mode only. Rage 1 to Param[1] 466Result[1] 467 Observed number of frames in raw mode. Range 1 to Param[2] 468Result[2] 469 Memory offset to start or raw VBI data 470 471------------------------------------------------------------------------------- 472 473Name CX2341X_ENC_SET_DMA_BLOCK_SIZE 474Enum 201/0xC9 475Description 476 Set DMA transfer block size 477Param[0] 478 DMA transfer block size in bytes or frames. When unit is bytes, 479 supported block sizes are 2^7, 2^8 and 2^9 bytes. 480Param[1] 481 Unit: 0=bytes, 1=frames 482 483------------------------------------------------------------------------------- 484 485Name CX2341X_ENC_GET_PREV_DMA_INFO_MB_10 486Enum 202/0xCA 487Description 488 Returns information on the previous DMA transfer in conjunction with 489 bit 27 of the interrupt mask. Uses mailbox 10. 490Result[0] 491 Type of stream 492Result[1] 493 Address Offset 494Result[2] 495 Maximum size of transfer 496 497------------------------------------------------------------------------------- 498 499Name CX2341X_ENC_GET_PREV_DMA_INFO_MB_9 500Enum 203/0xCB 501Description 502 Returns information on the previous DMA transfer in conjunction with 503 bit 27 or 18 of the interrupt mask. Uses mailbox 9. 504Result[0] 505 Status bits: 506 0 read completed 507 1 write completed 508 2 DMA read error 509 3 DMA write error 510 4 Scatter-Gather array error 511Result[1] 512 DMA type 513Result[2] 514 Presentation Time Stamp bits 0..31 515Result[3] 516 Presentation Time Stamp bit 32 517 518------------------------------------------------------------------------------- 519 520Name CX2341X_ENC_SCHED_DMA_TO_HOST 521Enum 204/0xCC 522Description 523 Setup DMA to host operation 524Param[0] 525 Memory address of link list 526Param[1] 527 Length of link list (wtf: what units ???) 528Param[2] 529 DMA type (0=MPEG) 530 531------------------------------------------------------------------------------- 532 533Name CX2341X_ENC_INITIALIZE_INPUT 534Enum 205/0xCD 535Description 536 Initializes the video input 537 538------------------------------------------------------------------------------- 539 540Name CX2341X_ENC_SET_FRAME_DROP_RATE 541Enum 208/0xD0 542Description 543 For each frame captured, skip specified number of frames. 544Param[0] 545 Number of frames to skip 546 547------------------------------------------------------------------------------- 548 549Name CX2341X_ENC_PAUSE_ENCODER 550Enum 210/0xD2 551Description 552 During a pause condition, all frames are dropped instead of being encoded. 553Param[0] 554 0=Pause encoding 555 1=Continue encoding 556 557------------------------------------------------------------------------------- 558 559Name CX2341X_ENC_REFRESH_INPUT 560Enum 211/0xD3 561Description 562 Refreshes the video input 563 564------------------------------------------------------------------------------- 565 566Name CX2341X_ENC_SET_COPYRIGHT 567Enum 212/0xD4 568Description 569 Sets stream copyright property 570Param[0] 571 0=Stream is not copyrighted 572 1=Stream is copyrighted 573 574------------------------------------------------------------------------------- 575 576Name CX2341X_ENC_SET_EVENT_NOTIFICATION 577Enum 213/0xD5 578Description 579 Setup firmware to notify the host about a particular event. Host must 580 unmask the interrupt bit. 581Param[0] 582 Event (0=refresh encoder input) 583Param[1] 584 Notification 0=disabled 1=enabled 585Param[2] 586 Interrupt bit 587Param[3] 588 Mailbox slot, -1 if no mailbox required. 589 590------------------------------------------------------------------------------- 591 592Name CX2341X_ENC_SET_NUM_VSYNC_LINES 593Enum 214/0xD6 594Description 595 Depending on the analog video decoder used, this assigns the number 596 of lines for field 1 and 2. 597Param[0] 598 Field 1 number of lines: 599 0x00EF for SAA7114 600 0x00F0 for SAA7115 601 0x0105 for Micronas 602Param[1] 603 Field 2 number of lines: 604 0x00EF for SAA7114 605 0x00F0 for SAA7115 606 0x0106 for Micronas 607 608------------------------------------------------------------------------------- 609 610Name CX2341X_ENC_SET_PLACEHOLDER 611Enum 215/0xD7 612Description 613 Provides a mechanism of inserting custom user data in the MPEG stream. 614Param[0] 615 0=extension & user data 616 1=private packet with stream ID 0xBD 617Param[1] 618 Rate at which to insert data, in units of frames (for private packet) 619 or GOPs (for ext. & user data) 620Param[2] 621 Number of data DWORDs (below) to insert 622Param[3] 623 Custom data 0 624Param[4] 625 Custom data 1 626Param[5] 627 Custom data 2 628Param[6] 629 Custom data 3 630Param[7] 631 Custom data 4 632Param[8] 633 Custom data 5 634Param[9] 635 Custom data 6 636Param[10] 637 Custom data 7 638Param[11] 639 Custom data 8 640 641------------------------------------------------------------------------------- 642 643Name CX2341X_ENC_MUTE_VIDEO 644Enum 217/0xD9 645Description 646 Video muting 647Param[0] 648 Bit usage: 649 0 '0'=video not muted 650 '1'=video muted, creates frames with the YUV color defined below 651 1:7 Unused 652 8:15 V chrominance information 653 16:23 U chrominance information 654 24:31 Y luminance information 655 656------------------------------------------------------------------------------- 657 658Name CX2341X_ENC_MUTE_AUDIO 659Enum 218/0xDA 660Description 661 Audio muting 662Param[0] 663 0=audio not muted 664 1=audio muted (produces silent mpeg audio stream) 665 666------------------------------------------------------------------------------- 667 668Name CX2341X_ENC_SET_VERT_CROP_LINE 669Enum 219/0xDB 670Description 671 Something to do with 'Vertical Crop Line' 672Param[0] 673 If saa7114 and raw VBI capture and 60 Hz, then set to 10001. 674 Else 0. 675 676------------------------------------------------------------------------------- 677 678Name CX2341X_ENC_MISC 679Enum 220/0xDC 680Description 681 Miscellaneous actions. Not known for 100% what it does. It's really a 682 sort of ioctl call. The first parameter is a command number, the second 683 the value. 684Param[0] 685 Command number: 686 1=set initial SCR value when starting encoding (works). 687 2=set quality mode (apparently some test setting). 688 3=setup advanced VIM protection handling. 689 Always 1 for the cx23416 and 0 for cx23415. 690 4=generate DVD compatible PTS timestamps 691 5=USB flush mode 692 6=something to do with the quantization matrix 693 7=set navigation pack insertion for DVD: adds 0xbf (private stream 2) 694 packets to the MPEG. The size of these packets is 2048 bytes (including 695 the header of 6 bytes: 0x000001bf + length). The payload is zeroed and 696 it is up to the application to fill them in. These packets are apparently 697 inserted every four frames. 698 8=enable scene change detection (seems to be a failure) 699 9=set history parameters of the video input module 700 10=set input field order of VIM 701 11=set quantization matrix 702 12=reset audio interface after channel change or input switch (has no argument). 703 Needed for the cx2584x, not needed for the mspx4xx, but it doesn't seem to 704 do any harm calling it regardless. 705 13=set audio volume delay 706 14=set audio delay 707 708Param[1] 709 Command value. 710