LCOV - code coverage report
Current view: top level - libavcodec - h264dsp.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 18 24 75.0 %
Date: 2017-12-12 11:08:38 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /*
       2             :  * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
       3             :  * Copyright (c) 2003-2010 Michael Niedermayer <michaelni@gmx.at>
       4             :  *
       5             :  * This file is part of FFmpeg.
       6             :  *
       7             :  * FFmpeg is free software; you can redistribute it and/or
       8             :  * modify it under the terms of the GNU Lesser General Public
       9             :  * License as published by the Free Software Foundation; either
      10             :  * version 2.1 of the License, or (at your option) any later version.
      11             :  *
      12             :  * FFmpeg is distributed in the hope that it will be useful,
      13             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      14             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      15             :  * Lesser General Public License for more details.
      16             :  *
      17             :  * You should have received a copy of the GNU Lesser General Public
      18             :  * License along with FFmpeg; if not, write to the Free Software
      19             :  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
      20             :  */
      21             : 
      22             : /**
      23             :  * @file
      24             :  * H.264 / AVC / MPEG-4 part10 DSP functions.
      25             :  * @author Michael Niedermayer <michaelni@gmx.at>
      26             :  */
      27             : 
      28             : #include <stdint.h>
      29             : 
      30             : #include "libavutil/attributes.h"
      31             : #include "libavutil/avassert.h"
      32             : 
      33             : #include "avcodec.h"
      34             : #include "h264dsp.h"
      35             : #include "h264idct.h"
      36             : #include "startcode.h"
      37             : #include "libavutil/common.h"
      38             : 
      39             : #define BIT_DEPTH 8
      40             : #include "h264dsp_template.c"
      41             : #undef BIT_DEPTH
      42             : 
      43             : #define BIT_DEPTH 9
      44             : #include "h264dsp_template.c"
      45             : #undef BIT_DEPTH
      46             : 
      47             : #define BIT_DEPTH 10
      48             : #include "h264dsp_template.c"
      49             : #undef BIT_DEPTH
      50             : 
      51             : #define BIT_DEPTH 12
      52             : #include "h264dsp_template.c"
      53             : #undef BIT_DEPTH
      54             : 
      55             : #define BIT_DEPTH 14
      56             : #include "h264dsp_template.c"
      57             : #undef BIT_DEPTH
      58             : 
      59             : #define BIT_DEPTH 8
      60             : #include "h264addpx_template.c"
      61             : #undef BIT_DEPTH
      62             : 
      63             : #define BIT_DEPTH 16
      64             : #include "h264addpx_template.c"
      65             : #undef BIT_DEPTH
      66             : 
      67         888 : av_cold void ff_h264dsp_init(H264DSPContext *c, const int bit_depth,
      68             :                              const int chroma_format_idc)
      69             : {
      70             : #undef FUNC
      71             : #define FUNC(a, depth) a ## _ ## depth ## _c
      72             : 
      73             : #define ADDPX_DSP(depth) \
      74             :     c->h264_add_pixels4_clear = FUNC(ff_h264_add_pixels4, depth);\
      75             :     c->h264_add_pixels8_clear = FUNC(ff_h264_add_pixels8, depth)
      76             : 
      77         888 :     if (bit_depth > 8 && bit_depth <= 16) {
      78          94 :         ADDPX_DSP(16);
      79             :     } else {
      80         794 :         ADDPX_DSP(8);
      81             :     }
      82             : 
      83             : #define H264_DSP(depth) \
      84             :     c->h264_idct_add= FUNC(ff_h264_idct_add, depth);\
      85             :     c->h264_idct8_add= FUNC(ff_h264_idct8_add, depth);\
      86             :     c->h264_idct_dc_add= FUNC(ff_h264_idct_dc_add, depth);\
      87             :     c->h264_idct8_dc_add= FUNC(ff_h264_idct8_dc_add, depth);\
      88             :     c->h264_idct_add16     = FUNC(ff_h264_idct_add16, depth);\
      89             :     c->h264_idct8_add4     = FUNC(ff_h264_idct8_add4, depth);\
      90             :     if (chroma_format_idc <= 1)\
      91             :         c->h264_idct_add8  = FUNC(ff_h264_idct_add8, depth);\
      92             :     else\
      93             :         c->h264_idct_add8  = FUNC(ff_h264_idct_add8_422, depth);\
      94             :     c->h264_idct_add16intra= FUNC(ff_h264_idct_add16intra, depth);\
      95             :     c->h264_luma_dc_dequant_idct= FUNC(ff_h264_luma_dc_dequant_idct, depth);\
      96             :     if (chroma_format_idc <= 1)\
      97             :         c->h264_chroma_dc_dequant_idct= FUNC(ff_h264_chroma_dc_dequant_idct, depth);\
      98             :     else\
      99             :         c->h264_chroma_dc_dequant_idct= FUNC(ff_h264_chroma422_dc_dequant_idct, depth);\
     100             : \
     101             :     c->weight_h264_pixels_tab[0]= FUNC(weight_h264_pixels16, depth);\
     102             :     c->weight_h264_pixels_tab[1]= FUNC(weight_h264_pixels8, depth);\
     103             :     c->weight_h264_pixels_tab[2]= FUNC(weight_h264_pixels4, depth);\
     104             :     c->weight_h264_pixels_tab[3]= FUNC(weight_h264_pixels2, depth);\
     105             :     c->biweight_h264_pixels_tab[0]= FUNC(biweight_h264_pixels16, depth);\
     106             :     c->biweight_h264_pixels_tab[1]= FUNC(biweight_h264_pixels8, depth);\
     107             :     c->biweight_h264_pixels_tab[2]= FUNC(biweight_h264_pixels4, depth);\
     108             :     c->biweight_h264_pixels_tab[3]= FUNC(biweight_h264_pixels2, depth);\
     109             : \
     110             :     c->h264_v_loop_filter_luma= FUNC(h264_v_loop_filter_luma, depth);\
     111             :     c->h264_h_loop_filter_luma= FUNC(h264_h_loop_filter_luma, depth);\
     112             :     c->h264_h_loop_filter_luma_mbaff= FUNC(h264_h_loop_filter_luma_mbaff, depth);\
     113             :     c->h264_v_loop_filter_luma_intra= FUNC(h264_v_loop_filter_luma_intra, depth);\
     114             :     c->h264_h_loop_filter_luma_intra= FUNC(h264_h_loop_filter_luma_intra, depth);\
     115             :     c->h264_h_loop_filter_luma_mbaff_intra= FUNC(h264_h_loop_filter_luma_mbaff_intra, depth);\
     116             :     c->h264_v_loop_filter_chroma= FUNC(h264_v_loop_filter_chroma, depth);\
     117             :     if (chroma_format_idc <= 1)\
     118             :         c->h264_h_loop_filter_chroma= FUNC(h264_h_loop_filter_chroma, depth);\
     119             :     else\
     120             :         c->h264_h_loop_filter_chroma= FUNC(h264_h_loop_filter_chroma422, depth);\
     121             :     if (chroma_format_idc <= 1)\
     122             :         c->h264_h_loop_filter_chroma_mbaff= FUNC(h264_h_loop_filter_chroma_mbaff, depth);\
     123             :     else\
     124             :         c->h264_h_loop_filter_chroma_mbaff= FUNC(h264_h_loop_filter_chroma422_mbaff, depth);\
     125             :     c->h264_v_loop_filter_chroma_intra= FUNC(h264_v_loop_filter_chroma_intra, depth);\
     126             :     if (chroma_format_idc <= 1)\
     127             :         c->h264_h_loop_filter_chroma_intra= FUNC(h264_h_loop_filter_chroma_intra, depth);\
     128             :     else\
     129             :         c->h264_h_loop_filter_chroma_intra= FUNC(h264_h_loop_filter_chroma422_intra, depth);\
     130             :     if (chroma_format_idc <= 1)\
     131             :         c->h264_h_loop_filter_chroma_mbaff_intra= FUNC(h264_h_loop_filter_chroma_mbaff_intra, depth);\
     132             :     else\
     133             :         c->h264_h_loop_filter_chroma_mbaff_intra= FUNC(h264_h_loop_filter_chroma422_mbaff_intra, depth);\
     134             :     c->h264_loop_filter_strength= NULL;
     135             : 
     136         888 :     switch (bit_depth) {
     137          31 :     case 9:
     138          31 :         H264_DSP(9);
     139          31 :         break;
     140          63 :     case 10:
     141          63 :         H264_DSP(10);
     142          63 :         break;
     143           0 :     case 12:
     144           0 :         H264_DSP(12);
     145           0 :         break;
     146           0 :     case 14:
     147           0 :         H264_DSP(14);
     148           0 :         break;
     149         794 :     default:
     150         794 :         av_assert0(bit_depth<=8);
     151         794 :         H264_DSP(8);
     152         794 :         break;
     153             :     }
     154         888 :     c->startcode_find_candidate = ff_startcode_find_candidate_c;
     155             : 
     156             :     if (ARCH_AARCH64) ff_h264dsp_init_aarch64(c, bit_depth, chroma_format_idc);
     157             :     if (ARCH_ARM) ff_h264dsp_init_arm(c, bit_depth, chroma_format_idc);
     158             :     if (ARCH_PPC) ff_h264dsp_init_ppc(c, bit_depth, chroma_format_idc);
     159         888 :     if (ARCH_X86) ff_h264dsp_init_x86(c, bit_depth, chroma_format_idc);
     160             :     if (ARCH_MIPS) ff_h264dsp_init_mips(c, bit_depth, chroma_format_idc);
     161         888 : }

Generated by: LCOV version 1.13