@@ -516,10 +516,13 @@ bool MFX_Utility::IsNeedPartialAcceleration(mfxVideoParam * par, eMFXHWType )
516516 if (par->mfx .SliceGroupsPresent ) // Is FMO
517517 return true ;
518518
519- if (par->mfx .FrameInfo .FourCC != MFX_FOURCC_NV12 ) // yuv422 in SW only
519+ if (par->mfx .FrameInfo .FourCC != MFX_FOURCC_NV12
520+ && par->mfx .FrameInfo .FourCC != MFX_FOURCC_P210
521+ && par->mfx .FrameInfo .FourCC != MFX_FOURCC_P010
522+ && par->mfx .FrameInfo .FourCC != MFX_FOURCC_Y210 )
520523 return true ;
521524
522- if (par->mfx .FrameInfo .BitDepthLuma > 8 || par->mfx .FrameInfo .BitDepthChroma > 8 ) // yuv422 in SW only
525+ if (par->mfx .FrameInfo .BitDepthLuma > 10 || par->mfx .FrameInfo .BitDepthChroma > 10 )
523526 return true ;
524527
525528 mfxExtMVCSeqDesc * points = (mfxExtMVCSeqDesc*)GetExtendedBuffer (par->ExtParam , par->NumExtParam , MFX_EXTBUFF_MVC_SEQ_DESC );
@@ -569,6 +572,17 @@ UMC::Status MFX_Utility::FillVideoParam(UMC::TaskSupplier * supplier, mfxVideoPa
569572 if (pps)
570573 par->mfx .SliceGroupsPresent = pps->num_slice_groups > 1 ;
571574
575+ if (par->mfx .FrameInfo .FourCC == MFX_FOURCC_P010
576+ || par->mfx .FrameInfo .FourCC == MFX_FOURCC_P210
577+ || par->mfx .FrameInfo .FourCC == MFX_FOURCC_Y210 )
578+ {
579+ par->mfx .FrameInfo .Shift = 1 ;
580+ }
581+ else
582+ {
583+ par->mfx .FrameInfo .Shift = 0 ;
584+ }
585+
572586 return UMC ::UMC_OK ;
573587}
574588
@@ -1158,7 +1172,11 @@ inline bool CheckFourcc(mfxU32 fourcc, mfxU16 codecProfile, eMFXHWType type)
11581172#endif
11591173 case MFX_PROFILE_AVC_MULTIVIEW_HIGH :
11601174 case MFX_PROFILE_AVC_STEREO_HIGH :
1161- return fourcc == MFX_FOURCC_NV12 ;
1175+ return (fourcc == MFX_FOURCC_NV12 );
1176+ case MFX_PROFILE_AVC_HIGH10 : // High10 may have 8bit clip.
1177+ return H264DCaps::IsDec420TenBitSupported (type) ? (fourcc == MFX_FOURCC_NV12 || fourcc == MFX_FOURCC_P010 ) : (fourcc == MFX_FOURCC_NV12 );
1178+ case MFX_PROFILE_AVC_HIGH_422 : // HIGH_422 may have 420 clip
1179+ return H264DCaps::IsDec422TenBitSupported (type) ? (fourcc == MFX_FOURCC_NV12 || fourcc == MFX_FOURCC_P010 || fourcc == MFX_FOURCC_Y210 ) : (fourcc == MFX_FOURCC_NV12 );
11621180 default :
11631181 return false ;
11641182 }
@@ -1196,7 +1214,9 @@ mfxStatus MFX_Utility::Query(VideoCORE *core, mfxVideoParam *in, mfxVideoParam *
11961214 (MFX_PROFILE_AVC_SCALABLE_HIGH == in->mfx .CodecProfile ) ||
11971215#endif
11981216 (MFX_PROFILE_AVC_MULTIVIEW_HIGH == in->mfx .CodecProfile ) ||
1199- (MFX_PROFILE_AVC_STEREO_HIGH == in->mfx .CodecProfile )
1217+ (MFX_PROFILE_AVC_STEREO_HIGH == in->mfx .CodecProfile ) ||
1218+ (MFX_PROFILE_AVC_HIGH_422 == in->mfx .CodecProfile ) ||
1219+ (MFX_PROFILE_AVC_HIGH10 == in->mfx .CodecProfile )
12001220 )
12011221 out->mfx .CodecProfile = in->mfx .CodecProfile ;
12021222 else
@@ -1340,6 +1360,9 @@ mfxStatus MFX_Utility::Query(VideoCORE *core, mfxVideoParam *in, mfxVideoParam *
13401360 sts = MFX_ERR_UNSUPPORTED ;
13411361 }
13421362
1363+ out->mfx .FrameInfo .BitDepthLuma = in->mfx .FrameInfo .BitDepthLuma ;
1364+ out->mfx .FrameInfo .BitDepthChroma = in->mfx .FrameInfo .BitDepthChroma ;
1365+
13431366 out->mfx .FrameInfo .Shift = in->mfx .FrameInfo .Shift ;
13441367 switch (in->mfx .FrameInfo .PicStruct )
13451368 {
@@ -1772,6 +1795,8 @@ bool MFX_Utility::CheckVideoParam(mfxVideoParam *in, eMFXHWType type)
17721795 case MFX_PROFILE_AVC_MAIN :
17731796 case MFX_PROFILE_AVC_EXTENDED :
17741797 case MFX_PROFILE_AVC_HIGH :
1798+ case MFX_PROFILE_AVC_HIGH10 :
1799+ case MFX_PROFILE_AVC_HIGH_422 :
17751800 case MFX_PROFILE_AVC_STEREO_HIGH :
17761801 case MFX_PROFILE_AVC_MULTIVIEW_HIGH :
17771802#ifdef MFX_ENABLE_SVC_VIDEO_DECODE
@@ -1814,9 +1839,8 @@ bool MFX_Utility::CheckVideoParam(mfxVideoParam *in, eMFXHWType type)
18141839 if (in->mfx .FrameInfo .Height > 16384 || (in->mfx .FrameInfo .Height % 16 ))
18151840 return false ;
18161841
1817-
18181842 if (in->mfx .FrameInfo .FourCC != MFX_FOURCC_NV12 && in->mfx .FrameInfo .FourCC != MFX_FOURCC_NV16 &&
1819- in->mfx .FrameInfo .FourCC != MFX_FOURCC_P010 && in->mfx .FrameInfo .FourCC != MFX_FOURCC_P210 )
1843+ in->mfx .FrameInfo .FourCC != MFX_FOURCC_P010 && in->mfx .FrameInfo .FourCC != MFX_FOURCC_P210 && in-> mfx . FrameInfo . FourCC != MFX_FOURCC_Y210 )
18201844 return false ;
18211845
18221846 // both zero or not zero
@@ -1842,7 +1866,7 @@ bool MFX_Utility::CheckVideoParam(mfxVideoParam *in, eMFXHWType type)
18421866
18431867 if (in->mfx .FrameInfo .ChromaFormat == MFX_CHROMAFORMAT_YUV422 )
18441868 {
1845- if (in->mfx .FrameInfo .FourCC != MFX_FOURCC_P210 && in->mfx .FrameInfo .FourCC != MFX_FOURCC_NV16 )
1869+ if (in->mfx .FrameInfo .FourCC != MFX_FOURCC_P210 && in->mfx .FrameInfo .FourCC != MFX_FOURCC_Y210 && in-> mfx . FrameInfo . FourCC != MFX_FOURCC_NV16 )
18461870 return false ;
18471871 }
18481872
0 commit comments