summaryrefslogtreecommitdiff
path: root/src/pkg/image/jpeg/fdct.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/image/jpeg/fdct.go')
-rw-r--r--src/pkg/image/jpeg/fdct.go190
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)
- }
-}