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");