* adx2wav & wav2adx http://www.geocities.co.jp/Playtown/2004/
*/
-/* 18 bytes <-> 32 samples */
-
static void adx_encode(ADXContext *c, unsigned char *adx, const short *wav,
ADXChannelState *prev)
{
prev->s1 = s1;
prev->s2 = s2;
- /* -8..+7 */
-
if (max==0 && min==0) {
memset(adx,0,18);
return;
static int adx_encode_header(AVCodecContext *avctx,unsigned char *buf,size_t bufsize)
{
-#if 0
- struct {
- uint32_t offset; /* 0x80000000 + sample start - 4 */
- unsigned char unknown1[3]; /* 03 12 04 */
- unsigned char channel; /* 1 or 2 */
- uint32_t freq;
- uint32_t size;
- uint32_t unknown2; /* 01 f4 03 00 */
- uint32_t unknown3; /* 00 00 00 00 */
- uint32_t unknown4; /* 00 00 00 00 */
-
- /* if loop
- unknown3 00 15 00 01
- unknown4 00 00 00 01
- long loop_start_sample;
- long loop_start_byte;
- long loop_end_sample;
- long loop_end_byte;
- long
- */
- } adxhdr; /* big endian */
- /* offset-6 "(c)CRI" */
-#endif
ADXContext *c = avctx->priv_data;
AV_WB32(buf+0x00,0x80000000|0x20);
AV_WB32(buf+0x04,0x03120400|avctx->channels);
AV_WB32(buf+0x08,avctx->sample_rate);
- AV_WB32(buf+0x0c,0); /* FIXME: set after */
+ AV_WB32(buf+0x0c,0);
AV_WB16(buf + 0x10, c->cutoff);
AV_WB32(buf + 0x12, 0x03000000);
AV_WB32(buf + 0x16, 0x00000000);
ADXContext *c = avctx->priv_data;
if (avctx->channels > 2)
- return -1; /* only stereo or mono =) */
+ return -1;
avctx->frame_size = 32;
avctx->coded_frame= avcodec_alloc_frame();
avctx->coded_frame->key_frame= 1;
-// avctx->bit_rate = avctx->sample_rate*avctx->channels*18*8/32;
-
/* the cutoff can be adjusted, but this seems to work pretty well */
c->cutoff = 500;
ff_adx_calculate_coeffs(c->cutoff, avctx->sample_rate, COEFF_BITS, c->coeff);
unsigned char *dst = frame;
int rest = avctx->frame_size;
-/*
- input data size =
- avconv.c:do_audio_out()
- frame_bytes = enc->frame_size * 2 * enc->channels;
-*/
-
-// printf("sz=%d ",buf_size); fflush(stdout);
if (!c->header_parsed) {
int hdrsize = adx_encode_header(avctx,dst,buf_size);
dst+=hdrsize;