diff options
Diffstat (limited to 'src/pkg/image/jpeg/fdct.go')
-rw-r--r-- | src/pkg/image/jpeg/fdct.go | 190 |
1 files changed, 0 insertions, 190 deletions
diff --git a/src/pkg/image/jpeg/fdct.go b/src/pkg/image/jpeg/fdct.go deleted file mode 100644 index 3f8be4e32..000000000 --- a/src/pkg/image/jpeg/fdct.go +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package jpeg - -// This file implements a Forward Discrete Cosine Transformation. - -/* -It is based on the code in jfdctint.c from the Independent JPEG Group, -found at http://www.ijg.org/files/jpegsrc.v8c.tar.gz. - -The "LEGAL ISSUES" section of the README in that archive says: - -In plain English: - -1. We don't promise that this software works. (But if you find any bugs, - please let us know!) -2. You can use this software for whatever you want. You don't have to pay us. -3. You may not pretend that you wrote this software. If you use it in a - program, you must acknowledge somewhere in your documentation that - you've used the IJG code. - -In legalese: - -The authors make NO WARRANTY or representation, either express or implied, -with respect to this software, its quality, accuracy, merchantability, or -fitness for a particular purpose. This software is provided "AS IS", and you, -its user, assume the entire risk as to its quality and accuracy. - -This software is copyright (C) 1991-2011, Thomas G. Lane, Guido Vollbeding. -All Rights Reserved except as specified below. - -Permission is hereby granted to use, copy, modify, and distribute this -software (or portions thereof) for any purpose, without fee, subject to these -conditions: -(1) If any part of the source code for this software is distributed, then this -README file must be included, with this copyright and no-warranty notice -unaltered; and any additions, deletions, or changes to the original files -must be clearly indicated in accompanying documentation. -(2) If only executable code is distributed, then the accompanying -documentation must state that "this software is based in part on the work of -the Independent JPEG Group". -(3) Permission for use of this software is granted only if the user accepts -full responsibility for any undesirable consequences; the authors accept -NO LIABILITY for damages of any kind. - -These conditions apply to any software derived from or based on the IJG code, -not just to the unmodified library. If you use our work, you ought to -acknowledge us. - -Permission is NOT granted for the use of any IJG author's name or company name -in advertising or publicity relating to this software or products derived from -it. This software may be referred to only as "the Independent JPEG Group's -software". - -We specifically permit and encourage the use of this software as the basis of -commercial products, provided that all warranty or liability claims are -assumed by the product vendor. -*/ - -// Trigonometric constants in 13-bit fixed point format. -const ( - fix_0_298631336 = 2446 - fix_0_390180644 = 3196 - fix_0_541196100 = 4433 - fix_0_765366865 = 6270 - fix_0_899976223 = 7373 - fix_1_175875602 = 9633 - fix_1_501321110 = 12299 - fix_1_847759065 = 15137 - fix_1_961570560 = 16069 - fix_2_053119869 = 16819 - fix_2_562915447 = 20995 - fix_3_072711026 = 25172 -) - -const ( - constBits = 13 - pass1Bits = 2 - centerJSample = 128 -) - -// fdct performs a forward DCT on an 8x8 block of coefficients, including a -// level shift. -func fdct(b *block) { - // Pass 1: process rows. - for y := 0; y < 8; y++ { - x0 := b[y*8+0] - x1 := b[y*8+1] - x2 := b[y*8+2] - x3 := b[y*8+3] - x4 := b[y*8+4] - x5 := b[y*8+5] - x6 := b[y*8+6] - x7 := b[y*8+7] - - tmp0 := x0 + x7 - tmp1 := x1 + x6 - tmp2 := x2 + x5 - tmp3 := x3 + x4 - - tmp10 := tmp0 + tmp3 - tmp12 := tmp0 - tmp3 - tmp11 := tmp1 + tmp2 - tmp13 := tmp1 - tmp2 - - tmp0 = x0 - x7 - tmp1 = x1 - x6 - tmp2 = x2 - x5 - tmp3 = x3 - x4 - - b[y*8+0] = (tmp10 + tmp11 - 8*centerJSample) << pass1Bits - b[y*8+4] = (tmp10 - tmp11) << pass1Bits - z1 := (tmp12 + tmp13) * fix_0_541196100 - z1 += 1 << (constBits - pass1Bits - 1) - b[y*8+2] = (z1 + tmp12*fix_0_765366865) >> (constBits - pass1Bits) - b[y*8+6] = (z1 - tmp13*fix_1_847759065) >> (constBits - pass1Bits) - - tmp10 = tmp0 + tmp3 - tmp11 = tmp1 + tmp2 - tmp12 = tmp0 + tmp2 - tmp13 = tmp1 + tmp3 - z1 = (tmp12 + tmp13) * fix_1_175875602 - z1 += 1 << (constBits - pass1Bits - 1) - tmp0 = tmp0 * fix_1_501321110 - tmp1 = tmp1 * fix_3_072711026 - tmp2 = tmp2 * fix_2_053119869 - tmp3 = tmp3 * fix_0_298631336 - tmp10 = tmp10 * -fix_0_899976223 - tmp11 = tmp11 * -fix_2_562915447 - tmp12 = tmp12 * -fix_0_390180644 - tmp13 = tmp13 * -fix_1_961570560 - - tmp12 += z1 - tmp13 += z1 - b[y*8+1] = (tmp0 + tmp10 + tmp12) >> (constBits - pass1Bits) - b[y*8+3] = (tmp1 + tmp11 + tmp13) >> (constBits - pass1Bits) - b[y*8+5] = (tmp2 + tmp11 + tmp12) >> (constBits - pass1Bits) - b[y*8+7] = (tmp3 + tmp10 + tmp13) >> (constBits - pass1Bits) - } - // Pass 2: process columns. - // We remove pass1Bits scaling, but leave results scaled up by an overall factor of 8. - for x := 0; x < 8; x++ { - tmp0 := b[0*8+x] + b[7*8+x] - tmp1 := b[1*8+x] + b[6*8+x] - tmp2 := b[2*8+x] + b[5*8+x] - tmp3 := b[3*8+x] + b[4*8+x] - - tmp10 := tmp0 + tmp3 + 1<<(pass1Bits-1) - tmp12 := tmp0 - tmp3 - tmp11 := tmp1 + tmp2 - tmp13 := tmp1 - tmp2 - - tmp0 = b[0*8+x] - b[7*8+x] - tmp1 = b[1*8+x] - b[6*8+x] - tmp2 = b[2*8+x] - b[5*8+x] - tmp3 = b[3*8+x] - b[4*8+x] - - b[0*8+x] = (tmp10 + tmp11) >> pass1Bits - b[4*8+x] = (tmp10 - tmp11) >> pass1Bits - - z1 := (tmp12 + tmp13) * fix_0_541196100 - z1 += 1 << (constBits + pass1Bits - 1) - b[2*8+x] = (z1 + tmp12*fix_0_765366865) >> (constBits + pass1Bits) - b[6*8+x] = (z1 - tmp13*fix_1_847759065) >> (constBits + pass1Bits) - - tmp10 = tmp0 + tmp3 - tmp11 = tmp1 + tmp2 - tmp12 = tmp0 + tmp2 - tmp13 = tmp1 + tmp3 - z1 = (tmp12 + tmp13) * fix_1_175875602 - z1 += 1 << (constBits + pass1Bits - 1) - tmp0 = tmp0 * fix_1_501321110 - tmp1 = tmp1 * fix_3_072711026 - tmp2 = tmp2 * fix_2_053119869 - tmp3 = tmp3 * fix_0_298631336 - tmp10 = tmp10 * -fix_0_899976223 - tmp11 = tmp11 * -fix_2_562915447 - tmp12 = tmp12 * -fix_0_390180644 - tmp13 = tmp13 * -fix_1_961570560 - - tmp12 += z1 - tmp13 += z1 - b[1*8+x] = (tmp0 + tmp10 + tmp12) >> (constBits + pass1Bits) - b[3*8+x] = (tmp1 + tmp11 + tmp13) >> (constBits + pass1Bits) - b[5*8+x] = (tmp2 + tmp11 + tmp12) >> (constBits + pass1Bits) - b[7*8+x] = (tmp3 + tmp10 + tmp13) >> (constBits + pass1Bits) - } -} |