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--) {