Signed-off-by: Cameron Cawley
---
doc/general.texi | 2 ++
libavcodec/Makefile | 2 ++
libavcodec/allcodecs.c| 2 ++
libavcodec/avcodec.h | 1 +
libavcodec/codec_desc.c | 7 +++
libavcodec/pcm.c | 15 +++
libavcodec/pcm_tablegen.c | 2 ++
libavcodec/pcm_tablegen.h | 27 +++
libavcodec/utils.c| 1 +
libavformat/Makefile | 2 ++
libavformat/allformats.c | 2 ++
libavformat/pcmdec.c | 3 +++
libavformat/pcmenc.c | 3 +++
13 files changed, 69 insertions(+)
diff --git a/doc/general.texi b/doc/general.texi
index 05f7bcd9fc..e3874430a4 100644
--- a/doc/general.texi
+++ b/doc/general.texi
@@ -545,6 +545,7 @@ library:
@item raw VC-1 @tab X @tab X
@item raw PCM A-law @tab X @tab X
@item raw PCM mu-law@tab X @tab X
+@item raw PCM Archimedes VIDC @tab X @tab X
@item raw PCM signed 8 bit @tab X @tab X
@item raw PCM signed 16 bit big-endian @tab X @tab X
@item raw PCM signed 16 bit little-endian @tab X @tab X
@@ -1146,6 +1147,7 @@ following image formats are supported:
@tab encoding supported through external library libopus
@item PCM A-law @tab X @tab X
@item PCM mu-law @tab X @tab X
+@item PCM Archimedes VIDC@tab X @tab X
@item PCM signed 8-bit planar @tab X @tab X
@item PCM signed 16-bit big-endian planar @tab X @tab X
@item PCM signed 16-bit little-endian planar @tab X @tab X
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index ce766aa466..b12d9ffccd 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -794,6 +794,8 @@ OBJS-$(CONFIG_PCM_U32BE_DECODER) += pcm.o
OBJS-$(CONFIG_PCM_U32BE_ENCODER) += pcm.o
OBJS-$(CONFIG_PCM_U32LE_DECODER) += pcm.o
OBJS-$(CONFIG_PCM_U32LE_ENCODER) += pcm.o
+OBJS-$(CONFIG_PCM_VIDC_DECODER) += pcm.o
+OBJS-$(CONFIG_PCM_VIDC_ENCODER) += pcm.o
OBJS-$(CONFIG_PCM_ZORK_DECODER) += pcm.o
OBJS-$(CONFIG_ADPCM_4XM_DECODER) += adpcm.o adpcm_data.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index c0b4d56d0d..1b8144a2b7 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -552,6 +552,8 @@ extern AVCodec ff_pcm_u32be_encoder;
extern AVCodec ff_pcm_u32be_decoder;
extern AVCodec ff_pcm_u32le_encoder;
extern AVCodec ff_pcm_u32le_decoder;
+extern AVCodec ff_pcm_vidc_encoder;
+extern AVCodec ff_pcm_vidc_decoder;
extern AVCodec ff_pcm_zork_decoder;
/* DPCM codecs */
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 705a3ce4f3..7ffef768dc 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -491,6 +491,7 @@ enum AVCodecID {
AV_CODEC_ID_PCM_S64BE,
AV_CODEC_ID_PCM_F16LE,
AV_CODEC_ID_PCM_F24LE,
+AV_CODEC_ID_PCM_VIDC,
/* various ADPCM codecs */
AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c
index 67a30542d1..1a159f7e13 100644
--- a/libavcodec/codec_desc.c
+++ b/libavcodec/codec_desc.c
@@ -1936,6 +1936,13 @@ static const AVCodecDescriptor codec_descriptors[] = {
.long_name = NULL_IF_CONFIG_SMALL("PCM 24.0 floating point
little-endian"),
.props = AV_CODEC_PROP_LOSSLESS,
},
+{
+.id= AV_CODEC_ID_PCM_VIDC,
+.type = AVMEDIA_TYPE_AUDIO,
+.name = "pcm_vidc",
+.long_name = NULL_IF_CONFIG_SMALL("PCM Archimedes VIDC"),
+.props = AV_CODEC_PROP_LOSSY,
+},
/* various ADPCM codecs */
{
diff --git a/libavcodec/pcm.c b/libavcodec/pcm.c
index 8c326c6829..ffcbccc77d 100644
--- a/libavcodec/pcm.c
+++ b/libavcodec/pcm.c
@@ -42,6 +42,9 @@ static av_cold int pcm_encode_init(AVCodecContext *avctx)
case AV_CODEC_ID_PCM_MULAW:
pcm_ulaw_tableinit();
break;
+case AV_CODEC_ID_PCM_VIDC:
+pcm_vidc_tableinit();
+break;
default:
break;
}
@@ -216,6 +219,12 @@ static int pcm_encode_frame(AVCodecContext *avctx,
AVPacket *avpkt,
*dst++ = linear_to_ulaw[(v + 32768) >> 2];
}
break;
+case AV_CODEC_ID_PCM_VIDC:
+for (; n > 0; n--) {
+v = *samples++;
+*dst++ = linear_to_vidc[(v + 32768) >> 2];
+}
+break;
default:
return -1;
}
@@ -249,6 +258,10 @@ static av_cold int pcm_decode_init(AVCodecContext *avctx)
for (i = 0; i < 256; i++)
s->table[i] = ulaw2linear(i);
break;
+case AV_CODEC_ID_PCM_VIDC:
+for (i = 0; i < 256; i++)
+s->table[i] = vidc2linear(i);
+break;
case AV_CODEC_ID_PCM_F16LE:
case AV_CODEC_ID_PCM_F24LE:
s->scale = 1. / (1 << (avctx->bits_per_coded_sample - 1));
@@ -485,6 +498,7 @@ static int pcm_decode_frame(AVCodecContext *avctx, void
*data,
break;
case AV_CODEC_ID_PCM_ALAW:
case AV_CODEC_ID_PCM_MULAW:
+