Mercurial > libavcodec.hg
comparison pcm.c @ 4959:e00e16be833a libavcodec
Use bytestream
author | ramiro |
---|---|
date | Wed, 09 May 2007 23:21:07 +0000 |
parents | 842b30b88d9a |
children | 1745d0452e87 |
comparison
equal
deleted
inserted
replaced
4958:842b30b88d9a | 4959:e00e16be833a |
---|---|
24 * PCM codecs | 24 * PCM codecs |
25 */ | 25 */ |
26 | 26 |
27 #include "avcodec.h" | 27 #include "avcodec.h" |
28 #include "bitstream.h" // for ff_reverse | 28 #include "bitstream.h" // for ff_reverse |
29 #include "bytestream.h" | |
29 | 30 |
30 /* from g711.c by SUN microsystems (unrestricted use) */ | 31 /* from g711.c by SUN microsystems (unrestricted use) */ |
31 | 32 |
32 #define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */ | 33 #define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */ |
33 #define QUANT_MASK (0xf) /* Quantization field mask. */ | 34 #define QUANT_MASK (0xf) /* Quantization field mask. */ |
246 case CODEC_ID_PCM_S24DAUD: | 247 case CODEC_ID_PCM_S24DAUD: |
247 for(;n>0;n--) { | 248 for(;n>0;n--) { |
248 uint32_t tmp = ff_reverse[*samples >> 8] + | 249 uint32_t tmp = ff_reverse[*samples >> 8] + |
249 (ff_reverse[*samples & 0xff] << 8); | 250 (ff_reverse[*samples & 0xff] << 8); |
250 tmp <<= 4; // sync flags would go here | 251 tmp <<= 4; // sync flags would go here |
251 dst[2] = tmp & 0xff; | 252 bytestream_put_be24(&dst, tmp); |
252 tmp >>= 8; | |
253 dst[1] = tmp & 0xff; | |
254 dst[0] = tmp >> 8; | |
255 samples++; | 253 samples++; |
256 dst += 3; | |
257 } | 254 } |
258 break; | 255 break; |
259 case CODEC_ID_PCM_S16LE: | 256 case CODEC_ID_PCM_S16LE: |
260 for(;n>0;n--) { | 257 for(;n>0;n--) { |
261 v = *samples++; | 258 v = *samples++; |
262 dst[0] = v & 0xff; | 259 bytestream_put_le16(&dst, v); |
263 dst[1] = v >> 8; | |
264 dst += 2; | |
265 } | 260 } |
266 break; | 261 break; |
267 case CODEC_ID_PCM_S16BE: | 262 case CODEC_ID_PCM_S16BE: |
268 for(;n>0;n--) { | 263 for(;n>0;n--) { |
269 v = *samples++; | 264 v = *samples++; |
270 dst[0] = v >> 8; | 265 bytestream_put_be16(&dst, v); |
271 dst[1] = v; | |
272 dst += 2; | |
273 } | 266 } |
274 break; | 267 break; |
275 case CODEC_ID_PCM_U16LE: | 268 case CODEC_ID_PCM_U16LE: |
276 for(;n>0;n--) { | 269 for(;n>0;n--) { |
277 v = *samples++; | 270 v = *samples++; |
278 v += 0x8000; | 271 v += 0x8000; |
279 dst[0] = v & 0xff; | 272 bytestream_put_le16(&dst, v); |
280 dst[1] = v >> 8; | |
281 dst += 2; | |
282 } | 273 } |
283 break; | 274 break; |
284 case CODEC_ID_PCM_U16BE: | 275 case CODEC_ID_PCM_U16BE: |
285 for(;n>0;n--) { | 276 for(;n>0;n--) { |
286 v = *samples++; | 277 v = *samples++; |
287 v += 0x8000; | 278 v += 0x8000; |
288 dst[0] = v >> 8; | 279 bytestream_put_be16(&dst, v); |
289 dst[1] = v; | |
290 dst += 2; | |
291 } | 280 } |
292 break; | 281 break; |
293 case CODEC_ID_PCM_S8: | 282 case CODEC_ID_PCM_S8: |
294 for(;n>0;n--) { | 283 for(;n>0;n--) { |
295 v = *samples++; | 284 v = *samples++; |
423 decode_to16(3, 0, 1, &src, &samples, buf_size); | 412 decode_to16(3, 0, 1, &src, &samples, buf_size); |
424 break; | 413 break; |
425 case CODEC_ID_PCM_S24DAUD: | 414 case CODEC_ID_PCM_S24DAUD: |
426 n = buf_size / 3; | 415 n = buf_size / 3; |
427 for(;n>0;n--) { | 416 for(;n>0;n--) { |
428 uint32_t v = src[0] << 16 | src[1] << 8 | src[2]; | 417 uint32_t v = bytestream_get_be24(&src); |
429 v >>= 4; // sync flags are here | 418 v >>= 4; // sync flags are here |
430 *samples++ = ff_reverse[(v >> 8) & 0xff] + | 419 *samples++ = ff_reverse[(v >> 8) & 0xff] + |
431 (ff_reverse[v & 0xff] << 8); | 420 (ff_reverse[v & 0xff] << 8); |
432 src += 3; | |
433 } | 421 } |
434 break; | 422 break; |
435 case CODEC_ID_PCM_S16LE: | 423 case CODEC_ID_PCM_S16LE: |
436 n = buf_size >> 1; | 424 n = buf_size >> 1; |
437 for(;n>0;n--) { | 425 for(;n>0;n--) { |
438 *samples++ = src[0] | (src[1] << 8); | 426 *samples++ = bytestream_get_le16(&src); |
439 src += 2; | |
440 } | 427 } |
441 break; | 428 break; |
442 case CODEC_ID_PCM_S16BE: | 429 case CODEC_ID_PCM_S16BE: |
443 n = buf_size >> 1; | 430 n = buf_size >> 1; |
444 for(;n>0;n--) { | 431 for(;n>0;n--) { |
445 *samples++ = (src[0] << 8) | src[1]; | 432 *samples++ = bytestream_get_be16(&src); |
446 src += 2; | |
447 } | 433 } |
448 break; | 434 break; |
449 case CODEC_ID_PCM_U16LE: | 435 case CODEC_ID_PCM_U16LE: |
450 n = buf_size >> 1; | 436 n = buf_size >> 1; |
451 for(;n>0;n--) { | 437 for(;n>0;n--) { |
452 *samples++ = (src[0] | (src[1] << 8)) - 0x8000; | 438 *samples++ = bytestream_get_le16(&src) - 0x8000; |
453 src += 2; | |
454 } | 439 } |
455 break; | 440 break; |
456 case CODEC_ID_PCM_U16BE: | 441 case CODEC_ID_PCM_U16BE: |
457 n = buf_size >> 1; | 442 n = buf_size >> 1; |
458 for(;n>0;n--) { | 443 for(;n>0;n--) { |
459 *samples++ = ((src[0] << 8) | src[1]) - 0x8000; | 444 *samples++ = bytestream_get_be16(&src) - 0x8000; |
460 src += 2; | |
461 } | 445 } |
462 break; | 446 break; |
463 case CODEC_ID_PCM_S8: | 447 case CODEC_ID_PCM_S8: |
464 n = buf_size; | 448 n = buf_size; |
465 for(;n>0;n--) { | 449 for(;n>0;n--) { |