Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def DCT8x8(data):
- tmp = np.zeros((64,),dtype=np.int32)
- result = np.zeros((64,),dtype=np.int32)
- for i in range(8):
- p0 = data[i * 8 + 0]
- p1 = data[i * 8 + 1]
- p2 = data[i * 8 + 2]
- p3 = data[i * 8 + 3]
- p4 = data[i * 8 + 4]
- p5 = data[i * 8 + 5]
- p6 = data[i * 8 + 6]
- p7 = data[i * 8 + 7]
- a0 = p0 + p7
- a1 = p1 + p6
- a2 = p2 + p5
- a3 = p3 + p4
- b0 = a0 + a3
- b1 = a1 + a2
- b2 = a0 - a3
- b3 = a1 - a2
- a0 = p0 - p7
- a1 = p1 - p6
- a2 = p2 - p5
- a3 = p3 - p4
- b4 = a1 + a2 + ((a0 >> 1) + a0)
- b5 = a0 - a3 - ((a2 >> 1) + a2)
- b6 = a0 + a3 - ((a1 >> 1) + a1)
- b7 = a1 - a2 + ((a3 >> 1) + a3)
- tmp[i * 8 + 0] = b0 + b1
- tmp[i * 8 + 1] = b4 + (b7 >> 2)
- tmp[i * 8 + 2] = b2 + (b3 >> 1)
- tmp[i * 8 + 3] = b5 + (b6 >> 2)
- tmp[i * 8 + 4] = b0 - b1
- tmp[i * 8 + 5] = b6 - (b5 >> 2)
- tmp[i * 8 + 6] = (b2 >> 1) - b3
- tmp[i * 8 + 7] = (b4 >> 2) - b7
- for i in range(8):
- p0 = tmp[0 * 8 + i]
- p1 = tmp[1 * 8 + i]
- p2 = tmp[2 * 8 + i]
- p3 = tmp[3 * 8 + i]
- p4 = tmp[4 * 8 + i]
- p5 = tmp[5 * 8 + i]
- p6 = tmp[6 * 8 + i]
- p7 = tmp[7 * 8 + i]
- a0 = p0 + p7
- a1 = p1 + p6
- a2 = p2 + p5
- a3 = p3 + p4
- b0 = a0 + a3
- b1 = a1 + a2
- b2 = a0 - a3
- b3 = a1 - a2
- a0 = p0 - p7
- a1 = p1 - p6
- a2 = p2 - p5
- a3 = p3 - p4
- b4 = a1 + a2 + ((a0 >> 1) + a0)
- b5 = a0 - a3 - ((a2 >> 1) + a2)
- b6 = a0 + a3 - ((a1 >> 1) + a1)
- b7 = a1 - a2 + ((a3 >> 1) + a3)
- result[0 * 8 + i] = b0 + b1
- result[1 * 8 + i] = b4 + (b7 >> 2)
- result[2 * 8 + i] = b2 + (b3 >> 1)
- result[3 * 8 + i] = b5 + (b6 >> 2)
- result[4 * 8 + i] = b0 - b1
- result[5 * 8 + i] = b6 - (b5 >> 2)
- result[6 * 8 + i] = (b2 >> 1) - b3
- result[7 * 8 + i] = (b4 >> 2) - b7
- return result
- def IDCT8x8(data):
- tmp = np.zeros((64,), dtype=np.int32)
- result = np.zeros((64,), dtype=np.int32)
- for i in range(8):
- p0 = data[i * 8 + 0]
- p1 = data[i * 8 + 1]
- p2 = data[i * 8 + 2]
- p3 = data[i * 8 + 3]
- p4 = data[i * 8 + 4]
- p5 = data[i * 8 + 5]
- p6 = data[i * 8 + 6]
- p7 = data[i * 8 + 7]
- a0 = p0 + p4
- a1 = p0 - p4
- a2 = p6 - (p2 >> 1)
- a3 = p2 + (p6 >> 1)
- b0 = a0 + a3
- b2 = a1 - a2
- b4 = a1 + a2
- b6 = a0 - a3
- a0 = -p3 + p5 - p7 - (p7 >> 1)
- a1 = p1 + p7 - p3 - (p3 >> 1)
- a2 = -p1 + p7 + p5 + (p5 >> 1)
- a3 = p3 + p5 + p1 + (p1 >> 1)
- b1 = a0 + (a3 >> 2)
- b3 = a1 + (a2 >> 2)
- b5 = a2 - (a1 >> 2)
- b7 = a3 - (a0 >> 2)
- tmp[i * 8 + 0] = b0 + b7
- tmp[i * 8 + 1] = b2 - b5
- tmp[i * 8 + 2] = b4 + b3
- tmp[i * 8 + 3] = b6 + b1
- tmp[i * 8 + 4] = b6 - b1
- tmp[i * 8 + 5] = b4 - b3
- tmp[i * 8 + 6] = b2 + b5
- tmp[i * 8 + 7] = b0 - b7
- for i in range(8):
- p0 = tmp[0 * 8 + i]
- p1 = tmp[1 * 8 + i]
- p2 = tmp[2 * 8 + i]
- p3 = tmp[3 * 8 + i]
- p4 = tmp[4 * 8 + i]
- p5 = tmp[5 * 8 + i]
- p6 = tmp[6 * 8 + i]
- p7 = tmp[7 * 8 + i]
- a0 = p0 + p4
- a1 = p0 - p4
- a2 = p6 - (p2 >> 1)
- a3 = p2 + (p6 >> 1)
- b0 = a0 + a3
- b2 = a1 - a2
- b4 = a1 + a2
- b6 = a0 - a3
- a0 = -p3 + p5 - p7 - (p7 >> 1)
- a1 = p1 + p7 - p3 - (p3 >> 1)
- a2 = -p1 + p7 + p5 + (p5 >> 1)
- a3 = p3 + p5 + p1 + (p1 >> 1)
- b1 = a0 + (a3 >> 2)
- b7 = a3 - (a0 >> 2)
- b3 = a1 + (a2 >> 2)
- b5 = a2 - (a1 >> 2)
- result[0 * 8 + i] = ((b0 + b7) >> 6)
- result[1 * 8 + i] = ((b2 - b5) >> 6)
- result[2 * 8 + i] = ((b4 + b3) >> 6)
- result[3 * 8 + i] = ((b6 + b1) >> 6)
- result[4 * 8 + i] = ((b6 - b1) >> 6)
- result[5 * 8 + i] = ((b4 - b3) >> 6)
- result[6 * 8 + i] = ((b2 + b5) >> 6)
- result[7 * 8 + i] = ((b0 - b7) >> 6)
- result = result.clip(0,255)
- return result
Advertisement
Add Comment
Please, Sign In to add comment