<pre>
Vp8 need to use MM21, but vp9 and h264 need to use HyFbc mode
for mt8195. Vp8/vp9/h264 use the same MM21 format for mt8192.

Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
---
 .../platform/mtk-vcodec/mtk_vcodec_dec.c      | 41 +++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
index 6ad17e69e32d..f2ced0147534 100644
--- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
+++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c
@@ -35,6 +35,44 @@ mtk_vdec_find_format(struct v4l2_format *f,
        return NULL;
 }
 
+static bool mtk_vdec_get_cap_fmt(struct mtk_vcodec_ctx *ctx, int format_index)
+{
+       const struct mtk_vcodec_dec_pdata *dec_pdata = ctx->dev->vdec_pdata;
+       const struct mtk_video_fmt *fmt;
+       struct mtk_q_data *q_data;
+       int num_frame_count = 0, i;
+       bool ret = true;
+
+       for (i = 0; i < *dec_pdata->num_formats; i++) {
+               if (dec_pdata->vdec_formats[i].type != MTK_FMT_FRAME)
+                       continue;
+
+               num_frame_count++;
+       }
+
+       if (num_frame_count == 1)
+               return true;
+
+       fmt = &dec_pdata->vdec_formats[format_index];
+       q_data = &ctx->q_data[MTK_Q_DATA_SRC];
+       switch (q_data->fmt->fourcc) {
+       case V4L2_PIX_FMT_VP8_FRAME:
+               if (fmt->fourcc == V4L2_PIX_FMT_MM21)
+                       ret = true;
+               break;
+       case V4L2_PIX_FMT_H264_SLICE:
+       case V4L2_PIX_FMT_VP9_FRAME:
+               if (fmt->fourcc == V4L2_PIX_FMT_MM21)
+                       ret = false;
+               break;
+       default:
+               ret = true;
+               break;
+       };
+
+       return ret;
+}
+
 static struct mtk_q_data *mtk_vdec_get_q_data(struct mtk_vcodec_ctx *ctx,
                                              enum v4l2_buf_type type)
 {
@@ -578,6 +616,9 @@ static int vidioc_enum_fmt(struct v4l2_fmtdesc *f, void *priv,
                    dec_pdata->vdec_formats[i].type != MTK_FMT_FRAME)
                        continue;
 
+               if (!output_queue && !mtk_vdec_get_cap_fmt(ctx, i))
+                       continue;
+
                if (j == f->index)
                        break;
                ++j;
-- 
2.25.1

</pre><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice ********************
The information contained in this e-mail message (including any 
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be 
conveyed only to the designated recipient(s). Any use, dissemination, 
distribution, printing, retaining or copying of this e-mail (including its 
attachments) by unintended recipient(s) is strictly prohibited and may 
be unlawful. If you are not an intended recipient of this e-mail, or believe 
that you have received this e-mail in error, please notify the sender 
immediately (by replying to this e-mail), delete any and all copies of 
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!
</pre><!--}-->