<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PRETTY EXTREME</title>
	<atom:link href="http://www.prettyextreme.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.prettyextreme.com</link>
	<description>music//visual//digital//art</description>
	<lastBuildDate>Wed, 14 Jul 2010 20:08:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Optimal Video Playback in Managed Desktop Application</title>
		<link>http://www.prettyextreme.com/?p=78</link>
		<comments>http://www.prettyextreme.com/?p=78#comments</comments>
		<pubDate>Wed, 14 Jul 2010 20:08:40 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[PSA]]></category>

		<guid isPermaLink="false">http://www.prettyextreme.com/?p=78</guid>
		<description><![CDATA[...found that the media player was dropping frames.  The video files would playback perfectly in Windows Media Player, but when run through this WPF app, it just didn't work as well.  In many applications, maybe this is not a big deal, but we always want to achieve the best possible playback quality...]]></description>
			<content:encoded><![CDATA[<p>Recently I had to build a desktop application that allows users to watch video files. After becoming familiar with Microsoft&#8217;s Windows Presentation Foundation, this seemed to be really easy: .NET Framework 3.5 provides a <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.aspx">MediaElement</a> control which you place in your UI and then assign a source file to play. It is simple to build your own transport controls right into the UI that match your design and there are lots of examples of how to do this on MSDN.</p>
<p>As I guessed, this was easy to wire up and my first pass looked like this:</p>
<div id="attachment_256" class="wp-caption aligncenter" style="width: 310px"><a href="http://3-byte.com/blog/wp-content/uploads/2010/07/MediaElement-Screenshot.png"><img class="size-medium wp-image-256" title="MediaElementPlayer Screenshot" src="http://3-byte.com/blog/wp-content/uploads/2010/07/MediaElement-Screenshot-300x234.png" alt="WPF Example Using MediaElement" width="300" height="234" /></a><p class="wp-caption-text">WPF Example Using MediaElement</p></div>
<p>Here is a complete <a href="http://3-byte.com/blog/wp-content/uploads/2010/07/MediaElementPlayer.zip">Visual Studio 2008 project (MediaElementPlayer)</a> that you can build to see how it works.</p>
<p><strong>Great.</strong>  Game Over, right?</p>
<p>Well, we watched it for a while, and found that the media player was <em>dropping frames</em>.  The video files would playback perfectly in Windows Media Player, but when run through this WPF app, it just didn&#8217;t work as well.  In many applications, maybe this is not a big deal, but we always want to achieve the best possible playback quality.  I tried several different attempts to optimize the application: attempting to force a specific rendering framerate, stripping down the application to just the MediaElement so that no other compositing layers or animations would tax the processor.  I tried playing lower bitrate media files, but nothing worked.  The playback still consistently dropped frames and stuttered.</p>
<p><a href="http://3-byte.com/blog/wp-content/uploads/2010/07/MotionTest.wmv"><img class="alignleft size-full wp-image-263" title="MotionTest icon" src="http://3-byte.com/blog/wp-content/uploads/2010/07/MotionTest-icon.png" alt="" width="115" height="105" /></a>  I commissioned a special video file that is designed to make dropped frames and stuttering really noticeable.  It features a vertical line which scrolls back and forth slowly &#8211; motion should always be perfectly smooth.  You can download this <a href="http://3-byte.com/blog/wp-content/uploads/2010/07/MotionTest.wmv">video</a> and try it with the project above.</p>
<p>Perhaps you can see the same behavior on your system if you build the project above.  Despite its ease of use, the MediaElement control does not allow a lot of flexibility in terms of tweaking its performance or finding out metrics on how well it is actually playing.</p>
<p><strong>So I tried a different approach.</strong>  Based on some research from <a href="http://jmorrill.hjtcentral.com/Home/tabid/428/Default.aspx">Jeremiah Morrill</a> it seemed like we could use the older ActiveX Windows Media Player component to programmatically playback video inside our application.  I found a <a href="http://www.dotnetspark.com/kb/2056-add-windows-media-player-to-wpf-application.aspx">tutorial</a> and fairly quickly added the ActiveX control to playback the video files.  This required building a separate forms library in order to automatically expose the necessary components as references, but it worked. This implementation seemed to harness the native Windows Media rendering pipeline and the playback performance was exactly the same as playing the video in Windows Media Player.  The video was perfectly smooth again.  But that wasn&#8217;t the complete solution.</p>
<p>The catch is that the older Windows Media wrapper was designed for Windows Forms and is only supported inside a Windows Forms Host control.  This is a major problem because Windows Forms hosts can not be layered in a WPF UI layout the same way other controls can.  They <strong>always</strong> show up on top, and everything else is obscured behind it.  This is ultimately because of a fundamental difference between how WPF is rendered and the legacy windowing system.  In this case, it meant that there was no way to add custom transport controls on top of the video.  We could use the default Windows Media Player skin and transport controls, but then it gives away the secret and makes the app look thrown together.  It would be much better to have the play and stop buttons match the look and feel of the rest of the application.</p>
<p>The final solution involved creating the transport controls in a separate transparent window and layering that on top of the video player, programmatically repositioning it automatically to create the illusion that they are part of the video player.<br />
<code>&lt;Window x:Class="ActiveXMediaPlayer.TransportControlWindow"<br />
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br />
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br />
    Background="Transparent" WindowStyle="None" AllowsTransparency="True"<br />
    ShowInTaskbar="False" ResizeMode="NoResize" SnapsToDevicePixels="True" Topmost="True"><br />
...</code></p>
<p><a href="http://3-byte.com/blog/wp-content/uploads/2010/07/Transport-Control-Overlay.png"><img src="http://3-byte.com/blog/wp-content/uploads/2010/07/Transport-Control-Overlay-300x203.png" alt="" title="Transport Control Overlay" width="300" height="203" class="alignright size-medium wp-image-266" /></a>This ends up requiring listening to all of the re-size and layout events from the main window and responding appropriately.  It took a lot of attention to corner cases when the video player goes full screen and when the primary window loses focus, but ultimately this solution achieves the necessary effect.</p>
<p>You can download the improved <a href="http://3-byte.com/blog/wp-content/uploads/2010/07/ActiveXMediaPlayer.zip">Visual Studio project (ActiveXMediaPlayer)</a>, and compare the quality for yourself.</p>
<p>Many thanks to Jeremiah Morrill for his very in-depth blog that covers all aspects of video and rendering in Windows.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prettyextreme.com/?feed=rss2&amp;p=78</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://3-byte.com/blog/wp-content/uploads/2010/07/MotionTest.wmv" length="7638050" type="video/x-ms-wmv" />
		</item>
		<item>
		<title>Stack Exchange</title>
		<link>http://www.prettyextreme.com/?p=76</link>
		<comments>http://www.prettyextreme.com/?p=76#comments</comments>
		<pubDate>Tue, 22 Jun 2010 20:48:15 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[PSA]]></category>

		<guid isPermaLink="false">http://www.prettyextreme.com/?p=76</guid>
		<description><![CDATA[About a year ago or so, I discovered this site for helping with software development problems:
www.stackoverflow.com
It’s a completely free, community powered site for asking and answering questions related to software development. It was made for experts, by experts. It turned out to be an amazing problem solving resource, and shortly thereafter www.serverfault.com and www.superuser.com were [...]]]></description>
			<content:encoded><![CDATA[<p>About a year ago or so, I discovered this site for helping with software development problems:</p>
<p><a href="http://www.stackoverflow.com/">www.stackoverflow.com</a></p>
<p>It’s a completely free, community powered site for asking and answering questions related to software development. It was made for experts, by experts. It turned out to be an amazing problem solving resource, and shortly thereafter <a href="http://www.serverfault.com/">www.serverfault.com</a> and <a href="http://www.superuser.com/">www.superuser.com</a> were opened up, and now have a huge user base. I encourage you all to take a look at the quality of questions and answers.</p>
<p>The founders have decided to open up to the internet community and ask for ideas to start up new sites. There are ideas for sites from mythology to raw food to industrial control systems.</p>
<p>I’ve put a proposal out there for a site to cater to the community of AV professionals. The concept being this is where you ask the tough questions, and help out people with tough problems. I need people to sign up and back the proposal, as well as to ask sample questions to see if the quality meets the par. This thing needs a critical mass to make it to the next stage..</p>
<p>A sample question could be:</p>
<p>When installing a BSS Soundweb in a rack, can they be stacked with no spacing? Has anyone every had heat related problems?</p>
<p>Or, another sample question could be:</p>
<p>What is a good resource for figuring out how to send wake-on-lan to various computers from an AMX controller?</p>
<p>A BAD question could be:</p>
<p>What does the blinking red light on an AMX frame mean?</p>
<p>So, please go to:</p>
<p><a href="http://area51.stackexchange.com/proposals/8341/audio-video-control-systems">http://area51.stackexchange.com/proposals/8341/audio-video-control-systems</a></p>
<p>log in and post sample questions..</p>
<p>thanks</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prettyextreme.com/?feed=rss2&amp;p=76</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PrePix V0.3.3 Update</title>
		<link>http://www.prettyextreme.com/?p=72</link>
		<comments>http://www.prettyextreme.com/?p=72#comments</comments>
		<pubDate>Thu, 01 Apr 2010 17:38:12 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[PSA]]></category>
		<category><![CDATA[LED Visualization]]></category>
		<category><![CDATA[PrePix]]></category>

		<guid isPermaLink="false">http://www.prettyextreme.com/?p=72</guid>
		<description><![CDATA[An updated PrePix version 0.3.3 is available for download. This is a minor update that fixes a problem affecting Windows XP users who were unable to run version 0.3.2.
The new version may be installed directly over any previous version. Please let us know if you have any trouble!
]]></description>
			<content:encoded><![CDATA[<p>An updated <a href="http://3-byte.com/blog/?page_id=177">PrePix</a> version 0.3.3 is available for <a href="http://3-byte.com/blog/?page_id=181">download</a>. This is a minor update that fixes a problem affecting Windows XP users who were unable to run version 0.3.2.</p>
<p>The new version may be installed directly over any previous version. Please let us know if you have any trouble!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prettyextreme.com/?feed=rss2&amp;p=72</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PrePix V0.3.2 Update</title>
		<link>http://www.prettyextreme.com/?p=70</link>
		<comments>http://www.prettyextreme.com/?p=70#comments</comments>
		<pubDate>Fri, 26 Mar 2010 20:44:04 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[PSA]]></category>
		<category><![CDATA[LED Visualization]]></category>
		<category><![CDATA[PrePix]]></category>

		<guid isPermaLink="false">http://www.prettyextreme.com/?p=70</guid>
		<description><![CDATA[
An updated PrePix version 0.3.2 is available for download. New features include:

Ability to save and reload all Screen Properties as .ppx files
Several minor bug fixes
Inclusion of a 6-foot scale zombie

The new version may be installed directly over the old. Please let us know if you have any trouble!
]]></description>
			<content:encoded><![CDATA[<p><a href="http://3-byte.com/blog/wp-content/uploads/2010/03/PrePixUpdate.jpg"><img class="aligncenter size-full wp-image-225" title="PrePixUpdate" src="http://3-byte.com/blog/wp-content/uploads/2010/03/PrePixUpdate.jpg" alt="" width="500" height="388" /></a></p>
<p>An updated <a href="http://3-byte.com/blog/?page_id=177">PrePix</a> version 0.3.2 is available for <a href="http://3-byte.com/blog/?page_id=181">download</a>. New features include:</p>
<ul>
<li>Ability to save and reload all Screen Properties as .ppx files</li>
<li>Several minor bug fixes</li>
<li>Inclusion of a 6-foot scale zombie</li>
</ul>
<p>The new version may be installed directly over the old. Please let us know if you have any trouble!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prettyextreme.com/?feed=rss2&amp;p=70</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PrePix Virtualization Software</title>
		<link>http://www.prettyextreme.com/?p=60</link>
		<comments>http://www.prettyextreme.com/?p=60#comments</comments>
		<pubDate>Fri, 19 Feb 2010 22:23:37 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[geekery]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[LED Visualization]]></category>
		<category><![CDATA[PrePix]]></category>

		<guid isPermaLink="false">http://www.prettyextreme.com/?p=60</guid>
		<description><![CDATA[3Byte has produced a new tool called PrePix for previewing Video Content on Virtual Displays. PrePix has the ability to effectively model any LED, LCD, Projection or Plasma display.

Different technologies are modeled by selecting a Pixel Model, which is nothing more than a macro image representing a single pixel of the intended display technology displaying [...]]]></description>
			<content:encoded><![CDATA[<p>3Byte has produced a new tool called <a title="PrePix Installer Download" href="http://3-byte.com/blog/?page_id=181" target="_blank">PrePix</a> for previewing Video Content on Virtual Displays. PrePix has the ability to effectively model any LED, LCD, Projection or Plasma display.</p>
<div id="attachment_162" class="wp-caption aligncenter" style="width: 610px"><a href="http://3-byte.com/blog/wp-content/uploads/2010/02/PrePixPenguins-Screenshot.jpg"><img class="size-full wp-image-162" title="PrePixPenguins Screenshot" src="http://3-byte.com/blog/wp-content/uploads/2010/02/PrePixPenguins-Screenshot.jpg" alt="" width="600" height="387" /></a><p class="wp-caption-text">A PrePix Screenshot</p></div>
<p><span id="more-60"></span><br />
Different technologies are modeled by selecting a Pixel Model, which is nothing more than a macro image representing a single pixel of the intended display technology displaying white at full brightness. Some sample Pixel Model images representing LCD and various LED technologies are included, but additional Pixel Models may be added easily by the user.</p>
<p>PrePix includes a graphical interface for setting up a virtual sign with parameters for Pixel Model selection, pixel dimensions, physical sign dimensions, brightness gain, RGB level adjustments, and source video selection. PrePix supports 30fps wmv video playback as well as jpg, gif and bmp images.</p>
<p>Source video is automatically up-sampled or down-sampled to match the pixel dimensions of the virtual video surface. Then, a Pixel Model is applied, followed by the Gain and Color Balance layers. The virtual display is viewable in a virtual 3D space.</p>
<p>In the 3D virtual space, the user may select from preset views including “Pixel Match,” which attempts to match large virtual LED pixels onto the PrePix user’s computer display so that the user may get a sense of the look of a virtual video surface in a real, physical space. Viewing a real 11mm LED display from 10 feet away should be comparable to viewing such a virtual display Pixel Matched to a 24” LCD display from the same distance, with the only significant difference being brightness. If this kind of modeling is deemed comparable and effective, then PrePix can be used to determine optimal viewing distances for different pixel pitches and LED technologies without requiring a lot of sample hardware.</p>
<div id="attachment_161" class="wp-caption aligncenter" style="width: 610px"><a href="http://3-byte.com/blog/wp-content/uploads/2010/02/PixelMatchMode600.jpg"><img class="size-full wp-image-161" title="PixelMatchMode600" src="http://3-byte.com/blog/wp-content/uploads/2010/02/PixelMatchMode600.jpg" alt="" width="600" height="384" /></a><p class="wp-caption-text">PixelMatch close-up</p></div>
<p>An even more concrete use of PrePix is to determine the effectiveness of video or image content when displayed on certain low-resolution LED signs. The LED signs on the sides of MTA busses in NYC have pixel dimensions of 288&#215;56. They are often sourced with video content that was obviously designed for a higher resolution display. With PrePix, a content producer can easily preview his video content on a virtual LED bus sign to check text legibility and graphical effectiveness.</p>
<div id="attachment_159" class="wp-caption aligncenter" style="width: 298px"><a href="http://3-byte.com/blog/wp-content/uploads/2010/02/MTAPenguins.jpg"><img class="size-full wp-image-159" title="MTAPenguins Source Image" src="http://3-byte.com/blog/wp-content/uploads/2010/02/MTAPenguins.jpg" alt="" width="288" height="56" /></a><p class="wp-caption-text">288x56-pixel source image</p></div>
<div id="attachment_160" class="wp-caption aligncenter" style="width: 505px"><a href="http://3-byte.com/blog/wp-content/uploads/2010/02/MTAPenguinsModel1.jpg"><img class="size-full wp-image-160" title="MTAPenguinsModel1" src="http://3-byte.com/blog/wp-content/uploads/2010/02/MTAPenguinsModel1.jpg" alt="" width="495" height="338" /></a><p class="wp-caption-text">Close-up of 3D video display model</p></div>
<div id="attachment_170" class="wp-caption aligncenter" style="width: 610px"><a href="http://3-byte.com/blog/wp-content/uploads/2010/02/MTAPenguinsModel4.jpg"><img class="size-full wp-image-170" title="MTAPenguinsModel4" src="http://3-byte.com/blog/wp-content/uploads/2010/02/MTAPenguinsModel4.jpg" alt="" width="600" height="154" /></a><p class="wp-caption-text">Full view of virtual LED sign. The moire patterns is comparable to that which would be seen in a digital photo of a real LED display.</p></div>
<p>3Byte would like to develop PrePix further, depending on feedback from users. Please let us know what you think!</p>
<p>PrePix can be downloaded <a title="PrePix Installer Download" href="http://3-byte.com/blog/?page_id=181" target="_blank">here</a>.</p>
<p>PrePix System Requirements:</p>
<ul>
<li>Windows XP, Vista or 7</li>
<li>A graphics card supporting OpenGl 3.0 and FBOs (Nearly all cards less than 18 months old.)</li>
</ul>
<p>3Byte can be contacted at info@3-byte.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prettyextreme.com/?feed=rss2&amp;p=60</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Times Square Signs in Slow-Motion</title>
		<link>http://www.prettyextreme.com/?p=45</link>
		<comments>http://www.prettyextreme.com/?p=45#comments</comments>
		<pubDate>Fri, 22 Jan 2010 19:42:22 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[geekery]]></category>
		<category><![CDATA[slow motion]]></category>
		<category><![CDATA[times square]]></category>
		<category><![CDATA[video sync]]></category>

		<guid isPermaLink="false">http://www.prettyextreme.com/?p=45</guid>
		<description><![CDATA[And now, by popular demand, (AA says: &#8220;I&#8217;m popular?&#8221;) a few high-speed captures of LED signs in Times Square:
(All videos were captured at 1000fps with a Casio Exilim EX-FS10, rendered here as 30fps video.)


When transitioning from one frame to the next, the M&#38;M&#8217;s sign and all components of the ABC sign update all pixels on [...]]]></description>
			<content:encoded><![CDATA[<p>And now, by popular demand, (AA says: &#8220;I&#8217;m popular?&#8221;) a few high-speed captures of LED signs in Times Square:</p>
<p>(All videos were captured at 1000fps with a <a href="http://www.casio.com/products/Cameras/EXILIM_High-Speed/EX-FS10RD/" target="_blank">Casio Exilim EX-FS10</a>, rendered here as 30fps video.)</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="157" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8910137&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=CC753A&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="550" height="157" src="http://vimeo.com/moogaloop.swf?clip_id=8910137&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=CC753A&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="157" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8910082&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=CC753A&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="550" height="157" src="http://vimeo.com/moogaloop.swf?clip_id=8910082&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=CC753A&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>When transitioning from one frame to the next, the M&amp;M&#8217;s sign and all components of the ABC sign update all pixels on the sign at once, demonstrated here in less than one of my video capture frames, so we know it&#8217;s  less than 1ms. The different components of the ABC sign seem to update at different times because of a sync issue, not an LED technology issue.<span id="more-45"></span></p>
<p>LCD displays will lock to incoming signals with a variety of timings, often anywhere from ~57Hz to ~63Hz, depending on the display. When you tell a graphics card to output at 60Hz, it is doubtful that it&#8217;s putting out a true 60.000Hz. Depending on the make of the card, the drivers installed and the phase of the moon, the actual refresh rate will vary quite a bit. LED signs tend to maintain their own clock, regardless of the video signal that might be driving it. It is likely that without a <a href="http://en.wikipedia.org/wiki/Genlock" target="_blank">genlock</a> signal keeping the system in sync, the source signal will not provide frames at exactly the same frame rate that the LED sign is displaying them. The more disparate the source and display refresh rates, the more dropped or doubled frames you will observe, which will be visible to the layman as stuttering.</p>
<p>The Reuters sign, however, DOES update one row at a time, just like an <a href="http://3-byte.com/blog/?p=41" target="_self">LCD</a>. The passing of the raster takes about 14ms, as we might expect for a sign running at 60Hz:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="157" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8910210&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=CC753A&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="550" height="157" src="http://vimeo.com/moogaloop.swf?clip_id=8910210&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=CC753A&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>I cannot speculate as to the implications for their sync mechanism, except to observe that the rasters of the three screen segments visible in this video seem to be in good sync, though the frames themselves do not.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prettyextreme.com/?feed=rss2&amp;p=45</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video Synchronization Testing Part II</title>
		<link>http://www.prettyextreme.com/?p=31</link>
		<comments>http://www.prettyextreme.com/?p=31#comments</comments>
		<pubDate>Wed, 20 Jan 2010 03:07:58 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[PSA]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[video sync]]></category>

		<guid isPermaLink="false">http://www.prettyextreme.com/?p=31</guid>
		<description><![CDATA[In a previous post, I analyzed a video synchronization test from a recent video installation, and suggested that although the synchronization between screens was not perfect, it was certainly satisfactory, and as good as might be expected given the design of the system. Now, lets see why.
When a multi-screen video system is in proper sync, [...]]]></description>
			<content:encoded><![CDATA[<p>In a <a href="http://3-byte.com/blog/?p=41">previous post</a>, I analyzed a video synchronization test from a recent video installation, and suggested that although the synchronization between screens was not perfect, it was certainly satisfactory, and as good as might be expected given the design of the system. Now, lets see why.</p>
<p>When a multi-screen video system is in proper sync, each video frame begins at exactly the same time. A system that draws at 60fps will draw each frame in approximately 16.67 milliseconds. During those 16ms, an LCD display will update all of the pixels on screen from top to bottom. We will call the moving line across which the pixels are updated the Raster Line. In this slow-motion test video, you can see video frames alternating between full black and full white, updated from top to bottom. The screens are mounted in portrait orientation, which is why the updates happen right to left:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="114" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8719641&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=F2B511&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="114" src="http://vimeo.com/moogaloop.swf?clip_id=8719641&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=F2B511&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Many of the screens seem to be updating together, but some do not. This is because the system does not include dedicated hardware to ensure that the signals are in sync, so many of the displays begin their updates at different time. The system is frame-synchronized, meaning that all displays begin a raster sync within one raster-pass of each other. It just isn&#8217;t raster-synchronized.</p>
<p>If the displays were indeed raster-synchronized, we might represent their signals like so:</p>
<p><a href="http://3-byte.com/blog/wp-content/uploads/2010/01/Perfect1f.gif"><img class="aligncenter size-full wp-image-120" title="Perfect1f" src="http://3-byte.com/blog/wp-content/uploads/2010/01/Perfect1f.gif" alt="" width="403" height="231" /></a>In an otherwise black video, Display 1 flashes a single frame (Frame 1 / F1) of white, followed by a flash of white on Display 2 in Frame 2. In slow-motion, we would see the raster line, represented here as diagonal lines, move across bother displays in sync, like two Tangueros walking together across a dance floor. The red line represents the particular pass of the raster line at which both displays transition from Frame 1 to Frame 2. In all of these illustrations, the red line indicates a pass of the raster line, or a switch between frames, that in a frame-synchronized system would occur at exactly the same time.<span id="more-31"></span></p>
<p>It is important to keep in mind that in this system, video is provided at 30fps, so each frame of video is essentially drawn twice in two consecutive passes of the raster line. This cannot be seen on screen as no change occurs in any of the pixels, but we can see it in our illustration as the diagonal line separating F1a and F1b, the two rendered passes of video Frame 1.</p>
<p>In our system, of course, the raster lines are not synchronized between displays. So even when we intend for both displays to flash white at the same time, it is possible that one display might begin a raster pass at the very end of another&#8217;s pass of the same frame:</p>
<p><a href="http://3-byte.com/blog/wp-content/uploads/2010/01/Imperfect1f.gif"><img class="aligncenter size-full wp-image-118" title="Imperfect1f" src="http://3-byte.com/blog/wp-content/uploads/2010/01/Imperfect1f.gif" alt="" width="426" height="268" /></a>We can certainly hope that the raster lines of any two average displays are nearly synchronized, but in observance of <a href="http://en.wikipedia.org/wiki/Murphy%27s_law" target="_blank">Murphey&#8217;s Law</a>, we must always assume the worst case, as indicated above in Displays 1 and 2. Here, we can see that although the frames might be in sync, with all rasters commencing within 17ms of each other, we will expect to see the raster on Display 2 commence just at the end of that of Display 1. This kind of behavior can be seen in our test video on the third and fourth columns, with the raster seeming to pass smoothly from one display to the other. In truth, any case in which two rasters start more than 16.67ms apart from each other demonstrates an imperfect frame sync, but for simplicity we will just say that the worst case in one in which they commence 17ms apart, as illustrated above in Displays 1 and 2.</p>
<p>So, what might this look like in a case where we see flashes in two consecutive video frames on two separate displays in a worst-case scenario?</p>
<p><a href="http://3-byte.com/blog/wp-content/uploads/2010/01/Imperfect2f.gif"><img class="aligncenter size-full wp-image-119" title="Imperfect2f" src="http://3-byte.com/blog/wp-content/uploads/2010/01/Imperfect2f.gif" alt="" width="456" height="262" /></a>In the case of Displays 1 and 4, we have a point in time, Time X, at which both displays are entirely black. In the case of Displays 2 and 3, at Time X we see both displays entirely white. We still consider them to be in sync, and we should not consider these anomalies to indicate a failure of the synchronization mechanism.</p>
<p>There is a minor issue in the test video that does bear mentioning. The flashes move through four rows of white in each column. There are extremely brief moments during which you might notice a touch of white that is visible in the first and third row. This should be obvious after repeated viewing. I leave it as an exercise for the reader to demonstrate why, even in a worst case scenario, this should not be observed if the frame synchronization mechanism is working properly. (&lt;sarcasm&gt;Yeah, right.&lt;/sarcasm&gt;) So why am I not concerned? Because it is the nature of LCD display pixels to take some time to switch from full white to full black. Typical response times for the particular displays in this system are specified as 9ms, which means that after the raster line passes and updates a pixel from black to white, it may take an average of 9ms (more than half a raster pass) for that pixel to fully change. I say &#8220;Average&#8221; because white-to-black and black-to-white transitions are usually slightly different, and the spec will mention only the <a href="http://www.lcdtvbuyingguide.com/lcdtv/lcdtv-responsetime.shtml" target="_blank">average of the two</a>. If the response time was an ideal zero ms, our raster line would be crisp and clear in our slow-motion capture, but in reality it is not. The raster line is blurry because after it passes, the pixels take time to change between black and white. We can expect that some pixels might remain white for a brief time after we expect them to go dark, resulting in this subtle observable discrepancy.</p>
<p>What does all this mean? It means that in a slow-motion test video of 24 synchronized displays, we observe nothing to suggest that the synchronization mechanism isn&#8217;t performing as well as we could hope for. To the viewer, the synchronization is true, and we deem the project a success.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prettyextreme.com/?feed=rss2&amp;p=31</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video Synchronization Testing</title>
		<link>http://www.prettyextreme.com/?p=17</link>
		<comments>http://www.prettyextreme.com/?p=17#comments</comments>
		<pubDate>Thu, 14 Jan 2010 21:46:03 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[geekery]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[slow motion]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[video sync]]></category>

		<guid isPermaLink="false">http://www.prettyextreme.com/?p=17</guid>
		<description><![CDATA[Slow-motion analysis of a network-based video synchronization test.]]></description>
			<content:encoded><![CDATA[<p>For a recent project, 3byte developed custom graphics software for a 36-screen video wall. This required some kind of synchronization mechanism with which to keep the various screens in sync.  There are dedicated hardware devices like the <a title="nVidia GSync" href="http://www.nvidia.com/page/quadrofx_gsync.html" target="_blank">nVidia G-Sync</a> card that make this sort of thing really simple. However, this project involved driving four video display from each of our graphics workstations, and we ran into trouble with these cards during initial testing. Instead, we developed our own sync mechanism that runs over the local network.</p>
<p>To test our synchronization, we loaded up a video file that would make the quality of the sync really obvious. Breaking the video vertically into four quarters, on each frame of the video we flash a white rectangle in one of the quarter regions. Like so:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="225" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8719838&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=F2B511&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="225" src="http://vimeo.com/moogaloop.swf?clip_id=8719838&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=F2B511&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Really, it works better with some good <a title="Wikipedia: Psychedelic Trance" href="http://en.wikipedia.org/wiki/Psychedelic_trance" target="_blank">PsyTrance</a>. But what is actually happening? Whatever it is, it&#8217;s happening too fast to determine with the naked eye. So I picked up a Casio <a title="Exilim" href="http://exilim.casio.com/products_exfs10.shtml" target="_blank">Exilim EX-FS10 </a>and shot the system at 1000fps:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="114" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8719641&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=F2B511&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="114" src="http://vimeo.com/moogaloop.swf?clip_id=8719641&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=F2B511&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Far more interesting. The resolution of the video is not great, but it shows us what we need to know.<span id="more-17"></span></p>
<p>First of all, you will notice the scrolling of the video from right to left. The screens are actually mounted in portrait orientation, to the motion that you see is actual a top-to-bottom scroll as far as the display is concerned. These LCD displays refresh the pixels on screen 60 times every second, but they don&#8217;t all update at the same time. The display updates the pixels line by line from top to bottom, each line updating left to right. This makes sense when we consider that analog and digital video signals order pixel data in this way, just like reading a page of a book. At regular speed, a screen refresh seems instantaneous, but at high speed, we can see the way the screen transitions from black to white one line at a time. This scrolling line across which the pixels are updated we might call the Raster, or the Raster Position.</p>
<p>In this system, the timing of each display&#8217;s Raster Line is determined by the graphics card in the computer. Whenever the card says &#8220;start drawing the next frame&#8230; NOW!&#8221; the monitor locks in with that signal and starts the Raster Line at the top of the screen. Had we G-Sync cards for this system, we could tell the graphics cards to chant their &#8220;NOW&#8221; mantras in unison, and in slow motion we would see the Raster Lines of all the displays being drawn in perfect synchronization. As you can see in the video above, this is not the case for our system, where the lines are updated on different displays at slightly different times. This difference between displays is so subtle that it is never noticed by a viewer. The question is, are the correct frames being drawn on each pass of the Raster?</p>
<p>This system supports source video playback at 30fps, but the displays update at 60fps. Each source video frame is doubled on screen, so a single frame of white flash in our source video will be drawn white in two consecutive passes of the Raster Line on the display. In the slow-motion video, we see the raster line update each screen, then a pause while the subsequent Raster pass draws another frame of white (no change) before moving on the to next source video frame.</p>
<p>If you look at the third and fourth columns of displays, you will see that the Raster seems almost to move straight across from the fourth to the third as it updates the two columns together. Of course this is only an illusion, as the Raster does not sync between frames. What we are actually seeing is one display in column three that seems to be lagging behind column four by almost a full 17ms Raster pass. (I say 17ms because that is just about the amount of time it takes to refresh a display at 60fps.) This is not ideal, but in a system with no dedicated sync hardware, it is not surprising, and not a deal-breaker. It means that at 30fps, these screens are within a half-frame of perfect sync, which is nearly undetectable to the eye.</p>
<p>In <a href="http://3-byte.com/blog/?p=92" target="_self">Part II</a>, I provide an analysis of the best possible sync performance for a network-synchronized video system. I  explain why the 17ms discrepancy in the video above falls within the tolerances of this system. We are quite pleased with the performance of our synchronization mechanism, and believe that it rivals or surpasses that of other industry-standard network-sync video systems. Next chance I get, I&#8217;ll run a similar test on a <a title="Dataton Watchout" href="http://www.dataton.com/#/watchout/">Dataton Watchout</a> system and let you all know how it goes. Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prettyextreme.com/?feed=rss2&amp;p=17</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>computers hiding as solid state devices</title>
		<link>http://www.prettyextreme.com/?p=58</link>
		<comments>http://www.prettyextreme.com/?p=58#comments</comments>
		<pubDate>Tue, 29 Dec 2009 07:46:20 +0000</pubDate>
		<dc:creator>Josh</dc:creator>
				<category><![CDATA[PSA]]></category>
		<category><![CDATA[business]]></category>

		<guid isPermaLink="false">http://www.prettyextreme.com/?p=58</guid>
		<description><![CDATA[Prejudice. That is what it&#8217;s about. There is an old argument in the Pro AV industry about not using computers as video playback devices, or control systems, or anything else you can imagine that is mission critical.
I remember a few years ago on a certain project in Texas where the AV guys (I was the [...]]]></description>
			<content:encoded><![CDATA[<p>Prejudice. That is what it&#8217;s about. There is an old argument in the Pro AV industry about not using computers as video playback devices, or control systems, or anything else you can imagine that is mission critical.</p>
<p>I remember a few years ago on a certain project in Texas where the AV guys (I was the software consultant) absolutely refused to consider using an off the shelf Dell computer and a custom video playback app to run video to the screens. The options given to us were an Alcorn DVM-HD or a GVG Turbo. I mentioned to them that both of these systems were actually embedded PC&#8217;s with a custom PCI-E video output card (one ran XP pro embedded and the other some sort of Linux distro, or maybe even DOS- who knows). However, this didn&#8217;t seem to matter. it was all about how the non-computer felt and looked in the racks (and, they even threw the old argument- there isn&#8217;t enough rackspace). Come on, really? Maybe they didn&#8217;t trust my custom software solution, but Josh and I were building the master show control system running on multiple PC&#8217;s and servers, so I don&#8217;t see the logic.</p>
<p>Anyways, that project had a truckload of problems concerning video playback. My argument was that it&#8217;s the idiosyncrasies that end up dictating how these systems are run, and by holistically controlling one of the more important parts of the project (the video playback engine) we controlled the idiosyncrasies. After the system finally ended up stabilizing by buying twice as many devices (because the dual channel capability actually didn&#8217;t work too well in practice) the main issue was that the 74GB HDD size was way too small, but it was the biggest WD raptor drive available. oh well.<span id="more-58"></span></p>
<p>So, back to mission critical stuff running on PC&#8217;s. Here is a story about BAE systems installing Win XP &amp; 2k as a mission critical command and control system in the Royal Navy&#8217;s Trafalgar and Vanguard class nuclear subs:</p>
<p><a href="http://www.baesystems.com/Newsroom/NewsReleases/autoGen_108111514515.html">BAE Win XP and Win2k on subs</a></p>
<p>How about that? If we dial it back to the level of AV systems, consider personal mission critical stuff. Like your communications device. I bought an iPhone last week. It&#8217;s basically a mini computer. it&#8217;s now loaded with over 40 applications, and who knows who wrote these things? I&#8217;m not afraid this thing is going to &#8220;crash&#8221; if I dial 911, why would you be afraid if a video screen somewhere glitches for an hour or two? It&#8217;s obviously different if you are in a theatre situation, but that is what backup hardware, and, ahem, professional quality code and professional project management, is for.</p>
<p>PS, there is a whole slew of pictures on the internet of random massive LED screens in times square and other places showing windows error screens that stay up for DAYS. That&#8217;s just pathetic and reeks of poor planning. Why would you drop 1+ mil on that thing and not have a plan to service &amp; monitor it?</p>
<p>here are some fun pics</p>

]]></content:encoded>
			<wfw:commentRss>http://www.prettyextreme.com/?feed=rss2&amp;p=58</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZombieCon on Taff</title>
		<link>http://www.prettyextreme.com/?p=15</link>
		<comments>http://www.prettyextreme.com/?p=15#comments</comments>
		<pubDate>Wed, 21 Oct 2009 18:42:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[events]]></category>

		<guid isPermaLink="false">http://www.prettyextreme.com/?p=15</guid>
		<description><![CDATA[Last year, a zombie reporter from a German TV station covered the New York ZombieCon:

]]></description>
			<content:encoded><![CDATA[<p>Last year, a zombie reporter from a German TV station covered the New York ZombieCon:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/mnp3_YGztU8&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/mnp3_YGztU8&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.prettyextreme.com/?feed=rss2&amp;p=15</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
