History

avcodec: add 64-bit signed pcm codec

Paul B Mahol committed 10 years ago

Commit fc600ef1 parent 9876d8f9 files · +40 −5Browse files

Unified · Split

9 files
  1. libavcodec/Makefile +4 −0
  2. libavcodec/allcodecs.c +2 −0
  3. libavcodec/avcodec.h +3 −3
  4. libavcodec/codec_desc.c +14 −0
  5. libavcodec/pcm.c +10 −1
  6. libavcodec/utils.c +3 −0
  7. libavcodec/version.h +1 −1
  8. libavformat/riff.c +1 −0
  9. libavformat/utils.c +2 −0
libavcodec/Makefile+4−0
@@ -689,6 +689,10 @@ OBJS-$(CONFIG_PCM_S32LE_DECODER) += pcm.o · 688 unmodified lines
689689 OBJS-$(CONFIG_PCM_S32LE_ENCODER) += pcm.o
690690 OBJS-$(CONFIG_PCM_S32LE_PLANAR_DECODER) += pcm.o
691691 OBJS-$(CONFIG_PCM_S32LE_PLANAR_ENCODER) += pcm.o
692+OBJS-$(CONFIG_PCM_S64BE_DECODER) += pcm.o
693+OBJS-$(CONFIG_PCM_S64BE_ENCODER) += pcm.o
694+OBJS-$(CONFIG_PCM_S64LE_DECODER) += pcm.o
695+OBJS-$(CONFIG_PCM_S64LE_ENCODER) += pcm.o
692696 OBJS-$(CONFIG_PCM_U8_DECODER) += pcm.o
693697 OBJS-$(CONFIG_PCM_U8_ENCODER) += pcm.o
694698 OBJS-$(CONFIG_PCM_U16BE_DECODER) += pcm.o
libavcodec/allcodecs.c+2−0
@@ -487,6 +487,8 @@ void avcodec_register_all(void) · 486 unmodified lines
487487 REGISTER_ENCDEC (PCM_S32BE, pcm_s32be);
488488 REGISTER_ENCDEC (PCM_S32LE, pcm_s32le);
489489 REGISTER_ENCDEC (PCM_S32LE_PLANAR, pcm_s32le_planar);
490+ REGISTER_ENCDEC (PCM_S64BE, pcm_s64be);
491+ REGISTER_ENCDEC (PCM_S64LE, pcm_s64le);
490492 REGISTER_ENCDEC (PCM_U8, pcm_u8);
491493 REGISTER_ENCDEC (PCM_U16BE, pcm_u16be);
492494 REGISTER_ENCDEC (PCM_U16LE, pcm_u16le);
libavcodec/avcodec.h+3−3
@@ -445,9 +445,9 @@ enum AVCodecID { · 444 unmodified lines
445445 AV_CODEC_ID_PCM_S24LE_PLANAR,
446446 AV_CODEC_ID_PCM_S32LE_PLANAR,
447447 AV_CODEC_ID_PCM_S16BE_PLANAR,
448− /* new PCM "codecs" should be added right below this line starting with
449− * an explicit value of for example 0x10800
450− */
448+
449+ AV_CODEC_ID_PCM_S64LE = 0x10800,
450+ AV_CODEC_ID_PCM_S64BE,
451451
452452 /* various ADPCM codecs */
453453 AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
libavcodec/codec_desc.c+14−0
@@ -1636,6 +1636,20 @@ static const AVCodecDescriptor codec_descriptors[] = { · 1635 unmodified lines
16361636 .long_name = NULL_IF_CONFIG_SMALL("PCM signed 32-bit big-endian"),
16371637 .props = AV_CODEC_PROP_LOSSLESS,
16381638 },
1639+ {
1640+ .id = AV_CODEC_ID_PCM_S64LE,
1641+ .type = AVMEDIA_TYPE_AUDIO,
1642+ .name = "pcm_s64le",
1643+ .long_name = NULL_IF_CONFIG_SMALL("PCM signed 64-bit little-endian"),
1644+ .props = AV_CODEC_PROP_LOSSLESS,
1645+ },
1646+ {
1647+ .id = AV_CODEC_ID_PCM_S64BE,
1648+ .type = AVMEDIA_TYPE_AUDIO,
1649+ .name = "pcm_s64be",
1650+ .long_name = NULL_IF_CONFIG_SMALL("PCM signed 64-bit big-endian"),
1651+ .props = AV_CODEC_PROP_LOSSLESS,
1652+ },
16391653 {
16401654 .id = AV_CODEC_ID_PCM_U32LE,
16411655 .type = AVMEDIA_TYPE_AUDIO,
libavcodec/pcm.c+10−1
@@ -145,6 +145,7 @@ static int pcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, · 144 unmodified lines
145145 ENCODE_PLANAR(uint8_t, byte, dst, n, 0, -128)
146146 break;
147147 #if HAVE_BIGENDIAN
148+ case AV_CODEC_ID_PCM_S64LE:
148149 case AV_CODEC_ID_PCM_F64LE:
149150 ENCODE(int64_t, le64, samples, dst, n, 0, 0)
150151 break;
@@ -163,9 +164,11 @@ static int pcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, · 12 unmodified lines
163164 break;
164165 case AV_CODEC_ID_PCM_F64BE:
165166 case AV_CODEC_ID_PCM_F32BE:
167+ case AV_CODEC_ID_PCM_S64BE:
166168 case AV_CODEC_ID_PCM_S32BE:
167169 case AV_CODEC_ID_PCM_S16BE:
168170 #else
171+ case AV_CODEC_ID_PCM_S64BE:
169172 case AV_CODEC_ID_PCM_F64BE:
170173 ENCODE(int64_t, be64, samples, dst, n, 0, 0)
171174 break;
@@ -181,6 +184,7 @@ static int pcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, · 9 unmodified lines
181184 break;
182185 case AV_CODEC_ID_PCM_F64LE:
183186 case AV_CODEC_ID_PCM_F32LE:
187+ case AV_CODEC_ID_PCM_S64LE:
184188 case AV_CODEC_ID_PCM_S32LE:
185189 case AV_CODEC_ID_PCM_S16LE:
186190 #endif /* HAVE_BIGENDIAN */
@@ -390,6 +394,7 @@ static int pcm_decode_frame(AVCodecContext *avctx, void *data, · 203 unmodified lines
390394 }
391395 break;
392396 #if HAVE_BIGENDIAN
397+ case AV_CODEC_ID_PCM_S64LE:
393398 case AV_CODEC_ID_PCM_F64LE:
394399 DECODE(64, le64, src, samples, n, 0, 0)
395400 break;
@@ -408,9 +413,11 @@ static int pcm_decode_frame(AVCodecContext *avctx, void *data, · 12 unmodified lines
408413 break;
409414 case AV_CODEC_ID_PCM_F64BE:
410415 case AV_CODEC_ID_PCM_F32BE:
416+ case AV_CODEC_ID_PCM_S64BE:
411417 case AV_CODEC_ID_PCM_S32BE:
412418 case AV_CODEC_ID_PCM_S16BE:
413419 #else
420+ case AV_CODEC_ID_PCM_S64BE:
414421 case AV_CODEC_ID_PCM_F64BE:
415422 DECODE(64, be64, src, samples, n, 0, 0)
416423 break;
@@ -426,6 +433,7 @@ static int pcm_decode_frame(AVCodecContext *avctx, void *data, · 9 unmodified lines
426433 break;
427434 case AV_CODEC_ID_PCM_F64LE:
428435 case AV_CODEC_ID_PCM_F32LE:
436+ case AV_CODEC_ID_PCM_S64LE:
429437 case AV_CODEC_ID_PCM_S32LE:
430438 case AV_CODEC_ID_PCM_S16LE:
431439 #endif /* HAVE_BIGENDIAN */
@@ -568,4 +576,5 @@ PCM_CODEC (PCM_U24LE, AV_SAMPLE_FMT_S32, pcm_u24le, "PCM unsigned · 136 unmodified lines
568576 PCM_CODEC (PCM_U32BE, AV_SAMPLE_FMT_S32, pcm_u32be, "PCM unsigned 32-bit big-endian");
569577 PCM_CODEC (PCM_U32LE, AV_SAMPLE_FMT_S32, pcm_u32le, "PCM unsigned 32-bit little-endian");
570578 PCM_DECODER(PCM_ZORK, AV_SAMPLE_FMT_U8, pcm_zork, "PCM Zork");
571−
579+PCM_CODEC (PCM_S64BE, AV_SAMPLE_FMT_S64, pcm_s64be, "PCM signed 64-bit big-endian");
580+PCM_CODEC (PCM_S64LE, AV_SAMPLE_FMT_S64, pcm_s64le, "PCM signed 64-bit little-endian");
libavcodec/utils.c+3−0
@@ -3419,6 +3419,8 @@ int av_get_exact_bits_per_sample(enum AVCodecID codec_id) · 3418 unmodified lines
34193419 return 32;
34203420 case AV_CODEC_ID_PCM_F64BE:
34213421 case AV_CODEC_ID_PCM_F64LE:
3422+ case AV_CODEC_ID_PCM_S64BE:
3423+ case AV_CODEC_ID_PCM_S64LE:
34223424 return 64;
34233425 default:
34243426 return 0;
@@ -3436,6 +3438,7 @@ enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be) · 11 unmodified lines
34363438 [AV_SAMPLE_FMT_U8P ] = { AV_CODEC_ID_PCM_U8, AV_CODEC_ID_PCM_U8 },
34373439 [AV_SAMPLE_FMT_S16P] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
34383440 [AV_SAMPLE_FMT_S32P] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
3441+ [AV_SAMPLE_FMT_S64P] = { AV_CODEC_ID_PCM_S64LE, AV_CODEC_ID_PCM_S64BE },
34393442 [AV_SAMPLE_FMT_FLTP] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
34403443 [AV_SAMPLE_FMT_DBLP] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
34413444 };
libavcodec/version.h+1−1
@@ -28,7 +28,7 @@ · 27 unmodified lines
2828 #include "libavutil/version.h"
2929
3030 #define LIBAVCODEC_VERSION_MAJOR 57
31−#define LIBAVCODEC_VERSION_MINOR 53
31+#define LIBAVCODEC_VERSION_MINOR 54
3232 #define LIBAVCODEC_VERSION_MICRO 100
3333
3434 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
libavformat/riff.c+1−0
@@ -436,6 +436,7 @@ const AVCodecTag ff_codec_wav_tags[] = { · 435 unmodified lines
436436 { AV_CODEC_ID_PCM_U8, 0x0001 },
437437 { AV_CODEC_ID_PCM_S24LE, 0x0001 },
438438 { AV_CODEC_ID_PCM_S32LE, 0x0001 },
439+ { AV_CODEC_ID_PCM_S64LE, 0x0001 },
439440 { AV_CODEC_ID_ADPCM_MS, 0x0002 },
440441 { AV_CODEC_ID_PCM_F32LE, 0x0003 },
441442 /* must come after f32le in this list */
libavformat/utils.c+2−0
@@ -2991,6 +2991,8 @@ enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags) · 2990 unmodified lines
29912991 return be ? AV_CODEC_ID_PCM_S24BE : AV_CODEC_ID_PCM_S24LE;
29922992 case 4:
29932993 return be ? AV_CODEC_ID_PCM_S32BE : AV_CODEC_ID_PCM_S32LE;
2994+ case 8:
2995+ return be ? AV_CODEC_ID_PCM_S64BE : AV_CODEC_ID_PCM_S64LE;
29942996 default:
29952997 return AV_CODEC_ID_NONE;
29962998 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t