]> git.sesse.net Git - ffmpeg/commitdiff
avcodec: add SGA PCM decoder
authorPaul B Mahol <onemda@gmail.com>
Sun, 21 Feb 2021 23:30:22 +0000 (00:30 +0100)
committerPaul B Mahol <onemda@gmail.com>
Mon, 1 Mar 2021 16:36:16 +0000 (17:36 +0100)
libavcodec/Makefile
libavcodec/allcodecs.c
libavcodec/codec_desc.c
libavcodec/codec_id.h
libavcodec/pcm.c
libavcodec/utils.c
libavcodec/version.h

index 0f67d8d2f6172708e657014967eb816e1479254f..16d062d2fb9ef87c25bab9a1e6195caa5d087f53 100644 (file)
@@ -830,6 +830,7 @@ OBJS-$(CONFIG_PCM_S64BE_DECODER)          += pcm.o
 OBJS-$(CONFIG_PCM_S64BE_ENCODER)          += pcm.o
 OBJS-$(CONFIG_PCM_S64LE_DECODER)          += pcm.o
 OBJS-$(CONFIG_PCM_S64LE_ENCODER)          += pcm.o
+OBJS-$(CONFIG_PCM_SGA_DECODER)            += pcm.o
 OBJS-$(CONFIG_PCM_U8_DECODER)             += pcm.o
 OBJS-$(CONFIG_PCM_U8_ENCODER)             += pcm.o
 OBJS-$(CONFIG_PCM_U16BE_DECODER)          += pcm.o
index 354d1463790a215e9f7faf69dc3fb587c3def032..990998b64bfc06f2fb54621c22daac8c6bb6a7c8 100644 (file)
@@ -568,6 +568,7 @@ extern AVCodec ff_pcm_s64be_encoder;
 extern AVCodec ff_pcm_s64be_decoder;
 extern AVCodec ff_pcm_s64le_encoder;
 extern AVCodec ff_pcm_s64le_decoder;
+extern AVCodec ff_pcm_sga_decoder;
 extern AVCodec ff_pcm_u8_encoder;
 extern AVCodec ff_pcm_u8_decoder;
 extern AVCodec ff_pcm_u16be_encoder;
index 8e695b11d224570789162b1eb17c2110f2e28fca..f64ba488f25b291b0ef1924e08ad5e252f5cef5c 100644 (file)
@@ -2096,6 +2096,13 @@ static const AVCodecDescriptor codec_descriptors[] = {
         .long_name = NULL_IF_CONFIG_SMALL("PCM Archimedes VIDC"),
         .props     = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY,
     },
+    {
+        .id        = AV_CODEC_ID_PCM_SGA,
+        .type      = AVMEDIA_TYPE_AUDIO,
+        .name      = "pcm_sga",
+        .long_name = NULL_IF_CONFIG_SMALL("PCM SGA"),
+        .props     = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS,
+    },
 
     /* various ADPCM codecs */
     {
index 56a69cf1c2805b4d6aba2809eed5ce2249d975a8..7dd316afd2fc1ee3dce71d5212b15a025555aa4e 100644 (file)
@@ -346,6 +346,7 @@ enum AVCodecID {
     AV_CODEC_ID_PCM_F16LE,
     AV_CODEC_ID_PCM_F24LE,
     AV_CODEC_ID_PCM_VIDC,
+    AV_CODEC_ID_PCM_SGA,
 
     /* various ADPCM codecs */
     AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
index 7f0af8564f68dac8df4ff0a088499cfd7f4a3c11..19d04e9181625495df0908801d202819ab6297c8 100644 (file)
@@ -419,6 +419,14 @@ static int pcm_decode_frame(AVCodecContext *avctx, void *data,
         for (; n > 0; n--)
             *samples++ = *src++ + 128;
         break;
+    case AV_CODEC_ID_PCM_SGA:
+        for (; n > 0; n--) {
+            int sign = *src >> 7;
+            int magn = *src & 0x7f;
+            *samples++ = sign ? 128 - magn : 128 + magn;
+            src++;
+        }
+        break;
     case AV_CODEC_ID_PCM_S8_PLANAR:
         n /= avctx->channels;
         for (c = 0; c < avctx->channels; c++) {
@@ -622,3 +630,4 @@ PCM_CODEC  (PCM_U32LE,        AV_SAMPLE_FMT_S32, pcm_u32le,        "PCM unsigned
 PCM_CODEC  (PCM_S64BE,        AV_SAMPLE_FMT_S64, pcm_s64be,        "PCM signed 64-bit big-endian");
 PCM_CODEC  (PCM_S64LE,        AV_SAMPLE_FMT_S64, pcm_s64le,        "PCM signed 64-bit little-endian");
 PCM_CODEC  (PCM_VIDC,         AV_SAMPLE_FMT_S16, pcm_vidc,         "PCM Archimedes VIDC");
+PCM_DECODER(PCM_SGA,          AV_SAMPLE_FMT_U8,  pcm_sga,          "PCM SGA");
index 4d1909b581a4bf471b4cececb4bfb5e424f86915..db6cd0cde8ccbc886f9ee7b0714f7bdea90b89b5 100644 (file)
@@ -1547,6 +1547,7 @@ int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
     case AV_CODEC_ID_PCM_VIDC:
     case AV_CODEC_ID_PCM_S8:
     case AV_CODEC_ID_PCM_S8_PLANAR:
+    case AV_CODEC_ID_PCM_SGA:
     case AV_CODEC_ID_PCM_U8:
     case AV_CODEC_ID_SDX2_DPCM:
     case AV_CODEC_ID_DERF_DPCM:
index f4715063c0ebf66e06515de93835cde1e47143b1..f6930f6e631360bb263a3f34f43b6b06f30a8763 100644 (file)
@@ -28,7 +28,7 @@
 #include "libavutil/version.h"
 
 #define LIBAVCODEC_VERSION_MAJOR  58
-#define LIBAVCODEC_VERSION_MINOR 126
+#define LIBAVCODEC_VERSION_MINOR 127
 #define LIBAVCODEC_VERSION_MICRO 100
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \