annotate adx.c @ 5757:ace63c809071 libavcodec

Remove uses of SIGILL for CPU extension detection, that method is not acceptable in a library. Should not change anything for PPC, the autodetection is currently pointless due to other code being compiled with -maltivec as well (and detection for OSX and AmigaOS remains in place). SPARC binaries built with VIS support can now only run on systems with VIS.
author reimar
date Tue, 02 Oct 2007 18:18:35 +0000
parents cf77b8588f15
children ad587a64ef52
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 /* 18 bytes <-> 32 samples */
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
50
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
51 #ifdef CONFIG_ENCODERS
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
52 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
53 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
54 int scale;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
55 int i;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
56 int s0,s1,s2,d;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
57 int max=0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
58 int min=0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
59 int data[32];
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
60
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
61 s1 = prev->s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
62 s2 = prev->s2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
63 for(i=0;i<32;i++) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
64 s0 = wav[i];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
65 d = ((s0<<14) - SCALE1*s1 + SCALE2*s2)/BASEVOL;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
66 data[i]=d;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
67 if (max<d) max=d;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
68 if (min>d) min=d;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
69 s2 = s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
70 s1 = s0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
71 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
72 prev->s1 = s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
73 prev->s2 = s2;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
74
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
75 /* -8..+7 */
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 if (max==0 && min==0) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
78 memset(adx,0,18);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
79 return;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
80 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
81
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
82 if (max/7>-min/8) scale = max/7;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
83 else scale = -min/8;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
84
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
85 if (scale==0) scale=1;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
86
5067
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
87 AV_WB16(adx, scale);
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 for(i=0;i<16;i++) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
90 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
91 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
92 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
93 #endif //CONFIG_ENCODERS
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
94
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
95 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
96 {
5067
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
97 int scale = AV_RB16(in);
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
98 int i;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
99 int s0,s1,s2,d;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
100
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
101 // printf("%x ",scale);
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
102
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
103 in+=2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
104 s1 = prev->s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
105 s2 = prev->s2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
106 for(i=0;i<16;i++) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
107 d = in[i];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
108 // d>>=4; if (d&8) d-=16;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
109 d = ((signed char)d >> 4);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
110 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
111 s2 = s1;
5525
bc4791868c52 various simplifications around recent av_clip_int16() usage
aurel
parents: 5523
diff changeset
112 s1 = av_clip_int16(s0);
bc4791868c52 various simplifications around recent av_clip_int16() usage
aurel
parents: 5523
diff changeset
113 *out++=s1;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
114
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
115 d = in[i];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
116 //d&=15; if (d&8) d-=16;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
117 d = ((signed char)(d<<4) >> 4);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
118 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
119 s2 = s1;
5525
bc4791868c52 various simplifications around recent av_clip_int16() usage
aurel
parents: 5523
diff changeset
120 s1 = av_clip_int16(s0);
bc4791868c52 various simplifications around recent av_clip_int16() usage
aurel
parents: 5523
diff changeset
121 *out++=s1;
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
122 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
123 prev->s1 = s1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
124 prev->s2 = s2;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
125
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
126 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
127
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
128 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
129 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
130 short tmp[32*2];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
131 int i;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
132
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
133 adx_decode(tmp ,in ,prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
134 adx_decode(tmp+32,in+18,prev+1);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
135 for(i=0;i<32;i++) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
136 out[i*2] = tmp[i];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
137 out[i*2+1] = tmp[i+32];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
138 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
139 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
140
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
141 #ifdef CONFIG_ENCODERS
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
142
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
143 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
144 {
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
145 #if 0
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
146 struct {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
147 uint32_t offset; /* 0x80000000 + sample start - 4 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
148 unsigned char unknown1[3]; /* 03 12 04 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
149 unsigned char channel; /* 1 or 2 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
150 uint32_t freq;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
151 uint32_t size;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
152 uint32_t unknown2; /* 01 f4 03 00 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
153 uint32_t unknown3; /* 00 00 00 00 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
154 uint32_t unknown4; /* 00 00 00 00 */
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
155
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
156 /* if loop
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
157 unknown3 00 15 00 01
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
158 unknown4 00 00 00 01
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
159 long loop_start_sample;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
160 long loop_start_byte;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
161 long loop_end_sample;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
162 long loop_end_byte;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2522
diff changeset
163 long
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
164 */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
165 } adxhdr; /* big endian */
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
166 /* offset-6 "(c)CRI" */
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
167 #endif
5067
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
168 AV_WB32(buf+0x00,0x80000000|0x20);
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
169 AV_WB32(buf+0x04,0x03120400|avctx->channels);
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
170 AV_WB32(buf+0x08,avctx->sample_rate);
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
171 AV_WB32(buf+0x0c,0); /* FIXME: set after */
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
172 AV_WB32(buf+0x10,0x01040300);
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
173 AV_WB32(buf+0x14,0x00000000);
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
174 AV_WB32(buf+0x18,0x00000000);
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
175 memcpy(buf+0x1c,"\0\0(c)CRI",8);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
176 return 0x20+4;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
177 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
178
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
179 static int adx_decode_init(AVCodecContext *avctx);
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
180 static int adx_encode_init(AVCodecContext *avctx)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
181 {
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
182 if (avctx->channels > 2)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
183 return -1; /* only stereo or mono =) */
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
184 avctx->frame_size = 32;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
185
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
186 avctx->coded_frame= avcodec_alloc_frame();
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
187 avctx->coded_frame->key_frame= 1;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
188
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
189 // 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
190
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1569
diff changeset
191 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
192 adx_decode_init(avctx);
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
193
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
194 return 0;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
195 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
196
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
197 static int adx_encode_close(AVCodecContext *avctx)
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 av_freep(&avctx->coded_frame);
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
200
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
201 return 0;
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
202 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
203
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
204 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
205 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
206 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
207 ADXContext *c = avctx->priv_data;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
208 const short *samples = data;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
209 unsigned char *dst = frame;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
210 int rest = avctx->frame_size;
1531
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 /*
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
213 input data size =
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
214 ffmpeg.c: do_audio_out()
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
215 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
216 */
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
217
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
218 // printf("sz=%d ",buf_size); fflush(stdout);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
219 if (!c->header_parsed) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
220 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
221 dst+=hdrsize;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
222 c->header_parsed = 1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
223 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
224
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
225 if (avctx->channels==1) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
226 while(rest>=32) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
227 adx_encode(dst,samples,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
228 dst+=18;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
229 samples+=32;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
230 rest-=32;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
231 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
232 } else {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
233 while(rest>=32*2) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
234 short tmpbuf[32*2];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
235 int i;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
236
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
237 for(i=0;i<32;i++) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
238 tmpbuf[i] = samples[i*2];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
239 tmpbuf[i+32] = samples[i*2+1];
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
240 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
241
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
242 adx_encode(dst,tmpbuf,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
243 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
244 dst+=18*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
245 samples+=32*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
246 rest-=32*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
247 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
248 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
249 return dst-frame;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
250 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
251
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
252 #endif //CONFIG_ENCODERS
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
253
3356
90344fa4a1d4 cleanup patch from Diego Petten <flameeyes@gentoo.org>
lu_zero
parents: 3036
diff changeset
254 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
255 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
256 int offset;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
257
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
258 if (buf[0]!=0x80) return 0;
5067
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
259 offset = (AV_RB32(buf)^0x80000000)+4;
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
260 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
261 return offset;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
262 }
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 /* return data offset or 6 */
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
265 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
266 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
267 int offset;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
268 int channels,freq,size;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
269
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
270 offset = is_adx(buf,bufsize);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
271 if (offset==0) return 0;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
272
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
273 channels = buf[7];
5067
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
274 freq = AV_RB32(buf+8);
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 3947
diff changeset
275 size = AV_RB32(buf+12);
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
276
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
277 // 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
278
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
279 avctx->sample_rate = freq;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
280 avctx->channels = channels;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
281 avctx->bit_rate = freq*channels*18*8/32;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
282 // avctx->frame_size = 18*channels;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
283
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
284 return offset;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
285 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
286
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
287 static int adx_decode_init(AVCodecContext * avctx)
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
288 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
289 ADXContext *c = avctx->priv_data;
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 // printf("adx_decode_init\n"); fflush(stdout);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
292 c->prev[0].s1 = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
293 c->prev[0].s2 = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
294 c->prev[1].s1 = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
295 c->prev[1].s2 = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
296 c->header_parsed = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
297 c->in_temp = 0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
298 return 0;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
299 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
300
2522
e25782262d7d kill warnings patch by (Mns Rullgrd <mru inprovide com>)
michael
parents: 1598
diff changeset
301 #if 0
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
302 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
303 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
304 int i;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
305 for(i=0;i<len;i++) {
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1569
diff changeset
306 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
307 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
308 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
309 }
1598
932d306bf1dc av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents: 1569
diff changeset
310 av_log(NULL, AV_LOG_ERROR, "\n");
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
311 }
2522
e25782262d7d kill warnings patch by (Mns Rullgrd <mru inprovide com>)
michael
parents: 1598
diff changeset
312 #endif
e25782262d7d kill warnings patch by (Mns Rullgrd <mru inprovide com>)
michael
parents: 1598
diff changeset
313
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
314 static int adx_decode_frame(AVCodecContext *avctx,
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
315 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
316 uint8_t *buf0, int buf_size)
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
317 {
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
318 ADXContext *c = avctx->priv_data;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
319 short *samples = data;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
320 const uint8_t *buf = buf0;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
321 int rest = buf_size;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
322
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
323 if (!c->header_parsed) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
324 int hdrsize = adx_decode_header(avctx,buf,rest);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
325 if (hdrsize==0) return -1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
326 c->header_parsed = 1;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
327 buf += hdrsize;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
328 rest -= hdrsize;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
329 }
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
330
5704
cf77b8588f15 Do not try to decode more data than output buffer may hold
kostya
parents: 5525
diff changeset
331 /* 18 bytes of data are expanded into 32*2 bytes of audio,
cf77b8588f15 Do not try to decode more data than output buffer may hold
kostya
parents: 5525
diff changeset
332 so guard against buffer overflows */
cf77b8588f15 Do not try to decode more data than output buffer may hold
kostya
parents: 5525
diff changeset
333 if(rest/18 > *data_size/64)
cf77b8588f15 Do not try to decode more data than output buffer may hold
kostya
parents: 5525
diff changeset
334 rest = (*data_size/64) * 18;
cf77b8588f15 Do not try to decode more data than output buffer may hold
kostya
parents: 5525
diff changeset
335
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
336 if (c->in_temp) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
337 int copysize = 18*avctx->channels - c->in_temp;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
338 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
339 rest -= copysize;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
340 buf += copysize;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
341 if (avctx->channels==1) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
342 adx_decode(samples,c->dec_temp,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
343 samples += 32;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
344 } else {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
345 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
346 samples += 32*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
347 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
348 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
349 //
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
350 if (avctx->channels==1) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
351 while(rest>=18) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
352 adx_decode(samples,buf,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
353 rest-=18;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
354 buf+=18;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
355 samples+=32;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
356 }
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 while(rest>=18*2) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
359 adx_decode_stereo(samples,buf,c->prev);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
360 rest-=18*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
361 buf+=18*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
362 samples+=32*2;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
363 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
364 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
365 //
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
366 c->in_temp = rest;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
367 if (rest) {
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
368 memcpy(c->dec_temp,buf,rest);
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
369 buf+=rest;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
370 }
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
371 *data_size = (uint8_t*)samples - (uint8_t*)data;
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
372 // 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
373 return buf-buf0;
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
374 }
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
375
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
376 #ifdef CONFIG_ENCODERS
3445
2d042ed9dd2c make the adx adpcm codec available
mru
parents: 3356
diff changeset
377 AVCodec adpcm_adx_encoder = {
2d042ed9dd2c make the adx adpcm codec available
mru
parents: 3356
diff changeset
378 "adpcm_adx",
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
379 CODEC_TYPE_AUDIO,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
380 CODEC_ID_ADPCM_ADX,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
381 sizeof(ADXContext),
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
382 adx_encode_init,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
383 adx_encode_frame,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
384 adx_encode_close,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
385 NULL,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
386 };
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
387 #endif //CONFIG_ENCODERS
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
388
3445
2d042ed9dd2c make the adx adpcm codec available
mru
parents: 3356
diff changeset
389 AVCodec adpcm_adx_decoder = {
2d042ed9dd2c make the adx adpcm codec available
mru
parents: 3356
diff changeset
390 "adpcm_adx",
1534
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
391 CODEC_TYPE_AUDIO,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
392 CODEC_ID_ADPCM_ADX,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
393 sizeof(ADXContext),
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
394 adx_decode_init,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
395 NULL,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
396 NULL,
5bdf2017d854 replace file to remove nasty DOS CRs and hard tabs
melanson
parents: 1531
diff changeset
397 adx_decode_frame,
1531
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
398 };
a78de892cefd added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff changeset
399