LCOV - code coverage report
Current view: top level - libswscale - gamma.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 26 0.0 %
Date: 2017-10-24 00:14:43 Functions: 0 2 0.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (C) 2015 Pedro Arthur <bygrandao@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 "swscale_internal.h"
      22             : 
      23             : typedef struct GammaContext
      24             : {
      25             :     uint16_t *table;
      26             : } GammaContext;
      27             : 
      28             : // gamma_convert expects 16 bit rgb format
      29             : // it writes directly in src slice thus it must be modifiable (done through cascade context)
      30           0 : static int gamma_convert(SwsContext *c, SwsFilterDescriptor *desc, int sliceY, int sliceH)
      31             : {
      32           0 :     GammaContext *instance = desc->instance;
      33           0 :     uint16_t *table = instance->table;
      34           0 :     int srcW = desc->src->width;
      35             : 
      36             :     int i;
      37           0 :     for (i = 0; i < sliceH; ++i) {
      38           0 :         uint8_t ** src = desc->src->plane[0].line;
      39           0 :         int src_pos = sliceY+i - desc->src->plane[0].sliceY;
      40             : 
      41           0 :         uint16_t *src1 = (uint16_t*)*(src+src_pos);
      42             :         int j;
      43           0 :         for (j = 0; j < srcW; ++j) {
      44           0 :             uint16_t r = AV_RL16(src1 + j*4 + 0);
      45           0 :             uint16_t g = AV_RL16(src1 + j*4 + 1);
      46           0 :             uint16_t b = AV_RL16(src1 + j*4 + 2);
      47             : 
      48           0 :             AV_WL16(src1 + j*4 + 0, table[r]);
      49           0 :             AV_WL16(src1 + j*4 + 1, table[g]);
      50           0 :             AV_WL16(src1 + j*4 + 2, table[b]);
      51             :         }
      52             : 
      53             :     }
      54           0 :     return sliceH;
      55             : }
      56             : 
      57             : 
      58           0 : int ff_init_gamma_convert(SwsFilterDescriptor *desc, SwsSlice * src, uint16_t *table)
      59             : {
      60           0 :     GammaContext *li = av_malloc(sizeof(GammaContext));
      61           0 :     if (!li)
      62           0 :         return AVERROR(ENOMEM);
      63           0 :     li->table = table;
      64             : 
      65           0 :     desc->instance = li;
      66           0 :     desc->src = src;
      67           0 :     desc->dst = NULL;
      68           0 :     desc->process = &gamma_convert;
      69             : 
      70           0 :     return 0;
      71             : }
      72             : 

Generated by: LCOV version 1.13