Forum

How to manage the renderer framerate?

my configuration : Pentium D 3Ghz, Geforce 7800GTX, Holo3d, EMS PhynxRGB
resolution : 1400x1050 at 50Hz

I want to have 3 quads in movements.
the first is Holo3d capture card (PAL signal) with hardware deinterlacing.
the second is Phynx RGB capture card (XGA signal at 25fps).
the third is a filestream like mpeg2 (at 25fps).
I dont have a stable framerate renderer. I want to have 50fps.
I try all parameters to adjust with mainloop and wait for frame.
if i use only holo3d and Phynx RGB card i have most of the time 50fps and it decrease and increase a few moment (one second).
how can i fix this problem ?

ja. surely a difficult thing.

i would set the videotextures connected to the 25fps filestream and the 25fps videoinput to “wait for every 2nd frame” and the videotexture of the holo3d to “wait for every frame” (because it should output 50fps already).

then make sure the renderers “presentation interval” is set to “default” (which is actually “wait for frame”.

mainloop should not be left at its defaults. but set it to “filtered mode” for some weired effects but overal smoother playback.

Now the renderer framerate have the same trouble: going (slowly) to 50 and down to aproximatively 40 like a yoyo…

Which value should we put to the background and foreground pins?

background fps doesn’t matter as long as vvvv is the active application. and foreground fps should be any value higher then 50fps. then it won’t interfere. so just leave them at the defaults.

i guess you only have one renderer? and this one is fullscreen? does the framerate also yoyo in fullscreen? the system should be more stable in fullscreen!

there is one renderer in fullscreen.
I have put perfmeter. it is jerked when the mainloop works.

sory. what do you mean?

it is jerked when the mainloop works.

just that the value displayed with perfmeter change a lot when the mainloop colored line goes bigger…

I don’t understand why it change whereas vvvv activity shouldn’t change

mm… one other idea:
set the “wait for every nth frame” pin to 999 on all your videotextures. and see what happens. the theory is, that if you’re not cpu or gpu bound (i.e. your patches are not so heavy that either your graphiccard or cpu are overworked) vvvv syncs to the 50hz of the monitor and has some time left for videoprocessing anyway without the videotexture doing the wait on its own…

hope that is understandable. but even more important…does it make any difference?

999 solution: Renderer Framerate seems to stay more longer to 50 but always do the yoyo. Videos are more perturbed now.

I’ve made some resolution test before 999 solution:

renderer at 800x600
Holo3D >> renderer framerate à 50 (little strobe every ~5s)

  • Phynx actived >> renderer framerate à 50 (little strobe every ~5s)

  • filestream >> renderer framerate do a little yoyo 45 < fps to 50

renderer at 2048x1080
Holo3D >> renderer framerate à 50 (little strobe every ~5s)

  • Phynx actived >> renderer framerate à 50 (little strobe every ~5s)

  • filestream >> renderer framerate do a bigger yoyo 36 < fps to 50

renderer at Span Mode 2048x1080
Holo3D >> renderer framerate à 50 (little strobe every ~5s)

  • Phynx actived >> renderer framerate à 50 (little strobe every ~5s)

  • filestream >> renderer framerate do a bigger yoyo 36 < fps to 50

CPU at ~50%

summary:
little resolution >> framerate a little bit perturbed
bigger resolution >> framerate more perturbed

1 > filestream seems to include some problems
should we have to made square videos?
nonPow2 or pow2 stretched? which one is the better?
2 > Capture process seems to include little strobe…

I have reinstall the lastest nvidia drivers. i have let all default parameters except vertical synchro.

For test i have do a smaller patch (without mainloop node and all textures in nonpow2) of my application.
now sometimes (i must change many times between windowed and fullscreen mode) when preparegraph time is stable and equal or less than 0.02 sec, it is better.
a solution to test ?

What are exactly in my case “preparegraph”, “present” and “resetcache” in Perfmeter node ?

another idea: set waitforframe on one videotexture to zero. as both should sync to the same framerate anyway it doesnt make sense to wait for both.

also have a Boost node somewhere and set it to 1. This will raise vvvv´s priority against other windows processes, and usually stabilize the framerate a little bit.

you should leave vertical synchro of the driver to “application controlled” then vvvv will deal with it. if you set presentation interval to “default” or “waitforframe” each frame will wait for the vertical sync.

preparegraph and resetcache are cpu times used by vvvv.
present is gpu time for “presenting” the frame to the frontbuffer.

square textures should in general be faster. but i’d say not always. copying an 800x600 video to a 1024x1024 square texture may be slower then copying to a 800x600 texture…maybe depends on what happens further with the texture…

so yes. square videos maybe better. but that is only valid for filestream then because videoin won’t give you cool square videos unless the driver does a cropping there.

hm…if you say cpu is at 50%…do you have a hyperthreading cpu? if not can you try on a hyperthreaded cpu? could bring some more advantage for your setup.

pentium D is Dual Core but not hyperthreading.

Playing square videos seems to be faster. ok
Only tried 512x512 vs 720x576.

All your advises change the behaviour of our configuration but not enough.

Our big problem is the impossibility to have a solid 50 fps for the renderer.
however total patchs display ~230 in debug mode. Is it a big value?
however Cpu is never satured
however patchs don’t seems so extreme

I think problem come from that we want to display too much differents sources in the same time in full resolution. Invisibles process for us seems to deal badly in the system…

Did you already done some configuration like this one Joreg?

Should we take a better Grafic card? a better Cpu or go to SCSI hard disk?..
What about Nvidia Quadro and Genlock?

i haven’t had a similar setup jet. and it is hard to debug via this forum…

i understand you want to display those 3 sources on a quad each. nothing more in the patch (for a start). right? can you play each source seperately (alone) with a stable 50fps?

if that is not yet possible we should probably start there.
if that works. can you play any/all combination of 2 of the sources with a stable 50fps?

for the filestream is an mp2: are you using a hardware decoder? like the nvidias or (i think it was) elecards?

i don’t think you need a better harddisk (since you’re only playing one file) or better graphiccard.

debug mode values are not so meaningful (to me).

cpu is never satured: but 50% on a dualcore system is one satured cpu (of the two). right? and vvvv only uses one cpu. whereas the directshowpart can use the second…do you see both cpu-parts in use?

information about genlock:
Through the BNC genlock connector on board the NVIDIA Quadro FX 3000G, the graphics video timing can be synchronized to an external
timing source. In turn, this source provides a periodic signal to the display system to lock the vertical refresh rate.

Typically, a workstation user plugs a “house sync” signal into the graphics
board - usually set at NTSC (U.S.) or PAL (Europe) rates - instructing the
graphics board to trigger various edges of the external sync signal.

today tests:
vertical frequency 49.999Hz (i can t put 50.000Hz under Powerstrip)
holo3D stable 50fps, no freeze
PhynxRGB stable 50fps
filestream 512x512 mjpeg stable 50fps, no freeze
holo3d + Phynx RGB stable 50fps, no freeze
holo3d + Phynx RGB + mjpeg movie 512x512 no stable 50fps, freeze and strobe

vertical frequency 49.899Hz
holo3D no stable 49-50fps, freeze but no strobe
PhynxRGB no stable 49-50fps
filestream 512x512 no stable 49-50fps, freeze
holo3d + Phynx RGB no stable 49-50fps, freeze and strobe
holo3d + Phynx RGB + filestream 512x512 mjpeg no stable 49-50fps, freeze and strobe

I have tests also this :

  • change timings memory (more agressive),
  • overclock(always approx. 50% of total cpu)
  • burn the cpu (with low priority, no changing),
  • try with mjpeg (512x512 pixels) or mpeg2 (Elecard or Purevideo) file
    it is always the same problem.
    all my sources (holo3d, PhynxRGB and filestream) are at 25.00 and 50.00 Hz.

The filestream is strange. I have tried with progressive or interlaced movie. when I do a pause or stop the fps is 33. then after a moment it increases to 50.
I did a player with dds texture but I haven’t good performance in playing. I convert my movie to images with dds with ddsconverter2 software. I choose dxt1c format, build mipmaps, filter to box and add dithering options. Do you think it’s good ?

i have tried to use NvPerfHUD software. i think it’s good for find problems.
link
but i have a problem. See the attach file.

NvPerfHud.jpg (67.9 kB)

1er Report:
Video capture is more fluid when screen refresh rate is near 50 Hz.
We need to lock the screen to the source for eliminate little freeze and strobe.

2nd Report:
Using Filestream with video capture in the same patch cause renderer framerate going under 50 fps when these 2 things arise:

  • End of the video file :
    when playing
    50(holo3D) + 50(Phynx) + 50(filestream) = 150/3 =50 fps ok!

when stop
50(holo3D) + 50(Phynx) + 0(filestream) = 100/3 =33 fps !!!

this last fps is set during a few seconds or sometime it stay like this until the End.

  • seeking:
    when seeking, renderer seems to wait next filestream frame to be refresh.

Conclusion:
It will be good in our case that the filestream synchronise with the framerate of the renderer and not the inverse. filestream should wait for the next renderer refresh time if it’s late.

Global configuration is more quiet with vvvv9.2
I’ve set wait for frame to : HOLO3D - 20ms, Phynx - 40ms, Filestream - 0 ms because with 40 ms renderer framerate is blocked at 33 fps

So we need Genlock and maybe Framelock but does this last one work we vvvv?

sory. i’ve been quite off for a view days. back online now…

concerning your problem with NVPerfHUD: i’ve never tried that software myself…but the error you get suggests using a reference device which you can set via the Device (Auto) node. set devicetype to …_REF

framelock does not work with directx-applications in general as far as i know.

and right for your setup to reallyreally work properly you will need a genlocked graphiccard like the nvidia fx4500 (if i remember correctly).

you say:

when playing 50(holo3D) + 50(Phynx) + 50(filestream) = 150/3 =50 fps ok!

so if you play a 50fps filesource you have stable 50fps with your setup as long as the video plays? as soon as you pause it (via the pin) the framerate drops? note: in directshow-terms the video in vvvv is never stopped. only paused!

There’re no drop when I pause the video , there’re drops when I set to 1 the play pin and when I do a seek.
Framerate go down when the filestream arrive at the end time.

so do i get it right, that you have a sollution now? you made your filestream video to have 50fps and then it works? it only drops shortly when you start playing and when you do a seek?

According to me, we should set “wait for frame” to 2 frames for the filestream with our 25fps videos to have 50fps for the renderer but it doesn’t works like this, so I’ve set the “wait for frame” to 0 (only with capture video actived in the same time) and it work at 50 fps.

  1. we have drops when we seek and go from “stop” to “play”.
  2. renderer fps go down when the filestream is at the end of the video file…

What do we want ? > solid 50fps for the renderer
So, no solution for the moment.

It’s not a problem of performance coming from our configuration I’m sure about that.

We can perform some others tests if you want.
We’ll make a video to show you.