Go back to the old ear-wiggling Android animation.

But keep the new code so we can easily test new animations when we have them.

This change includes tbao's de-interlace script, plus a one-liner that's
necessary to play the animation at the correct speed when there's no
progress bar showing. (This was always a bug, it's just way more noticeable
when your animation only has 7 frames.)

Bug: http://b/28316654
Bug: http://b/26548285
Change-Id: I32c601c352d6be235d1b44f14fca7e125defd77d
diff --git a/interlace-frames.py b/interlace-frames.py
old mode 100644
new mode 100755
index 3e777b4..6b435aa
--- a/interlace-frames.py
+++ b/interlace-frames.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
 # Copyright (C) 2014 The Android Open Source Project
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,19 +14,16 @@
 # limitations under the License.
 
 """
-Script to take a set of frames (PNG files) for a recovery animation and turn
-it into a single output image which contains the input frames interlaced by
-row. Run with the names of all the input frames on the command line. Specify
-the name of the output file with -o (or --output), and optionally specify the
-number of frames per second (FPS) with --fps (default: 20).
-
-e.g.
-interlace-frames.py --fps 20 --output output.png frame0.png frame1.png frame3.png
+Script to take a set of frames (PNG files) for a recovery animation
+and turn it into a single output image which contains the input frames
+interlaced by row.  Run with the names of all the input frames on the
+command line, in order, followed by the name of the output file.
 """
 
 from __future__ import print_function
 
 import argparse
+import os.path
 import sys
 try:
   import Image
@@ -35,7 +33,7 @@
   sys.exit(1)
 
 
-def interlace(output, fps, inputs):
+def interlace(output, inputs):
   frames = [Image.open(fn).convert("RGB") for fn in inputs]
   assert len(frames) > 0, "Must have at least one input frame."
   sizes = set()
@@ -60,21 +58,57 @@
 
   meta = PngImagePlugin.PngInfo()
   meta.add_text("Frames", str(N))
-  meta.add_text("FPS", str(fps))
 
   out.save(output, pnginfo=meta)
 
 
+def deinterlace(output, input):
+  # Truncate the output filename extension if it's '.png'.
+  if os.path.splitext(output)[1].lower() == '.png':
+    output = output[:-4]
+
+  img2 = Image.open(input)
+  print(img2.mode)
+  palette = img2.getpalette()
+  img = img2.convert("RGB")
+  num_frames = int(img.info.get('Frames', 1))
+  print('Found %d frames in %s.' % (num_frames, input))
+  assert num_frames > 0, 'Invalid Frames meta.'
+
+  # palette = img.getpalette()
+  print(palette)
+
+  width, height = img.size
+  height /= num_frames
+  for k in range(num_frames):
+    out = Image.new('RGB', (width, height))
+    out.info = img.info
+    for i in range(width):
+      for j in range(height):
+        out.putpixel((i, j), img.getpixel((i, j * num_frames + k)))
+    # out.putpalette(img.getpalette(), rawmode='RGB')
+    out2 = out.convert(mode='P', palette=palette)
+    #out2 = out
+    print(out2.mode)
+    # out2.putpalette(palette)
+    filename = '%s%02d.png' % (output, k)
+    out2.save(filename)
+    print('Frame %d written to %s.' % (k, filename))
+
+
 def main(argv):
-  parser = argparse.ArgumentParser()
-  parser.add_argument('--fps', default=20)
+  parser = argparse.ArgumentParser(description='Parse')
+  parser.add_argument('--deinterlace', '-d', action='store_true')
   parser.add_argument('--output', '-o', required=True)
   parser.add_argument('input', nargs='+')
   args = parser.parse_args(argv)
 
-  interlace(args.output, args.fps, args.input)
+  if args.deinterlace:
+    # args.input is a list, and we only process the first when deinterlacing.
+    deinterlace(args.output, args.input[0])
+  else:
+    interlace(args.output, args.input)
 
 
 if __name__ == '__main__':
   main(sys.argv[1:])
-