LCOV - code coverage report
Current view: top level - src/libavfilter - colorspacedsp.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 31 31 100.0 %
Date: 2017-01-24 04:42:20 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2016 Ronald S. Bultje <rsbultje@gmail.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 "colorspacedsp.h"
      22             : 
      23             : /*
      24             :  * SS_W/H stands for "subsampling_w/h"
      25             :  * it's analogous to AVPixFmtDescriptor->log2_chroma_w/h.
      26             :  */
      27             : #define SS_W 0
      28             : #define SS_H 0
      29             : 
      30             : #define BIT_DEPTH 8
      31             : #include "colorspacedsp_template.c"
      32             : 
      33             : #undef BIT_DEPTH
      34             : #define BIT_DEPTH 10
      35             : #include "colorspacedsp_template.c"
      36             : 
      37             : #undef BIT_DEPTH
      38             : #define BIT_DEPTH 12
      39             : #include "colorspacedsp_template.c"
      40             : 
      41             : #undef SS_W
      42             : #undef SS_H
      43             : 
      44             : #define SS_W 1
      45             : #define SS_H 0
      46             : 
      47             : #undef BIT_DEPTH
      48             : #define BIT_DEPTH 8
      49             : #include "colorspacedsp_template.c"
      50             : 
      51             : #undef BIT_DEPTH
      52             : #define BIT_DEPTH 10
      53             : #include "colorspacedsp_template.c"
      54             : 
      55             : #undef BIT_DEPTH
      56             : #define BIT_DEPTH 12
      57             : #include "colorspacedsp_template.c"
      58             : 
      59             : #undef SS_W
      60             : #undef SS_H
      61             : 
      62             : #define SS_W 1
      63             : #define SS_H 1
      64             : 
      65             : #undef BIT_DEPTH
      66             : #define BIT_DEPTH 8
      67             : #include "colorspacedsp_template.c"
      68             : 
      69             : #undef BIT_DEPTH
      70             : #define BIT_DEPTH 10
      71             : #include "colorspacedsp_template.c"
      72             : 
      73             : #undef BIT_DEPTH
      74             : #define BIT_DEPTH 12
      75             : #include "colorspacedsp_template.c"
      76             : 
      77           3 : static void multiply3x3_c(int16_t *buf[3], ptrdiff_t stride,
      78             :                           int w, int h, const int16_t m[3][3][8])
      79             : {
      80             :     int y, x;
      81           3 :     int16_t *buf0 = buf[0], *buf1 = buf[1], *buf2 = buf[2];
      82             : 
      83         195 :     for (y = 0; y < h; y++) {
      84       12480 :         for (x = 0; x < w; x++) {
      85       12288 :             int v0 = buf0[x], v1 = buf1[x], v2 = buf2[x];
      86             : 
      87       36864 :             buf0[x] = av_clip_int16((m[0][0][0] * v0 + m[0][1][0] * v1 +
      88       24576 :                                      m[0][2][0] * v2 + 8192) >> 14);
      89       36864 :             buf1[x] = av_clip_int16((m[1][0][0] * v0 + m[1][1][0] * v1 +
      90       24576 :                                      m[1][2][0] * v2 + 8192) >> 14);
      91       36864 :             buf2[x] = av_clip_int16((m[2][0][0] * v0 + m[2][1][0] * v1 +
      92       24576 :                                      m[2][2][0] * v2 + 8192) >> 14);
      93             :         }
      94             : 
      95         192 :         buf0 += stride;
      96         192 :         buf1 += stride;
      97         192 :         buf2 += stride;
      98             :     }
      99           3 : }
     100             : 
     101          44 : void ff_colorspacedsp_init(ColorSpaceDSPContext *dsp)
     102             : {
     103             : #define init_yuv2rgb_fn(bit) \
     104             :     dsp->yuv2rgb[BPP_##bit][SS_444] = yuv2rgb_444p##bit##_c; \
     105             :     dsp->yuv2rgb[BPP_##bit][SS_422] = yuv2rgb_422p##bit##_c; \
     106             :     dsp->yuv2rgb[BPP_##bit][SS_420] = yuv2rgb_420p##bit##_c
     107             : 
     108          44 :     init_yuv2rgb_fn( 8);
     109          44 :     init_yuv2rgb_fn(10);
     110          44 :     init_yuv2rgb_fn(12);
     111             : 
     112             : #define init_rgb2yuv_fn(bit) \
     113             :     dsp->rgb2yuv[BPP_##bit][SS_444] = rgb2yuv_444p##bit##_c; \
     114             :     dsp->rgb2yuv[BPP_##bit][SS_422] = rgb2yuv_422p##bit##_c; \
     115             :     dsp->rgb2yuv[BPP_##bit][SS_420] = rgb2yuv_420p##bit##_c
     116             : 
     117          44 :     init_rgb2yuv_fn( 8);
     118          44 :     init_rgb2yuv_fn(10);
     119          44 :     init_rgb2yuv_fn(12);
     120             : 
     121             : #define init_rgb2yuv_fsb_fn(bit) \
     122             :     dsp->rgb2yuv_fsb[BPP_##bit][SS_444] = rgb2yuv_fsb_444p##bit##_c; \
     123             :     dsp->rgb2yuv_fsb[BPP_##bit][SS_422] = rgb2yuv_fsb_422p##bit##_c; \
     124             :     dsp->rgb2yuv_fsb[BPP_##bit][SS_420] = rgb2yuv_fsb_420p##bit##_c
     125             : 
     126          44 :     init_rgb2yuv_fsb_fn( 8);
     127          44 :     init_rgb2yuv_fsb_fn(10);
     128          44 :     init_rgb2yuv_fsb_fn(12);
     129             : 
     130             : #define init_yuv2yuv_fn(idx1, bit1, bit2) \
     131             :     dsp->yuv2yuv[idx1][BPP_##bit2][SS_444] = yuv2yuv_444p##bit1##to##bit2##_c; \
     132             :     dsp->yuv2yuv[idx1][BPP_##bit2][SS_422] = yuv2yuv_422p##bit1##to##bit2##_c; \
     133             :     dsp->yuv2yuv[idx1][BPP_##bit2][SS_420] = yuv2yuv_420p##bit1##to##bit2##_c
     134             : #define init_yuv2yuv_fns(bit1) \
     135             :     init_yuv2yuv_fn(BPP_##bit1, bit1,  8); \
     136             :     init_yuv2yuv_fn(BPP_##bit1, bit1, 10); \
     137             :     init_yuv2yuv_fn(BPP_##bit1, bit1, 12)
     138             : 
     139          44 :     init_yuv2yuv_fns( 8);
     140          44 :     init_yuv2yuv_fns(10);
     141          44 :     init_yuv2yuv_fns(12);
     142             : 
     143          44 :     dsp->multiply3x3 = multiply3x3_c;
     144             : 
     145             :     if (ARCH_X86)
     146          44 :         ff_colorspacedsp_x86_init(dsp);
     147          44 : }

Generated by: LCOV version 1.12