LCOV - code coverage report
Current view: top level - libavutil - display.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 25 25 100.0 %
Date: 2017-10-20 23:03:07 Functions: 3 3 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2014 Vittorio Giovara <vittorio.giovara@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 <stdint.h>
      22             : #include <string.h>
      23             : #include <math.h>
      24             : 
      25             : #include "display.h"
      26             : #include "mathematics.h"
      27             : 
      28             : // fixed point to double
      29             : #define CONV_FP(x) ((double) (x)) / (1 << 16)
      30             : 
      31             : // double to fixed point
      32             : #define CONV_DB(x) (int32_t) ((x) * (1 << 16))
      33             : 
      34          14 : double av_display_rotation_get(const int32_t matrix[9])
      35             : {
      36             :     double rotation, scale[2];
      37             : 
      38          14 :     scale[0] = hypot(CONV_FP(matrix[0]), CONV_FP(matrix[3]));
      39          14 :     scale[1] = hypot(CONV_FP(matrix[1]), CONV_FP(matrix[4]));
      40             : 
      41          14 :     if (scale[0] == 0.0 || scale[1] == 0.0)
      42           1 :         return NAN;
      43             : 
      44          26 :     rotation = atan2(CONV_FP(matrix[1]) / scale[1],
      45          26 :                      CONV_FP(matrix[0]) / scale[0]) * 180 / M_PI;
      46             : 
      47          13 :     return -rotation;
      48             : }
      49             : 
      50           3 : void av_display_rotation_set(int32_t matrix[9], double angle)
      51             : {
      52           3 :     double radians = -angle * M_PI / 180.0f;
      53           3 :     double c = cos(radians);
      54           3 :     double s = sin(radians);
      55             : 
      56           3 :     memset(matrix, 0, 9 * sizeof(int32_t));
      57             : 
      58           3 :     matrix[0] = CONV_DB(c);
      59           3 :     matrix[1] = CONV_DB(-s);
      60           3 :     matrix[3] = CONV_DB(s);
      61           3 :     matrix[4] = CONV_DB(c);
      62           3 :     matrix[8] = 1 << 30;
      63           3 : }
      64             : 
      65           2 : void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip)
      66             : {
      67             :     int i;
      68           2 :     const int flip[] = { 1 - 2 * (!!hflip), 1 - 2 * (!!vflip), 1 };
      69             : 
      70           2 :     if (hflip || vflip)
      71          20 :         for (i = 0; i < 9; i++)
      72          18 :             matrix[i] *= flip[i % 3];
      73           2 : }

Generated by: LCOV version 1.13