tor-browser

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

h264dsp_init_arm.c (5798B)


      1 /*
      2 * Copyright (c) 2010 Mans Rullgard <mans@mansr.com>
      3 *
      4 * This file is part of FFmpeg.
      5 *
      6 * FFmpeg is free software; you can redistribute it and/or
      7 * modify it under the terms of the GNU Lesser General Public
      8 * License as published by the Free Software Foundation; either
      9 * version 2.1 of the License, or (at your option) any later version.
     10 *
     11 * FFmpeg is distributed in the hope that it will be useful,
     12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14 * Lesser General Public License for more details.
     15 *
     16 * You should have received a copy of the GNU Lesser General Public
     17 * License along with FFmpeg; if not, write to the Free Software
     18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     19 */
     20 
     21 #include <stdint.h>
     22 
     23 #include "libavutil/attributes.h"
     24 #include "libavutil/arm/cpu.h"
     25 #include "libavcodec/h264dsp.h"
     26 #include "libavcodec/arm/startcode.h"
     27 
     28 void ff_h264_v_loop_filter_luma_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
     29                                     int beta, int8_t *tc0);
     30 void ff_h264_h_loop_filter_luma_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
     31                                     int beta, int8_t *tc0);
     32 void ff_h264_v_loop_filter_chroma_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
     33                                       int beta, int8_t *tc0);
     34 void ff_h264_h_loop_filter_chroma_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
     35                                       int beta, int8_t *tc0);
     36 void ff_h264_h_loop_filter_chroma422_neon(uint8_t *pix, ptrdiff_t stride, int alpha,
     37                                          int beta, int8_t *tc0);
     38 
     39 void ff_weight_h264_pixels_16_neon(uint8_t *dst, int stride, int height,
     40                                   int log2_den, int weight, int offset);
     41 void ff_weight_h264_pixels_8_neon(uint8_t *dst, int stride, int height,
     42                                  int log2_den, int weight, int offset);
     43 void ff_weight_h264_pixels_4_neon(uint8_t *dst, int stride, int height,
     44                                  int log2_den, int weight, int offset);
     45 
     46 void ff_biweight_h264_pixels_16_neon(uint8_t *dst, uint8_t *src, int stride,
     47                                     int height, int log2_den, int weightd,
     48                                     int weights, int offset);
     49 void ff_biweight_h264_pixels_8_neon(uint8_t *dst, uint8_t *src, int stride,
     50                                    int height, int log2_den, int weightd,
     51                                    int weights, int offset);
     52 void ff_biweight_h264_pixels_4_neon(uint8_t *dst, uint8_t *src, int stride,
     53                                    int height, int log2_den, int weightd,
     54                                    int weights, int offset);
     55 
     56 void ff_h264_idct_add_neon(uint8_t *dst, int16_t *block, int stride);
     57 void ff_h264_idct_dc_add_neon(uint8_t *dst, int16_t *block, int stride);
     58 void ff_h264_idct_add16_neon(uint8_t *dst, const int *block_offset,
     59                             int16_t *block, int stride,
     60                             const uint8_t nnzc[5 * 8]);
     61 void ff_h264_idct_add16intra_neon(uint8_t *dst, const int *block_offset,
     62                                  int16_t *block, int stride,
     63                                  const uint8_t nnzc[5 * 8]);
     64 void ff_h264_idct_add8_neon(uint8_t **dest, const int *block_offset,
     65                            int16_t *block, int stride,
     66                            const uint8_t nnzc[15 * 8]);
     67 
     68 void ff_h264_idct8_add_neon(uint8_t *dst, int16_t *block, int stride);
     69 void ff_h264_idct8_dc_add_neon(uint8_t *dst, int16_t *block, int stride);
     70 void ff_h264_idct8_add4_neon(uint8_t *dst, const int *block_offset,
     71                             int16_t *block, int stride,
     72                             const uint8_t nnzc[5 * 8]);
     73 
     74 static av_cold void h264dsp_init_neon(H264DSPContext *c, const int bit_depth,
     75                                      const int chroma_format_idc)
     76 {
     77 #if HAVE_NEON
     78    if (bit_depth == 8) {
     79        c->h264_v_loop_filter_luma   = ff_h264_v_loop_filter_luma_neon;
     80        c->h264_h_loop_filter_luma   = ff_h264_h_loop_filter_luma_neon;
     81        c->h264_v_loop_filter_chroma = ff_h264_v_loop_filter_chroma_neon;
     82 
     83        if (chroma_format_idc <= 1)
     84            c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma_neon;
     85        else
     86            c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma422_neon;
     87 
     88        c->weight_h264_pixels_tab[0] = ff_weight_h264_pixels_16_neon;
     89        c->weight_h264_pixels_tab[1] = ff_weight_h264_pixels_8_neon;
     90        c->weight_h264_pixels_tab[2] = ff_weight_h264_pixels_4_neon;
     91 
     92        c->biweight_h264_pixels_tab[0] = ff_biweight_h264_pixels_16_neon;
     93        c->biweight_h264_pixels_tab[1] = ff_biweight_h264_pixels_8_neon;
     94        c->biweight_h264_pixels_tab[2] = ff_biweight_h264_pixels_4_neon;
     95 
     96        c->h264_idct_add        = ff_h264_idct_add_neon;
     97        c->h264_idct_dc_add     = ff_h264_idct_dc_add_neon;
     98        c->h264_idct_add16      = ff_h264_idct_add16_neon;
     99        c->h264_idct_add16intra = ff_h264_idct_add16intra_neon;
    100        if (chroma_format_idc <= 1)
    101            c->h264_idct_add8   = ff_h264_idct_add8_neon;
    102        c->h264_idct8_add       = ff_h264_idct8_add_neon;
    103        c->h264_idct8_dc_add    = ff_h264_idct8_dc_add_neon;
    104        c->h264_idct8_add4      = ff_h264_idct8_add4_neon;
    105    }
    106 #endif // HAVE_NEON
    107 }
    108 
    109 av_cold void ff_h264dsp_init_arm(H264DSPContext *c, const int bit_depth,
    110                                 const int chroma_format_idc)
    111 {
    112    int cpu_flags = av_get_cpu_flags();
    113 
    114 #if HAVE_ARMV6
    115    if (have_setend(cpu_flags))
    116        c->startcode_find_candidate = ff_startcode_find_candidate_armv6;
    117 #endif
    118    if (have_neon(cpu_flags))
    119        h264dsp_init_neon(c, bit_depth, chroma_format_idc);
    120 }