media: amphion: support to decode sorenson spark video
authorMing Qian <ming.qian@nxp.com>
Thu, 12 Jan 2023 09:04:48 +0000 (09:04 +0000)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Mon, 10 Apr 2023 13:07:33 +0000 (14:07 +0100)
Sorenson Spark is an implementation of H.263 for use
in Flash Video and Adobe Flash files.
amphion decoder can support it by insert some startcode
before sequence and picture.

Signed-off-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/amphion/vdec.c
drivers/media/platform/amphion/vpu_malone.c

index 7063353..9d6e345 100644 (file)
@@ -165,6 +165,13 @@ static const struct vpu_format vdec_formats[] = {
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION | V4L2_FMT_FLAG_COMPRESSED
        },
+       {
+               .pixfmt = V4L2_PIX_FMT_SPK,
+               .mem_planes = 1,
+               .comp_planes = 1,
+               .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+               .flags = V4L2_FMT_FLAG_DYN_RESOLUTION | V4L2_FMT_FLAG_COMPRESSED
+       },
        {0, 0, 0, 0},
 };
 
index feb5c25..f05c464 100644 (file)
@@ -562,6 +562,7 @@ static struct malone_fmt_mapping fmt_mappings[] = {
        {V4L2_PIX_FMT_H263,        MALONE_FMT_ASP},
        {V4L2_PIX_FMT_JPEG,        MALONE_FMT_JPG},
        {V4L2_PIX_FMT_VP8,         MALONE_FMT_VP8},
+       {V4L2_PIX_FMT_SPK,         MALONE_FMT_SPK},
 };
 
 static enum vpu_malone_format vpu_malone_format_remap(u32 pixelformat)
@@ -989,6 +990,7 @@ static const struct malone_padding_scode padding_scodes[] = {
        {SCODE_PADDING_EOS,      V4L2_PIX_FMT_XVID,        {0xb1010000, 0x0}},
        {SCODE_PADDING_EOS,      V4L2_PIX_FMT_H263,        {0xb1010000, 0x0}},
        {SCODE_PADDING_EOS,      V4L2_PIX_FMT_VP8,         {0x34010000, 0x0}},
+       {SCODE_PADDING_EOS,      V4L2_PIX_FMT_SPK,         {0x34010000, 0x0}},
        {SCODE_PADDING_EOS,      V4L2_PIX_FMT_JPEG,        {0xefff0000, 0x0}},
        {SCODE_PADDING_ABORT,    V4L2_PIX_FMT_H264,        {0x0B010000, 0}},
        {SCODE_PADDING_ABORT,    V4L2_PIX_FMT_H264_MVC,    {0x0B010000, 0}},
@@ -1000,6 +1002,7 @@ static const struct malone_padding_scode padding_scodes[] = {
        {SCODE_PADDING_ABORT,    V4L2_PIX_FMT_XVID,        {0xb1010000, 0x0}},
        {SCODE_PADDING_ABORT,    V4L2_PIX_FMT_H263,        {0xb1010000, 0x0}},
        {SCODE_PADDING_ABORT,    V4L2_PIX_FMT_VP8,         {0x34010000, 0x0}},
+       {SCODE_PADDING_ABORT,    V4L2_PIX_FMT_SPK,         {0x34010000, 0x0}},
        {SCODE_PADDING_EOS,      V4L2_PIX_FMT_JPEG,        {0x0, 0x0}},
        {SCODE_PADDING_BUFFLUSH, V4L2_PIX_FMT_H264,        {0x15010000, 0x0}},
        {SCODE_PADDING_BUFFLUSH, V4L2_PIX_FMT_H264_MVC,    {0x15010000, 0x0}},
@@ -1413,6 +1416,16 @@ static int vpu_malone_insert_scode_vp8_pic(struct malone_scode_t *scode)
        return size;
 }
 
+static int vpu_malone_insert_scode_spk_seq(struct malone_scode_t *scode)
+{
+       return vpu_malone_insert_scode_seq(scode, MALONE_CODEC_ID_SPK, 0);
+}
+
+static int vpu_malone_insert_scode_spk_pic(struct malone_scode_t *scode)
+{
+       return vpu_malone_insert_scode_pic(scode, MALONE_CODEC_ID_SPK, 0);
+}
+
 static const struct malone_scode_handler scode_handlers[] = {
        {
                /* fix me, need to swap return operation after gstreamer swap */
@@ -1429,6 +1442,11 @@ static const struct malone_scode_handler scode_handlers[] = {
                .insert_scode_seq = vpu_malone_insert_scode_vp8_seq,
                .insert_scode_pic = vpu_malone_insert_scode_vp8_pic,
        },
+       {
+               .pixelformat = V4L2_PIX_FMT_SPK,
+               .insert_scode_seq = vpu_malone_insert_scode_spk_seq,
+               .insert_scode_pic = vpu_malone_insert_scode_spk_pic,
+       },
 };
 
 static const struct malone_scode_handler *get_scode_handler(u32 pixelformat)