LCOV - code coverage report
Current view: top level - src/libswresample - rematrix_template.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 15 34 44.1 %
Date: 2017-01-19 23:52:33 Functions: 5 25 20.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (C) 2011-2012 Michael Niedermayer (michaelni@gmx.at)
       3             :  *
       4             :  * This file is part of libswresample
       5             :  *
       6             :  * libswresample 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             :  * libswresample 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 libswresample; if not, write to the Free Software
      18             :  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
      19             :  */
      20             : 
      21             : #if defined(TEMPLATE_REMATRIX_FLT)
      22             : #    define R(x) x
      23             : #    define SAMPLE float
      24             : #    define COEFF float
      25             : #    define INTER float
      26             : #    define RENAME(x) x ## _float
      27             : #elif defined(TEMPLATE_REMATRIX_DBL)
      28             : #    define R(x) x
      29             : #    define SAMPLE double
      30             : #    define COEFF double
      31             : #    define INTER double
      32             : #    define RENAME(x) x ## _double
      33             : #elif defined(TEMPLATE_REMATRIX_S16)
      34             : #    define SAMPLE int16_t
      35             : #    define COEFF int
      36             : #    define INTER int
      37             : #  ifdef TEMPLATE_CLIP
      38             : #    define R(x) av_clip_int16(((x) + 16384)>>15)
      39             : #    define RENAME(x) x ## _clip_s16
      40             : #  else
      41             : #    define R(x) (((x) + 16384)>>15)
      42             : #    define RENAME(x) x ## _s16
      43             : #  endif
      44             : #elif defined(TEMPLATE_REMATRIX_S32)
      45             : #    define R(x) (((x) + 16384)>>15)
      46             : #    define SAMPLE int32_t
      47             : #    define COEFF int
      48             : #    define INTER int64_t
      49             : #    define RENAME(x) x ## _s32
      50             : #endif
      51             : 
      52             : typedef void (RENAME(mix_any_func_type))(SAMPLE **out, const SAMPLE **in1, COEFF *coeffp, integer len);
      53             : 
      54        1184 : static void RENAME(sum2)(SAMPLE *out, const SAMPLE *in1, const SAMPLE *in2, COEFF *coeffp, integer index1, integer index2, integer len){
      55             :     int i;
      56        1184 :     INTER coeff1 = coeffp[index1];
      57        1184 :     INTER coeff2 = coeffp[index2];
      58             : 
      59      477356 :     for(i=0; i<len; i++)
      60      476172 :         out[i] = R(coeff1*in1[i] + coeff2*in2[i]);
      61        1184 : }
      62             : 
      63         180 : static void RENAME(copy)(SAMPLE *out, const SAMPLE *in, COEFF *coeffp, integer index, integer len){
      64             :     int i;
      65         180 :     INTER coeff = coeffp[index];
      66      184500 :     for(i=0; i<len; i++)
      67      184320 :         out[i] = R(coeff*in[i]);
      68         180 : }
      69             : 
      70           0 : static void RENAME(mix6to2)(SAMPLE **out, const SAMPLE **in, COEFF *coeffp, integer len){
      71             :     int i;
      72             : 
      73           0 :     for(i=0; i<len; i++) {
      74           0 :         INTER t = in[2][i]*(INTER)coeffp[0*6+2] + in[3][i]*(INTER)coeffp[0*6+3];
      75           0 :         out[0][i] = R(t + in[0][i]*(INTER)coeffp[0*6+0] + in[4][i]*(INTER)coeffp[0*6+4]);
      76           0 :         out[1][i] = R(t + in[1][i]*(INTER)coeffp[1*6+1] + in[5][i]*(INTER)coeffp[1*6+5]);
      77             :     }
      78           0 : }
      79             : 
      80           0 : static void RENAME(mix8to2)(SAMPLE **out, const SAMPLE **in, COEFF *coeffp, integer len){
      81             :     int i;
      82             : 
      83           0 :     for(i=0; i<len; i++) {
      84           0 :         INTER t = in[2][i]*(INTER)coeffp[0*8+2] + in[3][i]*(INTER)coeffp[0*8+3];
      85           0 :         out[0][i] = R(t + in[0][i]*(INTER)coeffp[0*8+0] + in[4][i]*(INTER)coeffp[0*8+4] + in[6][i]*(INTER)coeffp[0*8+6]);
      86           0 :         out[1][i] = R(t + in[1][i]*(INTER)coeffp[1*8+1] + in[5][i]*(INTER)coeffp[1*8+5] + in[7][i]*(INTER)coeffp[1*8+7]);
      87             :     }
      88           0 : }
      89             : 
      90          10 : static RENAME(mix_any_func_type) *RENAME(get_mix_any_func)(SwrContext *s){
      91          10 :     if(   s->out_ch_layout == AV_CH_LAYOUT_STEREO && (s->in_ch_layout == AV_CH_LAYOUT_5POINT1 || s->in_ch_layout == AV_CH_LAYOUT_5POINT1_BACK)
      92           0 :        && s->matrix[0][2] == s->matrix[1][2] && s->matrix[0][3] == s->matrix[1][3]
      93           0 :        && !s->matrix[0][1] && !s->matrix[0][5] && !s->matrix[1][0] && !s->matrix[1][4]
      94             :     )
      95           0 :         return RENAME(mix6to2);
      96             : 
      97          10 :     if(   s->out_ch_layout == AV_CH_LAYOUT_STEREO && s->in_ch_layout == AV_CH_LAYOUT_7POINT1
      98           0 :        && s->matrix[0][2] == s->matrix[1][2] && s->matrix[0][3] == s->matrix[1][3]
      99           0 :        && !s->matrix[0][1] && !s->matrix[0][5] && !s->matrix[1][0] && !s->matrix[1][4]
     100           0 :        && !s->matrix[0][7] && !s->matrix[1][6]
     101             :     )
     102           0 :         return RENAME(mix8to2);
     103             : 
     104          10 :     return NULL;
     105             : }
     106             : 
     107             : #undef R
     108             : #undef SAMPLE
     109             : #undef COEFF
     110             : #undef INTER
     111             : #undef RENAME

Generated by: LCOV version 1.12