Forums > Jitter

QuickTime Judder Explorations


d_s
August 25, 2008 | 2:57 am

I am creating a playback engine to sync video display across 10 projectors using Jitter and networked mac minis. The work is going well (it syncs!) but I am seeing occassional judder in quicktime.

The judder is non-regular. Sometimes it goes away for 10 seconds, and then judders 2-3 times, while other times the judder happens randomly about every 3-4 seconds. No repeatability.

I am using vade’s patches (thanks vade!) discussed here:

http://www.cycling74.com/forums/index.php?t=msg&goto=122482&rid=0&S=55830045e2d6458e089d3a6b88064409

In my case I am using the "direct" mode where Jitter hands playback duties directly to QuickTime. To that end this is really a quicktime/performance issue rather than a jitter issue. I see the same judder in quicktime player.

TEST DETAILS:

I am playing back XGA (1024×768) movies of motion graphics.

Test systems are a MBP 2.4, Mac Mini 1.83, Fast PC with GF9600 vid card. Leopard and Win XP. Quicktime 7.5 Same issue on all three systems.

I Have tried Jitter 1.63 and Max 5 runtime, as well as QuickTime player. No major differences.

Codecs tested:
Sorenson 3, 75-100%
h.264 70-100%
MPEG4 70-100%
Photo JPEG 75-100% (more judder)
Animation 75-100% (LOTS of judder, obviously)
… keyframing and hinting don’t make a difference

THOGUHTS:

I don’t understand how all of these fast machines will judder on movies with low (1900 kb/s) data rates.

You can download the sameple movie I am testing with here:

http://electroland.net/transfer/Public/jitter/1.mov

My patch is included below, but again this is more about QT than Jitter.

Any help is appreciated.

Patch:

#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P hidden newex 746 44 101 196617 if $i1 ==0 then bang;
#B color 5;
#P hidden newex 746 284 97 196617 if $i1 > 0 then bang;
#B color 5;
#P window setfont "Sans Serif" 18.;
#P window linecount 2;
#P comment 746 145 95 196626 SHOW CURSOR;
#P button 746 68 74 0;
#P window setfont "Sans Serif" 9.;
#P hidden message 746 200 85 196617 ; max showcursor;
#P hidden message 746 305 80 196617 ; max hidecursor;
#P window linecount 1;
#N vpatcher 20 74 620 474;
#P window setfont "Sans Serif" 9.;
#P message 70 85 13 196617 1;
#P message 32 85 13 196617 0;
#P newex 32 61 48 196617 togedge;
#B color 5;
#P toggle 32 111 15 0;
#P newex 32 134 29 196617 gate;
#P newex 66 135 72 196617 print "GO TO";
#P inlet 32 41 15 0;
#P inlet 32 91 15 0;
#P inlet 51 114 15 0;
#P outlet 32 156 15 0;
#P connect 3 0 7 0;
#P connect 7 0 8 0;
#P connect 8 0 6 0;
#P fasten 9 0 6 0 75 106 37 106;
#P connect 2 0 6 0;
#P connect 6 0 5 0;
#P connect 5 0 0 0;
#P connect 1 0 5 1;
#P fasten 5 0 4 0 37 157 62 157 62 128 71 128;
#P connect 7 1 9 0;
#P pop;
#P newobj 276 447 76 196617 p client switch;
#P window setfont "Sans Serif" 18.;
#P comment 457 192 126 196626 FULLSCREEN;
#P comment 17 389 95 196626 MOVIE;
#P window setfont "Sans Serif" 9.;
#P comment 705 608 125 196617 send movietime;
#P newex 18 508 68 196617 r moviename;
#P newex 84 314 68 196617 s moviename;
#P newex 422 577 42 196617 r setup;
#P newex 596 528 64 196617 metro 3000;
#P newex 422 536 56 196617 r pingtime;
#P newex 596 587 56 196617 s pingtime;
#P newex 725 428 65 196617 r movietime;
#P newex 274 675 65 196617 s movietime;
#P newex 549 429 66 196617 r serverflag;
#P newex 108 186 66 196617 s serverflag;
#P newex 93 508 42 196617 r setup;
#P message 177 467 14 196617 1;
#P newex 177 445 42 196617 r setup;
#P newex 309 401 42 196617 r setup;
#P newex 180 146 57 196617 delay 1000;
#P newex 241 146 61 196617 delay 5000;
#P newex 180 170 42 196617 s setup;
#P message 207 228 20 196617 10;
#P message 189 228 14 196617 9;
#P message 170 228 14 196617 8;
#P message 152 228 14 196617 7;
#P message 134 228 14 196617 6;
#P message 116 228 14 196617 5;
#P message 98 228 14 196617 4;
#P message 80 228 14 196617 3;
#P button 75 102 28 0;
#P message 62 228 14 196617 2;
#P message 44 228 14 196617 1;
#P newex 44 314 32 196617 print;
#P newex 44 288 103 196617 sprintf read %s.mov;
#N vpatcher 1241 390 1841 790;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P comment 195 301 60 196617 movie num;
#P button 360 281 15 0;
#P comment 381 301 75 196617 post read bang;
#P outlet 360 301 15 0;
#P comment 287 301 60 196617 server flag;
#P outlet 173 301 15 0;
#P message 254 111 77 196617 read config.txt;
#P message 161 144 46 196617 test 7 0;
#P number 268 231 22 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 240 231 22 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 212 206 67 196617 unpack 1 2 3;
#P button 227 169 15 0;
#P message 212 111 35 196617 line 2;
#P newex 212 143 40 196617 text;
#B color 5;
#P outlet 268 301 15 0;
#P inlet 254 54 15 0;
#P window linecount 0;
#P comment 276 54 100 196617 delayed load bang;
#P fasten 7 0 11 0 245 279 178 279;
#P fasten 5 0 4 0 232 192 338 192 338 96 217 96;
#P connect 4 0 3 0;
#P fasten 10 0 3 0 259 134 217 134;
#P connect 3 0 6 0;
#P fasten 9 0 6 0 166 179 217 179;
#P connect 3 1 5 0;
#P connect 6 1 7 0;
#P connect 1 0 10 0;
#P connect 6 2 8 0;
#P connect 8 0 2 0;
#P fasten 5 0 15 0 232 192 365 192;
#P connect 15 0 13 0;
#P pop;
#P newobj 75 145 77 196617 p ConfigReader;
#P button 276 488 15 0;
#P message 748 558 14 196617 0;
#P newex 381 196 48 196617 loadbang;
#P message 23 574 130 196617 read timing_test_30s.mov;
#P number 706 509 61 9 0 0 4 3 255 26 9 221 221 221 222 222 222 0 0 0;
#P newex 706 481 29 196617 gate;
#P newex 725 452 57 196617 route time;
#P button 596 551 30 0;
#P toggle 549 452 31 0;
#P message 808 557 46 196617 140000;
#P message 765 558 40 196617 15000;
#P newex 342 425 92 196617 udpreceive 12000;
#P newex 706 587 150 196617 udpsend 192.168.2.255 12000;
#P window linecount 2;
#P comment 358 446 100 196617 receive time value from server;
#P window linecount 1;
#P newex 75 80 55 196617 delay 500;
#P message 381 219 66 196617 fsmenubar 0;
#P newex 75 59 48 196617 loadbang;
#P message 93 532 74 196617 window Movie;
#P message 308 220 68 196617 fullscreen $1;
#P toggle 285 220 15 0;
#P newex 333 195 35 196617 sel 27;
#P newex 284 195 40 196617 key;
#P message 22 596 135 196617 read timing_test_5min.mov;
#P message 467 602 46 196617 loadram;
#P newex 241 675 30 196617 print;
#P newex 308 267 237 196617 jit.window Movie @noaccel 1 @rect 0 0 1024 768;
#P window setfont Arial 18.;
#P comment 6 23 239 -1205862382 MOVIE SETUP;
#P window setfont "Sans Serif" 9.;
#P message 422 602 37 196617 loop 1;
#P message 469 556 59 196617 getduration;
#P message 422 556 42 196617 gettime;
#P number 421 489 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 421 507 43 196617 time $1;
#P message 376 507 42 196617 getrate;
#P message 243 507 28 196617 read;
#P message 310 507 27 196617 stop;
#P message 276 507 31 196617 start;
#P toggle 177 487 15 0;
#P newex 177 507 52 196617 metro 20;
#P message 340 507 31 196617 clear;
#P newex 177 635 107 196617 jit.qt.movie @adapt 1;
#B color 5;
#P window setfont "Sans Serif" 18.;
#P comment 547 389 156 196626 SERVER ENABLE;
#P window setfont "Sans Serif" 9.;
#P comment 44 210 100 196617 load movie # buttons;
#P fasten 46 0 43 0 67 256 49 256;
#P connect 45 0 43 0;
#P fasten 48 0 43 0 85 255 49 255;
#P fasten 49 0 43 0 103 255 49 255;
#P fasten 55 0 43 0 212 257 49 257;
#P fasten 54 0 43 0 194 256 49 256;
#P fasten 53 0 43 0 175 256 49 256;
#P fasten 52 0 43 0 157 256 49 256;
#P fasten 51 0 43 0 139 255 49 255;
#P fasten 50 0 43 0 121 255 49 255;
#P fasten 42 0 43 0 80 175 20 175 20 269 49 269;
#P connect 43 0 44 0;
#P connect 25 0 27 0;
#P connect 27 0 47 0;
#P connect 47 0 42 0;
#P fasten 43 0 71 0 49 310 89 310;
#P connect 62 0 24 0;
#P connect 42 1 63 0;
#P connect 60 0 61 0;
#P fasten 61 0 5 0 182 482;
#P connect 5 0 4 0;
#P connect 4 0 2 0;
#P fasten 24 0 2 0 98 564 182 564;
#P fasten 18 0 2 0 472 619 182 619;
#P fasten 72 0 2 0 23 564 182 564;
#P connect 38 0 2 0;
#P fasten 9 0 2 0 381 533 182 533;
#P fasten 8 0 2 0 248 533 182 533;
#P fasten 7 0 2 0 315 533 182 533;
#P fasten 6 0 2 0 281 533 182 533;
#P fasten 3 0 2 0 345 533 182 533;
#P fasten 13 0 2 0 474 573 182 573;
#P fasten 12 0 2 0 427 573 182 573;
#P fasten 10 0 2 0 426 533 182 533;
#P fasten 14 0 2 0 427 619 182 619;
#P connect 19 0 2 0;
#P fasten 42 2 58 0 146 176 164 176 164 138 185 138;
#P connect 58 0 56 0;
#P fasten 42 2 57 0 146 178 161 178 161 132 246 132;
#P fasten 2 1 17 0 279 664 246 664;
#P connect 2 1 65 0;
#P hidden fasten 33 0 76 0 554 498 519 498 519 373 281 373;
#P connect 76 0 41 0;
#P connect 41 0 6 0;
#P fasten 57 0 22 0 246 217 290 217;
#P fasten 21 0 22 0 338 217 290 217;
#P fasten 22 0 23 0 301 235 301 220;
#P fasten 26 0 16 0 386 242 313 242;
#P connect 23 0 16 0;
#P connect 59 0 76 1;
#P fasten 20 0 21 0 326 212 326 197;
#P connect 30 0 76 2;
#P connect 39 0 26 0;
#P fasten 76 0 11 0 281 477 426 477;
#P connect 11 0 10 0;
#P connect 68 0 12 0;
#P connect 70 0 14 0;
#P connect 64 0 33 0;
#P fasten 33 0 69 0 554 514 601 514;
#P connect 69 0 34 0;
#P hidden connect 34 0 67 0;
#P fasten 33 0 36 0 554 616 671 616 671 475 711 475;
#P connect 36 0 37 0;
#P fasten 40 0 29 0 753 580 711 580;
#P fasten 31 0 29 0 770 580 711 580;
#P fasten 32 0 29 0 813 579 711 579;
#P connect 37 0 29 0;
#P connect 66 0 35 0;
#P connect 35 0 36 1;
#P hidden fasten 22 0 82 0 290 252 740 252 740 41 751 41;
#P hidden connect 82 0 79 0;
#P hidden connect 79 0 78 0;
#P hidden fasten 22 0 81 0 290 252 740 252 740 277 751 277;
#P hidden connect 81 0 77 0;
#P window clipboard copycount 83;



pm
August 25, 2008 | 3:31 pm

For myself, I got the best results using Apple Intermediate Codec, but I have no idea how this codec works in the PC world… I think it worth a try.
About the patch, I would consider trying the jit.gl objects and also a qmetro instead of a metro (see example below), just to see if it makes a difference. It kinda improved the fluidity of the playback when I tried it with your movie on my machine (MacBook Pro 2.16, Core Duo, 2 gigs of ram).
Good luck,

max v2;
#N vpatcher 700 99 1775 819;
#P window setfont "Sans Serif" 9.;
#P user jit.fpsgui 212 432 60 196617 0;
#P window linecount 1;
#P newex 48 688 194 196617 jit.gl.videoplane Movie @scale 1.33 1. 1.;
#P newex 25 468 240 196617 jit.gl.render Movie @ortho 2 @erase_color 0. 0. 0.;
#P newex 158 407 66 196617 t b erase b b;
#P hidden newex 746 44 101 196617 if $i1 ==0 then bang;
#B color 5;
#P hidden newex 746 284 97 196617 if $i1 > 0 then bang;
#B color 5;
#P window setfont "Sans Serif" 18.;
#P window linecount 2;
#P comment 746 145 95 196626 SHOW CURSOR;
#P button 746 68 74 0;
#P window setfont "Sans Serif" 9.;
#P hidden message 746 200 85 196617 ; max showcursor;
#P hidden message 746 305 80 196617 ; max hidecursor;
#P window linecount 1;
#N vpatcher 20 74 620 474;
#P window setfont "Sans Serif" 9.;
#P message 70 85 13 196617 1;
#P message 32 85 13 196617 0;
#P newex 32 61 48 196617 togedge;
#B color 5;
#P toggle 32 111 15 0;
#P newex 32 134 29 196617 gate;
#P newex 66 135 72 196617 print "GO TO";
#P inlet 32 41 15 0;
#P inlet 32 91 15 0;
#P inlet 51 114 15 0;
#P outlet 32 156 15 0;
#P connect 3 0 7 0;
#P connect 7 0 8 0;
#P connect 8 0 6 0;
#P fasten 9 0 6 0 75 106 37 106;
#P connect 2 0 6 0;
#P connect 6 0 5 0;
#P connect 5 0 0 0;
#P connect 1 0 5 1;
#P fasten 5 0 4 0 37 157 62 157 62 128 71 128;
#P connect 7 1 9 0;
#P pop;
#P newobj 276 447 76 196617 p client switch;
#P window setfont "Sans Serif" 18.;
#P comment 457 192 126 196626 FULLSCREEN;
#P comment 17 389 95 196626 MOVIE;
#P window setfont "Sans Serif" 9.;
#P comment 705 608 125 196617 send movietime;
#P newex 18 508 68 196617 r moviename;
#P newex 84 314 68 196617 s moviename;
#P newex 422 577 42 196617 r setup;
#P newex 596 528 64 196617 metro 3000;
#P newex 422 536 56 196617 r pingtime;
#P newex 596 587 56 196617 s pingtime;
#P newex 725 428 65 196617 r movietime;
#P newex 274 675 65 196617 s movietime;
#P newex 549 429 66 196617 r serverflag;
#P newex 108 186 66 196617 s serverflag;
#P newex 93 508 42 196617 r setup;
#P message 158 346 14 196617 1;
#P newex 158 324 42 196617 r setup;
#P newex 309 401 42 196617 r setup;
#P newex 180 146 57 196617 delay 1000;
#P newex 241 146 61 196617 delay 5000;
#P newex 180 170 42 196617 s setup;
#P message 207 228 20 196617 10;
#P message 189 228 14 196617 9;
#P message 170 228 14 196617 8;
#P message 152 228 14 196617 7;
#P message 134 228 14 196617 6;
#P message 116 228 14 196617 5;
#P message 98 228 14 196617 4;
#P message 80 228 14 196617 3;
#P button 75 102 28 0;
#P message 62 228 14 196617 2;
#P message 44 228 14 196617 1;
#P newex 44 314 32 196617 print;
#P newex 44 288 103 196617 sprintf read %s.mov;
#N vpatcher 515 269 1115 669;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P comment 195 301 60 196617 movie num;
#P button 360 281 15 0;
#P comment 381 301 75 196617 post read bang;
#P outlet 360 301 15 0;
#P comment 287 301 60 196617 server flag;
#P outlet 173 301 15 0;
#P message 254 111 77 196617 read config.txt;
#P message 161 144 46 196617 test 7 0;
#P number 268 231 22 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 240 231 22 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 212 206 67 196617 unpack 1 2 3;
#P button 227 169 15 0;
#P message 212 111 35 196617 line 2;
#P newex 212 143 40 196617 text;
#B color 5;
#P outlet 268 301 15 0;
#P inlet 254 54 15 0;
#P window linecount 0;
#P comment 276 54 100 196617 delayed load bang;
#P fasten 7 0 11 0 245 279 178 279;
#P fasten 5 0 4 0 232 192 338 192 338 96 217 96;
#P connect 4 0 3 0;
#P fasten 10 0 3 0 259 134 217 134;
#P connect 3 0 6 0;
#P fasten 9 0 6 0 166 179 217 179;
#P connect 3 1 5 0;
#P connect 6 1 7 0;
#P connect 1 0 10 0;
#P connect 6 2 8 0;
#P connect 8 0 2 0;
#P fasten 5 0 15 0 232 192 365 192;
#P connect 15 0 13 0;
#P pop;
#P newobj 75 145 77 196617 p ConfigReader;
#P button 276 488 15 0;
#P message 748 558 14 196617 0;
#P newex 381 196 48 196617 loadbang;
#P message 23 574 130 196617 read timing_test_30s.mov;
#P number 706 509 61 9 0 0 4 3 255 26 9 221 221 221 222 222 222 0 0 0;
#P newex 706 481 29 196617 gate;
#P newex 725 452 57 196617 route time;
#P button 596 551 30 0;
#P toggle 549 452 31 0;
#P message 808 557 46 196617 140000;
#P message 765 558 40 196617 15000;
#P newex 342 425 92 196617 udpreceive 12000;
#P newex 706 587 150 196617 udpsend 192.168.2.255 12000;
#P window linecount 2;
#P comment 358 446 100 196617 receive time value from server;
#P window linecount 1;
#P newex 75 80 55 196617 delay 500;
#P message 381 219 66 196617 fsmenubar 0;
#P newex 75 59 48 196617 loadbang;
#P message 93 532 74 196617 window Movie;
#P message 308 220 68 196617 fullscreen $1;
#P toggle 285 220 15 0;
#P newex 333 195 35 196617 sel 27;
#P newex 284 195 40 196617 key;
#P message 22 596 135 196617 read timing_test_5min.mov;
#P message 467 602 46 196617 loadram;
#P newex 241 675 30 196617 print;
#P newex 308 267 184 196617 jit.window Movie @rect 0 0 1024 768;
#P window setfont Arial 18.;
#P comment 6 23 239 131137554 MOVIE SETUP;
#P window setfont "Sans Serif" 9.;
#P message 422 602 37 196617 loop 1;
#P message 469 556 59 196617 getduration;
#P message 422 556 42 196617 gettime;
#P number 421 489 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 421 507 43 196617 time $1;
#P message 376 507 42 196617 getrate;
#P message 243 507 28 196617 read;
#P message 310 507 27 196617 stop;
#P message 276 507 31 196617 start;
#P toggle 158 366 15 0;
#P newex 158 386 57 196617 qmetro 20;
#P message 340 507 31 196617 clear;
#P newex 177 635 107 196617 jit.qt.movie @adapt 1;
#B color 5;
#P window setfont "Sans Serif" 18.;
#P comment 547 389 156 196626 SERVER ENABLE;
#P window setfont "Sans Serif" 9.;
#P comment 44 210 100 196617 load movie # buttons;
#P connect 83 0 84 0;
#P connect 83 1 84 0;
#P fasten 46 0 43 0 67 256 49 256;
#P connect 45 0 43 0;
#P fasten 48 0 43 0 85 255 49 255;
#P fasten 49 0 43 0 103 255 49 255;
#P fasten 55 0 43 0 212 257 49 257;
#P fasten 54 0 43 0 194 256 49 256;
#P fasten 53 0 43 0 175 256 49 256;
#P fasten 52 0 43 0 157 256 49 256;
#P fasten 51 0 43 0 139 255 49 255;
#P fasten 50 0 43 0 121 255 49 255;
#P fasten 42 0 43 0 80 175 20 175 20 269 49 269;
#P connect 43 0 44 0;
#P connect 2 0 85 0;
#P connect 25 0 27 0;
#P connect 27 0 47 0;
#P connect 47 0 42 0;
#P fasten 43 0 71 0 49 310 89 310;
#P connect 62 0 24 0;
#P connect 42 1 63 0;
#P connect 60 0 61 0;
#P fasten 61 0 5 0 163 361;
#P connect 5 0 4 0;
#P connect 4 0 83 0;
#P connect 83 2 2 0;
#P connect 19 0 2 0;
#P fasten 14 0 2 0 427 619 182 619;
#P fasten 10 0 2 0 426 533 182 533;
#P fasten 12 0 2 0 427 573 182 573;
#P fasten 13 0 2 0 474 573 182 573;
#P fasten 3 0 2 0 345 533 182 533;
#P fasten 6 0 2 0 281 533 182 533;
#P fasten 7 0 2 0 315 533 182 533;
#P fasten 8 0 2 0 248 533 182 533;
#P fasten 9 0 2 0 381 533 182 533;
#P connect 38 0 2 0;
#P fasten 72 0 2 0 23 564 182 564;
#P fasten 18 0 2 0 472 619 182 619;
#P fasten 24 0 2 0 98 564 182 564;
#P fasten 42 2 58 0 146 176 164 176 164 138 185 138;
#P connect 58 0 56 0;
#P connect 83 3 86 0;
#P fasten 42 2 57 0 146 178 161 178 161 132 246 132;
#P fasten 2 1 17 0 279 664 246 664;
#P connect 2 1 65 0;
#P hidden fasten 33 0 76 0 554 498 519 498 519 373 281 373;
#P connect 76 0 41 0;
#P connect 41 0 6 0;
#P fasten 57 0 22 0 246 217 290 217;
#P fasten 21 0 22 0 338 217 290 217;
#P fasten 22 0 23 0 301 235 301 220;
#P connect 23 0 16 0;
#P fasten 26 0 16 0 386 242 313 242;
#P connect 59 0 76 1;
#P fasten 20 0 21 0 326 212 326 197;
#P connect 30 0 76 2;
#P connect 39 0 26 0;
#P fasten 76 0 11 0 281 477 426 477;
#P connect 11 0 10 0;
#P connect 68 0 12 0;
#P connect 70 0 14 0;
#P connect 64 0 33 0;
#P fasten 33 0 69 0 554 514 601 514;
#P connect 69 0 34 0;
#P hidden connect 34 0 67 0;
#P fasten 33 0 36 0 554 616 671 616 671 475 711 475;
#P connect 36 0 37 0;
#P fasten 40 0 29 0 753 580 711 580;
#P fasten 31 0 29 0 770 580 711 580;
#P fasten 32 0 29 0 813 579 711 579;
#P connect 37 0 29 0;
#P connect 66 0 35 0;
#P connect 35 0 36 1;
#P hidden fasten 22 0 82 0 290 252 740 252 740 41 751 41;
#P hidden connect 82 0 79 0;
#P hidden connect 79 0 78 0;
#P hidden fasten 22 0 81 0 290 252 740 252 740 277 751 277;
#P hidden connect 81 0 77 0;
#P pop;



d_s
August 25, 2008 | 9:41 pm

Thanks for these insights. I tried the method you recommended but I am seeing the same small judders on my test machines. I believe that passing the video directly to QuickTime *should* give me the best performance but so far that’s not the case.

I gave Apple Intermediate a try but I think the data rate is giving my machine problems.

Thanks,
d_s


Viewing 3 posts - 1 through 3 (of 3 total)