Plays video and decodes audio properly now. However, the producer thread is decoding way too quickly and finishes decoding the entire video and adds it to the queue rather than decoding on the fly.

Found out that using SynchronousQueue blocks on the audio too often: since the audio is being played on the current thread. Might need to move audio playback to yet another thread and then go back to SynchonousQueue so that we are only decoding as fast as we can play.