On 2/26/2021 8:29 AM, Paul B Mahol wrote:
Signed-off-by: Paul B Mahol <one...@gmail.com>
---
  libavcodec/Makefile     |   1 +
  libavcodec/allcodecs.c  |   1 +
  libavcodec/codec_desc.c |   7 +
  libavcodec/codec_id.h   |   1 +
  libavcodec/sga.c        | 534 ++++++++++++++++++++++++++++++++++++++++
  5 files changed, 544 insertions(+)
  create mode 100644 libavcodec/sga.c

diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index fe7026c1db..850657ae3c 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -609,6 +609,7 @@ OBJS-$(CONFIG_SANM_DECODER)            += sanm.o
  OBJS-$(CONFIG_SCPR_DECODER)            += scpr.o
  OBJS-$(CONFIG_SCREENPRESSO_DECODER)    += screenpresso.o
  OBJS-$(CONFIG_SDX2_DPCM_DECODER)       += dpcm.o
+OBJS-$(CONFIG_SGA_DECODER)             += sga.o
  OBJS-$(CONFIG_SGI_DECODER)             += sgidec.o
  OBJS-$(CONFIG_SGI_ENCODER)             += sgienc.o rle.o
  OBJS-$(CONFIG_SGIRLE_DECODER)          += sgirledec.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 990998b64b..a04faead16 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -289,6 +289,7 @@ extern AVCodec ff_s302m_decoder;
  extern AVCodec ff_sanm_decoder;
  extern AVCodec ff_scpr_decoder;
  extern AVCodec ff_screenpresso_decoder;
+extern AVCodec ff_sga_decoder;
  extern AVCodec ff_sgi_encoder;
  extern AVCodec ff_sgi_decoder;
  extern AVCodec ff_sgirle_decoder;
diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c
index f64ba488f2..17f8a14044 100644
--- a/libavcodec/codec_desc.c
+++ b/libavcodec/codec_desc.c
@@ -1849,6 +1849,13 @@ static const AVCodecDescriptor codec_descriptors[] = {
          .long_name = NULL_IF_CONFIG_SMALL("Simbiosis Interactive IMX Video"),
          .props     = AV_CODEC_PROP_LOSSY,
      },
+    {
+        .id        = AV_CODEC_ID_SGA_VIDEO,
+        .type      = AVMEDIA_TYPE_VIDEO,
+        .name      = "sga",
+        .long_name = NULL_IF_CONFIG_SMALL("Digital Pictures SGA Video"),
+        .props     = AV_CODEC_PROP_LOSSY,
+    },
/* various PCM "codecs" */
      {
diff --git a/libavcodec/codec_id.h b/libavcodec/codec_id.h
index 7dd316afd2..ab7bc68ee2 100644
--- a/libavcodec/codec_id.h
+++ b/libavcodec/codec_id.h
@@ -306,6 +306,7 @@ enum AVCodecID {
      AV_CODEC_ID_ARGO,
      AV_CODEC_ID_CRI,
      AV_CODEC_ID_SIMBIOSIS_IMX,
+    AV_CODEC_ID_SGA_VIDEO,
/* various PCM "codecs" */
      AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the 
start of audio codecs
diff --git a/libavcodec/sga.c b/libavcodec/sga.c
new file mode 100644
index 0000000000..00752a5843
--- /dev/null
+++ b/libavcodec/sga.c

sgadec.c?

[...]

+    memcpy(frame->data[1], s->pal, AVPALETTE_SIZE);
+    frame->palette_has_changed = 1;
+    frame->pict_type = AV_PICTURE_TYPE_I;

Missing intra only in codec_desc.c, then?

+    frame->key_frame = 1;

The demuxer does not seem to set every packet as key frame, only some. Which is it?

+
+    *got_frame = 1;
+
+    return avpkt->size;
+}
+
+static av_cold int sga_decode_end(AVCodecContext *avctx)
+{
+    SGAVideoContext *s = avctx->priv_data;
+
+    av_freep(&s->tileindex_data);
+    s->tileindex_size = 0;
+
+    av_freep(&s->palmapindex_data);
+    s->palmapindex_size = 0;
+
+    return 0;
+}
+
+AVCodec ff_sga_decoder = {
+    .name           = "sga",
+    .long_name      = NULL_IF_CONFIG_SMALL("Digital Pictures SGA Video"),
+    .type           = AVMEDIA_TYPE_VIDEO,
+    .id             = AV_CODEC_ID_SGA_VIDEO,
+    .priv_data_size = sizeof(SGAVideoContext),
+    .init           = sga_decode_init,
+    .decode         = sga_decode_frame,
+    .close          = sga_decode_end,
+    .capabilities   = AV_CODEC_CAP_DR1,
+    .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE,
+};


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to