Skip to content

Commit 0aa97d7

Browse files
[VP] Enable VPL SR (#6528)
Enable VPL SR Co-authored-by: Gu, Peiyi <[email protected]>
1 parent 1417747 commit 0aa97d7

File tree

5 files changed

+106
-5
lines changed

5 files changed

+106
-5
lines changed

_studio/mfx_lib/vpp/src/mfx_vpp_hw.cpp

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2154,6 +2154,12 @@ mfxStatus VideoVPPHW::GetVideoParams(mfxVideoParam *par) const
21542154
MFX_CHECK_NULL_PTR1(bufColorfill);
21552155
bufColorfill->Enable = static_cast<mfxU16>(m_executeParams.iBackgroundColor?MFX_CODINGOPTION_ON:MFX_CODINGOPTION_OFF);
21562156
}
2157+
else if (MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION == bufferId)
2158+
{
2159+
mfxExtVPPAISuperResolution* bufSuperResolution = reinterpret_cast<mfxExtVPPAISuperResolution*>(par->ExtParam[i]);
2160+
MFX_CHECK_NULL_PTR1(bufSuperResolution);
2161+
bufSuperResolution->SRMode = m_executeParams.m_srMode;
2162+
}
21572163
}
21582164

21592165
return MFX_ERR_NONE;
@@ -2380,6 +2386,12 @@ mfxStatus VideoVPPHW::CheckFormatLimitation(mfxU32 filter, mfxU32 format, mfxU32
23802386
formatSupport = MFX_FORMAT_SUPPORT_OUTPUT;
23812387
}
23822388
break;
2389+
case MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION:
2390+
if (format == MFX_FOURCC_NV12)
2391+
{
2392+
formatSupport = MFX_FORMAT_SUPPORT_INPUT | MFX_FORMAT_SUPPORT_OUTPUT;
2393+
}
2394+
break;
23832395
#if defined (ONEVPL_EXPERIMENTAL)
23842396
case MFX_EXTBUFF_VPP_PERC_ENC_PREFILTER:
23852397
if (format == MFX_FOURCC_NV12)
@@ -2674,6 +2686,15 @@ mfxStatus VideoVPPHW::Init(
26742686
}
26752687
}
26762688
}
2689+
else if (m_params.ExtParam[i]->BufferId == MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION)
2690+
{
2691+
mfxExtVPPAISuperResolution* extSR = (mfxExtVPPAISuperResolution*)m_params.ExtParam[i];
2692+
if (extSR)
2693+
{
2694+
m_executeParams.bSuperResolution = true;
2695+
m_executeParams.m_srMode = extSR->SRMode;
2696+
}
2697+
}
26772698
}
26782699

26792700
m_config.m_IOPattern = 0;
@@ -5305,7 +5326,36 @@ mfxStatus ValidateParams(mfxVideoParam *par, mfxVppCaps *caps, VideoCORE *core,
53055326

53065327
break;
53075328
} //case MFX_EXTBUFF_VPP_COMPOSITE
5308-
5329+
case MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION:
5330+
{
5331+
if (!caps->uSuperResolution)
5332+
{
5333+
sts = GetWorstSts(sts, MFX_ERR_UNSUPPORTED);
5334+
}
5335+
if (par->vpp.In.FourCC != MFX_FOURCC_NV12 ||
5336+
(par->vpp.Out.FourCC != MFX_FOURCC_NV12 && par->vpp.Out.FourCC != MFX_FOURCC_BGRA))
5337+
{
5338+
sts = GetWorstSts(sts, MFX_ERR_UNSUPPORTED);
5339+
}
5340+
mfxU32 inputWidth = std::min(par->vpp.In.Width, par->vpp.In.CropW);
5341+
mfxU32 inputHeight = std::min(par->vpp.In.Height, par->vpp.In.CropH);
5342+
mfxU32 outputWidth = std::min(par->vpp.Out.Width, par->vpp.Out.CropW);
5343+
mfxU32 outputHeight = std::min(par->vpp.Out.Height, par->vpp.Out.CropH);
5344+
//add rotation support next
5345+
if (inputWidth > caps->uSrMaxInWidth ||
5346+
inputHeight > caps->uSrMaxInHeight)
5347+
{
5348+
sts = GetWorstSts(sts, MFX_ERR_UNSUPPORTED);
5349+
}
5350+
mfxF32 fScaleX = (mfxF32)outputWidth / inputWidth;
5351+
mfxF32 fScaleY = (mfxF32)outputHeight / inputHeight;
5352+
if (fScaleX < 1.4f ||
5353+
fScaleY < 1.4f)
5354+
{
5355+
sts = GetWorstSts(sts, MFX_ERR_UNSUPPORTED);
5356+
}
5357+
break;
5358+
}
53095359
case MFX_EXTBUFF_ALLOCATION_HINTS:
53105360
{
53115361
if (++n_hints_buf > 2)
@@ -6721,7 +6771,17 @@ mfxStatus ConfigureExecuteParams(
67216771
executeParams.iFieldProcessingMode++;
67226772
break;
67236773
}
6724-
6774+
case MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION:
6775+
for (mfxU32 i = 0; i < videoParam.NumExtParam; i++)
6776+
{
6777+
if (videoParam.ExtParam[i]->BufferId == MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION)
6778+
{
6779+
mfxExtVPPAISuperResolution* extSR = (mfxExtVPPAISuperResolution*)videoParam.ExtParam[i];
6780+
executeParams.bSuperResolution = true;
6781+
executeParams.m_srMode = extSR->SRMode;
6782+
}
6783+
}
6784+
break;
67256785
#ifdef MFX_ENABLE_MCTF
67266786
case MFX_EXTBUFF_VPP_MCTF:
67276787
{
@@ -6906,6 +6966,10 @@ mfxStatus ConfigureExecuteParams(
69066966
executeParams.VideoSignalInfoOut.enabled = false;
69076967

69086968
}
6969+
else if (MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION == bufferId)
6970+
{
6971+
executeParams.bSuperResolution = false;
6972+
}
69096973
#ifdef MFX_ENABLE_MCTF
69106974
else if (MFX_EXTBUFF_VPP_MCTF == bufferId)
69116975
{

_studio/mfx_lib/vpp/src/mfx_vpp_sw_core.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,6 +857,10 @@ mfxStatus VideoVPPBase::Query(VideoCORE * core, mfxVideoParam *in, mfxVideoParam
857857
{
858858
continue;
859859
}
860+
else if (MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION == in->ExtParam[i]->BufferId)
861+
{
862+
continue;
863+
}
860864
else
861865
{
862866
out->ExtParam[i]->BufferId = 0;

_studio/mfx_lib/vpp/src/mfx_vpp_sw_internal.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,12 @@ mfxStatus GetExternalFramesCount(VideoCORE* core,
123123
break;
124124
}
125125
#endif
126+
case (mfxU32)MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION:
127+
{
128+
inputFramesCount[filterIndex] = 1;
129+
outputFramesCount[filterIndex] = 1;
130+
break;
131+
}
126132
case (mfxU32)MFX_EXTBUFF_VPP_RESIZE:
127133
{
128134
inputFramesCount[filterIndex] = 1;

_studio/mfx_lib/vpp/src/mfx_vpp_utils.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ const mfxU32 g_TABLE_CONFIG [] =
123123
MFX_EXTBUF_CAM_PADDING,
124124
MFX_EXTBUF_CAM_LENS_GEOM_DIST_CORRECTION,
125125
MFX_EXTBUF_CAM_TOTAL_COLOR_CONTROL,
126-
MFX_EXTBUF_CAM_CSC_YUV_RGB
126+
MFX_EXTBUF_CAM_CSC_YUV_RGB,
127+
MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION
127128
#if defined (ONEVPL_EXPERIMENTAL)
128129
, MFX_EXTBUFF_VPP_PERC_ENC_PREFILTER
129130
#endif
@@ -175,7 +176,8 @@ const mfxU32 g_TABLE_EXT_PARAM [] =
175176
MFX_EXTBUF_CAM_PADDING,
176177
MFX_EXTBUF_CAM_LENS_GEOM_DIST_CORRECTION,
177178
MFX_EXTBUF_CAM_TOTAL_COLOR_CONTROL,
178-
MFX_EXTBUF_CAM_CSC_YUV_RGB
179+
MFX_EXTBUF_CAM_CSC_YUV_RGB,
180+
MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION
179181
#if defined (ONEVPL_EXPERIMENTAL)
180182
, MFX_EXTBUFF_VPP_PERC_ENC_PREFILTER
181183
#endif
@@ -963,6 +965,12 @@ void ReorderPipelineListForQuality( std::vector<mfxU32> & pipelineList )
963965
newList[index] = MFX_EXTBUFF_VPP_MIRRORING;
964966
index++;
965967
}
968+
969+
if (IsFilterFound(&pipelineList[0], (mfxU32)pipelineList.size(), MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION))
970+
{
971+
newList[index] = MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION;
972+
index++;
973+
}
966974
#ifdef MFX_ENABLE_MCTF
967975
// add to the end
968976
if (IsFilterFound(&pipelineList[0], (mfxU32)pipelineList.size(), MFX_EXTBUFF_VPP_MCTF))
@@ -1385,6 +1393,12 @@ mfxStatus GetPipelineList(
13851393
pipelineList.push_back(MFX_EXTBUFF_CONTENT_LIGHT_LEVEL_INFO);
13861394
}
13871395
}
1396+
1397+
if (IsFilterFound(&configList[0], configCount, MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION)
1398+
&& !IsFilterFound(&pipelineList[0], (mfxU32)pipelineList.size(), MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION))
1399+
{
1400+
pipelineList.push_back(MFX_EXTBUFF_VPP_AI_SUPER_RESOLUTION);
1401+
}
13881402

13891403
#if defined (ONEVPL_EXPERIMENTAL)
13901404
if ( IsFilterFound(&configList[0], configCount, MFX_EXTBUFF_VPP_PERC_ENC_PREFILTER)

_studio/shared/include/mfx_vpp_interface.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,10 @@ namespace MfxHwVideoProcessing
212212
mfxU32 u3DLut;
213213
mfxU32 uDenoise2Filter; // mfxExtVPPDenoise2
214214

215+
mfxU32 uSuperResolution;
216+
mfxU32 uSrMaxInWidth;
217+
mfxU32 uSrMaxInHeight;
218+
215219
mfxVppCaps()
216220
: uAdvancedDI(0)
217221
, uSimpleDI(0)
@@ -247,6 +251,9 @@ namespace MfxHwVideoProcessing
247251
, uFieldProcessing(0)
248252
, u3DLut(0)
249253
, uDenoise2Filter(0)
254+
, uSuperResolution(0)
255+
, uSrMaxInWidth(0)
256+
, uSrMaxInHeight(0)
250257
{
251258
memset(&cameraCaps, 0, sizeof(CameraCaps));
252259
};
@@ -403,6 +410,8 @@ namespace MfxHwVideoProcessing
403410
,mirroringExt(false)
404411
,scene(VPP_NO_SCENE_CHANGE)
405412
,bDeinterlace30i60p(false)
413+
, bSuperResolution(false)
414+
, m_srMode(MFX_AI_SUPER_RESOLUTION_MODE_DEFAULT)
406415
#if defined (MFX_EXTBUFF_GPU_HANG_ENABLE)
407416
,gpuHangTrigger(false)
408417
#endif
@@ -472,7 +481,8 @@ namespace MfxHwVideoProcessing
472481
mirroringExt != false ||
473482
scene != VPP_NO_SCENE_CHANGE ||
474483
bDeinterlace30i60p != false ||
475-
chromaSiting != MFX_CHROMA_SITING_UNKNOWN
484+
chromaSiting != MFX_CHROMA_SITING_UNKNOWN ||
485+
bSuperResolution
476486
#ifdef MFX_ENABLE_MCTF
477487
|| bEnableMctf != false
478488
#endif
@@ -595,6 +605,9 @@ namespace MfxHwVideoProcessing
595605

596606
vppScene scene; // Keep information about scene change
597607
bool bDeinterlace30i60p;
608+
609+
bool bSuperResolution;
610+
mfxAISuperResolutionMode m_srMode;
598611

599612
#if defined (MFX_EXTBUFF_GPU_HANG_ENABLE)
600613
bool gpuHangTrigger;

0 commit comments

Comments
 (0)