]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/adx.h
libopusdec: fix out-of-bounds read
[ffmpeg] / libavcodec / adx.h
index 1df06117745f7212c3d156def7b59b1ed2ce74a5..9ae84dcec1fa82edc1225d0ceba317cd7d4049bd 100644 (file)
@@ -2,25 +2,25 @@
  * ADX ADPCM codecs
  * Copyright (c) 2001,2003 BERO
  *
- * This file is part of FFmpeg.
+ * This file is part of Libav.
  *
- * FFmpeg is free software; you can redistribute it and/or
+ * Libav 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,
+ * Libav 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
+ * License along with Libav; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 /**
- * @file adx.h
+ * @file
  * SEGA CRI adx codecs.
  *
  * Reference documents:
 #ifndef AVCODEC_ADX_H
 #define AVCODEC_ADX_H
 
-typedef struct {
+#include <stdint.h>
+
+#include "avcodec.h"
+
+typedef struct ADXChannelState {
     int s1,s2;
-} PREV;
+} ADXChannelState;
 
-typedef struct {
-    PREV prev[2];
+typedef struct ADXContext {
+    int channels;
+    ADXChannelState prev[2];
     int header_parsed;
-    unsigned char dec_temp[18*2];
-    int in_temp;
+    int eof;
+    int cutoff;
+    int coeff[2];
 } ADXContext;
 
-#define    BASEVOL   0x4000
-#define    SCALE1    0x7298
-#define    SCALE2    0x3350
+#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 ff_adx_decode_header(AVCodecContext *avctx, const uint8_t *buf,
+                         int bufsize, int *header_size, int *coeff);
 
 #endif /* AVCODEC_ADX_H */