Browse Source

Fix parallel computation.

jst 11 years ago
parent
commit
581d15cb53
3 changed files with 22 additions and 22 deletions
  1. 12 12
      converter.go
  2. 9 9
      nearest.go
  3. 1 1
      resize.go

+ 12 - 12
converter.go

@@ -48,7 +48,7 @@ func resizeGeneric(in image.Image, out *image.RGBA64, scale float64, coeffs []in
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var rgba [4]int64
 			var rgba [4]int64
 			var sum int64
 			var sum int64
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				coeff := coeffs[ci+i]
@@ -91,11 +91,11 @@ func resizeRGBA(in *image.RGBA, out *image.RGBA, scale float64, coeffs []int16,
 	maxX := in.Bounds().Dx() - 1
 	maxX := in.Bounds().Dx() - 1
 
 
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
-		row := in.Pix[(x-newBounds.Min.X)*in.Stride:]
+		row := in.Pix[x*in.Stride:]
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var rgba [4]int32
 			var rgba [4]int32
 			var sum int32
 			var sum int32
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				coeff := coeffs[ci+i]
@@ -131,11 +131,11 @@ func resizeRGBA64(in *image.RGBA64, out *image.RGBA64, scale float64, coeffs []i
 	maxX := in.Bounds().Dx() - 1
 	maxX := in.Bounds().Dx() - 1
 
 
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
-		row := in.Pix[(x-newBounds.Min.X)*in.Stride:]
+		row := in.Pix[x*in.Stride:]
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var rgba [4]int64
 			var rgba [4]int64
 			var sum int64
 			var sum int64
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				coeff := coeffs[ci+i]
@@ -183,7 +183,7 @@ func resizeGray(in *image.Gray, out *image.Gray, scale float64, coeffs []int16,
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var gray int32
 			var gray int32
 			var sum int32
 			var sum int32
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				coeff := coeffs[ci+i]
@@ -211,11 +211,11 @@ func resizeGray16(in *image.Gray16, out *image.Gray16, scale float64, coeffs []i
 	maxX := in.Bounds().Dx() - 1
 	maxX := in.Bounds().Dx() - 1
 
 
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
-		row := in.Pix[(x-newBounds.Min.X)*in.Stride:]
+		row := in.Pix[x*in.Stride:]
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var gray int64
 			var gray int64
 			var sum int64
 			var sum int64
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				coeff := coeffs[ci+i]
@@ -247,11 +247,11 @@ func resizeYCbCr(in *ycc, out *ycc, scale float64, coeffs []int16, offset []int,
 	maxX := in.Bounds().Dx() - 1
 	maxX := in.Bounds().Dx() - 1
 
 
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
-		row := in.Pix[(x-newBounds.Min.X)*in.Stride:]
+		row := in.Pix[x*in.Stride:]
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var p [3]int32
 			var p [3]int32
 			var sum int32
 			var sum int32
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				coeff := coeffs[ci+i]
@@ -285,11 +285,11 @@ func nearestYCbCr(in *ycc, out *ycc, scale float64, coeffs []bool, offset []int,
 	maxX := in.Bounds().Dx() - 1
 	maxX := in.Bounds().Dx() - 1
 
 
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
-		row := in.Pix[(x-newBounds.Min.X)*in.Stride:]
+		row := in.Pix[x*in.Stride:]
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var p [3]float32
 			var p [3]float32
 			var sum float32
 			var sum float32
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 				if coeffs[ci+i] {

+ 9 - 9
nearest.go

@@ -42,7 +42,7 @@ func nearestGeneric(in image.Image, out *image.RGBA64, scale float64, coeffs []b
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var rgba [4]float32
 			var rgba [4]float32
 			var sum float32
 			var sum float32
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 				if coeffs[ci+i] {
@@ -84,11 +84,11 @@ func nearestRGBA(in *image.RGBA, out *image.RGBA, scale float64, coeffs []bool,
 	maxX := in.Bounds().Dx() - 1
 	maxX := in.Bounds().Dx() - 1
 
 
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
-		row := in.Pix[(x-newBounds.Min.X)*in.Stride:]
+		row := in.Pix[x*in.Stride:]
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var rgba [4]float32
 			var rgba [4]float32
 			var sum float32
 			var sum float32
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 				if coeffs[ci+i] {
@@ -123,11 +123,11 @@ func nearestRGBA64(in *image.RGBA64, out *image.RGBA64, scale float64, coeffs []
 	maxX := in.Bounds().Dx() - 1
 	maxX := in.Bounds().Dx() - 1
 
 
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
-		row := in.Pix[(x-newBounds.Min.X)*in.Stride:]
+		row := in.Pix[x*in.Stride:]
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var rgba [4]float32
 			var rgba [4]float32
 			var sum float32
 			var sum float32
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 				if coeffs[ci+i] {
@@ -170,11 +170,11 @@ func nearestGray(in *image.Gray, out *image.Gray, scale float64, coeffs []bool,
 	maxX := in.Bounds().Dx() - 1
 	maxX := in.Bounds().Dx() - 1
 
 
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
-		row := in.Pix[(x-newBounds.Min.X)*in.Stride:]
+		row := in.Pix[x*in.Stride:]
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var gray float32
 			var gray float32
 			var sum float32
 			var sum float32
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 				if coeffs[ci+i] {
@@ -201,11 +201,11 @@ func nearestGray16(in *image.Gray16, out *image.Gray16, scale float64, coeffs []
 	maxX := in.Bounds().Dx() - 1
 	maxX := in.Bounds().Dx() - 1
 
 
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
 	for x := newBounds.Min.X; x < newBounds.Max.X; x++ {
-		row := in.Pix[(x-newBounds.Min.X)*in.Stride:]
+		row := in.Pix[x*in.Stride:]
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 		for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ {
 			var gray float32
 			var gray float32
 			var sum float32
 			var sum float32
-			start := offset[y-newBounds.Min.Y]
+			start := offset[y]
 			ci := (y - newBounds.Min.Y) * filterLength
 			ci := (y - newBounds.Min.Y) * filterLength
 			for i := 0; i < filterLength; i++ {
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 				if coeffs[ci+i] {

+ 1 - 1
resize.go

@@ -91,7 +91,7 @@ func Resize(width, height uint, img image.Image, interp InterpolationFunction) i
 	}
 	}
 
 
 	taps, kernel := interp.kernel()
 	taps, kernel := interp.kernel()
-	cpus := 1 //runtime.NumCPU() TODO
+	cpus := runtime.NumCPU()
 	wg := sync.WaitGroup{}
 	wg := sync.WaitGroup{}
 
 
 	// Generic access to image.Image is slow in tight loops.
 	// Generic access to image.Image is slow in tight loops.