@@ -798,8 +798,8 @@ MOS_STATUS VpL0FcFilter::ConvertRotationToKrnParam(VPHAL_ROTATION rotation, floa
798
798
scaling.rotateIndices [1 ] = 0 ;
799
799
scaling.src .startX = startLeft;
800
800
scaling.src .startY = startBottom;
801
- scaling.src .strideX = strideY ;
802
- scaling.src .strideY = -strideX ;
801
+ scaling.src .strideX = strideX ;
802
+ scaling.src .strideY = -strideY ;
803
803
break ;
804
804
case VPHAL_ROTATION_180:
805
805
scaling.rotateIndices [0 ] = 0 ;
@@ -814,8 +814,8 @@ MOS_STATUS VpL0FcFilter::ConvertRotationToKrnParam(VPHAL_ROTATION rotation, floa
814
814
scaling.rotateIndices [1 ] = 0 ;
815
815
scaling.src .startX = startRight;
816
816
scaling.src .startY = startTop;
817
- scaling.src .strideX = -strideY ;
818
- scaling.src .strideY = strideX ;
817
+ scaling.src .strideX = -strideX ;
818
+ scaling.src .strideY = strideY ;
819
819
break ;
820
820
case VPHAL_MIRROR_HORIZONTAL:
821
821
scaling.rotateIndices [0 ] = 0 ;
@@ -838,16 +838,16 @@ MOS_STATUS VpL0FcFilter::ConvertRotationToKrnParam(VPHAL_ROTATION rotation, floa
838
838
scaling.rotateIndices [1 ] = 0 ;
839
839
scaling.src .startX = startRight;
840
840
scaling.src .startY = startBottom;
841
- scaling.src .strideX = -strideY ;
842
- scaling.src .strideY = -strideX ;
841
+ scaling.src .strideX = -strideX ;
842
+ scaling.src .strideY = -strideY ;
843
843
break ;
844
844
case VPHAL_ROTATE_90_MIRROR_HORIZONTAL:
845
845
scaling.rotateIndices [0 ] = 1 ;
846
846
scaling.rotateIndices [1 ] = 0 ;
847
847
scaling.src .startX = startLeft;
848
848
scaling.src .startY = startTop;
849
- scaling.src .strideX = strideY ;
850
- scaling.src .strideY = strideX ;
849
+ scaling.src .strideX = strideX ;
850
+ scaling.src .strideY = strideY ;
851
851
break ;
852
852
default :
853
853
VP_PUBLIC_CHK_STATUS_RETURN (MOS_STATUS_INVALID_PARAMETER);
@@ -913,12 +913,17 @@ MOS_STATUS VpL0FcFilter::ConvertScalingRotToKrnParam(
913
913
scaling.trg .top = rcDst.top ;
914
914
scaling.trg .bottom = rcDst.bottom ;
915
915
916
- float strideX = (float )(rcSrc.right - rcSrc.left ) / (rcDst.right - rcDst.left ) / inputWidth;
917
- float strideY = (float )(rcSrc.bottom - rcSrc.top ) / (rcDst.bottom - rcDst.top ) / inputHeight;
918
- float startLeft = (float )rcSrc.left / inputWidth;
919
- float startRight = (float )(rcSrc.right - 1 ) / inputWidth;
920
- float startTop = (float )rcSrc.top / inputHeight;
921
- float startBottom = (float )(rcSrc.bottom - 1 ) / inputHeight;
916
+ bool isVerticalRotate = VpUtils::IsVerticalRotation (rotation);
917
+ float rcDstWidth = static_cast <float >(rcDst.right - rcDst.left );
918
+ float rcDstHeight = static_cast <float >(rcDst.bottom - rcDst.top );
919
+ float rcSrcWidth = static_cast <float >(rcSrc.right - rcSrc.left );
920
+ float rcSrcHeight = static_cast <float >(rcSrc.bottom - rcSrc.top );
921
+ float strideX = isVerticalRotate ? rcSrcWidth / rcDstHeight / inputWidth : rcSrcWidth / rcDstWidth / inputWidth;
922
+ float strideY = isVerticalRotate ? rcSrcHeight / rcDstWidth / inputHeight : rcSrcHeight / rcDstHeight / inputHeight;
923
+ float startLeft = (float )rcSrc.left / inputWidth;
924
+ float startRight = (float )(rcSrc.right - 1 ) / inputWidth;
925
+ float startTop = (float )rcSrc.top / inputHeight;
926
+ float startBottom = (float )(rcSrc.bottom - 1 ) / inputHeight;
922
927
VP_PUBLIC_CHK_STATUS_RETURN (ConvertRotationToKrnParam (rotation, strideX, strideY, startLeft, startRight, startTop, startBottom, scaling));
923
928
924
929
return MOS_STATUS_SUCCESS;
0 commit comments