Initial check-in of OpenShot Library
Fixed a bug with the SDL YUV420p color conversion.  Locally scoped Image was going out of scope, before I could get the colors completly out of it.  Race condition.
Began to refactor the FFmpegReader to correctly save the audio samples with the correct frame.
Some major refactoing of the FFmpegReader, to allow for audio and video packets that are out of order.
Added a DisplayWaveform method on a frame, to help debug audio issues.  It uses ImageMagick to draw each channel and all samples in each channel.
Fixed some bugs in the audio decoding.
Fixed more audio bugs related to dividing samples between frames.
Reworked the cache object to use a double sided queue, so I can iterate through it to find the smallest frame, and remove specific frames from the cache.  Also, fixed some additional audio bugs, and I finally have the audio being correctly distributed between frame objects.
Fixed a rounding error on mapping audio samples to frames.  Also adjusted the sample rate on the frame.Play() method to 48khz.
Added additional unit tests for the Cache object, to verify it's cleaning up old items correctly.
Fixed some bugs related to audio only files.  Now audio only files are correctly divided into frames (30 fps), and seek correctly.
Fixed bug on Image processing, with no video or audio present.  Play() and DisplayWaveform() methods now handle not having any audio samples.
Fixed bug in Display() method for audio only files (i.e. files with no images)
Fixed a bug with seeking the audio stream, to avoid missing samples on the first 2 frames returned.
Adjusting the FFmpegReader to correctly handle video timebase's that are different than the inverse framerate.
Fixed tons of issues related to video timebase being different than the video framerate.  Also, added new properties for interlaced video, correctly detect pixel ratio, and fixed Display() to adjust for pixel ratio.  Also added sample_rate to a frame, so it can playback audio at the correct rate.  Refactored FFmpegReader to make most methods private, and only expose the important methods publicly.
Added a method to get the average # of frames over the initial 5 seconds of video, and adjust an invalid framerate, which sometimes FFmpeg detects.  Also, a Reader only initializes it's default values 1 time, and only checks frame rate 1 time, regardless of how many times your Open() and Close() the reader.
Removed some invalid code to handle interlaced frames.  Improved the CheckFPS() algorithm to check for 1/2 the detected frame rate first, and then fallback to the "average frame rate".
Fixed a bug where audio was not being resampled to the correct sample format.  Also fixed a bug where the audio buffer was not being incremented correctly, and it was duplicating audio samples.   There are still a few audio bugs, but it's mostly working now.
fixed a bug where resampled audio was not completly copied into the audio buffer.