Mercurial > libavformat.hg
comparison wav.c @ 846:fd1c2109505e libavformat
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
author | reimar |
---|---|
date | Fri, 02 Sep 2005 19:16:48 +0000 |
parents | feca73904e67 |
children | 66cc656ea404 |
comparison
equal
deleted
inserted
replaced
845:e4e8c395d8e9 | 846:fd1c2109505e |
---|---|
23 { CODEC_ID_MP2, 0x50 }, | 23 { CODEC_ID_MP2, 0x50 }, |
24 { CODEC_ID_MP3, 0x55 }, | 24 { CODEC_ID_MP3, 0x55 }, |
25 { CODEC_ID_AC3, 0x2000 }, | 25 { CODEC_ID_AC3, 0x2000 }, |
26 { CODEC_ID_PCM_S16LE, 0x01 }, | 26 { CODEC_ID_PCM_S16LE, 0x01 }, |
27 { CODEC_ID_PCM_U8, 0x01 }, /* must come after s16le in this list */ | 27 { CODEC_ID_PCM_U8, 0x01 }, /* must come after s16le in this list */ |
28 { CODEC_ID_PCM_S24LE, 0x01 }, | |
29 { CODEC_ID_PCM_S32LE, 0x01 }, | |
28 { CODEC_ID_PCM_ALAW, 0x06 }, | 30 { CODEC_ID_PCM_ALAW, 0x06 }, |
29 { CODEC_ID_PCM_MULAW, 0x07 }, | 31 { CODEC_ID_PCM_MULAW, 0x07 }, |
30 { CODEC_ID_ADPCM_MS, 0x02 }, | 32 { CODEC_ID_ADPCM_MS, 0x02 }, |
31 { CODEC_ID_ADPCM_IMA_WAV, 0x11 }, | 33 { CODEC_ID_ADPCM_IMA_WAV, 0x11 }, |
32 { CODEC_ID_ADPCM_YAMAHA, 0x20 }, | 34 { CODEC_ID_ADPCM_YAMAHA, 0x20 }, |
66 bps = 8; | 68 bps = 8; |
67 } else if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3) { | 69 } else if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3) { |
68 bps = 0; | 70 bps = 0; |
69 } else if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV || enc->codec_id == CODEC_ID_ADPCM_MS || enc->codec_id == CODEC_ID_ADPCM_G726 || enc->codec_id == CODEC_ID_ADPCM_YAMAHA) { // | 71 } else if (enc->codec_id == CODEC_ID_ADPCM_IMA_WAV || enc->codec_id == CODEC_ID_ADPCM_MS || enc->codec_id == CODEC_ID_ADPCM_G726 || enc->codec_id == CODEC_ID_ADPCM_YAMAHA) { // |
70 bps = 4; | 72 bps = 4; |
73 } else if (enc->codec_id == CODEC_ID_PCM_S24LE) { | |
74 bps = 24; | |
75 } else if (enc->codec_id == CODEC_ID_PCM_S32LE) { | |
76 bps = 32; | |
71 } else { | 77 } else { |
72 bps = 16; | 78 bps = 16; |
73 } | 79 } |
74 | 80 |
75 if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3) { | 81 if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3) { |
80 } else if (enc->block_align != 0) { /* specified by the codec */ | 86 } else if (enc->block_align != 0) { /* specified by the codec */ |
81 blkalign = enc->block_align; | 87 blkalign = enc->block_align; |
82 } else | 88 } else |
83 blkalign = enc->channels*bps >> 3; | 89 blkalign = enc->channels*bps >> 3; |
84 if (enc->codec_id == CODEC_ID_PCM_U8 || | 90 if (enc->codec_id == CODEC_ID_PCM_U8 || |
91 enc->codec_id == CODEC_ID_PCM_S24LE || | |
92 enc->codec_id == CODEC_ID_PCM_S32LE || | |
85 enc->codec_id == CODEC_ID_PCM_S16LE) { | 93 enc->codec_id == CODEC_ID_PCM_S16LE) { |
86 bytespersec = enc->sample_rate * blkalign; | 94 bytespersec = enc->sample_rate * blkalign; |
87 } else { | 95 } else { |
88 bytespersec = enc->bit_rate / 8; | 96 bytespersec = enc->bit_rate / 8; |
89 } | 97 } |
177 if (id <= 0) | 185 if (id <= 0) |
178 return id; | 186 return id; |
179 /* handle specific u8 codec */ | 187 /* handle specific u8 codec */ |
180 if (id == CODEC_ID_PCM_S16LE && bps == 8) | 188 if (id == CODEC_ID_PCM_S16LE && bps == 8) |
181 id = CODEC_ID_PCM_U8; | 189 id = CODEC_ID_PCM_U8; |
190 if (id == CODEC_ID_PCM_S16LE && bps == 24) | |
191 id = CODEC_ID_PCM_S24LE; | |
192 if (id == CODEC_ID_PCM_S16LE && bps == 32) | |
193 id = CODEC_ID_PCM_S32LE; | |
182 return id; | 194 return id; |
183 } | 195 } |
184 | 196 |
185 #ifdef CONFIG_ENCODERS | 197 #ifdef CONFIG_ENCODERS |
186 typedef struct { | 198 typedef struct { |