media: meson: vdec: add VP9 decoder support
[linux-2.6-microblaze.git] / drivers / staging / media / meson / vdec / vdec_platform.c
index ea39f82..eabbeba 100644 (file)
@@ -8,10 +8,25 @@
 #include "vdec.h"
 
 #include "vdec_1.h"
+#include "vdec_hevc.h"
 #include "codec_mpeg12.h"
+#include "codec_h264.h"
+#include "codec_vp9.h"
 
 static const struct amvdec_format vdec_formats_gxbb[] = {
        {
+               .pixfmt = V4L2_PIX_FMT_H264,
+               .min_buffers = 2,
+               .max_buffers = 24,
+               .max_width = 1920,
+               .max_height = 1080,
+               .vdec_ops = &vdec_1_ops,
+               .codec_ops = &codec_h264_ops,
+               .firmware_path = "meson/vdec/gxbb_h264.bin",
+               .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED |
+                        V4L2_FMT_FLAG_DYN_RESOLUTION,
+       }, {
                .pixfmt = V4L2_PIX_FMT_MPEG1,
                .min_buffers = 8,
                .max_buffers = 8,
@@ -21,6 +36,7 @@ static const struct amvdec_format vdec_formats_gxbb[] = {
                .codec_ops = &codec_mpeg12_ops,
                .firmware_path = "meson/vdec/gxl_mpeg12.bin",
                .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED,
        }, {
                .pixfmt = V4L2_PIX_FMT_MPEG2,
                .min_buffers = 8,
@@ -31,11 +47,36 @@ static const struct amvdec_format vdec_formats_gxbb[] = {
                .codec_ops = &codec_mpeg12_ops,
                .firmware_path = "meson/vdec/gxl_mpeg12.bin",
                .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED,
        },
 };
 
 static const struct amvdec_format vdec_formats_gxl[] = {
        {
+               .pixfmt = V4L2_PIX_FMT_VP9,
+               .min_buffers = 16,
+               .max_buffers = 24,
+               .max_width = 3840,
+               .max_height = 2160,
+               .vdec_ops = &vdec_hevc_ops,
+               .codec_ops = &codec_vp9_ops,
+               .firmware_path = "meson/vdec/gxl_vp9.bin",
+               .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED |
+                        V4L2_FMT_FLAG_DYN_RESOLUTION,
+       }, {
+               .pixfmt = V4L2_PIX_FMT_H264,
+               .min_buffers = 2,
+               .max_buffers = 24,
+               .max_width = 3840,
+               .max_height = 2160,
+               .vdec_ops = &vdec_1_ops,
+               .codec_ops = &codec_h264_ops,
+               .firmware_path = "meson/vdec/gxl_h264.bin",
+               .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED |
+                        V4L2_FMT_FLAG_DYN_RESOLUTION,
+       }, {
                .pixfmt = V4L2_PIX_FMT_MPEG1,
                .min_buffers = 8,
                .max_buffers = 8,
@@ -45,6 +86,7 @@ static const struct amvdec_format vdec_formats_gxl[] = {
                .codec_ops = &codec_mpeg12_ops,
                .firmware_path = "meson/vdec/gxl_mpeg12.bin",
                .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED,
        }, {
                .pixfmt = V4L2_PIX_FMT_MPEG2,
                .min_buffers = 8,
@@ -55,11 +97,24 @@ static const struct amvdec_format vdec_formats_gxl[] = {
                .codec_ops = &codec_mpeg12_ops,
                .firmware_path = "meson/vdec/gxl_mpeg12.bin",
                .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED,
        },
 };
 
 static const struct amvdec_format vdec_formats_gxm[] = {
        {
+               .pixfmt = V4L2_PIX_FMT_H264,
+               .min_buffers = 2,
+               .max_buffers = 24,
+               .max_width = 3840,
+               .max_height = 2160,
+               .vdec_ops = &vdec_1_ops,
+               .codec_ops = &codec_h264_ops,
+               .firmware_path = "meson/vdec/gxm_h264.bin",
+               .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED |
+                        V4L2_FMT_FLAG_DYN_RESOLUTION,
+       }, {
                .pixfmt = V4L2_PIX_FMT_MPEG1,
                .min_buffers = 8,
                .max_buffers = 8,
@@ -69,6 +124,7 @@ static const struct amvdec_format vdec_formats_gxm[] = {
                .codec_ops = &codec_mpeg12_ops,
                .firmware_path = "meson/vdec/gxl_mpeg12.bin",
                .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED,
        }, {
                .pixfmt = V4L2_PIX_FMT_MPEG2,
                .min_buffers = 8,
@@ -79,11 +135,36 @@ static const struct amvdec_format vdec_formats_gxm[] = {
                .codec_ops = &codec_mpeg12_ops,
                .firmware_path = "meson/vdec/gxl_mpeg12.bin",
                .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED,
        },
 };
 
 static const struct amvdec_format vdec_formats_g12a[] = {
        {
+               .pixfmt = V4L2_PIX_FMT_VP9,
+               .min_buffers = 16,
+               .max_buffers = 24,
+               .max_width = 3840,
+               .max_height = 2160,
+               .vdec_ops = &vdec_hevc_ops,
+               .codec_ops = &codec_vp9_ops,
+               .firmware_path = "meson/vdec/g12a_vp9.bin",
+               .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED |
+                        V4L2_FMT_FLAG_DYN_RESOLUTION,
+       }, {
+               .pixfmt = V4L2_PIX_FMT_H264,
+               .min_buffers = 2,
+               .max_buffers = 24,
+               .max_width = 3840,
+               .max_height = 2160,
+               .vdec_ops = &vdec_1_ops,
+               .codec_ops = &codec_h264_ops,
+               .firmware_path = "meson/vdec/g12a_h264.bin",
+               .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED |
+                        V4L2_FMT_FLAG_DYN_RESOLUTION,
+       }, {
                .pixfmt = V4L2_PIX_FMT_MPEG1,
                .min_buffers = 8,
                .max_buffers = 8,
@@ -93,6 +174,7 @@ static const struct amvdec_format vdec_formats_g12a[] = {
                .codec_ops = &codec_mpeg12_ops,
                .firmware_path = "meson/vdec/gxl_mpeg12.bin",
                .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED,
        }, {
                .pixfmt = V4L2_PIX_FMT_MPEG2,
                .min_buffers = 8,
@@ -103,11 +185,36 @@ static const struct amvdec_format vdec_formats_g12a[] = {
                .codec_ops = &codec_mpeg12_ops,
                .firmware_path = "meson/vdec/gxl_mpeg12.bin",
                .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED,
        },
 };
 
 static const struct amvdec_format vdec_formats_sm1[] = {
        {
+               .pixfmt = V4L2_PIX_FMT_VP9,
+               .min_buffers = 16,
+               .max_buffers = 24,
+               .max_width = 3840,
+               .max_height = 2160,
+               .vdec_ops = &vdec_hevc_ops,
+               .codec_ops = &codec_vp9_ops,
+               .firmware_path = "meson/vdec/sm1_vp9_mmu.bin",
+               .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED |
+                        V4L2_FMT_FLAG_DYN_RESOLUTION,
+       }, {
+               .pixfmt = V4L2_PIX_FMT_H264,
+               .min_buffers = 2,
+               .max_buffers = 24,
+               .max_width = 3840,
+               .max_height = 2160,
+               .vdec_ops = &vdec_1_ops,
+               .codec_ops = &codec_h264_ops,
+               .firmware_path = "meson/vdec/g12a_h264.bin",
+               .pixfmts_cap = { V4L2_PIX_FMT_NV12M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED |
+                        V4L2_FMT_FLAG_DYN_RESOLUTION,
+       }, {
                .pixfmt = V4L2_PIX_FMT_MPEG1,
                .min_buffers = 8,
                .max_buffers = 8,
@@ -117,6 +224,7 @@ static const struct amvdec_format vdec_formats_sm1[] = {
                .codec_ops = &codec_mpeg12_ops,
                .firmware_path = "meson/vdec/gxl_mpeg12.bin",
                .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED,
        }, {
                .pixfmt = V4L2_PIX_FMT_MPEG2,
                .min_buffers = 8,
@@ -127,6 +235,7 @@ static const struct amvdec_format vdec_formats_sm1[] = {
                .codec_ops = &codec_mpeg12_ops,
                .firmware_path = "meson/vdec/gxl_mpeg12.bin",
                .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+               .flags = V4L2_FMT_FLAG_COMPRESSED,
        },
 };