Home | History | Annotate | Download | only in libhevc
      1 cc_library_static {
      2     name: "libhevcdec",
      3     vendor_available: true,
      4 
      5     cflags: [
      6         "-D_LIB",
      7         "-DMULTICORE",
      8         "-fPIC",
      9 
     10         "-O3",
     11         "-DANDROID",
     12         "-Wall",
     13         "-Werror",
     14         // common/x86/ihevc_sao_ssse3_intr.c: implicit conversion from
     15         // 'int' to 'char' changes value from 128 to -128
     16         "-Wno-error=constant-conversion",
     17     ],
     18 
     19     export_include_dirs: [
     20         "decoder",
     21         "common",
     22     ],
     23 
     24     srcs: [
     25         "common/ihevc_quant_tables.c",
     26         "common/ihevc_inter_pred_filters.c",
     27         "common/ihevc_weighted_pred.c",
     28         "common/ihevc_padding.c",
     29         "common/ihevc_deblk_edge_filter.c",
     30         "common/ihevc_deblk_tables.c",
     31         "common/ihevc_cabac_tables.c",
     32         "common/ihevc_common_tables.c",
     33         "common/ihevc_intra_pred_filters.c",
     34         "common/ihevc_chroma_intra_pred_filters.c",
     35         "common/ihevc_mem_fns.c",
     36         "common/ihevc_sao.c",
     37         "common/ihevc_trans_tables.c",
     38         "common/ihevc_recon.c",
     39         "common/ihevc_itrans.c",
     40         "common/ihevc_itrans_recon.c",
     41         "common/ihevc_iquant_recon.c",
     42         "common/ihevc_iquant_itrans_recon.c",
     43         "common/ihevc_itrans_recon_32x32.c",
     44         "common/ihevc_itrans_recon_16x16.c",
     45         "common/ihevc_itrans_recon_8x8.c",
     46         "common/ihevc_chroma_itrans_recon.c",
     47         "common/ihevc_chroma_iquant_recon.c",
     48         "common/ihevc_chroma_iquant_itrans_recon.c",
     49         "common/ihevc_chroma_recon.c",
     50         "common/ihevc_chroma_itrans_recon_16x16.c",
     51         "common/ihevc_chroma_itrans_recon_8x8.c",
     52         "common/ihevc_buf_mgr.c",
     53         "common/ihevc_disp_mgr.c",
     54         "common/ihevc_dpb_mgr.c",
     55         "common/ithread.c",
     56         "decoder/ihevcd_version.c",
     57         "decoder/ihevcd_api.c",
     58         "decoder/ihevcd_decode.c",
     59         "decoder/ihevcd_nal.c",
     60         "decoder/ihevcd_bitstream.c",
     61         "decoder/ihevcd_parse_headers.c",
     62         "decoder/ihevcd_parse_slice_header.c",
     63         "decoder/ihevcd_parse_slice.c",
     64         "decoder/ihevcd_parse_residual.c",
     65         "decoder/ihevcd_cabac.c",
     66         "decoder/ihevcd_intra_pred_mode_prediction.c",
     67         "decoder/ihevcd_process_slice.c",
     68         "decoder/ihevcd_utils.c",
     69         "decoder/ihevcd_job_queue.c",
     70         "decoder/ihevcd_ref_list.c",
     71         "decoder/ihevcd_get_mv.c",
     72         "decoder/ihevcd_mv_pred.c",
     73         "decoder/ihevcd_mv_merge.c",
     74         "decoder/ihevcd_iquant_itrans_recon_ctb.c",
     75         "decoder/ihevcd_itrans_recon_dc.c",
     76         "decoder/ihevcd_common_tables.c",
     77         "decoder/ihevcd_boundary_strength.c",
     78         "decoder/ihevcd_deblk.c",
     79         "decoder/ihevcd_inter_pred.c",
     80         "decoder/ihevcd_sao.c",
     81         "decoder/ihevcd_ilf_padding.c",
     82         "decoder/ihevcd_fmt_conv.c",
     83     ],
     84 
     85     arch: {
     86         arm64: {
     87             cflags: [
     88                 "-DARMV8",
     89                 "-DDISABLE_NEONINTR",
     90                 "-DARM",
     91                 "-DARMGCC",
     92 
     93                 "-DDEFAULT_ARCH=D_ARCH_ARMV8_GENERIC",
     94             ],
     95             local_include_dirs: [
     96                 "decoder/arm",
     97                 "common/arm",
     98                 "decoder/arm64",
     99                 "common/arm64",
    100             ],
    101 
    102             srcs: [
    103                 "decoder/arm/ihevcd_function_selector.c",
    104                 "decoder/arm/ihevcd_function_selector_noneon.c",
    105                 "decoder/arm64/ihevcd_function_selector_av8.c",
    106                 "common/arm/ihevc_intra_pred_filters_neon_intr.c",
    107                 "common/arm/ihevc_weighted_pred_neon_intr.c",
    108                 "common/arm64/ihevc_mem_fns.s",
    109                 "common/arm64/ihevc_itrans_recon_32x32.s",
    110                 "common/arm64/ihevc_weighted_pred_bi_default.s",
    111                 "common/arm64/ihevc_weighted_pred_bi.s",
    112                 "common/arm64/ihevc_weighted_pred_uni.s",
    113                 "common/arm64/ihevc_deblk_luma_horz.s",
    114                 "common/arm64/ihevc_deblk_luma_vert.s",
    115                 "common/arm64/ihevc_deblk_chroma_vert.s",
    116                 "common/arm64/ihevc_deblk_chroma_horz.s",
    117                 "common/arm64/ihevc_sao_band_offset_luma.s",
    118                 "common/arm64/ihevc_sao_band_offset_chroma.s",
    119                 "common/arm64/ihevc_sao_edge_offset_class0.s",
    120                 "common/arm64/ihevc_sao_edge_offset_class0_chroma.s",
    121                 "common/arm64/ihevc_sao_edge_offset_class1.s",
    122                 "common/arm64/ihevc_sao_edge_offset_class1_chroma.s",
    123                 "common/arm64/ihevc_sao_edge_offset_class2.s",
    124                 "common/arm64/ihevc_sao_edge_offset_class2_chroma.s",
    125                 "common/arm64/ihevc_sao_edge_offset_class3.s",
    126                 "common/arm64/ihevc_sao_edge_offset_class3_chroma.s",
    127                 "common/arm64/ihevc_inter_pred_luma_horz_w16out.s",
    128                 "common/arm64/ihevc_inter_pred_filters_luma_horz.s",
    129                 "common/arm64/ihevc_inter_pred_filters_luma_vert.s",
    130                 "common/arm64/ihevc_inter_pred_chroma_horz.s",
    131                 "common/arm64/ihevc_inter_pred_chroma_horz_w16out.s",
    132                 "common/arm64/ihevc_inter_pred_chroma_vert.s",
    133                 "common/arm64/ihevc_inter_pred_chroma_vert_w16out.s",
    134                 "common/arm64/ihevc_inter_pred_chroma_vert_w16inp.s",
    135                 "common/arm64/ihevc_inter_pred_chroma_vert_w16inp_w16out.s",
    136                 "common/arm64/ihevc_inter_pred_filters_luma_vert_w16inp.s",
    137                 "common/arm64/ihevc_inter_pred_filters_luma_vert_w16out.s",
    138                 "common/arm64/ihevc_inter_pred_luma_vert_w16inp_w16out.s",
    139                 "common/arm64/ihevc_inter_pred_luma_copy_w16out.s",
    140                 "common/arm64/ihevc_inter_pred_luma_copy.s",
    141                 "common/arm64/ihevc_inter_pred_chroma_copy.s",
    142                 "common/arm64/ihevc_inter_pred_chroma_copy_w16out.s",
    143                 "common/arm64/ihevc_itrans_recon_4x4_ttype1.s",
    144                 "common/arm64/ihevc_itrans_recon_4x4.s",
    145                 "common/arm64/ihevc_itrans_recon_8x8.s",
    146                 "common/arm64/ihevc_itrans_recon_16x16.s",
    147                 "common/arm64/ihevc_intra_pred_chroma_planar.s",
    148                 "common/arm64/ihevc_intra_pred_chroma_dc.s",
    149                 "common/arm64/ihevc_intra_pred_chroma_horz.s",
    150                 "common/arm64/ihevc_intra_pred_chroma_ver.s",
    151                 "common/arm64/ihevc_intra_pred_chroma_mode2.s",
    152                 "common/arm64/ihevc_intra_pred_chroma_mode_18_34.s",
    153                 "common/arm64/ihevc_intra_pred_filters_chroma_mode_11_to_17.s",
    154                 "common/arm64/ihevc_intra_pred_filters_chroma_mode_19_to_25.s",
    155                 "common/arm64/ihevc_intra_pred_chroma_mode_3_to_9.s",
    156                 "common/arm64/ihevc_intra_pred_chroma_mode_27_to_33.s",
    157                 "common/arm64/ihevc_intra_pred_luma_planar.s",
    158                 "common/arm64/ihevc_intra_pred_luma_horz.s",
    159                 "common/arm64/ihevc_intra_pred_luma_mode2.s",
    160                 "common/arm64/ihevc_intra_pred_luma_mode_27_to_33.s",
    161                 "common/arm64/ihevc_intra_pred_luma_mode_18_34.s",
    162                 "common/arm64/ihevc_intra_pred_luma_vert.s",
    163                 "common/arm64/ihevc_intra_pred_luma_dc.s",
    164                 "common/arm64/ihevc_intra_pred_filters_luma_mode_11_to_17.s",
    165                 "common/arm64/ihevc_intra_pred_filters_luma_mode_19_to_25.s",
    166                 "common/arm64/ihevc_intra_pred_luma_mode_3_to_9.s",
    167                 "common/arm64/ihevc_padding.s",
    168                 "decoder/arm64/ihevcd_itrans_recon_dc_luma.s",
    169                 "decoder/arm64/ihevcd_itrans_recon_dc_chroma.s",
    170                 "decoder/arm64/ihevcd_fmt_conv_420sp_to_420p.s",
    171                 "decoder/arm64/ihevcd_fmt_conv_420sp_to_420sp.s",
    172                 "decoder/arm64/ihevcd_fmt_conv_420sp_to_rgba8888.s",
    173             ],
    174         },
    175 
    176         arm: {
    177             local_include_dirs: [
    178                 "decoder/arm",
    179                 "common/arm",
    180             ],
    181 
    182             srcs: [
    183                 "decoder/arm/ihevcd_function_selector.c",
    184                 "decoder/arm/ihevcd_function_selector_noneon.c",
    185             ],
    186 
    187             cflags: [
    188                 "-DDISABLE_NEONINTR",
    189                 "-DARM",
    190                 "-DARMGCC",
    191                 "-fno-tree-vectorize",
    192 
    193                 // These will be overriden by armv7_a_neon
    194                 "-DDISABLE_NEON",
    195                 "-DDEFAULT_ARCH=D_ARCH_ARM_NONEON",
    196             ],
    197 
    198             instruction_set: "arm",
    199 
    200             neon: {
    201                 srcs: [
    202                     "decoder/arm/ihevcd_function_selector_a9q.c",
    203                     "common/arm/ihevc_intra_ref_substitution_a9q.c",
    204                     "common/arm/ihevc_intra_pred_filters_neon_intr.c",
    205                     "common/arm/ihevc_weighted_pred_neon_intr.c",
    206                     "common/arm/ihevc_mem_fns.s",
    207                     "common/arm/ihevc_itrans_recon_32x32.s",
    208                     "common/arm/ihevc_weighted_pred_bi_default.s",
    209                     "common/arm/ihevc_weighted_pred_bi.s",
    210                     "common/arm/ihevc_weighted_pred_uni.s",
    211                     "common/arm/ihevc_deblk_luma_horz.s",
    212                     "common/arm/ihevc_deblk_luma_vert.s",
    213                     "common/arm/ihevc_deblk_chroma_vert.s",
    214                     "common/arm/ihevc_deblk_chroma_horz.s",
    215                     "common/arm/ihevc_sao_band_offset_luma.s",
    216                     "common/arm/ihevc_sao_band_offset_chroma.s",
    217                     "common/arm/ihevc_sao_edge_offset_class0.s",
    218                     "common/arm/ihevc_sao_edge_offset_class0_chroma.s",
    219                     "common/arm/ihevc_sao_edge_offset_class1.s",
    220                     "common/arm/ihevc_sao_edge_offset_class1_chroma.s",
    221                     "common/arm/ihevc_sao_edge_offset_class2.s",
    222                     "common/arm/ihevc_sao_edge_offset_class2_chroma.s",
    223                     "common/arm/ihevc_sao_edge_offset_class3.s",
    224                     "common/arm/ihevc_sao_edge_offset_class3_chroma.s",
    225                     "common/arm/ihevc_inter_pred_luma_horz_w16out.s",
    226                     "common/arm/ihevc_inter_pred_filters_luma_horz.s",
    227                     "common/arm/ihevc_inter_pred_filters_luma_vert.s",
    228                     "common/arm/ihevc_inter_pred_chroma_horz.s",
    229                     "common/arm/ihevc_inter_pred_chroma_horz_w16out.s",
    230                     "common/arm/ihevc_inter_pred_chroma_vert.s",
    231                     "common/arm/ihevc_inter_pred_chroma_vert_w16out.s",
    232                     "common/arm/ihevc_inter_pred_chroma_vert_w16inp.s",
    233                     "common/arm/ihevc_inter_pred_chroma_vert_w16inp_w16out.s",
    234                     "common/arm/ihevc_inter_pred_filters_luma_vert_w16inp.s",
    235                     "common/arm/ihevc_inter_pred_luma_vert_w16inp_w16out.s",
    236                     "common/arm/ihevc_inter_pred_luma_copy_w16out.s",
    237                     "common/arm/ihevc_inter_pred_luma_copy.s",
    238                     "common/arm/ihevc_inter_pred_chroma_copy.s",
    239                     "common/arm/ihevc_inter_pred_chroma_copy_w16out.s",
    240                     "common/arm/ihevc_itrans_recon_4x4_ttype1.s",
    241                     "common/arm/ihevc_itrans_recon_4x4.s",
    242                     "common/arm/ihevc_itrans_recon_8x8.s",
    243                     "common/arm/ihevc_itrans_recon_16x16.s",
    244                     "common/arm/ihevc_intra_pred_chroma_planar.s",
    245                     "common/arm/ihevc_intra_pred_chroma_dc.s",
    246                     "common/arm/ihevc_intra_pred_chroma_horz.s",
    247                     "common/arm/ihevc_intra_pred_chroma_ver.s",
    248                     "common/arm/ihevc_intra_pred_chroma_mode2.s",
    249                     "common/arm/ihevc_intra_pred_chroma_mode_18_34.s",
    250                     "common/arm/ihevc_intra_pred_filters_chroma_mode_11_to_17.s",
    251                     "common/arm/ihevc_intra_pred_filters_chroma_mode_19_to_25.s",
    252                     "common/arm/ihevc_intra_pred_chroma_mode_3_to_9.s",
    253                     "common/arm/ihevc_intra_pred_chroma_mode_27_to_33.s",
    254                     "common/arm/ihevc_intra_pred_luma_planar.s",
    255                     "common/arm/ihevc_intra_pred_luma_horz.s",
    256                     "common/arm/ihevc_intra_pred_luma_mode2.s",
    257                     "common/arm/ihevc_intra_pred_luma_mode_27_to_33.s",
    258                     "common/arm/ihevc_intra_pred_luma_mode_18_34.s",
    259                     "common/arm/ihevc_intra_pred_luma_vert.s",
    260                     "common/arm/ihevc_intra_pred_luma_dc.s",
    261                     "common/arm/ihevc_intra_pred_filters_luma_mode_11_to_17.s",
    262                     "common/arm/ihevc_intra_pred_filters_luma_mode_19_to_25.s",
    263                     "common/arm/ihevc_intra_pred_luma_mode_3_to_9.s",
    264                     "common/arm/ihevc_padding.s",
    265                     "decoder/arm/ihevcd_itrans_recon_dc_luma.s",
    266                     "decoder/arm/ihevcd_itrans_recon_dc_chroma.s",
    267                     "decoder/arm/ihevcd_fmt_conv_420sp_to_420p.s",
    268                     "decoder/arm/ihevcd_fmt_conv_420sp_to_420sp.s",
    269                     "decoder/arm/ihevcd_fmt_conv_420sp_to_rgba8888.s",
    270                 ],
    271                 cflags: [
    272                     "-UDISABLE_NEON",
    273                     "-UDEFAULT_ARCH",
    274                     "-DDEFAULT_ARCH=D_ARCH_ARM_A9Q",
    275                 ],
    276             },
    277         },
    278 
    279         mips64: {
    280             local_include_dirs: [
    281                 "decoder/mips",
    282                 "common/mips",
    283             ],
    284 
    285             srcs: [
    286                 "decoder/mips/ihevcd_function_selector.c",
    287                 "decoder/mips/ihevcd_function_selector_mips_generic.c",
    288             ],
    289         },
    290 
    291         mips: {
    292             local_include_dirs: [
    293                 "decoder/mips",
    294                 "common/mips",
    295             ],
    296 
    297             srcs: [
    298                 "decoder/mips/ihevcd_function_selector.c",
    299                 "decoder/mips/ihevcd_function_selector_mips_generic.c",
    300             ],
    301         },
    302 
    303         x86_64: {
    304             cflags: [
    305                 "-DX86",
    306                 "-DDISABLE_AVX2",
    307                 "-msse4.2",
    308                 "-mno-avx",
    309                 "-DDEFAULT_ARCH=D_ARCH_X86_SSE42",
    310             ],
    311 
    312             local_include_dirs: [
    313                 "decoder/x86",
    314                 "common/x86",
    315             ],
    316 
    317             srcs: [
    318                 "decoder/x86/ihevcd_function_selector.c",
    319                 "decoder/x86/ihevcd_function_selector_generic.c",
    320                 "decoder/x86/ihevcd_function_selector_ssse3.c",
    321                 "decoder/x86/ihevcd_function_selector_sse42.c",
    322                 "common/x86/ihevc_inter_pred_filters_ssse3_intr.c",
    323                 "common/x86/ihevc_weighted_pred_ssse3_intr.c",
    324                 "common/x86/ihevc_intra_pred_filters_ssse3_intr.c",
    325                 "common/x86/ihevc_chroma_intra_pred_filters_ssse3_intr.c",
    326                 "common/x86/ihevc_itrans_recon_ssse3_intr.c",
    327                 "common/x86/ihevc_itrans_recon_16x16_ssse3_intr.c",
    328                 "common/x86/ihevc_itrans_recon_32x32_ssse3_intr.c",
    329                 "common/x86/ihevc_sao_ssse3_intr.c",
    330                 "common/x86/ihevc_deblk_ssse3_intr.c",
    331                 "common/x86/ihevc_padding_ssse3_intr.c",
    332                 "common/x86/ihevc_mem_fns_ssse3_intr.c",
    333                 "decoder/x86/ihevcd_fmt_conv_ssse3_intr.c",
    334                 "decoder/x86/ihevcd_it_rec_dc_ssse3_intr.c",
    335                 "common/x86/ihevc_inter_pred_filters_sse42_intr.c",
    336                 "common/x86/ihevc_weighted_pred_sse42_intr.c",
    337                 "common/x86/ihevc_intra_pred_filters_sse42_intr.c",
    338                 "common/x86/ihevc_chroma_intra_pred_filters_sse42_intr.c",
    339                 "common/x86/ihevc_itrans_recon_sse42_intr.c",
    340                 "common/x86/ihevc_16x16_itrans_recon_sse42_intr.c",
    341                 "common/x86/ihevc_32x32_itrans_recon_sse42_intr.c",
    342                 "decoder/x86/ihevcd_it_rec_dc_sse42_intr.c",
    343                 "common/x86/ihevc_tables_x86_intr.c",
    344             ],
    345         },
    346 
    347         x86: {
    348             cflags: [
    349                 "-DX86",
    350                 "-DDISABLE_AVX2",
    351                 "-msse4.2",
    352                 "-mno-avx",
    353                 "-DDEFAULT_ARCH=D_ARCH_X86_SSE42",
    354             ],
    355 
    356             local_include_dirs: [
    357                 "decoder/x86",
    358                 "common/x86",
    359             ],
    360 
    361             srcs: [
    362                 "decoder/x86/ihevcd_function_selector.c",
    363                 "decoder/x86/ihevcd_function_selector_generic.c",
    364                 "decoder/x86/ihevcd_function_selector_ssse3.c",
    365                 "decoder/x86/ihevcd_function_selector_sse42.c",
    366                 "common/x86/ihevc_inter_pred_filters_ssse3_intr.c",
    367                 "common/x86/ihevc_weighted_pred_ssse3_intr.c",
    368                 "common/x86/ihevc_intra_pred_filters_ssse3_intr.c",
    369                 "common/x86/ihevc_chroma_intra_pred_filters_ssse3_intr.c",
    370                 "common/x86/ihevc_itrans_recon_ssse3_intr.c",
    371                 "common/x86/ihevc_itrans_recon_16x16_ssse3_intr.c",
    372                 "common/x86/ihevc_itrans_recon_32x32_ssse3_intr.c",
    373                 "common/x86/ihevc_sao_ssse3_intr.c",
    374                 "common/x86/ihevc_deblk_ssse3_intr.c",
    375                 "common/x86/ihevc_padding_ssse3_intr.c",
    376                 "common/x86/ihevc_mem_fns_ssse3_intr.c",
    377                 "decoder/x86/ihevcd_fmt_conv_ssse3_intr.c",
    378                 "decoder/x86/ihevcd_it_rec_dc_ssse3_intr.c",
    379                 "common/x86/ihevc_inter_pred_filters_sse42_intr.c",
    380                 "common/x86/ihevc_weighted_pred_sse42_intr.c",
    381                 "common/x86/ihevc_intra_pred_filters_sse42_intr.c",
    382                 "common/x86/ihevc_chroma_intra_pred_filters_sse42_intr.c",
    383                 "common/x86/ihevc_itrans_recon_sse42_intr.c",
    384                 "common/x86/ihevc_16x16_itrans_recon_sse42_intr.c",
    385                 "common/x86/ihevc_32x32_itrans_recon_sse42_intr.c",
    386                 "decoder/x86/ihevcd_it_rec_dc_sse42_intr.c",
    387                 "common/x86/ihevc_tables_x86_intr.c",
    388             ],
    389         },
    390     },
    391 
    392     sanitize: {
    393         integer_overflow: true,
    394         misc_undefined: ["bounds"],
    395         // Enable CFI if this becomes a shared library.
    396         // cfi: true,
    397         blacklist: "libhevc_blacklist.txt",
    398     },
    399 }
    400 
    401 cc_test {
    402     name: "hevcdec",
    403     cflags: [
    404         "-DPROFILE_ENABLE",
    405         "-DARM",
    406         "-fPIC",
    407         "-DMD5_DISABLE",
    408         "-Wall",
    409         "-Werror",
    410     ],
    411     srcs: ["test/decoder/main.c"],
    412     static_libs: ["libhevcdec"],
    413 }
    414 
    415 cc_library_static {
    416     name: "libhevcenc",
    417     vendor_available: true,
    418 
    419     cflags: [
    420         "-DENABLE_MAIN_REXT_PROFILE",
    421         "-fPIC",
    422         "-O3",
    423         "-Wall",
    424         "-Wno-unused-variable",
    425         "-Wno-unused-parameter",
    426         "-Wno-switch",
    427     ],
    428 
    429     export_include_dirs: [
    430         "encoder",
    431         "common",
    432     ],
    433 
    434     srcs: [
    435         "common/ihevc_cabac_tables.c",
    436         "common/ihevc_chroma_intra_pred_filters.c",
    437         "common/ihevc_chroma_itrans_recon.c",
    438         "common/ihevc_chroma_itrans_recon_16x16.c",
    439         "common/ihevc_chroma_itrans_recon_8x8.c",
    440         "common/ihevc_common_tables.c",
    441         "common/ihevc_deblk_edge_filter.c",
    442         "common/ihevc_deblk_tables.c",
    443         "common/ihevc_hbd_deblk_edge_filter.c",
    444         "common/ihevc_inter_pred_filters.c",
    445         "common/ihevc_intra_pred_filters.c",
    446         "common/ihevc_iquant_recon.c",
    447         "common/ihevc_itrans_recon.c",
    448         "common/ihevc_itrans_recon_16x16.c",
    449         "common/ihevc_itrans_recon_32x32.c",
    450         "common/ihevc_itrans_recon_8x8.c",
    451         "common/ihevc_mem_fns.c",
    452         "common/ihevc_padding.c",
    453         "common/ihevc_quant_iquant_ssd.c",
    454         "common/ihevc_quant_tables.c",
    455         "common/ihevc_resi_trans.c",
    456         "common/ihevc_sao.c",
    457         "common/ihevc_trans_tables.c",
    458         "common/ihevc_weighted_pred.c",
    459         "encoder/bit_allocation.c",
    460         "encoder/cbr_buffer_control.c",
    461         "encoder/common_rom.c",
    462         "encoder/convert_float_to_fix.c",
    463         "encoder/est_sad.c",
    464         "encoder/fixed_point_error_bits.c",
    465         "encoder/frame_info_collector.c",
    466         "encoder/hme_coarse.c",
    467         "encoder/hme_common_utils.c",
    468         "encoder/hme_err_compute.c",
    469         "encoder/hme_fullpel.c",
    470         "encoder/hme_function_selector.c",
    471         "encoder/hme_globals.c",
    472         "encoder/hme_interface.c",
    473         "encoder/hme_refine.c",
    474         "encoder/hme_search_algo.c",
    475         "encoder/hme_subpel.c",
    476         "encoder/hme_utils.c",
    477         "encoder/ihevce_bitstream.c",
    478         "encoder/ihevce_bs_compute_ctb.c",
    479         "encoder/ihevce_buffer_que.c",
    480         "encoder/ihevce_cabac.c",
    481         "encoder/ihevce_cabac_cu_pu.c",
    482         "encoder/ihevce_cabac_rdo.c",
    483         "encoder/ihevce_cabac_tu.c",
    484         "encoder/ihevce_chroma_had_satd.c",
    485         "encoder/ihevce_cmn_utils_instr_set_router.c",
    486         "encoder/ihevce_coarse_me_pass.c",
    487         "encoder/ihevce_common_utils.c",
    488         "encoder/ihevce_deblk.c",
    489         "encoder/ihevce_decomp_pre_intra_pass.c",
    490         "encoder/ihevce_dep_mngr.c",
    491         "encoder/ihevce_enc_cu_recursion.c",
    492         "encoder/ihevce_enc_loop_inter_mode_sifter.c",
    493         "encoder/ihevce_enc_loop_pass.c",
    494         "encoder/ihevce_enc_loop_utils.c",
    495         "encoder/ihevce_enc_sbh_funcs.c",
    496         "encoder/ihevce_enc_subpel_gen.c",
    497         "encoder/ihevce_encode_header.c",
    498         "encoder/ihevce_encode_header_sei_vui.c",
    499         "encoder/ihevce_entropy_cod.c",
    500         "encoder/ihevce_entropy_interface.c",
    501         "encoder/ihevce_error_check.c",
    502         "encoder/ihevce_frame_process.c",
    503         "encoder/ihevce_frame_process_utils.c",
    504         "encoder/ihevce_function_selector.c",
    505         "encoder/ihevce_global_tables.c",
    506         "encoder/ihevce_had_satd.c",
    507         "encoder/ihevce_hle_interface.c",
    508         "encoder/ihevce_hle_q_func.c",
    509         "encoder/ihevce_inter_pred.c",
    510         "encoder/ihevce_ipe_instr_set_router.c",
    511         "encoder/ihevce_ipe_pass.c",
    512         "encoder/ihevce_lap_interface.c",
    513         "encoder/ihevce_me_instr_set_router.c",
    514         "encoder/ihevce_me_pass.c",
    515         "encoder/ihevce_memory_init.c",
    516         "encoder/ihevce_multi_thrd_funcs.c",
    517         "encoder/ihevce_mv_pred.c",
    518         "encoder/ihevce_mv_pred_merge.c",
    519         "encoder/ihevce_nbr_avail.c",
    520         "encoder/ihevce_plugin.c",
    521         "encoder/ihevce_profile.c",
    522         "encoder/ihevce_rc_interface.c",
    523         "encoder/ihevce_recur_bracketing.c",
    524         "encoder/ihevce_sao.c",
    525         "encoder/ihevce_stasino_helpers.c",
    526         "encoder/ihevce_sub_pic_rc.c",
    527         "encoder/ihevce_sys_api.c",
    528         "encoder/ihevce_tile_interface.c",
    529         "encoder/ihevce_trace.c",
    530         "encoder/ihevce_tu_tree_selector.c",
    531         "encoder/init_qp.c",
    532         "encoder/mb_model_based.c",
    533         "encoder/osal.c",
    534         "encoder/osal_cond_var.c",
    535         "encoder/osal_error.c",
    536         "encoder/osal_mutex.c",
    537         "encoder/osal_semaphore.c",
    538         "encoder/osal_thread.c",
    539         "encoder/picture_type.c",
    540         "encoder/rate_control_api.c",
    541         "encoder/rc_rd_model.c",
    542         "encoder/rc_rd_model_fix.c",
    543         "encoder/rc_sad_acc.c",
    544         "encoder/sqrt_interp.c",
    545         "encoder/var_q_operator.c",
    546         "encoder/vbr_storage_vbv.c",
    547         "encoder/vbr_str_prms.c",
    548     ],
    549 
    550     arch: {
    551         arm64: {
    552 
    553             local_include_dirs: [
    554                 "encoder/arm",
    555                 "common/arm",
    556                 "common/arm64",
    557             ],
    558 
    559             srcs: [
    560                 "encoder/arm/ihevce_coarse_layer_sad_neon.c",
    561                 "encoder/arm/ihevce_common_utils_neon.c",
    562                 "encoder/arm/ihevce_copy_neon.c",
    563                 "encoder/arm/ihevce_had_compute_neon.c",
    564                 "encoder/arm/ihevce_hme_utils_neon.c",
    565                 "encoder/arm/ihevce_itrans_recon_neon.c",
    566                 "encoder/arm/ihevce_me_neon.c",
    567                 "encoder/arm/ihevce_sad_compute_neon.c",
    568                 "encoder/arm/ihevce_scale_by_2_neon.c",
    569                 "encoder/arm/ihevce_scan_coeffs_neon.c",
    570                 "encoder/arm/ihevce_ssd_and_sad_calculator_neon.c",
    571                 "encoder/arm/ihevce_ssd_calculator_neon.c",
    572                 "encoder/arm/ihevce_subpel_neon.c",
    573                 "common/arm/ihevc_resi_trans_neon.c",
    574                 "common/arm/ihevc_resi_trans_neon_32x32.c",
    575                 "common/arm/ihevc_quant_iquant_ssd_neon_intr.c",
    576                 "common/arm/ihevc_intra_pred_filters_neon_intr.c",
    577                 "common/arm/ihevc_weighted_pred_neon_intr.c",
    578                 "common/arm/ihevc_intra_ref_substitution_a9q.c",
    579                 "common/arm64/ihevc_deblk_chroma_horz.s",
    580                 "common/arm64/ihevc_deblk_chroma_vert.s",
    581                 "common/arm64/ihevc_deblk_luma_horz.s",
    582                 "common/arm64/ihevc_deblk_luma_vert.s",
    583                 "common/arm64/ihevc_inter_pred_chroma_copy.s",
    584                 "common/arm64/ihevc_inter_pred_chroma_copy_w16out.s",
    585                 "common/arm64/ihevc_inter_pred_chroma_horz.s",
    586                 "common/arm64/ihevc_inter_pred_chroma_horz_w16out.s",
    587                 "common/arm64/ihevc_inter_pred_chroma_vert.s",
    588                 "common/arm64/ihevc_inter_pred_chroma_vert_w16inp.s",
    589                 "common/arm64/ihevc_inter_pred_chroma_vert_w16inp_w16out.s",
    590                 "common/arm64/ihevc_inter_pred_chroma_vert_w16out.s",
    591                 "common/arm64/ihevc_inter_pred_filters_luma_horz.s",
    592                 "common/arm64/ihevc_inter_pred_filters_luma_vert.s",
    593                 "common/arm64/ihevc_inter_pred_filters_luma_vert_w16inp.s",
    594                 "common/arm64/ihevc_inter_pred_filters_luma_vert_w16out.s",
    595                 "common/arm64/ihevc_inter_pred_luma_copy.s",
    596                 "common/arm64/ihevc_inter_pred_luma_copy_w16out.s",
    597                 "common/arm64/ihevc_inter_pred_luma_horz_w16out.s",
    598                 "common/arm64/ihevc_inter_pred_luma_vert_w16inp_w16out.s",
    599                 "common/arm64/ihevc_intra_pred_chroma_dc.s",
    600                 "common/arm64/ihevc_intra_pred_chroma_horz.s",
    601                 "common/arm64/ihevc_intra_pred_chroma_mode2.s",
    602                 "common/arm64/ihevc_intra_pred_chroma_mode_18_34.s",
    603                 "common/arm64/ihevc_intra_pred_chroma_mode_27_to_33.s",
    604                 "common/arm64/ihevc_intra_pred_chroma_mode_3_to_9.s",
    605                 "common/arm64/ihevc_intra_pred_chroma_planar.s",
    606                 "common/arm64/ihevc_intra_pred_chroma_ver.s",
    607                 "common/arm64/ihevc_intra_pred_filters_chroma_mode_11_to_17.s",
    608                 "common/arm64/ihevc_intra_pred_filters_chroma_mode_19_to_25.s",
    609                 "common/arm64/ihevc_intra_pred_filters_luma_mode_11_to_17.s",
    610                 "common/arm64/ihevc_intra_pred_filters_luma_mode_19_to_25.s",
    611                 "common/arm64/ihevc_intra_pred_luma_dc.s",
    612                 "common/arm64/ihevc_intra_pred_luma_horz.s",
    613                 "common/arm64/ihevc_intra_pred_luma_mode2.s",
    614                 "common/arm64/ihevc_intra_pred_luma_mode_18_34.s",
    615                 "common/arm64/ihevc_intra_pred_luma_mode_27_to_33.s",
    616                 "common/arm64/ihevc_intra_pred_luma_mode_3_to_9.s",
    617                 "common/arm64/ihevc_intra_pred_luma_planar.s",
    618                 "common/arm64/ihevc_intra_pred_luma_vert.s",
    619                 "common/arm64/ihevc_itrans_recon_16x16.s",
    620                 "common/arm64/ihevc_itrans_recon_32x32.s",
    621                 "common/arm64/ihevc_itrans_recon_4x4.s",
    622                 "common/arm64/ihevc_itrans_recon_4x4_ttype1.s",
    623                 "common/arm64/ihevc_itrans_recon_8x8.s",
    624                 "common/arm64/ihevc_mem_fns.s",
    625                 "common/arm64/ihevc_padding.s",
    626                 "common/arm64/ihevc_sao_band_offset_chroma.s",
    627                 "common/arm64/ihevc_sao_band_offset_luma.s",
    628                 "common/arm64/ihevc_sao_edge_offset_class0.s",
    629                 "common/arm64/ihevc_sao_edge_offset_class0_chroma.s",
    630                 "common/arm64/ihevc_sao_edge_offset_class1.s",
    631                 "common/arm64/ihevc_sao_edge_offset_class1_chroma.s",
    632                 "common/arm64/ihevc_sao_edge_offset_class2.s",
    633                 "common/arm64/ihevc_sao_edge_offset_class2_chroma.s",
    634                 "common/arm64/ihevc_sao_edge_offset_class3.s",
    635                 "common/arm64/ihevc_sao_edge_offset_class3_chroma.s",
    636                 "common/arm64/ihevc_weighted_pred_bi.s",
    637                 "common/arm64/ihevc_weighted_pred_bi_default.s",
    638                 "common/arm64/ihevc_weighted_pred_uni.s",
    639             ],
    640 
    641             cflags: [
    642                 "-DENABLE_NEON", "-DARMV8", "-DARM",
    643             ],
    644         },
    645 
    646         arm: {
    647             local_include_dirs: [
    648                 "encoder/arm",
    649                 "common/arm",
    650             ],
    651 
    652             instruction_set: "arm",
    653 
    654             neon: {
    655                 srcs: [
    656                     "encoder/arm/ihevce_coarse_layer_sad_neon.c",
    657                     "encoder/arm/ihevce_common_utils_neon.c",
    658                     "encoder/arm/ihevce_copy_neon.c",
    659                     "encoder/arm/ihevce_had_compute_neon.c",
    660                     "encoder/arm/ihevce_hme_utils_neon.c",
    661                     "encoder/arm/ihevce_itrans_recon_neon.c",
    662                     "encoder/arm/ihevce_me_neon.c",
    663                     "encoder/arm/ihevce_sad_compute_neon.c",
    664                     "encoder/arm/ihevce_scale_by_2_neon.c",
    665                     "encoder/arm/ihevce_scan_coeffs_neon.c",
    666                     "encoder/arm/ihevce_ssd_and_sad_calculator_neon.c",
    667                     "encoder/arm/ihevce_ssd_calculator_neon.c",
    668                     "encoder/arm/ihevce_subpel_neon.c",
    669                     "common/arm/ihevc_resi_trans_neon.c",
    670                     "common/arm/ihevc_resi_trans_neon_32x32.c",
    671                     "common/arm/ihevc_quant_iquant_ssd_neon_intr.c",
    672                     "common/arm/ihevc_intra_pred_filters_neon_intr.c",
    673                     "common/arm/ihevc_weighted_pred_neon_intr.c",
    674                     "common/arm/ihevc_intra_ref_substitution_a9q.c",
    675                     "common/arm/ihevc_deblk_chroma_horz.s",
    676                     "common/arm/ihevc_deblk_chroma_vert.s",
    677                     "common/arm/ihevc_deblk_luma_horz.s",
    678                     "common/arm/ihevc_deblk_luma_vert.s",
    679                     "common/arm/ihevc_inter_pred_chroma_copy.s",
    680                     "common/arm/ihevc_inter_pred_chroma_copy_w16out.s",
    681                     "common/arm/ihevc_inter_pred_chroma_horz.s",
    682                     "common/arm/ihevc_inter_pred_chroma_horz_w16out.s",
    683                     "common/arm/ihevc_inter_pred_chroma_vert.s",
    684                     "common/arm/ihevc_inter_pred_chroma_vert_w16inp.s",
    685                     "common/arm/ihevc_inter_pred_chroma_vert_w16inp_w16out.s",
    686                     "common/arm/ihevc_inter_pred_chroma_vert_w16out.s",
    687                     "common/arm/ihevc_inter_pred_filters_luma_horz.s",
    688                     "common/arm/ihevc_inter_pred_filters_luma_vert.s",
    689                     "common/arm/ihevc_inter_pred_filters_luma_vert_w16inp.s",
    690                     "common/arm/ihevc_inter_pred_luma_copy.s",
    691                     "common/arm/ihevc_inter_pred_luma_copy_w16out.s",
    692                     "common/arm/ihevc_inter_pred_luma_horz_w16out.s",
    693                     "common/arm/ihevc_inter_pred_luma_vert_w16inp_w16out.s",
    694                     "common/arm/ihevc_intra_pred_chroma_dc.s",
    695                     "common/arm/ihevc_intra_pred_chroma_horz.s",
    696                     "common/arm/ihevc_intra_pred_chroma_mode2.s",
    697                     "common/arm/ihevc_intra_pred_chroma_mode_18_34.s",
    698                     "common/arm/ihevc_intra_pred_chroma_mode_27_to_33.s",
    699                     "common/arm/ihevc_intra_pred_chroma_mode_3_to_9.s",
    700                     "common/arm/ihevc_intra_pred_chroma_planar.s",
    701                     "common/arm/ihevc_intra_pred_chroma_ver.s",
    702                     "common/arm/ihevc_intra_pred_filters_chroma_mode_11_to_17.s",
    703                     "common/arm/ihevc_intra_pred_filters_chroma_mode_19_to_25.s",
    704                     "common/arm/ihevc_intra_pred_filters_luma_mode_11_to_17.s",
    705                     "common/arm/ihevc_intra_pred_filters_luma_mode_19_to_25.s",
    706                     "common/arm/ihevc_intra_pred_luma_dc.s",
    707                     "common/arm/ihevc_intra_pred_luma_horz.s",
    708                     "common/arm/ihevc_intra_pred_luma_mode2.s",
    709                     "common/arm/ihevc_intra_pred_luma_mode_18_34.s",
    710                     "common/arm/ihevc_intra_pred_luma_mode_27_to_33.s",
    711                     "common/arm/ihevc_intra_pred_luma_mode_3_to_9.s",
    712                     "common/arm/ihevc_intra_pred_luma_planar.s",
    713                     "common/arm/ihevc_intra_pred_luma_vert.s",
    714                     "common/arm/ihevc_itrans_recon_16x16.s",
    715                     "common/arm/ihevc_itrans_recon_32x32.s",
    716                     "common/arm/ihevc_itrans_recon_4x4.s",
    717                     "common/arm/ihevc_itrans_recon_4x4_ttype1.s",
    718                     "common/arm/ihevc_itrans_recon_8x8.s",
    719                     "common/arm/ihevc_resi_trans.s",
    720                     "common/arm/ihevc_resi_trans_32x32_a9q.s",
    721                     "common/arm/ihevc_mem_fns.s",
    722                     "common/arm/ihevc_padding.s",
    723                     "common/arm/ihevc_sao_band_offset_chroma.s",
    724                     "common/arm/ihevc_sao_band_offset_luma.s",
    725                     "common/arm/ihevc_sao_edge_offset_class0.s",
    726                     "common/arm/ihevc_sao_edge_offset_class0_chroma.s",
    727                     "common/arm/ihevc_sao_edge_offset_class1.s",
    728                     "common/arm/ihevc_sao_edge_offset_class1_chroma.s",
    729                     "common/arm/ihevc_sao_edge_offset_class2.s",
    730                     "common/arm/ihevc_sao_edge_offset_class2_chroma.s",
    731                     "common/arm/ihevc_sao_edge_offset_class3.s",
    732                     "common/arm/ihevc_sao_edge_offset_class3_chroma.s",
    733                     "common/arm/ihevc_weighted_pred_bi_default.s",
    734                     "common/arm/ihevc_weighted_pred_bi.s",
    735                     "common/arm/ihevc_weighted_pred_uni.s",
    736                 ],
    737 
    738                 cflags: [
    739                     "-DENABLE_NEON", "-DARM",
    740                 ],
    741             },
    742         },
    743 
    744         x86_64: {
    745             local_include_dirs: [
    746                 "common/x86",
    747             ],
    748         },
    749 
    750         x86: {
    751             local_include_dirs: [
    752                 "common/x86",
    753             ],
    754         }
    755 
    756     },
    757     sanitize: {
    758         integer_overflow: true,
    759         misc_undefined: ["bounds"],
    760         // Enable CFI if this becomes a shared library.
    761         // cfi: true,
    762         diag: {
    763             integer_overflow: true,
    764             misc_undefined: ["bounds"],
    765         },
    766         blacklist: "libhevc_blacklist.txt",
    767     },
    768 }
    769 
    770 cc_test {
    771     name: "hevcenc",
    772     cflags: [
    773         "-DARM",
    774         "-fPIC",
    775         "-Wall",
    776         "-Werror",
    777     ],
    778     srcs: ["test/encoder/main.c"],
    779     static_libs: ["libhevcenc"],
    780     sanitize: {
    781         integer_overflow: true,
    782         misc_undefined: ["bounds"],
    783         diag: {
    784             integer_overflow: true,
    785             misc_undefined: ["bounds"],
    786         },
    787     },
    788 }
    789