LCOV - code coverage report
Current view: top level - libavcodec - png.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 18 19 94.7 %
Date: 2017-12-17 16:07:53 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /*
       2             :  * PNG image format
       3             :  * Copyright (c) 2003 Fabrice Bellard
       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             : #include "avcodec.h"
      22             : #include "png.h"
      23             : 
      24             : /* Mask to determine which y pixels are valid in a pass */
      25             : const uint8_t ff_png_pass_ymask[NB_PASSES] = {
      26             :     0x80, 0x80, 0x08, 0x88, 0x22, 0xaa, 0x55,
      27             : };
      28             : 
      29             : /* minimum x value */
      30             : static const uint8_t ff_png_pass_xmin[NB_PASSES] = {
      31             :     0, 4, 0, 2, 0, 1, 0
      32             : };
      33             : 
      34             : /* x shift to get row width */
      35             : static const uint8_t ff_png_pass_xshift[NB_PASSES] = {
      36             :     3, 3, 2, 2, 1, 1, 0
      37             : };
      38             : 
      39         948 : void *ff_png_zalloc(void *opaque, unsigned int items, unsigned int size)
      40             : {
      41         948 :     return av_mallocz_array(items, size);
      42             : }
      43             : 
      44         948 : void ff_png_zfree(void *opaque, void *ptr)
      45             : {
      46         948 :     av_free(ptr);
      47         948 : }
      48             : 
      49         459 : int ff_png_get_nb_channels(int color_type)
      50             : {
      51             :     int channels;
      52         459 :     channels = 1;
      53         459 :     if ((color_type & (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)) ==
      54             :         PNG_COLOR_MASK_COLOR)
      55         393 :         channels = 3;
      56         459 :     if (color_type & PNG_COLOR_MASK_ALPHA)
      57          62 :         channels++;
      58         459 :     return channels;
      59             : }
      60             : 
      61             : /* compute the row size of an interleaved pass */
      62          14 : int ff_png_pass_row_size(int pass, int bits_per_pixel, int width)
      63             : {
      64             :     int shift, xmin, pass_width;
      65             : 
      66          14 :     xmin = ff_png_pass_xmin[pass];
      67          14 :     if (width <= xmin)
      68           0 :         return 0;
      69          14 :     shift      = ff_png_pass_xshift[pass];
      70          14 :     pass_width = (width - xmin + (1 << shift) - 1) >> shift;
      71          14 :     return (pass_width * bits_per_pixel + 7) >> 3;
      72             : }

Generated by: LCOV version 1.13