09
Feb
09

Using Pixel Bender to do heavy lifting calculations, makes Flash Player multi-thread.

In Flash 10 Adobe added a compiler to handle filters, which is possible through Pixel Bender kernels. Pixel Bender kernels is a program that calculate a single pixel at run time.

This is how it works. The Pixel Bender graph is an XML language for combining individual pixel-processing operations called kernels, which are in PBK file format.
We can create the PBK XML file using Pixel Bender toolkit. After our kernel is ready we can then export it as a byte-code called PBJ. PBJ can then be used in the Flash 10 player.
Flex Gumbo Bender shader is the Pixel Bender kernels, which uses a separate thread than Flash Player to calculate a single pixel.

You can use the following math functions for in pixel bender for calculations:

1. sin(x) - Trigonometric sine function.
2. cos(x) - Cosine function.
3. tan(x) – Tangent function.
4. asin(x) - Arcsine (inverse sine) function.
5. acos(x) - inverse cosine (arccosine) function.
6. atan(x) - Arctangent (inverse tangent) function.
7. atan(x, y) - Arctangent (inverse tangent) function.
8. exp(x) - exponential function.
9. log(x) – Logarithm function.
10. pow(x, y) - power of function.
11. reciprocal(x) - multiplicative inverse function.
12. sqrt(x) - square root function.

The challenge with Flash related to single thread processing always caused issues, and while the Flash Player is processing information we cannot run another thread to do other things. We often find the player get “stuck” when doing heavy lifting. Pixel Bender can help in certain cases. I managed to create an example and an API that uses Pixel Bender to calculate information, while a video is playing. In the example here you can run calculations while the video is playing and compare performance with Flash Player doing the same calculation.

First play the video and hit the Pixel Bender calculation and while the video is playing calculations are being made in the background. The results are astonishing, using Flash Player to calculate 5M sine took about 10 seconds (on iMac 2.8GHz and 4GB memory) and the video paused. Using Pixel Bender the video had a light glitch and we received the results back for the 5M calculation after about 10 secounds, without the user noticing.


Pixel Bender for calculation

Create the pbj file in Pixel Bender Toolkit:


<languageVersion : 1.0;>
kernel SinCalculator
<
    namespace : "pixelBender";
    vendor : "Elad Elrom";
    version : 1;
    description : "Sin Calculator";
>
{
    input image1 src;
    output pixel3 result;

    void evaluatePixel()
    {
    	pixel1 value = pixel1(sin(sample(src, outCoord())));
    	result = pixel3(value, 0.0, 0.0);
    }
}

The API handle calculating with Pixel bender by splitting the process into chucks of 5,000 per kernal, since Pixel Bender produce an error message on large calculations.


package com.elad.framework.pixelBender
{
	import com.elad.framework.pixelBender.events.PixelBenderCalcEvent;

	import flash.display.Shader;
	import flash.display.ShaderJob;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.utils.ByteArray;
	import flash.utils.Endian;

	[Event(name="completed", type="com.elad.pixelBender.events.PixelBenderCalcEvent")]

	/**
	 *  The PixelBenderCalculator class is the base class for math calculation with pixel bender
	 */
	public class PixelBenderCalculator extends EventDispatcher
	{
		public var kernalClass:Class;
		public var numberCollection:Array;

		private var shader:Shader;
		private var shaderJob:ShaderJob;
		private var input:ByteArray;
		private var output:ByteArray;
		private var retCollection:Array;
		private var requestsCounter:Number;
		private var numberOfRequest:Number;

		/**
		 * Number of calculations per kernal
		 */
		private const COLLECTION_SIZE:int = 5000;

		/**
		 * Default constructor for the pixel bender calculator
		 *
		 * @param numberCollection	collection contain numbers
		 * @param kernalClass	the kernal class of type pbj to be used to run the calculation
		 *
		 */
		public function PixelBenderCalculator(numberCollection:Array, kernalClass:Class)
		{
			reset();

			this.kernalClass = kernalClass;
			this.numberCollection = numberCollection;

			requestsCounter = numberCollection.length/COLLECTION_SIZE;
		}

		/**
		 * Method to start the calculation
		 *
		 */
		public function start():void
		{
		    output = new ByteArray();
		    output.endian = Endian.LITTLE_ENDIAN;

		    var start:int = numberOfRequest*COLLECTION_SIZE;
		    var end:int = ( (numberOfRequest+1)*COLLECTION_SIZE > numberCollection.length) ? numberCollection.length : ((numberOfRequest+1)*COLLECTION_SIZE);

		    input = convertArrayToByteArray(numberCollection, start, end);
		    createShaderJob();
		    numberOfRequest++;
		}

		/**
		 * Creates a shader class based on the kernal to pass the numbers and start the calculations.
		 *
		 * @see flash.display.ShaderJob
		 * @see flash.display.Shader
		 *
		 */
		private function createShaderJob():void
		{
			var width:int = input.length >> 2;
		    var height:int = 1;

		    shader = new Shader(new kernalClass());
		    shader.data.src.width = width;
		    shader.data.src.height = height;
		    shader.data.src.input = input;			    

		    shaderJob = new ShaderJob(shader, output, width, height);
		    shaderJob.addEventListener(Event.COMPLETE, shaderJobCompleteHandler);
		    shaderJob.start();
		}

		/**
		 * Static method to convert the array given into byte array.
		 *
		 * @param array
		 * @return
		 *
		 */
		private static function convertArrayToByteArray(array:Array, start:int, end:int):ByteArray
		{
			var retVal:ByteArray = new ByteArray();
		    var number:Number;

		    retVal.endian = Endian.LITTLE_ENDIAN;

		    for (var i:int=start; i<end; i++)
		    {
		    	number = Number(array[i]);
		    	retVal.writeFloat(number);
		    }

		    retVal.position = 0;
		    return retVal;
		}

		/**
		 * Convert the a <code>ByteArray</code> into an <code>Array</code>
		 *
		 * @param byteArray
		 * @return an array collection
		 *
		 */
		private function addByteArrayToCollection(byteArray:ByteArray):void
		{
		    var length:int = byteArray.length;
		    var number:Number;

		    for(var i:int=0; i<length; i+=4)
		    {
				number = byteArray.readFloat();
				if(i % 3 == 0)
				{
		    		retCollection.push(number);
		  		}
		    }
		}

		/**
		 * Handler for the shader once job is completed.
		 *
		 * @param event
		 *
		 */
		private function shaderJobCompleteHandler(event:Event):void
		{
		    output.position = 0;
			addByteArrayToCollection(output);

			input = null;
			output = null;

			if (requestsCounter>numberOfRequest)
			{
				start();
			}
			else
			{
				calculationCompleted();
			}

		}

		/**
		 * Method to dispatch an event once calculation is completed and reset this class.
		 *
		 */
		private function calculationCompleted():void
		{
			this.dispatchEvent( new PixelBenderCalcEvent(retCollection) );

			reset();
		}

		/**
		 * Method to clean up this class so we are not using un-needed memory.
		 *
		 */
		public function reset():void
		{
			retCollection = new Array();
			numberCollection = new Array();
			requestsCounter = 0;
			numberOfRequest = 0;
			numberCollection = null;
		}
	}
}

The implimentation is straight forward:


<FxApplication xmlns="http://ns.adobe.com/mxml/2009" xmlns:local="*" viewSourceURL="srcview/index.html">

	<!-- 

	////////////////////////////////////////////////////////////////////////////////
	//
	//  Elad Elrom (elad@elromdesign.com)
	//  Copyright 2009 Elorm LLC,
	//  All Rights Reserved.
	//
	//  NOTICE: Elad Elrom permits you to use, modify, and distribute this file
	//  in accordance with the terms of the license agreement accompanying it.
	//
	////////////////////////////////////////////////////////////////////////////////

 	@author  Elad Elrom

	-->

	<Script>
		<![CDATA[

			import com.elad.framework.pixelBender.PixelBenderCalculator;
			import com.elad.framework.pixelBender.events.PixelBenderCalcEvent;

			import mx.collections.ArrayCollection;
			import mx.collections.IList;
			import mx.events.FlexEvent;

			[Embed(source="SinCalculator.pbj", mimeType="application/octet-stream")]
			private var kernalClass:Class;
			private var pixelBenderCalc:PixelBenderCalculator;

			protected function startCalculatorPixelBender():void
			{
				// create a number collection
				var numberCollection:Array = new Array();

				for (var i:int=0; i<5000000; i++)
				{
					numberCollection.push( i );
				}

				// calculate
				pixelBenderCalc = new PixelBenderCalculator(numberCollection, kernalClass);
				pixelBenderCalc.addEventListener(PixelBenderCalcEvent.COMPLETED, onComplete );

				pixelBenderCalc.start();
			}

			private function startCalculatorFlashPlayer():void
			{
				// create a number collection
				var numberCollection:Array = new Array();

				for (var i:int=0; i<5000000; i++)
				{
					numberCollection.push( Math.sin(i) );
				}

				list.dataProvider = new ArrayCollection(numberCollection);
			}			

			private function onComplete(event:PixelBenderCalcEvent):void
			{
				list.dataProvider = new ArrayCollection(event.numberCollection);
				pixelBenderCalc.removeEventListener(PixelBenderCalcEvent.COMPLETED, onComplete);
			}

		]]>
	</Script>

	<List id="list" width="200" height="531.5"/>
	<Button label="Calculate with Pixel Bender" width="200" height="20" y="545" click="startCalculatorPixelBender()"/>
	<Button label="Calculate with Flash Player" width="200" height="20" y="574" click="startCalculatorFlashPlayer()"/>

	<VideoDisplay id="vid" width="355" height="290"
		source="http://thehq.tv/wp-content/uploads/flv/super-street-fighter-2-hd-round-1-trailer.flv"
		autoPlay="false" x="209" y="-1"/>
	<Button label="Play" click="vid.play();" x="213" y="303"/>

	<local:MemoryDashBoard  x="211" y="343"/>

</FxApplication>

10 Responses to “Using Pixel Bender to do heavy lifting calculations, makes Flash Player multi-thread.”


  1. 1 Ben Feb 9th, 2009 at 8:25 am

    I was actually thinking the same thing, but applied to away3d or pv3d. We could definitely use PB to not only render parts of scene in flash but also offload the cpu intensive projection code in a shader. Obviously, that would also mean changing the rendering pipeline…

    That would leave alot of space for application code wouldn’t it? :)

  2. 2 Jonathan from jadbox.com Feb 9th, 2009 at 10:45 am

    Great article on pixelblender… this is the first article I’ve read that actually made sense to me on how to use it for math operations. Much thanks!

  3. 3 Mims H. Wright Nov 26th, 2009 at 4:00 pm

    Hey Elad,

    I’m really excited at the prospects of this but I’m having a hard time imagining practical applications for this. Do you know of any examples or ideas for using this technique in the real world?

    Mims

  4. 4 waraaquasog Dec 18th, 2009 at 8:25 am

    Hello,
    My computer worked not correctly, too much errors. Help me, please to fix errors on my computer.
    My operation system is Windows XP.
    Thanks,
    waraaquasog

  5. 5 Cory Jan 13th, 2010 at 1:38 pm

    Hey Elad -

    Question about your example. In your createShaderJob() function, you bit shift the length of your ByteArray two places to compute the width of the shader input:

    78. var width:int = input.length >> 2;

    What’s the purpose of this statement, and why don’t you do something similar with the flash computpation? Shouldn’t you be telling the shader that its input size is the full width of the ByteArray object?

    Thanks for the example!

  6. 6 Cory Jan 14th, 2010 at 7:25 pm

    You’re using floats which are 4-bytes in size. Therefore you divide by 4 (bit shift right 2 places) to get the number of floats in the ByteArray. Got it.

  7. 7 VigraCialisLetivra Mar 4th, 2010 at 4:23 pm

    [url=http://cvl.89.pl/][img]http://www.prescriptionpricecompare.com/images/show_banner-6.gif[/img][/url]
    [b]Generic Viagra[/b] of network is today most popular tablet from ED of medicines on the market. Today this surprising
    tablet helped more than million suffering impotence men throughout the world. This tablet causes in the penis of blood
    flow, which produces a good construction for the prolonged period. All men now have chance for the outstanding
    erection at any time. This safe preparation which it is possible to assume even with such illnesses as, high blood
    pressure, morbidity diabetes, or by clinical depression, and many others. Nevertheless, its use is strictly forbidden,
    if you assume any medicines, which can contain nitrates.
    [url=http://cvl.89.pl/][img]http://www.prescriptionpricecompare.com/images/TrialPacksBanner.gif[/img][/url]
    Therefore we advise you, if you please, you will ascertain that you consulted with your doctor before using [b]Viagra.
    Generic[/b] [b]Viagra[/b] is based on the same active components as standard [b]Viagra[/b] - Sildenafil citrate.
    This substance is used for treating the man weakness, noted for also as erectile dysfunction or simply ED. As has
    already been spoken, it works on the penis of blood vessels, medicine it enlarges them making it possible to ensure
    the inflow of the blood, necessary for a good installation.

    Trust Canadian Health Care proposes to you [b]Generic Viagra[/b] in the Internet [b]without the prescription[/b] including
    [b]Generic Cialis[/b] and [b]Generic Levitra[/b]. ]We propose for sale [b]Viagra, Cialis, Levitra from Canada[/b].
    Our professional drugstore is the most convenient place for you to [b]buy cheap Viagra[/b] into the network and other
    medicines. You will obtain precisely that the fact that you search for: the high quality of medicines, [b]low prices[/b],
    rapid delivery and you will be contented.

    [b]General Viagra Soft[/b] of supplementary sheet is the new product, which is used for treating the sexual impotence in
    men. These soft supplementary sheets on the basis of the same acting substance, as others of the erectile dysfunction
    of the tablet: Sildenafil by citrate. Thus, patients will experience the same results and satisfaction as from any other stamp.
    The desired results they must begin to appear soon afterward tablet it is dissolved under the tongue.

    [b]How does works Viagra?[/b] Sildenafil citrate has very simple method of operation, it stops at the natural ferment -
    phosphodiesterase - in the human organism from the work. This places it in the group of medicines known as inhibitors
    PDE5. Phosphodiesterase also is present in the penis of man and when it exerts its influence, men became unable to
    support their erections.

    Sildenafil citrate stops this phosphodiesterase to become active. Pfizer originally developed sildenfil of citrate for treating
    pulmonary arterial hypertension. But once they revealed that narcotics also it works well in men with the erectile
    dysfunction and was obtained approval FDA for treating this illness.

    Since then [b]Viagra[/b] never there were in the news for the elongation more than ten years. Its uses, benefits and
    consequences were written approximately into the news, the forums, the boards of considerations and all other places.
    It was and it continues to remain most popular and widely utilized for treating the man impotence. [b]Viagra[/b] is very
    powerful of medicine, which also has the specific side effects. Depending on the dosage, specified by doctor, the
    symptoms sildenafil citrate side effects can be strong or soft. Some side effects include changes such, as color,
    sensitivity to the light, dyspepsia, diarrhea, head pain.

    Sildenafil citrate side effects can be dangerous, if we mix preparation with alcohol or to assume by women during
    the pregnancy. One overdose can lead to the heart attack, the stroke, sudden changes in the blood, pressure or
    sudden death. In overdose it can be especially detrimentally for the men with the known of the heart of conditions;
    such men must always adhere to that specified to dose. Last these are preparations for the adult men, and they
    must not start to the boys at the age of up to 18 years. By the most important orientator for adopting Sildenafil by
    citrate consists in remembering that it must be accepted only to the sexual activity.

    Sildenafil citrate requires 30-45 minutes in order to enter the force; therefore in the ideal it must be accepted 1
    hour prior to the beginning of sexual activity. Sildenafil citrate are let out in dosages from [b]25mg, 50 mg[/b]
    and 100mg. You can purchase [b]Generic Viagra[/b] of on-line on the low prices, or through the physical of
    drugstores. It is possible to purchase [b]Generic[/b] Sildenafil citrate [b](Viagra)[/b] almost in any drugstore
    on the low cost. Prices can be different, but in us it is possible to acquire without the prescription.

    A [b]Generic[/b] version consists in purchasing of the narcotics of sildenafil citrate in the network, where
    it is possible to compare prices of more than one drugstore. [b]General Viagra[/b] frequently are sold in
    the Internet on the decreased prices. [b]Generics[/b] is as a rule cheaper than original of Brend. In our
    the Internet to drugstore [b]Viagra[/b] only of highest quality, which is sold directly from the producer. We
    has prices which they will be pleased to all our clients.

    [url=http://cvl.89.pl/][img]http://www.trustcanadianhealthcare.com/img/cialis_pack.jpg[/img][/url]
    [b]Cialis professional[/b] to be produced on the basis of the usual of [b]Cialis[/b] with the additives by those
    amplifying their action. Basic differences in this medicine this total increase in the sexual activity, increase
    in the desire, this preparation will allow you to also obtain more than orgasms, some studies show even
    increase small of penis.

    [url=http://cvl.89.pl/][img]http://www.trustcanadianhealthcare.com/img/viagra_pack.jpg[/img][/url]
    [b]Viagra professional[/b] is also developed for treating of erectile dysfunction and impotence. The additional
    component of this medicine considerably more strongly increases blood flow in the penis and erection is
    obtained considerably more strongly, your penis will increase more than usual.

    [url=http://cvl.89.pl/][img]http://www.trustcanadianhealthcare.com/img/levitra_pack.jpg[/img][/url]
    [b]Levitra Professional[/b] this medicine for treating of erectile dysfunction and impotence. It possesses
    properties which they will make your orgasm more intensive, you will be able to control the process of
    ejaculation. Certain increase in the size of penis also is observed.

    [url=http://cvl.89.pl/][b]Cheap Generic[/b] india viagra[/url]
    [url=http://cvl.89.pl/][b][b]Generic Cialis Levitra[/b][/url]
    [url=http://cvl.89.pl/][b]Discount Generic Viagra[/b] soft tabs[/url]
    [url=http://cvl.89.pl/][b]Lowest ]Price Generic Cialis No Perscription[/b][/url]
    [url=http://cvl.89.pl/][b]Liquid Cialis Generic[/b][/url]
    [url=http://cvl.89.pl/][b]Online Generic Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Buy Cialis Generic[/b][/url]
    [url=http://cvl.89.pl/]]Is [b]Cialis[/b] available in [b]Generic[/b][/url]
    [url=http://cvl.89.pl/]Cialis Online Purchase Generic[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] in stock[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] reviews[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Cialis Generic Levitra[/b] review viagra[/url]
    [url=http://cvl.89.pl/][b]Cheapest Generic Viagra[/b][/url]
    [url=http://cvl.89.pl/][b][b]Cialis Non Generic[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis American[/b][/url]
    [url=http://cvl.89.pl/]is there a [b]Generic For Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Gaily cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Cialis Generic Levitra[/b] review [b]Viagra[/b][/url]
    [url=http://cvl.89.pl/]discount sildenafil [b]Generic Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]What Is The [b]Generic Name For Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Viagra Levitra Generic Cialis Pills[/b][/url]
    [url=http://cvl.89.pl/][b]Cialis Non Generic From Canada[/b][/url]
    [url=http://cvl.89.pl/][b]Buy cheap Generic Levitra[/b][/url]
    [url=http://cvl.89.pl/][b]Cialis Generic Levitra[/b] review [b]Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] india[/url]
    [url=http://cvl.89.pl/][b]Discount Generic Viagra[/b] panama[/url]
    [url=http://cvl.89.pl/][b]Discount Generic Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Cheap Generic[/b] india [b]Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Viagra Generic[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Drugs Levitra[/b] trusted since[/url]
    [url=http://cvl.89.pl/][b]Cheap Generic India Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis No Perscription[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] vs [b]Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] canada[/url]
    [url=http://cvl.89.pl/][b]Generic Viagra Levitra Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] information[/url]
    [url=http://cvl.89.pl/][b]Discount Generic Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Buy Generic Levitra Online[/b] with fastest delivery[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] e10[/url]
    [url=http://cvl.89.pl/]discount [b]Generic Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Buy Generic Cialis[/b] 5mg online[/url]
    [url=http://cvl.89.pl/][b]Generic[/b] india [b]Levitra[/b][/url]
    [url=http://cvl.89.pl/]canada [b]Cialis Generic[/b][/url]
    [url=http://cvl.89.pl/][b]Lowest Price Generic Ciali[/b]s canada[/url]
    [url=http://cvl.89.pl/][b]Cheapest[/b] prices [b]Generic Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Viagra Levitra Generic Cialis[/b] pills[/url]
    [url=http://cvl.89.pl/][b]Lowest Price Generic Cialis[/b] no perscription[/url]
    [url=http://cvl.89.pl/][b]Buy Cialis Generic[/b][/url]
    [url=http://cvl.89.pl/][b]Viagra Cheapest[/b] price [b]Generic[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] shopping[/url]
    [url=http://cvl.89.pl/][b]Generic[/b] daily [b]Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Buy Cialis Generic[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] information[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Discount Generic Viagra[/b] blue pill[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] professional[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] price compare[/url]
    [url=http://cvl.89.pl/][b]Cheap Cialis Generic Levitra Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Viagra Levitra Generic Cialis[/b] pills[/url]
    [url=http://cvl.89.pl/][b]Generic Viagra Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Super Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] online a href[/url]
    [url=http://cvl.89.pl/]2.5 mg [b]Generic Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] price compare[/url]
    [url=http://cvl.89.pl/][b]Buy Generic Levitra Online[/b] with [b]Fastest Delivery[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis Viagra[/b][/url]
    [url=http://cvl.89.pl/]20mg [b]Generic Levitra Order Online[/b][/url]
    [url=http://cvl.89.pl/][b]Generic[/b] form of [b]Cialis[/b][/url]
    [url=http://cvl.89.pl/]does generic levitra work?[/url]
    [url=http://cvl.89.pl/]got my [b]Generic Cialis[/b] from india today[/url]
    [url=http://cvl.89.pl/]where can i [b]Buy Generic Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Cheapest Generic Levitra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Viagra Without Prescription[/b][/url]
    [url=http://cvl.89.pl/][b]Cheapest Generic Vialis Professional[/b][/url]
    [url=http://cvl.89.pl/][v]Cheapest Generic Levitra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis Europe[/b][/url]
    [url=http://cvl.89.pl/][b]Buy Generic Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Best Generic Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Buy Generic Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis Levitra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic[/b] india [b]Levitra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic[/b] form of [b]Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Cheap Cialis Generic Levitra Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Cheap Generic[/b] india [b]Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] tabs[/url]
    [url=http://cvl.89.pl/][b]Generic Viagra Cheap[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Levitra[/b] from india[/url]
    [url=http://cvl.89.pl/][b]Cheap Cialis Generic Levitra Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Viagra Levitra Generic Cialis[/b] pills[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis Tabs[/b][/url]
    [url=http://cvl.89.pl/]20mg [b]Generic Levitra[/b] order [b]Online[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] e10[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] vs [b]Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Generic[/b] super [b]Cialis[/b][/url]
    [url=http://cvl.89.pl/]is [b]Generic Cialis[/b] real[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] uk[/url]
    [url=http://cvl.89.pl/][b]Cheap Generic Levitra[/b] from usa[/url]
    [url=http://cvl.89.pl/][b]Generic Drugs Levitra[/b] trusted since[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] reviews[/url]
    [url=http://cvl.89.pl/]2.5 mg [b]Generic Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Cheapest Prices Generic Viagra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] customer reviews[/url]
    [url=http://cvl.89.pl/][b]Generic Cialis Sof[/b]t[/url]
    [url=http://cvl.89.pl/][b]Buy Generic Cialis[/b][/url]
    [url=http://cvl.89.pl/][b]Cheap Generic Levitra[/b][/url]
    [url=http://cvl.89.pl/][b]Generic Cialis[/b] information[/url]

  8. 8 eco_bach Apr 20th, 2010 at 5:23 pm

    get the following error on play
    Error: 1000: Unable to make connection to server or to find FLV on server.
    at mx.controls.videoClasses::VideoPlayer/play()
    at mx.controls::VideoDisplay/play()
    at PixelBenderKernels/___PixelBenderKernels_Button3_click()

  1. 1 Bookmarks for March 5th from 15:03 to 15:06 « what i say // jon burger Pingback on Mar 5th, 2009 at 1:36 pm
  2. 2 Mixing it up in the Pixel Bender WebDU presentation | FlexDaddy Pingback on Jan 18th, 2010 at 7:03 pm

Leave a Reply