Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

gmfbridge dynamic clip loading

48 views
Skip to first unread message

joreg

unread,
Jul 17, 2009, 10:32:35 AM7/17/09
to
helos,

using the gmfbridge works as advertised (without jitter when switching
clips) as long as i have all clips added on startup and only switch
between them.

what i need to do though, is add and remove clips dynamically. i also
have that running basically, but not without jitter. whenever i add a
clip to the player the application pauses for a while.

so i thought i'd run the AddClip() call in a thread and only switch to
the new clip when that thread has returned. problem is: the jitter is
still the same. note that also the .Prime() call on the newly loaded
clip is already done within the thread.

what could i be missing here?

i may add that this playback is done via a VMR9 in renderless mode and
the result is used as a texture in a direct3D rendering mainloop..if
that can give additional clues..

Geraint Davies

unread,
Jul 20, 2009, 7:18:17 AM7/20/09
to

the most likely explanation is that the clip loading is either adding
cpu load or (more likely) is interfering with disk accesses.

joreg

unread,
Jul 20, 2009, 2:13:10 PM7/20/09
to
> the most likely explanation is that the clip loading is either adding
> cpu load
hm..isn't that obvious and the reason why i'd use a thread at all?

> or (more likely) is interfering with disk accesses.

for a test i am switching between 2 files that are around 20mb each
from a quite virgin disk.

i am still hoping i am doing something wrong...any ideas for further
debugging to identify the bottleneck?


Geraint Davies

unread,
Jul 21, 2009, 6:40:36 AM7/21/09
to


You're not giving us much to base our guesses on. Did you create a log
file and look at the timestamps to try and workout where the delay is
being introduced (pre-decode or post decode, pre-bridge or post bridge
etc).

G

joreg

unread,
Jul 21, 2009, 8:15:01 AM7/21/09
to
> You're not giving us much to base our guesses on. Did you create a log
> file and look at the timestamps to try and workout where the delay is
> being introduced (pre-decode or post decode, pre-bridge or post bridge
> etc).
ok, i found how to create the log. below i post the beginning of the
file followed by a part where i switched the files. can you help me
interpret this? do you have any resources online that explain those
logoutputs?

[beginning]
0: Started 2009-07-21 14:01:27
0: Started 2009-07-21 14:01:30
0: Added stream 1: 楶敤o, Decompressed Only, Suspend mode
0: Added stream 2: 畡楤o, Decompressed Only, Suspend mode
1: Buffer minimum 200
686: Bridging 0x0 to 0x0
712: Sink 0x4ec91e0 has 2 pins
712: Sink filter 0x4ec9230 in graph 0x2284268
953: BridgeAlloc 0x4ec9290 decommit, Disconnected
953: BridgeAlloc 0x4ec9290 decommit, Disconnected
957: Bridging 0x0 to 0x0
958: Notify window 0x70bb0
958: Added stream 1: 楶敤o, Decompressed Only, Suspend mode
958: Buffer minimum 200
958: Sink 0x4ec94e0 has 1 pins
958: Sink filter 0x4ec9530 in graph 0x2284b20
999: BridgeAlloc 0x4ec8c00 commit, Disconnected
1005: Source 0x4ec8ca0 has 1 pins
1005: Source filter 0x4ec8cf0 in graph 0x2ed4f0
1012: Sink 0x4eca3e0 has 1 pins
1012: Sink filter 0x4eca430 in graph 0x22ed6f0
1014: GetBuffer on sink pin 0x4ec91e0
1038: BridgeAlloc 0x4ecbc98 commit, Disconnected
1128: GetBuffer on sink pin 0x4ecbb48
1169: ReceiveConnection Aware: false
1235: Bridging 0x4eca430 to 0x4ec8cf0
1235: Pin 0x4ec91e0 disconnect
1235: Source 0x4ec8ca0 new connection, base 0
1235: Pin 0x4ecbb48 Bridge to alloc 0xd6e9f1c
1235: Sink 0x4ec94e0 Stop
1235: BridgeAlloc 0x4ec8c00 decommit, Disconnected
1235: Sink 0x4ec94e0 ResetEOSCount
1235: BridgeAlloc 0x4ec8c00 decommit, Disconnected
1243: BridgeAlloc 0x4ec8c00 decommit, Disconnected
1243: BridgeAlloc 0x4ec8c00 decommit, Disconnected
1268: Source 0x4ec8ca0 pause from 0
1268: Source pin 0x4eca2b8 active
1268: Bridging 0x0 to 0x0
1268: Pin 0x4ecbb48 BeginFlush
1268: BridgeAlloc 0x4ecbc98 decommit, Connected
1268: Source pin 0x4eca2b8 begin flush
1268: Source 0x4ec8ca0 flush from upstream, paused-at 0 ms, base 0 ms
1268: Pin 0x4ecbb48 disconnect
1268: Pin 0x4ecbb48 disconnect when mid-flush
1268: Source pin 0x4eca2b8 end flush
1274: Pin 0x4ecbb48 EndFlush
1274: Sink 0x4eca3e0 ResetEOSCount
1274: BridgeAlloc 0x4ecbc98 commit, Disconnected
1274: Pin 0x4ecbb48 BeginFlush
1274: BridgeAlloc 0x4ecbc98 decommit, Disconnected
1274: Pin 0x4ecbb48 EndFlush
1274: Sink 0x4eca3e0 ResetEOSCount
1274: BridgeAlloc 0x4ecbc98 commit, Disconnected
1274: GetBuffer on sink pin 0x4ecbb48
1274: Bridging 0x4eca430 to 0x4ec8cf0
1274: Source 0x4ec8ca0 new connection, base 0
1274: Pin 0x4ecbb48 Bridge to alloc 0xd6e9f1c
1277: Pin 0x4ecbb48 receive 0x4ec8c0c
1277: Pin 0x4ecbb48 outer 0x4ec8c0c, inner 0xd6e9f80
1277: Sample 0xd6e9f80 adjust from 0 ms to 0 ms, latency 0 ms
1277: Duration: 33, MT 0..0
1281: GetBuffer on sink pin 0x4ecbb48
1282: Pin 0x4ecbb48 receive 0x4ec8c0c
1282: Pin 0x4ecbb48 outer 0x4ec8c0c, inner 0x229bf00
1282: Sample 0x229bf00 adjust from 33 ms to 33 ms, latency 33 ms
1282: Duration: 33, MT 0..0
1282: GetBuffer on sink pin 0x4ecbb48
1283: Pin 0x4ecbb48 receive 0x4ec8c0c
1283: Pin 0x4ecbb48 outer 0x4ec8c0c, inner 0x22850c8
1283: Sample 0x22850c8 adjust from 66 ms to 66 ms, latency 66 ms
1283: Duration: 33, MT 0..0
1283: GetBuffer on sink pin 0x4ecbb48
1285: Pin 0x4ecbb48 receive 0x4ec8c0c
1285: Pin 0x4ecbb48 outer 0x4ec8c0c, inner 0x229be30
1285: Sample 0x229be30 adjust from 100 ms to 100 ms, latency 100 ms
1285: Duration: 33, MT 0..0
1285: Source 0x4ec8ca0 run from 1, latency 10 ms
1289: GetBuffer on sink pin 0x4ecbb48
1291: Pin 0x4ecbb48 receive 0x4ec8c0c
1291: Pin 0x4ecbb48 outer 0x4ec8c0c, inner 0x2283ce0
1291: Sample 0x2283ce0 adjust from 133 ms to 133 ms, latency 137 ms
1291: Duration: 33, MT 0..0
1291: GetBuffer on sink pin 0x4ecbb48
1292: Pin 0x4ecbb48 receive 0x4ec8c0c
1292: Pin 0x4ecbb48 outer 0x4ec8c0c, inner 0x22f0bc0
1292: Sample 0x22f0bc0 adjust from 166 ms to 166 ms, latency 169 ms
1292: Duration: 33, MT 0..0
1305: GetBuffer on sink pin 0x4ecbb48
1306: Pin 0x4ecbb48 receive 0x4ec8c0c
1306: Pin 0x4ecbb48 outer 0x4ec8c0c, inner 0xd6e9f80
1306: Sample 0xd6e9f80 adjust from 200 ms to 200 ms, latency 189 ms
1306: Duration: 33, MT 0..0
1306: GetBuffer on sink pin 0x4ecbb48
1323: Pin 0x4ecbb48 receive 0x4ec8c0c
1323: Pin 0x4ecbb48 outer 0x4ec8c0c, inner 0x229bf00
1323: Sample 0x229bf00 adjust from 233 ms to 233 ms, latency 205 ms
1323: Duration: 33, MT 0..0
[..]

[switching files]
255366: GetBuffer on sink pin 0x4ecbb48
255391: BridgeAlloc 0x4ec16b8 commit, Disconnected
255412: Bridging 0x4ec9530 to 0x4ec8cf0
255412: GetBuffer on sink pin 0x4ec91e0
255413: Pin 0x4ecbb48 receive 0x4ec8c0c
255413: Pin 0x4ecbb48 outer 0x4ec8c0c, inner 0x22f0bc0
255413: Sample 0x22f0bc0 adjust from 6166 ms to 6166 ms, latency 189
ms
255413: Duration: 33, MT 0..0
255413: Pin 0x4ecbb48 disconnect
255413: GetBuffer on sink pin 0x4ecbb48
255413: Source 0x4ec8ca0 new connection, base 6200
255413: Source 0x4ec8ca0 new baseline 6200 msecs
255413: Pin 0x4ec91e0 Bridge to alloc 0xd6e9f1c
255413: Sink 0x4eca3e0 Stop
255413: BridgeAlloc 0x4ecbc98 decommit, Disconnected
255413: Sink 0x4eca3e0 ResetEOSCount
255413: BridgeAlloc 0x4ecbc98 decommit, Disconnected
255421: BridgeAlloc 0x4ecbc98 decommit, Disconnected
255421: BridgeAlloc 0x4ecbc98 decommit, Disconnected
255435: Pin 0x4ec91e0 receive 0x4ec8c0c
255435: Pin 0x4ec91e0 outer 0x4ec8c0c, inner 0xd6e9f80
255435: Sample 0xd6e9f80 adjust from 0 ms to 6200 ms, latency 201 ms
255435: Duration: 33, MT 0..0
255435: GetBuffer on sink pin 0x4ec91e0
255465: Pin 0x4ec91e0 receive 0x4ec8c0c
255465: Pin 0x4ec91e0 outer 0x4ec8c0c, inner 0x229bf00
255465: Sample 0x229bf00 adjust from 33 ms to 6233 ms, latency 204
ms
255465: Duration: 33, MT 0..0
255465: GetBuffer on sink pin 0x4ec91e0
255514: Pin 0x4ec91e0 receive 0x4ec8c0c
255514: Pin 0x4ec91e0 outer 0x4ec8c0c, inner 0x22850c8
255514: Sample 0x22850c8 adjust from 66 ms to 6266 ms, latency 188
ms
255514: Duration: 33, MT 0..0
255514: GetBuffer on sink pin 0x4ec91e0
255535: Pin 0x4ec91e0 receive 0x4ec8c0c
255535: Pin 0x4ec91e0 outer 0x4ec8c0c, inner 0x229be30
255535: Sample 0x229be30 adjust from 100 ms to 6300 ms, latency 201
ms
255535: Duration: 33, MT 0..0
[..]

Geraint Davies

unread,
Jul 23, 2009, 10:11:56 AM7/23/09
to
On Tue, 21 Jul 2009 05:15:01 -0700 (PDT), joreg
<joregdj...@googlemail.com> wrote:

>ok, i found how to create the log. below i post the beginning of the
>file followed by a part where i switched the files. can you help me
>interpret this? do you have any resources online that explain those
>logoutputs?

I don't see anything here that explains the jitter. The latency after
the switch looks about the same as it does before.

What is in the graph downstream of the bridge?

joreg

unread,
Jul 23, 2009, 12:08:36 PM7/23/09
to
On 23 Jul., 16:11, Geraint Davies <gerai...@gdcl.co.uk> wrote:
> What is in the graph downstream of the bridge?

the BridgeSource is directly connected to a VMR9 (renderless with
custom A/P) via UYVY.

Roberto

unread,
Sep 18, 2009, 6:23:01 AM9/18/09
to
Hi,
i also use vmr9 in renderless with allocator that give me textures and i
play many videos in a direct3d render loop.
I also remove and add videos runtime without any jitter and in order to
avoid jitter i use threads. I think that your problems is the thread
proirity, i set it to Lowest so the render loop doesn't stop.

I hope this help you, but i have a question for you:

How do you connect gmfbridge with vmr9 in renderless mode?
I tried a lot without success :((.
I need some code lines (in c# or VB) where the vmr9 and GMFBridgeController
are configured so they produce video-textures and NO the ActiveWindow Popup.

Any help will be appreciated, thanks bye.

joreg

unread,
Sep 18, 2009, 9:26:11 AM9/18/09
to
On 18 Sep., 12:23, Roberto <Robe...@discussions.microsoft.com> wrote:
> i also use vmr9 in renderless with allocator that give me textures and i
> play many videos in a direct3d render loop.
> I also remove and add videos runtime without any jitter and in order to
> avoid jitter i use threads. I think that your problems is the thread
> proirity, i set it to Lowest so the render loop doesn't stop.
have tried different priorities. that didn't really make a difference.
i still have to test on more pcs. for now it is running without jitter
on a very recent pc and jittering on a one year old pc. still geraints
gmfplay sample is not jittering at all even on the older pc...

> How do you connect gmfbridge with vmr9 in renderless mode?
> I tried a lot without success :((.

not sure what you mean? above you state that you have it running
already.
anyway i can't remember doing something special. simply connect the
output of the bridgesource with the input of the VMR9?!

> are configured so they produce video-textures and NO the ActiveWindow Popup.

if you have the VMR9 in renderless mode it won't pop up the window,
right?

0 new messages