Mercurial > libavcodec.hg
comparison pcm.c @ 7613:ff395fe35161 libavcodec
Add F64BE, F64LE and F64BE PCM codecs.
author | pross |
---|---|
date | Tue, 19 Aug 2008 10:43:47 +0000 |
parents | a909361cdfc4 |
children | 2f5ed95d1039 |
comparison
equal
deleted
inserted
replaced
7612:1302ec81afc0 | 7613:ff395fe35161 |
---|---|
156 short *samples; | 156 short *samples; |
157 unsigned char *dst; | 157 unsigned char *dst; |
158 uint8_t *srcu8; | 158 uint8_t *srcu8; |
159 int16_t *samples_int16_t; | 159 int16_t *samples_int16_t; |
160 int32_t *samples_int32_t; | 160 int32_t *samples_int32_t; |
161 int64_t *samples_int64_t; | |
161 uint16_t *samples_uint16_t; | 162 uint16_t *samples_uint16_t; |
162 uint32_t *samples_uint32_t; | 163 uint32_t *samples_uint32_t; |
163 | 164 |
164 sample_size = av_get_bits_per_sample(avctx->codec->id)/8; | 165 sample_size = av_get_bits_per_sample(avctx->codec->id)/8; |
165 n = buf_size / sample_size; | 166 n = buf_size / sample_size; |
211 v = *srcu8++; | 212 v = *srcu8++; |
212 *dst++ = v - 128; | 213 *dst++ = v - 128; |
213 } | 214 } |
214 break; | 215 break; |
215 #if WORDS_BIGENDIAN | 216 #if WORDS_BIGENDIAN |
217 case CODEC_ID_PCM_F64LE: | |
218 ENCODE(int64_t, le64, samples, dst, n, 0, 0) | |
219 break; | |
216 case CODEC_ID_PCM_S32LE: | 220 case CODEC_ID_PCM_S32LE: |
221 case CODEC_ID_PCM_F32LE: | |
217 ENCODE(int32_t, le32, samples, dst, n, 0, 0) | 222 ENCODE(int32_t, le32, samples, dst, n, 0, 0) |
218 break; | 223 break; |
219 case CODEC_ID_PCM_S16LE: | 224 case CODEC_ID_PCM_S16LE: |
220 ENCODE(int16_t, le16, samples, dst, n, 0, 0) | 225 ENCODE(int16_t, le16, samples, dst, n, 0, 0) |
221 break; | 226 break; |
227 case CODEC_ID_PCM_F64BE: | |
222 case CODEC_ID_PCM_F32BE: | 228 case CODEC_ID_PCM_F32BE: |
223 case CODEC_ID_PCM_S32BE: | 229 case CODEC_ID_PCM_S32BE: |
224 case CODEC_ID_PCM_S16BE: | 230 case CODEC_ID_PCM_S16BE: |
225 #else | 231 #else |
232 case CODEC_ID_PCM_F64BE: | |
233 ENCODE(int64_t, be64, samples, dst, n, 0, 0) | |
234 break; | |
226 case CODEC_ID_PCM_F32BE: | 235 case CODEC_ID_PCM_F32BE: |
227 case CODEC_ID_PCM_S32BE: | 236 case CODEC_ID_PCM_S32BE: |
228 ENCODE(int32_t, be32, samples, dst, n, 0, 0) | 237 ENCODE(int32_t, be32, samples, dst, n, 0, 0) |
229 break; | 238 break; |
230 case CODEC_ID_PCM_S16BE: | 239 case CODEC_ID_PCM_S16BE: |
231 ENCODE(int16_t, be16, samples, dst, n, 0, 0) | 240 ENCODE(int16_t, be16, samples, dst, n, 0, 0) |
232 break; | 241 break; |
242 case CODEC_ID_PCM_F64LE: | |
243 case CODEC_ID_PCM_F32LE: | |
233 case CODEC_ID_PCM_S32LE: | 244 case CODEC_ID_PCM_S32LE: |
234 case CODEC_ID_PCM_S16LE: | 245 case CODEC_ID_PCM_S16LE: |
235 #endif /* WORDS_BIGENDIAN */ | 246 #endif /* WORDS_BIGENDIAN */ |
236 case CODEC_ID_PCM_U8: | 247 case CODEC_ID_PCM_U8: |
237 memcpy(dst, samples, n*sample_size); | 248 memcpy(dst, samples, n*sample_size); |
318 short *samples; | 329 short *samples; |
319 const uint8_t *src, *src2[MAX_CHANNELS]; | 330 const uint8_t *src, *src2[MAX_CHANNELS]; |
320 uint8_t *dstu8; | 331 uint8_t *dstu8; |
321 int16_t *dst_int16_t; | 332 int16_t *dst_int16_t; |
322 int32_t *dst_int32_t; | 333 int32_t *dst_int32_t; |
334 int64_t *dst_int64_t; | |
323 uint16_t *dst_uint16_t; | 335 uint16_t *dst_uint16_t; |
324 uint32_t *dst_uint32_t; | 336 uint32_t *dst_uint32_t; |
325 | 337 |
326 samples = data; | 338 samples = data; |
327 src = buf; | 339 src = buf; |
402 *dstu8++ = *src++ + 128; | 414 *dstu8++ = *src++ + 128; |
403 } | 415 } |
404 samples= (short*)dstu8; | 416 samples= (short*)dstu8; |
405 break; | 417 break; |
406 #if WORDS_BIGENDIAN | 418 #if WORDS_BIGENDIAN |
419 case CODEC_ID_PCM_F64LE: | |
420 DECODE(int64_t, le64, src, samples, n, 0, 0) | |
421 break; | |
407 case CODEC_ID_PCM_S32LE: | 422 case CODEC_ID_PCM_S32LE: |
423 case CODEC_ID_PCM_F32LE: | |
408 DECODE(int32_t, le32, src, samples, n, 0, 0) | 424 DECODE(int32_t, le32, src, samples, n, 0, 0) |
409 break; | 425 break; |
410 case CODEC_ID_PCM_S16LE: | 426 case CODEC_ID_PCM_S16LE: |
411 DECODE(int16_t, le16, src, samples, n, 0, 0) | 427 DECODE(int16_t, le16, src, samples, n, 0, 0) |
412 break; | 428 break; |
429 case CODEC_ID_PCM_F64BE: | |
413 case CODEC_ID_PCM_F32BE: | 430 case CODEC_ID_PCM_F32BE: |
414 case CODEC_ID_PCM_S32BE: | 431 case CODEC_ID_PCM_S32BE: |
415 case CODEC_ID_PCM_S16BE: | 432 case CODEC_ID_PCM_S16BE: |
416 #else | 433 #else |
434 case CODEC_ID_PCM_F64BE: | |
435 DECODE(int64_t, be64, src, samples, n, 0, 0) | |
436 break; | |
417 case CODEC_ID_PCM_F32BE: | 437 case CODEC_ID_PCM_F32BE: |
418 case CODEC_ID_PCM_S32BE: | 438 case CODEC_ID_PCM_S32BE: |
419 DECODE(int32_t, be32, src, samples, n, 0, 0) | 439 DECODE(int32_t, be32, src, samples, n, 0, 0) |
420 break; | 440 break; |
421 case CODEC_ID_PCM_S16BE: | 441 case CODEC_ID_PCM_S16BE: |
422 DECODE(int16_t, be16, src, samples, n, 0, 0) | 442 DECODE(int16_t, be16, src, samples, n, 0, 0) |
423 break; | 443 break; |
444 case CODEC_ID_PCM_F64LE: | |
445 case CODEC_ID_PCM_F32LE: | |
424 case CODEC_ID_PCM_S32LE: | 446 case CODEC_ID_PCM_S32LE: |
425 case CODEC_ID_PCM_S16LE: | 447 case CODEC_ID_PCM_S16LE: |
426 #endif /* WORDS_BIGENDIAN */ | 448 #endif /* WORDS_BIGENDIAN */ |
427 case CODEC_ID_PCM_U8: | 449 case CODEC_ID_PCM_U8: |
428 memcpy(samples, src, n*sample_size); | 450 memcpy(samples, src, n*sample_size); |
505 | 527 |
506 /* Note: Do not forget to add new entries to the Makefile as well. */ | 528 /* Note: Do not forget to add new entries to the Makefile as well. */ |
507 PCM_CODEC (CODEC_ID_PCM_ALAW, SAMPLE_FMT_S16, pcm_alaw, "A-law PCM"); | 529 PCM_CODEC (CODEC_ID_PCM_ALAW, SAMPLE_FMT_S16, pcm_alaw, "A-law PCM"); |
508 PCM_CODEC (CODEC_ID_PCM_DVD, SAMPLE_FMT_S16, pcm_dvd, "signed 16|20|24-bit big-endian PCM"); | 530 PCM_CODEC (CODEC_ID_PCM_DVD, SAMPLE_FMT_S16, pcm_dvd, "signed 16|20|24-bit big-endian PCM"); |
509 PCM_CODEC (CODEC_ID_PCM_F32BE, SAMPLE_FMT_FLT, pcm_f32be, "32-bit floating point big-endian PCM"); | 531 PCM_CODEC (CODEC_ID_PCM_F32BE, SAMPLE_FMT_FLT, pcm_f32be, "32-bit floating point big-endian PCM"); |
532 PCM_CODEC (CODEC_ID_PCM_F32LE, SAMPLE_FMT_FLT, pcm_f32le, "32-bit floating point little-endian PCM"); | |
533 PCM_CODEC (CODEC_ID_PCM_F64BE, SAMPLE_FMT_DBL, pcm_f64be, "64-bit floating point big-endian PCM"); | |
534 PCM_CODEC (CODEC_ID_PCM_F64LE, SAMPLE_FMT_DBL, pcm_f64le, "64-bit floating point little-endian PCM"); | |
510 PCM_CODEC (CODEC_ID_PCM_MULAW, SAMPLE_FMT_S16, pcm_mulaw, "mu-law PCM"); | 535 PCM_CODEC (CODEC_ID_PCM_MULAW, SAMPLE_FMT_S16, pcm_mulaw, "mu-law PCM"); |
511 PCM_CODEC (CODEC_ID_PCM_S8, SAMPLE_FMT_U8, pcm_s8, "signed 8-bit PCM"); | 536 PCM_CODEC (CODEC_ID_PCM_S8, SAMPLE_FMT_U8, pcm_s8, "signed 8-bit PCM"); |
512 PCM_CODEC (CODEC_ID_PCM_S16BE, SAMPLE_FMT_S16, pcm_s16be, "signed 16-bit big-endian PCM"); | 537 PCM_CODEC (CODEC_ID_PCM_S16BE, SAMPLE_FMT_S16, pcm_s16be, "signed 16-bit big-endian PCM"); |
513 PCM_CODEC (CODEC_ID_PCM_S16LE, SAMPLE_FMT_S16, pcm_s16le, "signed 16-bit little-endian PCM"); | 538 PCM_CODEC (CODEC_ID_PCM_S16LE, SAMPLE_FMT_S16, pcm_s16le, "signed 16-bit little-endian PCM"); |
514 PCM_DECODER(CODEC_ID_PCM_S16LE_PLANAR, SAMPLE_FMT_S16, pcm_s16le_planar, "16-bit little-endian planar PCM"); | 539 PCM_DECODER(CODEC_ID_PCM_S16LE_PLANAR, SAMPLE_FMT_S16, pcm_s16le_planar, "16-bit little-endian planar PCM"); |