after futher debugging, I have a better idea on the problem.. so what I did was to use "streamingVideoOutput.grabToImage(...)" that is ran every 33ms using qml Timer. just with a simple console.log, I can see that normally this will be called 30 times/second, (30fps).
But, when I move around the app window, it can go down to 18-20 times/second. Is this a bug with QML's timer or my mistake? or simply Timer runs on UI thread