summaryrefslogtreecommitdiff
path: root/libavcodec/flacdsp_template.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-07-07 02:17:30 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-07-07 02:17:30 +0200
commit46a47077eee2d7755e17f6557903f383cdfe1b8b (patch)
tree2f42fe2b5bcd4f3e71a24bc9126ce73ecc665a74 /libavcodec/flacdsp_template.c
parenta6da14ec3cbe009b2f6fe3eaaa4865e8c8f5ef1a (diff)
parent5adc829eb0787682111ca063bfc2b31558999dff (diff)
downloadffmpeg-46a47077eee2d7755e17f6557903f383cdfe1b8b.tar.gz
Merge remote-tracking branch 'qatar/master'
* qatar/master: configure: add functions for testing code fragments af_amix: avoid spurious EAGAIN. af_amix: return AVERROR(EAGAIN) when request_frame didn't produce output. af_amix: only consider negative return codes as errors. avconv: use only meaningful timestamps in start time check. avconv: fix the check for -ss as an output option. mss3: add forgotten 'static' qualifier for private table lavc: options: add planar names for request_sample_fmt flacdec: add planar output support flvdec: Treat all nellymoser versions as the same codec Conflicts: ffmpeg.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/flacdsp_template.c')
-rw-r--r--libavcodec/flacdsp_template.c47
1 files changed, 32 insertions, 15 deletions
diff --git a/libavcodec/flacdsp_template.c b/libavcodec/flacdsp_template.c
index 808b20d41d..62c0a15ff6 100644
--- a/libavcodec/flacdsp_template.c
+++ b/libavcodec/flacdsp_template.c
@@ -19,68 +19,85 @@
*/
#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 FUNC(n) n ## _32
-# define sample int32_t
+# define sample_type int32_t
#else
-# define FUNC(n) n ## _16
-# define sample int16_t
+# 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[0];
+ sample *samples = (sample *) OUT(out);
int i, j;
for (j = 0; j < len; j++)
for (i = 0; i < channels; i++)
- *samples++ = in[i][j] << shift;
+ 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[0];
+ sample *samples = (sample *) OUT(out);
int i;
for (i = 0; i < len; i++) {
int a = in[0][i];
int b = in[1][i];
- *samples++ = a << shift;
- *samples++ = (a - b) << shift;
+ 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[0];
+ sample *samples = (sample *) OUT(out);
int i;
for (i = 0; i < len; i++) {
int a = in[0][i];
int b = in[1][i];
- *samples++ = (a + b) << shift;
- *samples++ = b << shift;
+ 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[0];
+ 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;
- *samples++ = (a + b) << shift;
- *samples++ = a << shift;
+ S(samples, 0, i) = (a + b) << shift;
+ S(samples, 1, i) = a << shift;
}
}