Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Output from AVAssetWriter (UIImages written to video) distorted

I am using an AVAssetWriter to encode a series of images to a movie file, following Zoul's answer here: How do I export UIImage array as a movie?.

In short my process is:

  • create UIImage from .png file
  • Get CGImage from UIImage
  • convert the CGImage to CVPixelBuffer (using zoul's function pixelBufferFromCGImage exactly)
  • write the frames to .mov using a AVAssetWriterInputPixelBufferAdaptor and AVAssetWriter

This is working fine in most cases, however sometimes the .mov file that is encoded is distorted (see picture below). I was wondering if this type of distorted image output is familiar to to anyone, and if there is any step I might have taken in encoding the frames that would cause this. The problem occurs specifically when the source images I use are generated by calls in Titanium to ImageView.toBlob(). Besides the Titanium side, any hints on how this type of result might appear would be great!

Thanks, Alexander

Screen from movie: http://tinypic.com/view.php?pic=8wkqys&s=7

Original image: http://commons.wikimedia.org/wiki/File:Phalaenopsis_(aka).jpg

Phalaenopsis_(aka)

like image 424
Alexander Conway Avatar asked Dec 22 '22 09:12

Alexander Conway


2 Answers

Please take a look at this link. It says the width should be a multiple of 16.

Just get the size.width, calculate the nearest number which is multiple of 16. And hard code it in place of size.width.

It works :)

like image 170
Mandar Avatar answered Feb 20 '23 20:02

Mandar


Ok, this turned out to be an issue with the aspect ratio of the images I was reading in being different from the aspect ratio of the PixelBuffer I was creating. Made them equal and it works fine.

like image 33
Alexander Conway Avatar answered Feb 20 '23 21:02

Alexander Conway