LCOV - code coverage report
Current view: top level - src/libswscale/x86 - yuv2rgb.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 19 0.0 %
Date: 2017-03-16 17:17:40 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /*
       2             :  * software YUV to RGB converter
       3             :  *
       4             :  * Copyright (C) 2009 Konstantin Shishkov
       5             :  *
       6             :  * MMX/MMXEXT template stuff (needed for fast movntq support),
       7             :  * 1,4,8bpp support and context / deglobalize stuff
       8             :  * by Michael Niedermayer (michaelni@gmx.at)
       9             :  *
      10             :  * This file is part of FFmpeg.
      11             :  *
      12             :  * FFmpeg is free software; you can redistribute it and/or
      13             :  * modify it under the terms of the GNU Lesser General Public
      14             :  * License as published by the Free Software Foundation; either
      15             :  * version 2.1 of the License, or (at your option) any later version.
      16             :  *
      17             :  * FFmpeg is distributed in the hope that it will be useful,
      18             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      19             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      20             :  * Lesser General Public License for more details.
      21             :  *
      22             :  * You should have received a copy of the GNU Lesser General Public
      23             :  * License along with FFmpeg; if not, write to the Free Software
      24             :  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
      25             :  */
      26             : 
      27             : #include <stdio.h>
      28             : #include <stdlib.h>
      29             : #include <inttypes.h>
      30             : 
      31             : #include "config.h"
      32             : #include "libswscale/rgb2rgb.h"
      33             : #include "libswscale/swscale.h"
      34             : #include "libswscale/swscale_internal.h"
      35             : #include "libavutil/attributes.h"
      36             : #include "libavutil/x86/asm.h"
      37             : #include "libavutil/x86/cpu.h"
      38             : #include "libavutil/cpu.h"
      39             : 
      40             : #if HAVE_INLINE_ASM
      41             : 
      42             : #define DITHER1XBPP // only for MMX
      43             : 
      44             : /* hope these constant values are cache line aligned */
      45             : DECLARE_ASM_CONST(8, uint64_t, mmx_00ffw)   = 0x00ff00ff00ff00ffULL;
      46             : DECLARE_ASM_CONST(8, uint64_t, mmx_redmask) = 0xf8f8f8f8f8f8f8f8ULL;
      47             : DECLARE_ASM_CONST(8, uint64_t, mmx_grnmask) = 0xfcfcfcfcfcfcfcfcULL;
      48             : DECLARE_ASM_CONST(8, uint64_t, pb_e0) = 0xe0e0e0e0e0e0e0e0ULL;
      49             : DECLARE_ASM_CONST(8, uint64_t, pb_03) = 0x0303030303030303ULL;
      50             : DECLARE_ASM_CONST(8, uint64_t, pb_07) = 0x0707070707070707ULL;
      51             : 
      52             : //MMX versions
      53             : #if HAVE_MMX_INLINE && HAVE_6REGS
      54             : #undef RENAME
      55             : #undef COMPILE_TEMPLATE_MMXEXT
      56             : #define COMPILE_TEMPLATE_MMXEXT 0
      57             : #define RENAME(a) a ## _mmx
      58             : #include "yuv2rgb_template.c"
      59             : #endif /* HAVE_MMX_INLINE && HAVE_6REGS */
      60             : 
      61             : // MMXEXT versions
      62             : #if HAVE_MMXEXT_INLINE && HAVE_6REGS
      63             : #undef RENAME
      64             : #undef COMPILE_TEMPLATE_MMXEXT
      65             : #define COMPILE_TEMPLATE_MMXEXT 1
      66             : #define RENAME(a) a ## _mmxext
      67             : #include "yuv2rgb_template.c"
      68             : #endif /* HAVE_MMXEXT_INLINE && HAVE_6REGS */
      69             : 
      70             : #endif /* HAVE_INLINE_ASM */
      71             : 
      72           0 : av_cold SwsFunc ff_yuv2rgb_init_x86(SwsContext *c)
      73             : {
      74             : #if HAVE_MMX_INLINE && HAVE_6REGS
      75           0 :     int cpu_flags = av_get_cpu_flags();
      76             : 
      77             : #if HAVE_MMXEXT_INLINE
      78           0 :     if (INLINE_MMXEXT(cpu_flags)) {
      79           0 :         switch (c->dstFormat) {
      80             :         case AV_PIX_FMT_RGB24:
      81           0 :             return yuv420_rgb24_mmxext;
      82             :         case AV_PIX_FMT_BGR24:
      83           0 :             return yuv420_bgr24_mmxext;
      84             :         }
      85             :     }
      86             : #endif
      87             : 
      88           0 :     if (INLINE_MMX(cpu_flags)) {
      89           0 :         switch (c->dstFormat) {
      90             :             case AV_PIX_FMT_RGB32:
      91           0 :                 if (c->srcFormat == AV_PIX_FMT_YUVA420P) {
      92             : #if HAVE_7REGS && CONFIG_SWSCALE_ALPHA
      93           0 :                     return yuva420_rgb32_mmx;
      94             : #endif
      95             :                     break;
      96             :                 } else
      97           0 :                     return yuv420_rgb32_mmx;
      98             :             case AV_PIX_FMT_BGR32:
      99           0 :                 if (c->srcFormat == AV_PIX_FMT_YUVA420P) {
     100             : #if HAVE_7REGS && CONFIG_SWSCALE_ALPHA
     101           0 :                     return yuva420_bgr32_mmx;
     102             : #endif
     103             :                     break;
     104             :                 } else
     105           0 :                     return yuv420_bgr32_mmx;
     106             :             case AV_PIX_FMT_RGB24:
     107           0 :                 return yuv420_rgb24_mmx;
     108             :             case AV_PIX_FMT_BGR24:
     109           0 :                 return yuv420_bgr24_mmx;
     110             :             case AV_PIX_FMT_RGB565:
     111           0 :                 return yuv420_rgb16_mmx;
     112             :             case AV_PIX_FMT_RGB555:
     113           0 :                 return yuv420_rgb15_mmx;
     114             :         }
     115             :     }
     116             : #endif /* HAVE_MMX_INLINE  && HAVE_6REGS */
     117             : 
     118           0 :     return NULL;
     119             : }

Generated by: LCOV version 1.12