summaryrefslogtreecommitdiffstats
path: root/recipes-multimedia/onevpl/onevpl/0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch
blob: db8baa3e5a04990bd9ac73bd7a6fd79546e3ed77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
From f8d87fc857d5bfd69247c985ed82ba88e167ef30 Mon Sep 17 00:00:00 2001
From: "Yew, Chang Ching" <chang.ching.yew@intel.com>
Date: Fri, 9 Jul 2021 13:59:33 +0000
Subject: [PATCH] sample_decode: Add VDSFC CSC for AVC/HEVC

Upstream-Status: Submitted
innersource PR #289

Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
---
 .../sample_decode/src/pipeline_decode.cpp     | 84 +++++++++++++++++--
 1 file changed, 77 insertions(+), 7 deletions(-)

diff --git a/tools/legacy/sample_decode/src/pipeline_decode.cpp b/tools/legacy/sample_decode/src/pipeline_decode.cpp
index 4dc811c5..d817ff2a 100644
--- a/tools/legacy/sample_decode/src/pipeline_decode.cpp
+++ b/tools/legacy/sample_decode/src/pipeline_decode.cpp
@@ -765,6 +765,14 @@ bool CDecodingPipeline::IsVppRequired(sInputParams* pParams) {
     if (pParams->eDeinterlace) {
         bVppIsUsed = true;
     }
+
+    if ((MODE_DECODER_POSTPROC_AUTO == pParams->nDecoderPostProcessing) ||
+        (MODE_DECODER_POSTPROC_FORCE == pParams->nDecoderPostProcessing)) {
+        /* Decoder will make decision about internal post-processing usage slightly later */
+        if ((pParams->videoType == MFX_CODEC_AVC) || (pParams->videoType == MFX_CODEC_HEVC))
+            bVppIsUsed = false;
+    }
+
     return bVppIsUsed;
 }
 
@@ -1014,6 +1022,8 @@ mfxStatus CDecodingPipeline::InitMfxParams(sInputParams* pParams) {
     if (!m_bVppIsUsed) {
         if ((m_mfxVideoParams.mfx.FrameInfo.CropW != pParams->Width && pParams->Width) ||
             (m_mfxVideoParams.mfx.FrameInfo.CropH != pParams->Height && pParams->Height) ||
+            (pParams->nDecoderPostProcessing && pParams->videoType == MFX_CODEC_AVC) ||
+            (pParams->nDecoderPostProcessing && pParams->videoType == MFX_CODEC_HEVC) ||
             (pParams->nDecoderPostProcessing && pParams->videoType == MFX_CODEC_JPEG &&
              pParams->fourcc == MFX_FOURCC_RGB4 &&
              // No need to use decoder's post processing for decoding of JPEG with RGB 4:4:4
@@ -1027,7 +1037,10 @@ mfxStatus CDecodingPipeline::InitMfxParams(sInputParams* pParams) {
             if (((MODE_DECODER_POSTPROC_AUTO == pParams->nDecoderPostProcessing) ||
                  (MODE_DECODER_POSTPROC_FORCE == pParams->nDecoderPostProcessing)) &&
                 (MFX_CODEC_AVC == m_mfxVideoParams.mfx.CodecId ||
-                 MFX_CODEC_JPEG == m_mfxVideoParams.mfx.CodecId) && /* Only for AVC and JPEG */
+                 MFX_CODEC_JPEG == m_mfxVideoParams.mfx.CodecId ||
+                 MFX_CODEC_HEVC == m_mfxVideoParams.mfx.CodecId ||
+                 MFX_CODEC_VP9 == m_mfxVideoParams.mfx.CodecId ||
+                 MFX_CODEC_AV1 == m_mfxVideoParams.mfx.CodecId) &&
                 (MFX_PICSTRUCT_PROGRESSIVE ==
                  m_mfxVideoParams.mfx.FrameInfo.PicStruct)) /* ...And only for progressive!*/
             { /* it is possible to use decoder's post-processing */
@@ -1050,12 +1063,69 @@ mfxStatus CDecodingPipeline::InitMfxParams(sInputParams* pParams) {
 
                 decPostProcessing->Out.FourCC       = m_mfxVideoParams.mfx.FrameInfo.FourCC;
                 decPostProcessing->Out.ChromaFormat = m_mfxVideoParams.mfx.FrameInfo.ChromaFormat;
-                decPostProcessing->Out.Width        = MSDK_ALIGN16(pParams->Width);
-                decPostProcessing->Out.Height       = MSDK_ALIGN16(pParams->Height);
-                decPostProcessing->Out.CropX        = 0;
-                decPostProcessing->Out.CropY        = 0;
-                decPostProcessing->Out.CropW        = pParams->Width;
-                decPostProcessing->Out.CropH        = pParams->Height;
+
+                if (pParams->videoType == MFX_CODEC_AVC || pParams->videoType == MFX_CODEC_HEVC) {
+                    switch (pParams->fourcc) {
+                        case MFX_FOURCC_RGB4:
+                            decPostProcessing->Out.FourCC       = MFX_FOURCC_RGB4;
+                            decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
+                            break;
+
+                        case MFX_FOURCC_NV12:
+                            decPostProcessing->Out.FourCC       = MFX_FOURCC_NV12;
+                            decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
+                            break;
+
+                        case MFX_FOURCC_P010:
+                            decPostProcessing->Out.FourCC       = MFX_FOURCC_P010;
+                            decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
+                            break;
+
+                        case MFX_FOURCC_P016:
+                            decPostProcessing->Out.FourCC       = MFX_FOURCC_P016;
+                            decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
+                            break;
+
+                        case MFX_FOURCC_YUY2:
+                            decPostProcessing->Out.FourCC       = MFX_FOURCC_YUY2;
+                            decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
+                            break;
+
+                        case MFX_FOURCC_Y210:
+                            decPostProcessing->Out.FourCC       = MFX_FOURCC_Y210;
+                            decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
+                            break;
+
+                        case MFX_FOURCC_Y216:
+                            decPostProcessing->Out.FourCC       = MFX_FOURCC_Y216;
+                            decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
+                            break;
+
+                        case MFX_FOURCC_AYUV:
+                            decPostProcessing->Out.FourCC       = MFX_FOURCC_AYUV;
+                            decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
+                            break;
+
+                        case MFX_FOURCC_Y410:
+                            decPostProcessing->Out.FourCC       = MFX_FOURCC_Y410;
+                            decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
+                            break;
+
+                        case MFX_FOURCC_Y416:
+                            decPostProcessing->Out.FourCC       = MFX_FOURCC_Y416;
+                            decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
+                            break;
+
+                        default:
+                            break;
+                    }
+                }
+                decPostProcessing->Out.Width  = MSDK_ALIGN16(pParams->Width);
+                decPostProcessing->Out.Height = MSDK_ALIGN16(pParams->Height);
+                decPostProcessing->Out.CropX  = 0;
+                decPostProcessing->Out.CropY  = 0;
+                decPostProcessing->Out.CropW  = pParams->Width;
+                decPostProcessing->Out.CropH  = pParams->Height;
 
                 msdk_printf(MSDK_STRING("Decoder's post-processing is used for resizing\n"));
             }
-- 
2.33.1