summaryrefslogtreecommitdiff
path: root/ffmpeg/libavcodec/adx.h
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-09-05 17:57:22 +0100
committerTim Redfern <tim@eclectronics.org>2013-09-05 17:57:22 +0100
commit8992cb1d0d07edc33d274f6d7924ecdf6f83d994 (patch)
tree3a2c86846b7eec8137c1507e623fc7018f13d453 /ffmpeg/libavcodec/adx.h
parent741fb4b9e135cfb161a749db88713229038577bb (diff)
making act segmenter
Diffstat (limited to 'ffmpeg/libavcodec/adx.h')
-rw-r--r--ffmpeg/libavcodec/adx.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/ffmpeg/libavcodec/adx.h b/ffmpeg/libavcodec/adx.h
new file mode 100644
index 0000000..b28d09a
--- /dev/null
+++ b/ffmpeg/libavcodec/adx.h
@@ -0,0 +1,80 @@
+/*
+ * ADX ADPCM codecs
+ * Copyright (c) 2001,2003 BERO
+ *
+ * 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
+ */
+
+/**
+ * @file
+ * SEGA CRI adx codecs.
+ *
+ * Reference documents:
+ * http://ku-www.ss.titech.ac.jp/~yatsushi/adx.html
+ * adx2wav & wav2adx http://www.geocities.co.jp/Playtown/2004/
+ */
+
+#ifndef AVCODEC_ADX_H
+#define AVCODEC_ADX_H
+
+#include <stdint.h>
+
+#include "avcodec.h"
+
+typedef struct ADXChannelState {
+ int s1,s2;
+} ADXChannelState;
+
+typedef struct ADXContext {
+ int channels;
+ ADXChannelState prev[2];
+ int header_parsed;
+ int eof;
+ int cutoff;
+ int coeff[2];
+} ADXContext;
+
+#define COEFF_BITS 12
+
+#define BLOCK_SIZE 18
+#define BLOCK_SAMPLES 32
+
+/**
+ * Calculate LPC coefficients based on cutoff frequency and sample rate.
+ *
+ * @param cutoff cutoff frequency
+ * @param sample_rate sample rate
+ * @param bits number of bits used to quantize coefficients
+ * @param[out] coeff 2 quantized LPC coefficients
+ */
+void ff_adx_calculate_coeffs(int cutoff, int sample_rate, int bits, int *coeff);
+
+/**
+ * Decode ADX stream header.
+ * Sets avctx->channels and avctx->sample_rate.
+ *
+ * @param avctx codec context
+ * @param buf header data
+ * @param bufsize data size, should be at least 24 bytes
+ * @param[out] header_size size of ADX header
+ * @param[out] coeff 2 LPC coefficients, can be NULL
+ * @return data offset or negative error code if header is invalid
+ */
+int avpriv_adx_decode_header(AVCodecContext *avctx, const uint8_t *buf,
+ int bufsize, int *header_size, int *coeff);
+
+#endif /* AVCODEC_ADX_H */