views:

161

answers:

1

hello!

I have my [pull] source supplying video data for DierctShow VMR9 Renderer, but the problem is - the source is being called for data 120 times per second (!). I guess there is a setting somewhere in DirectShow/Graph/VMR9 that i can adjust to get it closer to normal 30 frames-per-second. Could anyone give me some help on this?

thanks much!

O.

+1  A: 

Are you setting timestamps on the data? The VMR will complete the sample and wait for the next one when the timestamp is reached.

Geraint Davies
no, I am not, actually. how can i do that - can you point me to any examples, please?thanks much!
Oleg Ivanov
Call IMediaSample::SetTime when you are filling the sample with your data. Set the first timestamp to 0, and the stop time should match the start time of the next sample. The units are 100ns.
Geraint Davies
we tried - got some interesting results:1) If i start with 0, and every next frame will be 33 milliseconds later, we get a huge pipeline delay from input to output - we're talking seconds... If we subtract 2 seconds - that is, the start timestamp is negative 20000000, then the delay is gone. 2) in both cases, the VMR9 rendering occurs at 120 times per seconds still - every frame gets rendered 4 times.weird, isn't it?thanksO.
Oleg Ivanov
@Oleg Ivanov: try SetMediaTime if you want to start at 0. SetTime is based on the Stream offset (the clock time when Play is called).
Alan