1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang"""
2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  Copyright (c) 2012 The WebM project authors. All Rights Reserved.
3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *
4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  Use of this source code is governed by a BSD-style license
5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  that can be found in the LICENSE file in the root of the source
6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  tree. An additional intellectual property rights grant can be found
7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  in the file PATENTS.  All contributing project authors may
8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  be found in the AUTHORS file in the root of the source tree.
9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang"""
10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#!/usr/bin/env python
11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangimport sys,string,os,re,math,numpy
12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangscale = 2**16
13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangdef dist(p1,p2):
14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  x1,y1 = p1
15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  x2,y2 = p2
16ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  if x1==x2 and y1==y2 :
17ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    return 1.0
18ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  return 1/ math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
19ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
20ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangdef gettaps(p):
21ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  def l(b):
22ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    return int(math.floor(b))
23ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  def h(b):
24ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    return int(math.ceil(b))
25ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  def t(b,p,s):
26ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    return int((scale*dist(b,p)+s/2)/s)
27ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  r,c = p
28ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  ul=[l(r),l(c)]
29ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  ur=[l(r),h(c)]
30ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  ll=[h(r),l(c)]
31ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  lr=[h(r),h(c)]
32ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  sum = dist(ul,p)+dist(ur,p)+dist(ll,p)+dist(lr,p)
33ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  t4 = scale - t(ul,p,sum) - t(ur,p,sum) - t(ll,p,sum);
34ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  return [[ul,t(ul,p,sum)],[ur,t(ur,p,sum)],
35ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang          [ll,t(ll,p,sum)],[lr,t4]]
36ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
37ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangdef print_mb_taps(angle,blocksize):
38ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  theta = angle / 57.2957795;
39ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  affine = [[math.cos(theta),-math.sin(theta)],
40ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang            [math.sin(theta),math.cos(theta)]]
41ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  radius = (float(blocksize)-1)/2
42ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  print " // angle of",angle,"degrees"
43ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  for y in range(blocksize) :
44ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    for x in range(blocksize) :
45ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      r,c = numpy.dot(affine,[y-radius, x-radius])
46ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      tps = gettaps([r+radius,c+radius])
47ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      for t in tps :
48ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        p,t = t
49ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        tr,tc = p
50ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        print " %2d, %2d, %5d, " % (tr,tc,t,),
51ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      print " // %2d,%2d " % (y,x)
52ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
53ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangi=float(sys.argv[1])
54ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangwhile  i <= float(sys.argv[2]) :
55ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  print_mb_taps(i,float(sys.argv[4]))
56ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  i=i+float(sys.argv[3])
57ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang"""
58ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
59ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangtaps = []
60ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangpt=dict()
61ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangptr=dict()
62ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfor y in range(16) :
63ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  for x in range(16) :
64ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    r,c = numpy.dot(affine,[y-7.5, x-7.5])
65ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    tps = gettaps([r+7.5,c+7.5])
66ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    j=0
67ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    for tp in tps :
68ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      p,i = tp
69ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      r,c = p
70ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      pt[y,x,j]= [p,i]
71ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      try:
72ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        ptr[r,j,c].append([y,x])
73ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      except:
74ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        ptr[r,j,c]=[[y,x]]
75ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      j = j+1
76ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
77ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfor key in sorted(pt.keys()) :
78ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  print key,pt[key]
79ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
80ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuanglr = -99
81ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuanglj = -99
82ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuanglc = 0
83ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
84ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangshuf=""
85ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangmask=""
86ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfor r,j,c in sorted(ptr.keys()) :
87ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  for y,x in ptr[r,j,c] :
88ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    if lr != r or lj != j :
89ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      print "shuf_"+str(lr)+"_"+str(lj)+"_"+shuf.ljust(16,"0"), lc
90ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      shuf=""
91ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      lc = 0
92ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    for i in range(lc,c-1) :
93ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang      shuf = shuf +"0"
94ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    shuf = shuf + hex(x)[2]
95ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    lc =c
96ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    break
97ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  lr = r
98ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  lj = j
99ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#  print r,j,c,ptr[r,j,c]
100ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#  print
101ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
102ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangfor r,j,c in sorted(ptr.keys()) :
103ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  for y,x in ptr[r,j,c] :
104ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    print r,j,c,y,x
105ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    break
106ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang"""
107