1 /****************************************************************************** 2 * 3 * Copyright (C) 2015 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ***************************************************************************** 18 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19 */ 20 /*****************************************************************************/ 21 /* */ 22 /* File Name : ih264e.h */ 23 /* */ 24 /* Description : This file contains all the necessary structure and */ 25 /* enumeration definitions needed for the Application */ 26 /* Program Interface(API) of the Ittiam MPEG4 */ 27 /* Encoder on Cortex A8 - Neon platform */ 28 /* */ 29 /* List of Functions : ih264e_api_function */ 30 /* */ 31 /* Issues / Problems : None */ 32 /* */ 33 /* Revision History : */ 34 /* */ 35 /* DD MM YYYY Author(s) Changes (Describe the changes made) */ 36 /* 26 08 2010 100239(RCY) Draft */ 37 /* */ 38 /*****************************************************************************/ 39 40 #ifndef _IH264E_H_ 41 #define _IH264E_H_ 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 #include "iv2.h" 48 #include "ive2.h" 49 /*****************************************************************************/ 50 /* Constant Macros */ 51 /*****************************************************************************/ 52 53 54 /*****************************************************************************/ 55 /* API Function Prototype */ 56 /*****************************************************************************/ 57 IV_STATUS_T ih264e_api_function(iv_obj_t *ps_handle, void *pv_api_ip,void *pv_api_op); 58 59 /*****************************************************************************/ 60 /* Enums */ 61 /*****************************************************************************/ 62 typedef enum 63 { 64 IH264E_CMD_CTL_SET_ME_INFO_ENABLE, 65 }IH264E_CMD_CTL_SUB_CMDS; 66 67 68 /*****************************************************************************/ 69 /* Extended Structures */ 70 /*****************************************************************************/ 71 72 /*****************************************************************************/ 73 /* Get Number of Memory Records */ 74 /*****************************************************************************/ 75 76 77 typedef struct 78 { 79 iv_num_mem_rec_ip_t s_ive_ip; 80 }ih264e_num_mem_rec_ip_t; 81 82 83 typedef struct 84 { 85 iv_num_mem_rec_op_t s_ive_op; 86 }ih264e_num_mem_rec_op_t; 87 88 89 /*****************************************************************************/ 90 /* Fill Memory Records */ 91 /*****************************************************************************/ 92 93 94 typedef struct 95 { 96 iv_fill_mem_rec_ip_t s_ive_ip; 97 }ih264e_fill_mem_rec_ip_t; 98 99 100 typedef struct 101 { 102 iv_fill_mem_rec_op_t s_ive_op; 103 }ih264e_fill_mem_rec_op_t; 104 105 /*****************************************************************************/ 106 /* Retrieve Memory Records */ 107 /*****************************************************************************/ 108 109 110 typedef struct 111 { 112 iv_retrieve_mem_rec_ip_t s_ive_ip; 113 }ih264e_retrieve_mem_rec_ip_t; 114 115 116 typedef struct 117 { 118 iv_retrieve_mem_rec_op_t s_ive_op; 119 }ih264e_retrieve_mem_rec_op_t; 120 121 122 /*****************************************************************************/ 123 /* Initialize encoder */ 124 /*****************************************************************************/ 125 126 typedef struct 127 { 128 ive_init_ip_t s_ive_ip; 129 }ih264e_init_ip_t; 130 131 132 typedef struct 133 { 134 ive_init_op_t s_ive_op; 135 }ih264e_init_op_t; 136 137 138 /*****************************************************************************/ 139 /* Queue Input raw buffer - Send the YUV buffer to be encoded */ 140 /*****************************************************************************/ 141 typedef struct 142 { 143 ive_queue_inp_ip_t s_ive_ip; 144 }ih264e_queue_inp_ip_t; 145 146 typedef struct 147 { 148 ive_queue_inp_op_t s_ive_op; 149 }ih264e_queue_inp_op_t; 150 151 /*****************************************************************************/ 152 /* Dequeue Input raw buffer - Get free YUV buffer from the encoder */ 153 /*****************************************************************************/ 154 typedef struct 155 { 156 ive_dequeue_inp_ip_t s_ive_ip; 157 }ih264e_dequeue_inp_ip_t; 158 159 typedef struct 160 { 161 ive_dequeue_inp_op_t s_ive_op; 162 }ih264e_dequeue_inp_op_t; 163 164 165 /*****************************************************************************/ 166 /* Queue Output bitstream buffer - Send the bistream buffer to be filled */ 167 /*****************************************************************************/ 168 typedef struct 169 { 170 ive_queue_out_ip_t s_ive_ip; 171 }ih264e_queue_out_ip_t; 172 173 typedef struct 174 { 175 ive_queue_out_op_t s_ive_op; 176 }ih264e_queue_out_op_t; 177 178 /*****************************************************************************/ 179 /* Dequeue Output bitstream buffer - Get the bistream buffer filled */ 180 /*****************************************************************************/ 181 typedef struct 182 { 183 ive_dequeue_out_ip_t s_ive_ip; 184 }ih264e_dequeue_out_ip_t; 185 186 typedef struct 187 { 188 ive_dequeue_out_op_t s_ive_op; 189 }ih264e_dequeue_out_op_t; 190 191 192 /*****************************************************************************/ 193 /* Get Recon data - Get the reconstructed data from encoder */ 194 /*****************************************************************************/ 195 typedef struct 196 { 197 ive_get_recon_ip_t s_ive_ip; 198 }ih264e_get_recon_ip_t; 199 200 typedef struct 201 { 202 ive_get_recon_op_t s_ive_op; 203 }ih264e_get_recon_op_t; 204 /*****************************************************************************/ 205 /* Video control Flush */ 206 /*****************************************************************************/ 207 208 209 typedef struct 210 { 211 ive_ctl_flush_ip_t s_ive_ip; 212 }ih264e_ctl_flush_ip_t; 213 214 215 typedef struct 216 { 217 ive_ctl_flush_op_t s_ive_op; 218 }ih264e_ctl_flush_op_t; 219 220 /*****************************************************************************/ 221 /* Video control reset */ 222 /*****************************************************************************/ 223 224 225 typedef struct 226 { 227 ive_ctl_reset_ip_t s_ive_ip; 228 }ih264e_ctl_reset_ip_t; 229 230 231 typedef struct 232 { 233 ive_ctl_reset_op_t s_ive_op; 234 }ih264e_ctl_reset_op_t; 235 236 237 /*****************************************************************************/ 238 /* Video control:Get Buf Info */ 239 /*****************************************************************************/ 240 241 242 typedef struct 243 { 244 ive_ctl_getbufinfo_ip_t s_ive_ip; 245 }ih264e_ctl_getbufinfo_ip_t; 246 247 248 249 typedef struct 250 { 251 ive_ctl_getbufinfo_op_t s_ive_op; 252 }ih264e_ctl_getbufinfo_op_t; 253 254 255 256 /*****************************************************************************/ 257 /* Video control:Get Version Info */ 258 /*****************************************************************************/ 259 260 261 typedef struct 262 { 263 ive_ctl_getversioninfo_ip_t s_ive_ip; 264 }ih264e_ctl_getversioninfo_ip_t; 265 266 267 268 typedef struct 269 { 270 ive_ctl_getversioninfo_op_t s_ive_op; 271 }ih264e_ctl_getversioninfo_op_t; 272 273 /*****************************************************************************/ 274 /* Video control:Set default params */ 275 /*****************************************************************************/ 276 277 278 typedef struct 279 { 280 ive_ctl_setdefault_ip_t s_ive_ip; 281 }ih264e_ctl_setdefault_ip_t; 282 283 284 285 typedef struct 286 { 287 ive_ctl_setdefault_op_t s_ive_op; 288 }ih264e_ctl_setdefault_op_t; 289 290 /*****************************************************************************/ 291 /* Video control Set IPE params */ 292 /*****************************************************************************/ 293 typedef struct 294 { 295 ive_ctl_set_ipe_params_ip_t s_ive_ip; 296 }ih264e_ctl_set_ipe_params_ip_t; 297 298 typedef struct 299 { 300 ive_ctl_set_ipe_params_op_t s_ive_op; 301 }ih264e_ctl_set_ipe_params_op_t; 302 303 /*****************************************************************************/ 304 /* Video control Set Frame dimensions */ 305 /*****************************************************************************/ 306 typedef struct 307 { 308 ive_ctl_set_dimensions_ip_t s_ive_ip; 309 }ih264e_ctl_set_dimensions_ip_t; 310 311 typedef struct 312 { 313 ive_ctl_set_dimensions_op_t s_ive_op; 314 }ih264e_ctl_set_dimensions_op_t; 315 316 /*****************************************************************************/ 317 /* Video control Set Frame rates */ 318 /*****************************************************************************/ 319 typedef struct 320 { 321 ive_ctl_set_frame_rate_ip_t s_ive_ip; 322 }ih264e_ctl_set_frame_rate_ip_t; 323 typedef struct 324 { 325 ive_ctl_set_frame_rate_op_t s_ive_op; 326 }ih264e_ctl_set_frame_rate_op_t; 327 328 329 /*****************************************************************************/ 330 /* Video control Set Bitrate */ 331 /*****************************************************************************/ 332 typedef struct 333 { 334 ive_ctl_set_bitrate_ip_t s_ive_ip; 335 }ih264e_ctl_set_bitrate_ip_t; 336 337 typedef struct 338 { 339 ive_ctl_set_bitrate_op_t s_ive_op; 340 }ih264e_ctl_set_bitrate_op_t; 341 342 343 /*****************************************************************************/ 344 /* Video control Set Frame type */ 345 /*****************************************************************************/ 346 typedef struct 347 { 348 ive_ctl_set_frame_type_ip_t s_ive_ip; 349 }ih264e_ctl_set_frame_type_ip_t; 350 351 typedef struct 352 { 353 ive_ctl_set_frame_type_op_t s_ive_op; 354 }ih264e_ctl_set_frame_type_op_t; 355 356 /*****************************************************************************/ 357 /* Video control Set Encode mode */ 358 /*****************************************************************************/ 359 typedef struct 360 { 361 ive_ctl_set_enc_mode_ip_t s_ive_ip; 362 }ih264e_ctl_set_enc_mode_ip_t; 363 364 typedef struct 365 { 366 ive_ctl_set_enc_mode_op_t s_ive_op; 367 }ih264e_ctl_set_enc_mode_op_t; 368 369 /*****************************************************************************/ 370 /* Video control Set QP */ 371 /*****************************************************************************/ 372 typedef struct 373 { 374 ive_ctl_set_qp_ip_t s_ive_ip; 375 }ih264e_ctl_set_qp_ip_t; 376 377 typedef struct 378 { 379 ive_ctl_set_qp_op_t s_ive_op; 380 }ih264e_ctl_set_qp_op_t; 381 382 /*****************************************************************************/ 383 /* Video control Set AIR params */ 384 /*****************************************************************************/ 385 typedef struct 386 { 387 ive_ctl_set_air_params_ip_t s_ive_ip; 388 }ih264e_ctl_set_air_params_ip_t; 389 390 typedef struct 391 { 392 ive_ctl_set_air_params_op_t s_ive_op; 393 }ih264e_ctl_set_air_params_op_t; 394 395 /*****************************************************************************/ 396 /* Video control Set VBV params */ 397 /*****************************************************************************/ 398 typedef struct 399 { 400 ive_ctl_set_vbv_params_ip_t s_ive_ip; 401 }ih264e_ctl_set_vbv_params_ip_t; 402 403 typedef struct 404 { 405 ive_ctl_set_vbv_params_op_t s_ive_op; 406 }ih264e_ctl_set_vbv_params_op_t; 407 408 /*****************************************************************************/ 409 /* Video control Set Processor Details */ 410 /*****************************************************************************/ 411 typedef struct 412 { 413 ive_ctl_set_num_cores_ip_t s_ive_ip; 414 }ih264e_ctl_set_num_cores_ip_t; 415 416 typedef struct 417 { 418 ive_ctl_set_num_cores_op_t s_ive_op; 419 }ih264e_ctl_set_num_cores_op_t; 420 421 /*****************************************************************************/ 422 /* Video control Set Motion estimation params */ 423 /*****************************************************************************/ 424 typedef struct 425 { 426 ive_ctl_set_me_params_ip_t s_ive_ip; 427 }ih264e_ctl_set_me_params_ip_t; 428 429 typedef struct 430 { 431 ive_ctl_set_me_params_op_t s_ive_op; 432 }ih264e_ctl_set_me_params_op_t; 433 434 /*****************************************************************************/ 435 /* Video control Set GOP params */ 436 /*****************************************************************************/ 437 typedef struct 438 { 439 ive_ctl_set_gop_params_ip_t s_ive_ip; 440 }ih264e_ctl_set_gop_params_ip_t; 441 442 typedef struct 443 { 444 ive_ctl_set_gop_params_op_t s_ive_op; 445 }ih264e_ctl_set_gop_params_op_t; 446 447 /*****************************************************************************/ 448 /* Video control Set Deblock params */ 449 /*****************************************************************************/ 450 typedef struct 451 { 452 ive_ctl_set_deblock_params_ip_t s_ive_ip; 453 }ih264e_ctl_set_deblock_params_ip_t; 454 455 typedef struct 456 { 457 ive_ctl_set_deblock_params_op_t s_ive_op; 458 }ih264e_ctl_set_deblock_params_op_t; 459 460 /*****************************************************************************/ 461 /* Video control Set Profile params */ 462 /*****************************************************************************/ 463 typedef struct 464 { 465 ive_ctl_set_profile_params_ip_t s_ive_ip; 466 }ih264e_ctl_set_profile_params_ip_t; 467 468 typedef struct 469 { 470 ive_ctl_set_profile_params_op_t s_ive_op; 471 }ih264e_ctl_set_profile_params_op_t; 472 473 /*****************************************************************************/ 474 /* Synchronous video encode call */ 475 /*****************************************************************************/ 476 typedef struct 477 { 478 ive_video_encode_ip_t s_ive_ip; 479 }ih264e_video_encode_ip_t; 480 481 typedef struct 482 { 483 ive_video_encode_op_t s_ive_op; 484 }ih264e_video_encode_op_t; 485 486 487 /*****************************************************************************/ 488 /* Video usability information */ 489 /*****************************************************************************/ 490 typedef struct 491 { 492 /** size of the structure */ 493 UWORD32 u4_size; 494 495 /** Command type : IVE_CMD_VIDEO_CTL */ 496 IVE_API_COMMAND_TYPE_T e_cmd; 497 498 /** Sub command type : IVE_CMD_CTL_SET_GOP_PARAMS */ 499 IVE_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 500 501 /** indicates the presence of aspect_ratio */ 502 UWORD8 u1_aspect_ratio_info_present_flag; 503 504 /** specifies the aspect ratio of the luma samples */ 505 UWORD8 u1_aspect_ratio_idc; 506 507 /** width of the luma samples. user dependent */ 508 UWORD16 u2_sar_width; 509 510 /** Height of the luma samples. user dependent */ 511 UWORD16 u2_sar_height; 512 513 /** if 1, specifies that the overscan_appropriate_flag is present 514 * if 0, the preferred display method for the video signal is unspecified */ 515 UWORD8 u1_overscan_info_present_flag; 516 517 /** if 1,indicates that the cropped decoded pictures output 518 * are suitable for display using overscan */ 519 UWORD8 u1_overscan_appropriate_flag; 520 521 /** if 1 specifies that video_format, video_full_range_flag and 522 * colour_description_present_flag are present */ 523 UWORD8 u1_video_signal_type_present_flag; 524 525 /** pal, secam, ntsc, ... */ 526 UWORD8 u1_video_format; 527 528 /** indicates the black level and range of the luma and chroma signals */ 529 UWORD8 u1_video_full_range_flag; 530 531 /** if 1,specifies that colour_primaries, transfer_characteristics 532 * and matrix_coefficients are present */ 533 UWORD8 u1_colour_description_present_flag; 534 535 /** indicates the chromaticity coordinates of the source primaries */ 536 UWORD8 u1_colour_primaries; 537 538 /** indicates the opto-electronic transfer characteristic of the source picture */ 539 UWORD8 u1_transfer_characteristics; 540 541 /** the matrix coefficients used in deriving luma and chroma signals 542 * from the green, blue, and red primaries */ 543 UWORD8 u1_matrix_coefficients; 544 545 /** if 1, specifies that chroma_sample_loc_type_top_field and 546 * chroma_sample_loc_type_bottom_field are present */ 547 UWORD8 u1_chroma_loc_info_present_flag; 548 549 /** location of chroma samples */ 550 UWORD8 u1_chroma_sample_loc_type_top_field; 551 UWORD8 u1_chroma_sample_loc_type_bottom_field; 552 553 /** Indicates the presence of the num_units_in_ticks, time_scale flag */ 554 UWORD8 u1_vui_timing_info_present_flag; 555 556 /** Number of units that correspond to one increment of the 557 * clock. Indicates the resolution */ 558 UWORD32 u4_vui_num_units_in_tick; 559 560 /** The number of time units that pass in one second */ 561 UWORD32 u4_vui_time_scale; 562 563 /** Flag indicating that time difference between two frames is a constant */ 564 UWORD8 u1_fixed_frame_rate_flag; 565 566 /** Indicates the presence of NAL HRD parameters */ 567 UWORD8 u1_nal_hrd_parameters_present_flag; 568 569 /** Indicates the presence of VCL HRD parameters */ 570 UWORD8 u1_vcl_hrd_parameters_present_flag; 571 572 /** Specifies the HRD operational mode */ 573 UWORD8 u1_low_delay_hrd_flag; 574 575 /** Indicates presence of SEI messages which include pic_struct syntax element */ 576 UWORD8 u1_pic_struct_present_flag; 577 578 /** 1, specifies that the following cvs bitstream restriction parameters are present */ 579 UWORD8 u1_bitstream_restriction_flag; 580 581 /** if 0, indicates that no pel outside the pic boundaries and 582 * no sub-pels derived using pels outside the pic boundaries is used for inter prediction */ 583 UWORD8 u1_motion_vectors_over_pic_boundaries_flag; 584 585 /** Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units 586 * associated with any coded picture */ 587 UWORD8 u1_max_bytes_per_pic_denom; 588 589 /** Indicates an upper bound for the number of bits of coding_unit() data */ 590 UWORD8 u1_max_bits_per_mb_denom; 591 592 /** Indicate the maximum absolute value of a decoded horizontal MV component 593 * in quarter-pel luma units */ 594 UWORD8 u1_log2_max_mv_length_horizontal; 595 596 /** Indicate the maximum absolute value of a decoded vertical MV component 597 * in quarter-pel luma units */ 598 UWORD8 u1_log2_max_mv_length_vertical; 599 600 /** Max number of frames that are not synchronized in display and decode order */ 601 UWORD8 u1_num_reorder_frames; 602 603 /** specifies required size of the HRD DPB in units of frame buffers */ 604 UWORD8 u1_max_dec_frame_buffering; 605 606 }ih264e_vui_ip_t; 607 608 typedef struct 609 { 610 /** size of the structure */ 611 UWORD32 u4_size; 612 613 /** Return error code */ 614 UWORD32 u4_error_code; 615 }ih264e_vui_op_t; 616 617 618 /* The enum values should not have greater than 8 bits as this is assigned to WORD8 */ 619 typedef enum 620 { 621 INTRA16x16 = 0, 622 INTRA4x4, 623 INTER16x16 624 }IV_MB_TYPE_T; 625 626 /*****************************************************************************/ 627 /* Pic info structures */ 628 /*****************************************************************************/ 629 typedef struct 630 { 631 /** Qp */ 632 UWORD32 u4_qp; 633 634 /** Pic Type */ 635 IV_PICTURE_CODING_TYPE_T e_frame_type; 636 637 }ih264e_pic_info1_t; 638 639 typedef struct 640 { 641 /** Qp */ 642 UWORD32 u4_qp; 643 644 /** Pic Type */ 645 IV_PICTURE_CODING_TYPE_T e_frame_type; 646 647 /** Disable deblock level (0: Enable completely, 3: Disable completely */ 648 UWORD32 u4_disable_deblock_level; 649 650 }ih264e_pic_info2_t; 651 652 653 /*****************************************************************************/ 654 /* MB info structures */ 655 /*****************************************************************************/ 656 typedef struct 657 { 658 /** MV X */ 659 WORD16 i2_mv_x; 660 661 /** MV Y */ 662 WORD16 i2_mv_y; 663 }ih264e_mv_t; 664 665 typedef struct 666 { 667 /** Intra / Inter */ 668 WORD8 i1_mb_type; 669 union 670 { 671 ih264e_mv_t as_mv[1]; 672 673 /** Intra mode */ 674 WORD8 ai1_intra_mode[1]; 675 }; 676 }ih264e_mb_info1_t; 677 678 typedef struct 679 { 680 /** Intra / Inter */ 681 WORD8 i1_mb_type; 682 683 684 /** SAD */ 685 UWORD16 u2_sad; 686 687 union 688 { 689 ih264e_mv_t as_mv[1]; 690 691 /** Intra mode */ 692 WORD8 ai1_intra_mode[1]; 693 }; 694 695 696 }ih264e_mb_info2_t; 697 698 typedef struct 699 { 700 /** Intra / Inter */ 701 WORD8 i1_mb_type; 702 703 union 704 { 705 ih264e_mv_t as_mv[4]; 706 707 /** Intra mode */ 708 WORD8 ai1_intra_mode[16]; 709 }; 710 711 }ih264e_mb_info3_t; 712 713 typedef struct 714 { 715 /** Intra / Inter */ 716 WORD8 i1_mb_type; 717 718 /** Intra Mode */ 719 WORD8 i1_intra_mode; 720 721 /** SAD */ 722 UWORD16 u2_sad; 723 724 union 725 { 726 ih264e_mv_t as_mv[16]; 727 728 /** Intra mode */ 729 WORD8 ai1_intra_mode[16]; 730 }; 731 732 733 734 }ih264e_mb_info4_t; 735 736 /* Add any new structures to the following union. It is used to calculate the max size needed for allocation of memory */ 737 typedef struct 738 { 739 union 740 { 741 ih264e_mb_info1_t s_mb_info1; 742 ih264e_mb_info2_t s_mb_info2; 743 ih264e_mb_info3_t s_mb_info3; 744 ih264e_mb_info4_t s_mb_info4; 745 }; 746 }ih264e_mb_info_t; 747 748 #ifdef __cplusplus 749 } /* closing brace for extern "C" */ 750 #endif 751 #endif /* _IH264E_H_ */ 752