tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

jdmerge-neon.c (4706B)


      1 /*
      2 * jdmerge-neon.c - merged upsampling/color conversion (Arm Neon)
      3 *
      4 * Copyright (C) 2020, Arm Limited.  All Rights Reserved.
      5 *
      6 * This software is provided 'as-is', without any express or implied
      7 * warranty.  In no event will the authors be held liable for any damages
      8 * arising from the use of this software.
      9 *
     10 * Permission is granted to anyone to use this software for any purpose,
     11 * including commercial applications, and to alter it and redistribute it
     12 * freely, subject to the following restrictions:
     13 *
     14 * 1. The origin of this software must not be misrepresented; you must not
     15 *    claim that you wrote the original software. If you use this software
     16 *    in a product, an acknowledgment in the product documentation would be
     17 *    appreciated but is not required.
     18 * 2. Altered source versions must be plainly marked as such, and must not be
     19 *    misrepresented as being the original software.
     20 * 3. This notice may not be removed or altered from any source distribution.
     21 */
     22 
     23 #define JPEG_INTERNALS
     24 #include "../../jinclude.h"
     25 #include "../../jpeglib.h"
     26 #include "../../jsimd.h"
     27 #include "../../jdct.h"
     28 #include "../../jsimddct.h"
     29 #include "../jsimd.h"
     30 #include "align.h"
     31 
     32 #include <arm_neon.h>
     33 
     34 
     35 /* YCbCr -> RGB conversion constants */
     36 
     37 #define F_0_344  11277  /* 0.3441467 = 11277 * 2^-15 */
     38 #define F_0_714  23401  /* 0.7141418 = 23401 * 2^-15 */
     39 #define F_1_402  22971  /* 1.4020386 = 22971 * 2^-14 */
     40 #define F_1_772  29033  /* 1.7720337 = 29033 * 2^-14 */
     41 
     42 ALIGN(16) static const int16_t jsimd_ycc_rgb_convert_neon_consts[] = {
     43  -F_0_344, F_0_714, F_1_402, F_1_772
     44 };
     45 
     46 
     47 /* Include inline routines for colorspace extensions. */
     48 
     49 #include "jdmrgext-neon.c"
     50 #undef RGB_RED
     51 #undef RGB_GREEN
     52 #undef RGB_BLUE
     53 #undef RGB_PIXELSIZE
     54 
     55 #define RGB_RED  EXT_RGB_RED
     56 #define RGB_GREEN  EXT_RGB_GREEN
     57 #define RGB_BLUE  EXT_RGB_BLUE
     58 #define RGB_PIXELSIZE  EXT_RGB_PIXELSIZE
     59 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extrgb_merged_upsample_neon
     60 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extrgb_merged_upsample_neon
     61 #include "jdmrgext-neon.c"
     62 #undef RGB_RED
     63 #undef RGB_GREEN
     64 #undef RGB_BLUE
     65 #undef RGB_PIXELSIZE
     66 #undef jsimd_h2v1_merged_upsample_neon
     67 #undef jsimd_h2v2_merged_upsample_neon
     68 
     69 #define RGB_RED  EXT_RGBX_RED
     70 #define RGB_GREEN  EXT_RGBX_GREEN
     71 #define RGB_BLUE  EXT_RGBX_BLUE
     72 #define RGB_ALPHA  3
     73 #define RGB_PIXELSIZE  EXT_RGBX_PIXELSIZE
     74 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extrgbx_merged_upsample_neon
     75 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extrgbx_merged_upsample_neon
     76 #include "jdmrgext-neon.c"
     77 #undef RGB_RED
     78 #undef RGB_GREEN
     79 #undef RGB_BLUE
     80 #undef RGB_ALPHA
     81 #undef RGB_PIXELSIZE
     82 #undef jsimd_h2v1_merged_upsample_neon
     83 #undef jsimd_h2v2_merged_upsample_neon
     84 
     85 #define RGB_RED  EXT_BGR_RED
     86 #define RGB_GREEN  EXT_BGR_GREEN
     87 #define RGB_BLUE  EXT_BGR_BLUE
     88 #define RGB_PIXELSIZE  EXT_BGR_PIXELSIZE
     89 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extbgr_merged_upsample_neon
     90 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extbgr_merged_upsample_neon
     91 #include "jdmrgext-neon.c"
     92 #undef RGB_RED
     93 #undef RGB_GREEN
     94 #undef RGB_BLUE
     95 #undef RGB_PIXELSIZE
     96 #undef jsimd_h2v1_merged_upsample_neon
     97 #undef jsimd_h2v2_merged_upsample_neon
     98 
     99 #define RGB_RED  EXT_BGRX_RED
    100 #define RGB_GREEN  EXT_BGRX_GREEN
    101 #define RGB_BLUE  EXT_BGRX_BLUE
    102 #define RGB_ALPHA  3
    103 #define RGB_PIXELSIZE  EXT_BGRX_PIXELSIZE
    104 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extbgrx_merged_upsample_neon
    105 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extbgrx_merged_upsample_neon
    106 #include "jdmrgext-neon.c"
    107 #undef RGB_RED
    108 #undef RGB_GREEN
    109 #undef RGB_BLUE
    110 #undef RGB_ALPHA
    111 #undef RGB_PIXELSIZE
    112 #undef jsimd_h2v1_merged_upsample_neon
    113 #undef jsimd_h2v2_merged_upsample_neon
    114 
    115 #define RGB_RED  EXT_XBGR_RED
    116 #define RGB_GREEN  EXT_XBGR_GREEN
    117 #define RGB_BLUE  EXT_XBGR_BLUE
    118 #define RGB_ALPHA  0
    119 #define RGB_PIXELSIZE  EXT_XBGR_PIXELSIZE
    120 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extxbgr_merged_upsample_neon
    121 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extxbgr_merged_upsample_neon
    122 #include "jdmrgext-neon.c"
    123 #undef RGB_RED
    124 #undef RGB_GREEN
    125 #undef RGB_BLUE
    126 #undef RGB_ALPHA
    127 #undef RGB_PIXELSIZE
    128 #undef jsimd_h2v1_merged_upsample_neon
    129 #undef jsimd_h2v2_merged_upsample_neon
    130 
    131 #define RGB_RED  EXT_XRGB_RED
    132 #define RGB_GREEN  EXT_XRGB_GREEN
    133 #define RGB_BLUE  EXT_XRGB_BLUE
    134 #define RGB_ALPHA  0
    135 #define RGB_PIXELSIZE  EXT_XRGB_PIXELSIZE
    136 #define jsimd_h2v1_merged_upsample_neon  jsimd_h2v1_extxrgb_merged_upsample_neon
    137 #define jsimd_h2v2_merged_upsample_neon  jsimd_h2v2_extxrgb_merged_upsample_neon
    138 #include "jdmrgext-neon.c"
    139 #undef RGB_RED
    140 #undef RGB_GREEN
    141 #undef RGB_BLUE
    142 #undef RGB_ALPHA
    143 #undef RGB_PIXELSIZE
    144 #undef jsimd_h2v1_merged_upsample_neon