annotate adx.c @ 4714:fc70a43a4f01 libavcodec

Fix H.264 8x8 transform selection It seems that it's opt parse bug, it can't process the flags which start by digit. After change 8x8dct to dct8x8, I can set it without problem. I guess nobody will use it since it can't work as expected, so the quick fix is change the option name. Patch by Limin Wang lance dot lmwang at gmail com
author mru
date Sat, 24 Mar 2007 12:07:07 +0000
parents c8c591fe26f8
children 6166fbf375cc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
1 /*
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
2 * ADX ADPCM codecs
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
3 * Copyright (c) 2001,2003 BERO
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3445
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3445
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3445
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3445
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3445
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
15 * Lesser General Public License for more details.
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
16 *
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3445
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 2967
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
20 */
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
21 #include "avcodec.h"
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
22
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
23 /**
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
24 * @file adx.c
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
25 * SEGA CRI adx codecs.
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
26 *
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
27 * Reference documents:
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
28 * http://ku-www.ss.titech.ac.jp/~yatsushi/adx.html
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
29 * adx2wav & wav2adx http://www.geocities.co.jp/Playtown/2004/
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
30 */
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
31
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
32 typedef struct {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
33 int s1,s2;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
34 } PREV;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
35
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
36 typedef struct {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
37 PREV prev[2];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
38 int header_parsed;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
39 unsigned char dec_temp[18*2];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
40 unsigned short enc_temp[32*2];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
41 int in_temp;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
42 } ADXContext;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
43
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
44 //#define BASEVOL 0x11e0
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
45 #define BASEVOL 0x4000
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
46 #define SCALE1 0x7298
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
47 #define SCALE2 0x3350
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
48
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
49 #define CLIP(s) if (s>32767) s=32767; else if (s<-32768) s=-32768
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
50
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
51 /* 18 bytes <-> 32 samples */
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
52
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
53 #ifdef CONFIG_ENCODERS
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
54 static void adx_encode(unsigned char *adx,const short *wav,PREV *prev)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
55 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
56 int scale;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
57 int i;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
58 int s0,s1,s2,d;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
59 int max=0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
60 int min=0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
61 int data[32];
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
62
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
63 s1 = prev->s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
64 s2 = prev->s2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
65 for(i=0;i<32;i++) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
66 s0 = wav[i];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
67 d = ((s0<<14) - SCALE1*s1 + SCALE2*s2)/BASEVOL;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
68 data[i]=d;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
69 if (max<d) max=d;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
70 if (min>d) min=d;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
71 s2 = s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
72 s1 = s0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
73 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
74 prev->s1 = s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
75 prev->s2 = s2;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
76
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
77 /* -8..+7 */
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
78
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
79 if (max==0 && min==0) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
80 memset(adx,0,18);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
81 return;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
82 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
83
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
84 if (max/7>-min/8) scale = max/7;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
85 else scale = -min/8;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
86
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
87 if (scale==0) scale=1;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
88
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
89 adx[0] = scale>>8;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
90 adx[1] = scale;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
91
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
92 for(i=0;i<16;i++) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
93 adx[i+2] = ((data[i*2]/scale)<<4) | ((data[i*2+1]/scale)&0xf);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
94 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
95 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
96 #endif //CONFIG_ENCODERS
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
97
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
98 static void adx_decode(short *out,const unsigned char *in,PREV *prev)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
99 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
100 int scale = ((in[0]<<8)|(in[1]));
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
101 int i;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
102 int s0,s1,s2,d;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
103
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
104 // printf("%x ",scale);
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
105
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
106 in+=2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
107 s1 = prev->s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
108 s2 = prev->s2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
109 for(i=0;i<16;i++) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
110 d = in[i];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
111 // d>>=4; if (d&8) d-=16;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
112 d = ((signed char)d >> 4);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
113 s0 = (BASEVOL*d*scale + SCALE1*s1 - SCALE2*s2)>>14;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
114 CLIP(s0);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
115 *out++=s0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
116 s2 = s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
117 s1 = s0;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
118
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
119 d = in[i];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
120 //d&=15; if (d&8) d-=16;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
121 d = ((signed char)(d<<4) >> 4);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
122 s0 = (BASEVOL*d*scale + SCALE1*s1 - SCALE2*s2)>>14;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
123 CLIP(s0);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
124 *out++=s0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
125 s2 = s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
126 s1 = s0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
127 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
128 prev->s1 = s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
129 prev->s2 = s2;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
130
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
131 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
132
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
133 static void adx_decode_stereo(short *out,const unsigned char *in,PREV *prev)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
134 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
135 short tmp[32*2];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
136 int i;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
137
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
138 adx_decode(tmp ,in ,prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
139 adx_decode(tmp+32,in+18,prev+1);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
140 for(i=0;i<32;i++) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
141 out[i*2] = tmp[i];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
142 out[i*2+1] = tmp[i+32];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
143 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
144 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
145
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
146 #ifdef CONFIG_ENCODERS
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
147
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
148 static void write_long(unsigned char *p,uint32_t v)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
149 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
150 p[0] = v>>24;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
151 p[1] = v>>16;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
152 p[2] = v>>8;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
153 p[3] = v;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
154 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
155
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
156 static int adx_encode_header(AVCodecContext *avctx,unsigned char *buf,size_t bufsize)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
157 {
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
158 #if 0
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
159 struct {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
160 uint32_t offset; /* 0x80000000 + sample start - 4 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
161 unsigned char unknown1[3]; /* 03 12 04 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
162 unsigned char channel; /* 1 or 2 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
163 uint32_t freq;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
164 uint32_t size;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
165 uint32_t unknown2; /* 01 f4 03 00 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
166 uint32_t unknown3; /* 00 00 00 00 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
167 uint32_t unknown4; /* 00 00 00 00 */
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
168
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
169 /* if loop
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
170 unknown3 00 15 00 01
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
171 unknown4 00 00 00 01
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
172 long loop_start_sample;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
173 long loop_start_byte;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
174 long loop_end_sample;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
175 long loop_end_byte;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2522
diff changeset
176 long
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
177 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
178 } adxhdr; /* big endian */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
179 /* offset-6 "(c)CRI" */
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
180 #endif
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
181 write_long(buf+0x00,0x80000000|0x20);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
182 write_long(buf+0x04,0x03120400|avctx->channels);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
183 write_long(buf+0x08,avctx->sample_rate);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
184 write_long(buf+0x0c,0); /* FIXME: set after */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
185 write_long(buf+0x10,0x01040300);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
186 write_long(buf+0x14,0x00000000);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
187 write_long(buf+0x18,0x00000000);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
188 memcpy(buf+0x1c,"\0\0(c)CRI",8);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
189 return 0x20+4;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
190 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
191
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
192 static int adx_decode_init(AVCodecContext *avctx);
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
193 static int adx_encode_init(AVCodecContext *avctx)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
194 {
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
195 if (avctx->channels > 2)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
196 return -1; /* only stereo or mono =) */
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
197 avctx->frame_size = 32;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
198
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
199 avctx->coded_frame= avcodec_alloc_frame();
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
200 avctx->coded_frame->key_frame= 1;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
201
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
202 // avctx->bit_rate = avctx->sample_rate*avctx->channels*18*8/32;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
203
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1569
diff changeset
204 av_log(avctx, AV_LOG_DEBUG, "adx encode init\n");
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
205 adx_decode_init(avctx);
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
206
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
207 return 0;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
208 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
209
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
210 static int adx_encode_close(AVCodecContext *avctx)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
211 {
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
212 av_freep(&avctx->coded_frame);
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
213
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
214 return 0;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
215 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
216
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
217 static int adx_encode_frame(AVCodecContext *avctx,
1569
1f8d1e1173d8 Fixes GCC 3.3.2 warnings patch by (Panagiotis Issaris <takis at lumumba dot luc dot ac dot be>)
michael
parents: 1534
diff changeset
218 uint8_t *frame, int buf_size, void *data)
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
219 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
220 ADXContext *c = avctx->priv_data;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
221 const short *samples = data;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
222 unsigned char *dst = frame;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
223 int rest = avctx->frame_size;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
224
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
225 /*
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
226 input data size =
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
227 ffmpeg.c: do_audio_out()
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
228 frame_bytes = enc->frame_size * 2 * enc->channels;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
229 */
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
230
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
231 // printf("sz=%d ",buf_size); fflush(stdout);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
232 if (!c->header_parsed) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
233 int hdrsize = adx_encode_header(avctx,dst,buf_size);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
234 dst+=hdrsize;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
235 c->header_parsed = 1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
236 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
237
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
238 if (avctx->channels==1) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
239 while(rest>=32) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
240 adx_encode(dst,samples,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
241 dst+=18;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
242 samples+=32;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
243 rest-=32;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
244 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
245 } else {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
246 while(rest>=32*2) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
247 short tmpbuf[32*2];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
248 int i;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
249
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
250 for(i=0;i<32;i++) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
251 tmpbuf[i] = samples[i*2];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
252 tmpbuf[i+32] = samples[i*2+1];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
253 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
254
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
255 adx_encode(dst,tmpbuf,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
256 adx_encode(dst+18,tmpbuf+32,c->prev+1);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
257 dst+=18*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
258 samples+=32*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
259 rest-=32*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
260 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
261 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
262 return dst-frame;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
263 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
264
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
265 #endif //CONFIG_ENCODERS
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
266
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
267 static uint32_t read_long(const unsigned char *p)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
268 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
269 return (p[0]<<24)|(p[1]<<16)|(p[2]<<8)|p[3];
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
270 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
271
3356
90344fa4a1d4 cleanup patch from Diego Petten <flameeyes@gentoo.org>
lu_zero
parents: 3036
diff changeset
272 static int is_adx(const unsigned char *buf,size_t bufsize)
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
273 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
274 int offset;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
275
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
276 if (buf[0]!=0x80) return 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
277 offset = (read_long(buf)^0x80000000)+4;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
278 if (bufsize<offset || memcmp(buf+offset-6,"(c)CRI",6)) return 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
279 return offset;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
280 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
281
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
282 /* return data offset or 6 */
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
283 static int adx_decode_header(AVCodecContext *avctx,const unsigned char *buf,size_t bufsize)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
284 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
285 int offset;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
286 int channels,freq,size;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
287
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
288 offset = is_adx(buf,bufsize);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
289 if (offset==0) return 0;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
290
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
291 channels = buf[7];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
292 freq = read_long(buf+8);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
293 size = read_long(buf+12);
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
294
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
295 // printf("freq=%d ch=%d\n",freq,channels);
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
296
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
297 avctx->sample_rate = freq;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
298 avctx->channels = channels;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
299 avctx->bit_rate = freq*channels*18*8/32;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
300 // avctx->frame_size = 18*channels;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
301
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
302 return offset;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
303 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
304
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
305 static int adx_decode_init(AVCodecContext * avctx)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
306 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
307 ADXContext *c = avctx->priv_data;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
308
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
309 // printf("adx_decode_init\n"); fflush(stdout);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
310 c->prev[0].s1 = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
311 c->prev[0].s2 = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
312 c->prev[1].s1 = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
313 c->prev[1].s2 = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
314 c->header_parsed = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
315 c->in_temp = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
316 return 0;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
317 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
318
2522
e25782262d7d kill warnings patch by (Mns Rullgrd <mru inprovide com>)
michael
parents: 1598
diff changeset
319 #if 0
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
320 static void dump(unsigned char *buf,size_t len)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
321 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
322 int i;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
323 for(i=0;i<len;i++) {
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1569
diff changeset
324 if ((i&15)==0) av_log(NULL, AV_LOG_DEBUG, "%04x ",i);
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1569
diff changeset
325 av_log(NULL, AV_LOG_DEBUG, "%02x ",buf[i]);
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1569
diff changeset
326 if ((i&15)==15) av_log(NULL, AV_LOG_DEBUG, "\n");
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
327 }
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1569
diff changeset
328 av_log(NULL, AV_LOG_ERROR, "\n");
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
329 }
2522
e25782262d7d kill warnings patch by (Mns Rullgrd <mru inprovide com>)
michael
parents: 1598
diff changeset
330 #endif
e25782262d7d kill warnings patch by (Mns Rullgrd <mru inprovide com>)
michael
parents: 1598
diff changeset
331
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
332 static int adx_decode_frame(AVCodecContext *avctx,
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
333 void *data, int *data_size,
1569
1f8d1e1173d8 Fixes GCC 3.3.2 warnings patch by (Panagiotis Issaris <takis at lumumba dot luc dot ac dot be>)
michael
parents: 1534
diff changeset
334 uint8_t *buf0, int buf_size)
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
335 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
336 ADXContext *c = avctx->priv_data;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
337 short *samples = data;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
338 const uint8_t *buf = buf0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
339 int rest = buf_size;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
340
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
341 if (!c->header_parsed) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
342 int hdrsize = adx_decode_header(avctx,buf,rest);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
343 if (hdrsize==0) return -1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
344 c->header_parsed = 1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
345 buf += hdrsize;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
346 rest -= hdrsize;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
347 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
348
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
349 if (c->in_temp) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
350 int copysize = 18*avctx->channels - c->in_temp;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
351 memcpy(c->dec_temp+c->in_temp,buf,copysize);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
352 rest -= copysize;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
353 buf += copysize;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
354 if (avctx->channels==1) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
355 adx_decode(samples,c->dec_temp,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
356 samples += 32;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
357 } else {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
358 adx_decode_stereo(samples,c->dec_temp,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
359 samples += 32*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
360 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
361 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
362 //
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
363 if (avctx->channels==1) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
364 while(rest>=18) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
365 adx_decode(samples,buf,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
366 rest-=18;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
367 buf+=18;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
368 samples+=32;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
369 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
370 } else {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
371 while(rest>=18*2) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
372 adx_decode_stereo(samples,buf,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
373 rest-=18*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
374 buf+=18*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
375 samples+=32*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
376 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
377 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
378 //
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
379 c->in_temp = rest;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
380 if (rest) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
381 memcpy(c->dec_temp,buf,rest);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
382 buf+=rest;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
383 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
384 *data_size = (uint8_t*)samples - (uint8_t*)data;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
385 // printf("%d:%d ",buf-buf0,*data_size); fflush(stdout);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
386 return buf-buf0;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
387 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
388
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
389 #ifdef CONFIG_ENCODERS
3445
2d042ed9dd2c make the adx adpcm codec available
mru
parents: 3356
diff changeset
390 AVCodec adpcm_adx_encoder = {
2d042ed9dd2c make the adx adpcm codec available
mru
parents: 3356
diff changeset
391 "adpcm_adx",
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
392 CODEC_TYPE_AUDIO,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
393 CODEC_ID_ADPCM_ADX,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
394 sizeof(ADXContext),
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
395 adx_encode_init,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
396 adx_encode_frame,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
397 adx_encode_close,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
398 NULL,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
399 };
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
400 #endif //CONFIG_ENCODERS
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
401
3445
2d042ed9dd2c make the adx adpcm codec available
mru
parents: 3356
diff changeset
402 AVCodec adpcm_adx_decoder = {
2d042ed9dd2c make the adx adpcm codec available
mru
parents: 3356
diff changeset
403 "adpcm_adx",
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
404 CODEC_TYPE_AUDIO,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
405 CODEC_ID_ADPCM_ADX,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
406 sizeof(ADXContext),
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
407 adx_decode_init,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
408 NULL,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
409 NULL,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
410 adx_decode_frame,
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
411 };
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
412