Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2012 Mans Rullgard <mans@mansr.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 "libavutil/avutil.h"
  23.  
  24. #undef FUNC
  25. #undef FSUF
  26. #undef sample
  27. #undef sample_type
  28. #undef OUT
  29. #undef S
  30.  
  31. #if SAMPLE_SIZE == 32
  32. #   define sample_type  int32_t
  33. #else
  34. #   define sample_type  int16_t
  35. #endif
  36.  
  37. #if PLANAR
  38. #   define FSUF   AV_JOIN(SAMPLE_SIZE, p)
  39. #   define sample sample_type *
  40. #   define OUT(n) n
  41. #   define S(s, c, i) (s[c][i])
  42. #else
  43. #   define FSUF   SAMPLE_SIZE
  44. #   define sample sample_type
  45. #   define OUT(n) n[0]
  46. #   define S(s, c, i) (*s++)
  47. #endif
  48.  
  49. #define FUNC(n) AV_JOIN(n ## _, FSUF)
  50.  
  51. static void FUNC(flac_decorrelate_indep_c)(uint8_t **out, int32_t **in,
  52.                                            int channels, int len, int shift)
  53. {
  54.     sample *samples = (sample *) OUT(out);
  55.     int i, j;
  56.  
  57.     for (j = 0; j < len; j++)
  58.         for (i = 0; i < channels; i++)
  59.             S(samples, i, j) = in[i][j] << shift;
  60. }
  61.  
  62. static void FUNC(flac_decorrelate_ls_c)(uint8_t **out, int32_t **in,
  63.                                         int channels, int len, int shift)
  64. {
  65.     sample *samples = (sample *) OUT(out);
  66.     int i;
  67.  
  68.     for (i = 0; i < len; i++) {
  69.         int a = in[0][i];
  70.         int b = in[1][i];
  71.         S(samples, 0, i) =  a      << shift;
  72.         S(samples, 1, i) = (a - b) << shift;
  73.     }
  74. }
  75.  
  76. static void FUNC(flac_decorrelate_rs_c)(uint8_t **out, int32_t **in,
  77.                                         int channels, int len, int shift)
  78. {
  79.     sample *samples = (sample *) OUT(out);
  80.     int i;
  81.  
  82.     for (i = 0; i < len; i++) {
  83.         int a = in[0][i];
  84.         int b = in[1][i];
  85.         S(samples, 0, i) = (a + b) << shift;
  86.         S(samples, 1, i) =  b      << shift;
  87.     }
  88. }
  89.  
  90. static void FUNC(flac_decorrelate_ms_c)(uint8_t **out, int32_t **in,
  91.                                         int channels, int len, int shift)
  92. {
  93.     sample *samples = (sample *) OUT(out);
  94.     int i;
  95.  
  96.     for (i = 0; i < len; i++) {
  97.         int a = in[0][i];
  98.         int b = in[1][i];
  99.         a -= b >> 1;
  100.         S(samples, 0, i) = (a + b) << shift;
  101.         S(samples, 1, i) =  a      << shift;
  102.     }
  103. }
  104.