Mercurial > libavcodec.hg
annotate adxenc.c @ 6323:e6da66f378c7 libavcodec
mpegvideo.h has two function declarations with the 'inline' specifier
but no definition for those functions. The C standard requires a
definition to appear in the same translation unit for any function
declared with 'inline'. Most of the files including mpegvideo.h do not
define those functions. Fix this by removing the 'inline' specifiers
from the header.
patch by Uoti Urpala
author | diego |
---|---|
date | Sun, 03 Feb 2008 17:54:30 +0000 |
parents | b1b3dd3324ae |
children | 48759bfbd073 |
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" |
5866 | 22 #include "adx.h" |
1531
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 /** |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
25 * @file adx.c |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
26 * SEGA CRI adx codecs. |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
27 * |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
28 * Reference documents: |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
29 * 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
|
30 * 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
|
31 */ |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
32 |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
33 /* 18 bytes <-> 32 samples */ |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
34 |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
35 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
|
36 { |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
37 int scale; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
38 int i; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
39 int s0,s1,s2,d; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
40 int max=0; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
41 int min=0; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
42 int data[32]; |
1531
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 s1 = prev->s1; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
45 s2 = prev->s2; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
46 for(i=0;i<32;i++) { |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
47 s0 = wav[i]; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
48 d = ((s0<<14) - SCALE1*s1 + SCALE2*s2)/BASEVOL; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
49 data[i]=d; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
50 if (max<d) max=d; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
51 if (min>d) min=d; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
52 s2 = s1; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
53 s1 = s0; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
54 } |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
55 prev->s1 = s1; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
56 prev->s2 = s2; |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
57 |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
58 /* -8..+7 */ |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
59 |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
60 if (max==0 && min==0) { |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
61 memset(adx,0,18); |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
62 return; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
63 } |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
64 |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
65 if (max/7>-min/8) scale = max/7; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
66 else scale = -min/8; |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
67 |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
68 if (scale==0) scale=1; |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
69 |
5067 | 70 AV_WB16(adx, scale); |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
71 |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
72 for(i=0;i<16;i++) { |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
73 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
|
74 } |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
75 } |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
76 |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
77 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
|
78 { |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
79 #if 0 |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
80 struct { |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
81 uint32_t offset; /* 0x80000000 + sample start - 4 */ |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
82 unsigned char unknown1[3]; /* 03 12 04 */ |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
83 unsigned char channel; /* 1 or 2 */ |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
84 uint32_t freq; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
85 uint32_t size; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
86 uint32_t unknown2; /* 01 f4 03 00 */ |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
87 uint32_t unknown3; /* 00 00 00 00 */ |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
88 uint32_t unknown4; /* 00 00 00 00 */ |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
89 |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
90 /* if loop |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
91 unknown3 00 15 00 01 |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
92 unknown4 00 00 00 01 |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
93 long loop_start_sample; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
94 long loop_start_byte; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
95 long loop_end_sample; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
96 long loop_end_byte; |
2967 | 97 long |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
98 */ |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
99 } adxhdr; /* big endian */ |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
100 /* offset-6 "(c)CRI" */ |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
101 #endif |
5067 | 102 AV_WB32(buf+0x00,0x80000000|0x20); |
103 AV_WB32(buf+0x04,0x03120400|avctx->channels); | |
104 AV_WB32(buf+0x08,avctx->sample_rate); | |
105 AV_WB32(buf+0x0c,0); /* FIXME: set after */ | |
106 AV_WB32(buf+0x10,0x01040300); | |
107 AV_WB32(buf+0x14,0x00000000); | |
108 AV_WB32(buf+0x18,0x00000000); | |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
109 memcpy(buf+0x1c,"\0\0(c)CRI",8); |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
110 return 0x20+4; |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
111 } |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
112 |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
113 static int adx_encode_init(AVCodecContext *avctx) |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
114 { |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
115 if (avctx->channels > 2) |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
116 return -1; /* only stereo or mono =) */ |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
117 avctx->frame_size = 32; |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
118 |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
119 avctx->coded_frame= avcodec_alloc_frame(); |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
120 avctx->coded_frame->key_frame= 1; |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
121 |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
122 // 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
|
123 |
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1569
diff
changeset
|
124 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
|
125 |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
126 return 0; |
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 |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
129 static int adx_encode_close(AVCodecContext *avctx) |
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 av_freep(&avctx->coded_frame); |
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 return 0; |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
134 } |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
135 |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
136 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
|
137 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
|
138 { |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
139 ADXContext *c = avctx->priv_data; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
140 const short *samples = data; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
141 unsigned char *dst = frame; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
142 int rest = avctx->frame_size; |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
143 |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
144 /* |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
145 input data size = |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
146 ffmpeg.c: do_audio_out() |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
147 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
|
148 */ |
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 // printf("sz=%d ",buf_size); fflush(stdout); |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
151 if (!c->header_parsed) { |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
152 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
|
153 dst+=hdrsize; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
154 c->header_parsed = 1; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
155 } |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
156 |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
157 if (avctx->channels==1) { |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
158 while(rest>=32) { |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
159 adx_encode(dst,samples,c->prev); |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
160 dst+=18; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
161 samples+=32; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
162 rest-=32; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
163 } |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
164 } else { |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
165 while(rest>=32*2) { |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
166 short tmpbuf[32*2]; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
167 int i; |
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 for(i=0;i<32;i++) { |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
170 tmpbuf[i] = samples[i*2]; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
171 tmpbuf[i+32] = samples[i*2+1]; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
172 } |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
173 |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
174 adx_encode(dst,tmpbuf,c->prev); |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
175 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
|
176 dst+=18*2; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
177 samples+=32*2; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
178 rest-=32*2; |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
179 } |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
180 } |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
181 return dst-frame; |
1531
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
182 } |
a78de892cefd
added CRI ADX and XA ADPCM audio modules, courtesy of BERO
melanson
parents:
diff
changeset
|
183 |
3445 | 184 AVCodec adpcm_adx_encoder = { |
185 "adpcm_adx", | |
1534
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
186 CODEC_TYPE_AUDIO, |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
187 CODEC_ID_ADPCM_ADX, |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
188 sizeof(ADXContext), |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
189 adx_encode_init, |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
190 adx_encode_frame, |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
191 adx_encode_close, |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
192 NULL, |
5bdf2017d854
replace file to remove nasty DOS CRs and hard tabs
melanson
parents:
1531
diff
changeset
|
193 }; |