1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * ADX ADPCM codecs 3cabdff1aSopenharmony_ci * Copyright (c) 2001,2003 BERO 4cabdff1aSopenharmony_ci * 5cabdff1aSopenharmony_ci * This file is part of FFmpeg. 6cabdff1aSopenharmony_ci * 7cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 8cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 9cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 10cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 11cabdff1aSopenharmony_ci * 12cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 13cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 14cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15cabdff1aSopenharmony_ci * Lesser General Public License for more details. 16cabdff1aSopenharmony_ci * 17cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 18cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 19cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20cabdff1aSopenharmony_ci */ 21cabdff1aSopenharmony_ci 22cabdff1aSopenharmony_ci/** 23cabdff1aSopenharmony_ci * @file 24cabdff1aSopenharmony_ci * SEGA CRI adx codecs. 25cabdff1aSopenharmony_ci * 26cabdff1aSopenharmony_ci * Reference documents: 27cabdff1aSopenharmony_ci * http://ku-www.ss.titech.ac.jp/~yatsushi/adx.html 28cabdff1aSopenharmony_ci * adx2wav & wav2adx http://www.geocities.co.jp/Playtown/2004/ 29cabdff1aSopenharmony_ci */ 30cabdff1aSopenharmony_ci 31cabdff1aSopenharmony_ci#ifndef AVCODEC_ADX_H 32cabdff1aSopenharmony_ci#define AVCODEC_ADX_H 33cabdff1aSopenharmony_ci 34cabdff1aSopenharmony_ci#include <stdint.h> 35cabdff1aSopenharmony_ci 36cabdff1aSopenharmony_ci#include "avcodec.h" 37cabdff1aSopenharmony_ci 38cabdff1aSopenharmony_citypedef struct ADXChannelState { 39cabdff1aSopenharmony_ci int s1,s2; 40cabdff1aSopenharmony_ci} ADXChannelState; 41cabdff1aSopenharmony_ci 42cabdff1aSopenharmony_citypedef struct ADXContext { 43cabdff1aSopenharmony_ci int channels; 44cabdff1aSopenharmony_ci ADXChannelState prev[2]; 45cabdff1aSopenharmony_ci int header_parsed; 46cabdff1aSopenharmony_ci int eof; 47cabdff1aSopenharmony_ci int cutoff; 48cabdff1aSopenharmony_ci int coeff[2]; 49cabdff1aSopenharmony_ci} ADXContext; 50cabdff1aSopenharmony_ci 51cabdff1aSopenharmony_ci#define COEFF_BITS 12 52cabdff1aSopenharmony_ci 53cabdff1aSopenharmony_ci#define BLOCK_SIZE 18 54cabdff1aSopenharmony_ci#define BLOCK_SAMPLES 32 55cabdff1aSopenharmony_ci 56cabdff1aSopenharmony_ci/** 57cabdff1aSopenharmony_ci * Calculate LPC coefficients based on cutoff frequency and sample rate. 58cabdff1aSopenharmony_ci * 59cabdff1aSopenharmony_ci * @param cutoff cutoff frequency 60cabdff1aSopenharmony_ci * @param sample_rate sample rate 61cabdff1aSopenharmony_ci * @param bits number of bits used to quantize coefficients 62cabdff1aSopenharmony_ci * @param[out] coeff 2 quantized LPC coefficients 63cabdff1aSopenharmony_ci */ 64cabdff1aSopenharmony_civoid ff_adx_calculate_coeffs(int cutoff, int sample_rate, int bits, int *coeff); 65cabdff1aSopenharmony_ci 66cabdff1aSopenharmony_ci/** 67cabdff1aSopenharmony_ci * Decode ADX stream header. 68cabdff1aSopenharmony_ci * Sets avctx->channels and avctx->sample_rate. 69cabdff1aSopenharmony_ci * 70cabdff1aSopenharmony_ci * @param avctx codec context 71cabdff1aSopenharmony_ci * @param buf header data 72cabdff1aSopenharmony_ci * @param bufsize data size, should be at least 24 bytes 73cabdff1aSopenharmony_ci * @param[out] header_size size of ADX header 74cabdff1aSopenharmony_ci * @param[out] coeff 2 LPC coefficients, can be NULL 75cabdff1aSopenharmony_ci * @return data offset or negative error code if header is invalid 76cabdff1aSopenharmony_ci */ 77cabdff1aSopenharmony_ciint ff_adx_decode_header(AVCodecContext *avctx, const uint8_t *buf, 78cabdff1aSopenharmony_ci int bufsize, int *header_size, int *coeff); 79cabdff1aSopenharmony_ci 80cabdff1aSopenharmony_ci#endif /* AVCODEC_ADX_H */ 81