Browse code

Add F64BE, F64LE and F64BE PCM codecs.

Originally committed as revision 14833 to svn://svn.ffmpeg.org/ffmpeg/trunk

Peter Ross authored on 2008/08/19 19:43:47
Showing 4 changed files
... ...
@@ -220,6 +220,9 @@ void avcodec_register_all(void)
220 220
     REGISTER_ENCDEC  (PCM_ALAW, pcm_alaw);
221 221
     REGISTER_DECODER (PCM_DVD, pcm_dvd);
222 222
     REGISTER_ENCDEC  (PCM_F32BE, pcm_f32be);
223
+    REGISTER_ENCDEC  (PCM_F32LE, pcm_f32le);
224
+    REGISTER_ENCDEC  (PCM_F64BE, pcm_f64be);
225
+    REGISTER_ENCDEC  (PCM_F64LE, pcm_f64le);
223 226
     REGISTER_ENCDEC  (PCM_MULAW, pcm_mulaw);
224 227
     REGISTER_ENCDEC  (PCM_S8, pcm_s8);
225 228
     REGISTER_ENCDEC  (PCM_S16BE, pcm_s16be);
... ...
@@ -30,7 +30,7 @@
30 30
 #include "libavutil/avutil.h"
31 31
 
32 32
 #define LIBAVCODEC_VERSION_MAJOR 51
33
-#define LIBAVCODEC_VERSION_MINOR 65
33
+#define LIBAVCODEC_VERSION_MINOR 66
34 34
 #define LIBAVCODEC_VERSION_MICRO  0
35 35
 
36 36
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
... ...
@@ -212,6 +212,9 @@ enum CodecID {
212 212
     CODEC_ID_PCM_S16LE_PLANAR,
213 213
     CODEC_ID_PCM_DVD,
214 214
     CODEC_ID_PCM_F32BE,
215
+    CODEC_ID_PCM_F32LE,
216
+    CODEC_ID_PCM_F64BE,
217
+    CODEC_ID_PCM_F64LE,
215 218
 
216 219
     /* various ADPCM codecs */
217 220
     CODEC_ID_ADPCM_IMA_QT= 0x11000,
... ...
@@ -158,6 +158,7 @@ static int pcm_encode_frame(AVCodecContext *avctx,
158 158
     uint8_t *srcu8;
159 159
     int16_t *samples_int16_t;
160 160
     int32_t *samples_int32_t;
161
+    int64_t *samples_int64_t;
161 162
     uint16_t *samples_uint16_t;
162 163
     uint32_t *samples_uint32_t;
163 164
 
... ...
@@ -213,16 +214,24 @@ static int pcm_encode_frame(AVCodecContext *avctx,
213 213
         }
214 214
         break;
215 215
 #if WORDS_BIGENDIAN
216
+    case CODEC_ID_PCM_F64LE:
217
+        ENCODE(int64_t, le64, samples, dst, n, 0, 0)
218
+        break;
216 219
     case CODEC_ID_PCM_S32LE:
220
+    case CODEC_ID_PCM_F32LE:
217 221
         ENCODE(int32_t, le32, samples, dst, n, 0, 0)
218 222
         break;
219 223
     case CODEC_ID_PCM_S16LE:
220 224
         ENCODE(int16_t, le16, samples, dst, n, 0, 0)
221 225
         break;
226
+    case CODEC_ID_PCM_F64BE:
222 227
     case CODEC_ID_PCM_F32BE:
223 228
     case CODEC_ID_PCM_S32BE:
224 229
     case CODEC_ID_PCM_S16BE:
225 230
 #else
231
+    case CODEC_ID_PCM_F64BE:
232
+        ENCODE(int64_t, be64, samples, dst, n, 0, 0)
233
+        break;
226 234
     case CODEC_ID_PCM_F32BE:
227 235
     case CODEC_ID_PCM_S32BE:
228 236
         ENCODE(int32_t, be32, samples, dst, n, 0, 0)
... ...
@@ -230,6 +239,8 @@ static int pcm_encode_frame(AVCodecContext *avctx,
230 230
     case CODEC_ID_PCM_S16BE:
231 231
         ENCODE(int16_t, be16, samples, dst, n, 0, 0)
232 232
         break;
233
+    case CODEC_ID_PCM_F64LE:
234
+    case CODEC_ID_PCM_F32LE:
233 235
     case CODEC_ID_PCM_S32LE:
234 236
     case CODEC_ID_PCM_S16LE:
235 237
 #endif /* WORDS_BIGENDIAN */
... ...
@@ -320,6 +331,7 @@ static int pcm_decode_frame(AVCodecContext *avctx,
320 320
     uint8_t *dstu8;
321 321
     int16_t *dst_int16_t;
322 322
     int32_t *dst_int32_t;
323
+    int64_t *dst_int64_t;
323 324
     uint16_t *dst_uint16_t;
324 325
     uint32_t *dst_uint32_t;
325 326
 
... ...
@@ -404,16 +416,24 @@ static int pcm_decode_frame(AVCodecContext *avctx,
404 404
         samples= (short*)dstu8;
405 405
         break;
406 406
 #if WORDS_BIGENDIAN
407
+    case CODEC_ID_PCM_F64LE:
408
+        DECODE(int64_t, le64, src, samples, n, 0, 0)
409
+        break;
407 410
     case CODEC_ID_PCM_S32LE:
411
+    case CODEC_ID_PCM_F32LE:
408 412
         DECODE(int32_t, le32, src, samples, n, 0, 0)
409 413
         break;
410 414
     case CODEC_ID_PCM_S16LE:
411 415
         DECODE(int16_t, le16, src, samples, n, 0, 0)
412 416
         break;
417
+    case CODEC_ID_PCM_F64BE:
413 418
     case CODEC_ID_PCM_F32BE:
414 419
     case CODEC_ID_PCM_S32BE:
415 420
     case CODEC_ID_PCM_S16BE:
416 421
 #else
422
+    case CODEC_ID_PCM_F64BE:
423
+        DECODE(int64_t, be64, src, samples, n, 0, 0)
424
+        break;
417 425
     case CODEC_ID_PCM_F32BE:
418 426
     case CODEC_ID_PCM_S32BE:
419 427
         DECODE(int32_t, be32, src, samples, n, 0, 0)
... ...
@@ -421,6 +441,8 @@ static int pcm_decode_frame(AVCodecContext *avctx,
421 421
     case CODEC_ID_PCM_S16BE:
422 422
         DECODE(int16_t, be16, src, samples, n, 0, 0)
423 423
         break;
424
+    case CODEC_ID_PCM_F64LE:
425
+    case CODEC_ID_PCM_F32LE:
424 426
     case CODEC_ID_PCM_S32LE:
425 427
     case CODEC_ID_PCM_S16LE:
426 428
 #endif /* WORDS_BIGENDIAN */
... ...
@@ -507,6 +529,9 @@ AVCodec name ## _decoder = {                    \
507 507
 PCM_CODEC  (CODEC_ID_PCM_ALAW,  SAMPLE_FMT_S16, pcm_alaw, "A-law PCM");
508 508
 PCM_CODEC  (CODEC_ID_PCM_DVD,   SAMPLE_FMT_S16, pcm_dvd, "signed 16|20|24-bit big-endian PCM");
509 509
 PCM_CODEC  (CODEC_ID_PCM_F32BE, SAMPLE_FMT_FLT, pcm_f32be, "32-bit floating point big-endian PCM");
510
+PCM_CODEC  (CODEC_ID_PCM_F32LE, SAMPLE_FMT_FLT, pcm_f32le, "32-bit floating point little-endian PCM");
511
+PCM_CODEC  (CODEC_ID_PCM_F64BE, SAMPLE_FMT_DBL, pcm_f64be, "64-bit floating point big-endian PCM");
512
+PCM_CODEC  (CODEC_ID_PCM_F64LE, SAMPLE_FMT_DBL, pcm_f64le, "64-bit floating point little-endian PCM");
510 513
 PCM_CODEC  (CODEC_ID_PCM_MULAW, SAMPLE_FMT_S16, pcm_mulaw, "mu-law PCM");
511 514
 PCM_CODEC  (CODEC_ID_PCM_S8,    SAMPLE_FMT_U8,  pcm_s8, "signed 8-bit PCM");
512 515
 PCM_CODEC  (CODEC_ID_PCM_S16BE, SAMPLE_FMT_S16, pcm_s16be, "signed 16-bit big-endian PCM");
... ...
@@ -1158,11 +1158,16 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
1158 1158
 
1159 1159
         /* for PCM codecs, compute bitrate directly */
1160 1160
         switch(enc->codec_id) {
1161
+        case CODEC_ID_PCM_F64BE:
1162
+        case CODEC_ID_PCM_F64LE:
1163
+            bitrate = enc->sample_rate * enc->channels * 64;
1164
+            break;
1161 1165
         case CODEC_ID_PCM_S32LE:
1162 1166
         case CODEC_ID_PCM_S32BE:
1163 1167
         case CODEC_ID_PCM_U32LE:
1164 1168
         case CODEC_ID_PCM_U32BE:
1165 1169
         case CODEC_ID_PCM_F32BE:
1170
+        case CODEC_ID_PCM_F32LE:
1166 1171
             bitrate = enc->sample_rate * enc->channels * 32;
1167 1172
             break;
1168 1173
         case CODEC_ID_PCM_S24LE:
... ...
@@ -1312,7 +1317,11 @@ int av_get_bits_per_sample(enum CodecID codec_id){
1312 1312
     case CODEC_ID_PCM_U32BE:
1313 1313
     case CODEC_ID_PCM_U32LE:
1314 1314
     case CODEC_ID_PCM_F32BE:
1315
+    case CODEC_ID_PCM_F32LE:
1315 1316
         return 32;
1317
+    case CODEC_ID_PCM_F64BE:
1318
+    case CODEC_ID_PCM_F64LE:
1319
+        return 64;
1316 1320
     default:
1317 1321
         return 0;
1318 1322
     }