0,0 → 1,103 |
/* |
* Copyright (c) 2012 Mans Rullgard <mans@mansr.com> |
* |
* This file is part of FFmpeg. |
* |
* FFmpeg is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* FFmpeg is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with FFmpeg; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
*/ |
|
#include <stdint.h> |
#include "libavutil/avutil.h" |
|
#undef FUNC |
#undef FSUF |
#undef sample |
#undef sample_type |
#undef OUT |
#undef S |
|
#if SAMPLE_SIZE == 32 |
# define sample_type int32_t |
#else |
# define sample_type int16_t |
#endif |
|
#if PLANAR |
# define FSUF AV_JOIN(SAMPLE_SIZE, p) |
# define sample sample_type * |
# define OUT(n) n |
# define S(s, c, i) (s[c][i]) |
#else |
# define FSUF SAMPLE_SIZE |
# define sample sample_type |
# define OUT(n) n[0] |
# define S(s, c, i) (*s++) |
#endif |
|
#define FUNC(n) AV_JOIN(n ## _, FSUF) |
|
static void FUNC(flac_decorrelate_indep_c)(uint8_t **out, int32_t **in, |
int channels, int len, int shift) |
{ |
sample *samples = (sample *) OUT(out); |
int i, j; |
|
for (j = 0; j < len; j++) |
for (i = 0; i < channels; i++) |
S(samples, i, j) = in[i][j] << shift; |
} |
|
static void FUNC(flac_decorrelate_ls_c)(uint8_t **out, int32_t **in, |
int channels, int len, int shift) |
{ |
sample *samples = (sample *) OUT(out); |
int i; |
|
for (i = 0; i < len; i++) { |
int a = in[0][i]; |
int b = in[1][i]; |
S(samples, 0, i) = a << shift; |
S(samples, 1, i) = (a - b) << shift; |
} |
} |
|
static void FUNC(flac_decorrelate_rs_c)(uint8_t **out, int32_t **in, |
int channels, int len, int shift) |
{ |
sample *samples = (sample *) OUT(out); |
int i; |
|
for (i = 0; i < len; i++) { |
int a = in[0][i]; |
int b = in[1][i]; |
S(samples, 0, i) = (a + b) << shift; |
S(samples, 1, i) = b << shift; |
} |
} |
|
static void FUNC(flac_decorrelate_ms_c)(uint8_t **out, int32_t **in, |
int channels, int len, int shift) |
{ |
sample *samples = (sample *) OUT(out); |
int i; |
|
for (i = 0; i < len; i++) { |
int a = in[0][i]; |
int b = in[1][i]; |
a -= b >> 1; |
S(samples, 0, i) = (a + b) << shift; |
S(samples, 1, i) = a << shift; |
} |
} |