From d5c5125b573bf6c6722d8d9f5a1c799c7d0d1aa1 Mon Sep 17 00:00:00 2001 From: Nigel Tao Date: Thu, 26 Mar 2015 19:33:18 +1100 Subject: [PATCH] draw: update the inlined YCbCr.RGBA code to use 16 bit color. This matches the standard library change at https://go-review.googlesource.com/#/c/8073/ Change-Id: I216028e18678a70e449167cd9ab910c63d37adcc Reviewed-on: https://go-review.googlesource.com/8075 Reviewed-by: Rob Pike --- draw/gen.go | 54 +- draw/impl.go | 1688 +++++++++++++---------------- testdata/go-turns-two-down-ab.png | Bin 21171 -> 21385 bytes testdata/go-turns-two-down-bl.png | Bin 18547 -> 18604 bytes testdata/go-turns-two-down-cr.png | Bin 19400 -> 19545 bytes 5 files changed, 792 insertions(+), 950 deletions(-) diff --git a/draw/gen.go b/draw/gen.go index 3ff3d84..1acae2e 100644 --- a/draw/gen.go +++ b/draw/gen.go @@ -479,16 +479,10 @@ func expnDollar(prefix, dollar, suffix string, d *data) string { fmt.Fprintf(buf, ""+ "%si := %s\n"+ "%sj := %s\n"+ - "%s\n"+ - "%sr%s := uint32(%sr8) * 0x101\n"+ - "%sg%s := uint32(%sg8) * 0x101\n"+ - "%sb%s := uint32(%sb8) * 0x101\n", + "%s\n", lhs, pixOffset("src", args[0], args[1], "", "*src.YStride"), lhs, cOffset(args[0], args[1], d.sratio), - ycbcrToRGB(lhs), - lhs, tmp, lhs, - lhs, tmp, lhs, - lhs, tmp, lhs, + ycbcrToRGB(lhs, tmp), ) } @@ -643,34 +637,34 @@ func cOffset(x, y, sratio string) string { return fmt.Sprintf("unsupported sratio %q", sratio) } -// TODO: should we have a color.YCbCrToRGB48 function that returns 16-bit -// color? - -func ycbcrToRGB(lhs string) string { - return strings.Replace(` - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. +func ycbcrToRGB(lhs, tmp string) string { + s := ` + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. $yy1 := int(src.Y[$i])<<16 + 1<<15 $cb1 := int(src.Cb[$j]) - 128 $cr1 := int(src.Cr[$j]) - 128 - $r8 := ($yy1 + 91881*$cr1) >> 16 - $g8 := ($yy1 - 22554*$cb1 - 46802*$cr1) >> 16 - $b8 := ($yy1 + 116130*$cb1) >> 16 - if $r8 < 0 { - $r8 = 0 - } else if $r8 > 0xff { - $r8 = 0xff + $r@ := ($yy1 + 91881*$cr1) >> 8 + $g@ := ($yy1 - 22554*$cb1 - 46802*$cr1) >> 8 + $b@ := ($yy1 + 116130*$cb1) >> 8 + if $r@ < 0 { + $r@ = 0 + } else if $r@ > 0xffff { + $r@ = 0xffff } - if $g8 < 0 { - $g8 = 0 - } else if $g8 > 0xff { - $g8 = 0xff + if $g@ < 0 { + $g@ = 0 + } else if $g@ > 0xffff { + $g@ = 0xffff } - if $b8 < 0 { - $b8 = 0 - } else if $b8 > 0xff { - $b8 = 0xff + if $b@ < 0 { + $b@ = 0 + } else if $b@ > 0xffff { + $b@ = 0xffff } - `, "$", lhs, -1) + ` + s = strings.Replace(s, "$", lhs, -1) + s = strings.Replace(s, "@", tmp, -1) + return s } func split(s, sep string) (string, string) { diff --git a/draw/impl.go b/draw/impl.go index f144531..6278c92 100644 --- a/draw/impl.go +++ b/draw/impl.go @@ -204,32 +204,28 @@ func (nnInterpolator) scale_RGBA_YCbCr444(dst *image.RGBA, dr, adr image.Rectang pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx) - src.Rect.Min.X) pj := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff } - - pr := uint32(pr8) * 0x101 - pg := uint32(pg8) * 0x101 - pb := uint32(pb8) * 0x101 dst.Pix[d+0] = uint8(uint32(pr) >> 8) dst.Pix[d+1] = uint8(uint32(pg) >> 8) dst.Pix[d+2] = uint8(uint32(pb) >> 8) @@ -251,32 +247,28 @@ func (nnInterpolator) scale_RGBA_YCbCr422(dst *image.RGBA, dr, adr image.Rectang pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx) - src.Rect.Min.X) pj := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff } - - pr := uint32(pr8) * 0x101 - pg := uint32(pg8) * 0x101 - pb := uint32(pb8) * 0x101 dst.Pix[d+0] = uint8(uint32(pr) >> 8) dst.Pix[d+1] = uint8(uint32(pg) >> 8) dst.Pix[d+2] = uint8(uint32(pb) >> 8) @@ -298,32 +290,28 @@ func (nnInterpolator) scale_RGBA_YCbCr420(dst *image.RGBA, dr, adr image.Rectang pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx) - src.Rect.Min.X) pj := ((sr.Min.Y+int(sy))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff } - - pr := uint32(pr8) * 0x101 - pg := uint32(pg8) * 0x101 - pb := uint32(pb8) * 0x101 dst.Pix[d+0] = uint8(uint32(pr) >> 8) dst.Pix[d+1] = uint8(uint32(pg) >> 8) dst.Pix[d+2] = uint8(uint32(pb) >> 8) @@ -345,32 +333,28 @@ func (nnInterpolator) scale_RGBA_YCbCr440(dst *image.RGBA, dr, adr image.Rectang pi := (sr.Min.Y+int(sy)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx) - src.Rect.Min.X) pj := ((sr.Min.Y+int(sy))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff } - - pr := uint32(pr8) * 0x101 - pg := uint32(pg8) * 0x101 - pb := uint32(pb8) * 0x101 dst.Pix[d+0] = uint8(uint32(pr) >> 8) dst.Pix[d+1] = uint8(uint32(pg) >> 8) dst.Pix[d+2] = uint8(uint32(pb) >> 8) @@ -503,32 +487,28 @@ func (nnInterpolator) transform_RGBA_YCbCr444(dst *image.RGBA, dr, adr image.Rec pi := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) pj := (sy0-src.Rect.Min.Y)*src.CStride + (sx0 - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff } - - pr := uint32(pr8) * 0x101 - pg := uint32(pg8) * 0x101 - pb := uint32(pb8) * 0x101 dst.Pix[d+0] = uint8(uint32(pr) >> 8) dst.Pix[d+1] = uint8(uint32(pg) >> 8) dst.Pix[d+2] = uint8(uint32(pb) >> 8) @@ -551,32 +531,28 @@ func (nnInterpolator) transform_RGBA_YCbCr422(dst *image.RGBA, dr, adr image.Rec pi := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) pj := (sy0-src.Rect.Min.Y)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff } - - pr := uint32(pr8) * 0x101 - pg := uint32(pg8) * 0x101 - pb := uint32(pb8) * 0x101 dst.Pix[d+0] = uint8(uint32(pr) >> 8) dst.Pix[d+1] = uint8(uint32(pg) >> 8) dst.Pix[d+2] = uint8(uint32(pb) >> 8) @@ -599,32 +575,28 @@ func (nnInterpolator) transform_RGBA_YCbCr420(dst *image.RGBA, dr, adr image.Rec pi := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) pj := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff } - - pr := uint32(pr8) * 0x101 - pg := uint32(pg8) * 0x101 - pb := uint32(pb8) * 0x101 dst.Pix[d+0] = uint8(uint32(pr) >> 8) dst.Pix[d+1] = uint8(uint32(pg) >> 8) dst.Pix[d+2] = uint8(uint32(pb) >> 8) @@ -647,32 +619,28 @@ func (nnInterpolator) transform_RGBA_YCbCr440(dst *image.RGBA, dr, adr image.Rec pi := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) pj := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + (sx0 - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pr := (pyy1 + 91881*pcr1) >> 8 + pg := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pb := (pyy1 + 116130*pcb1) >> 8 + if pr < 0 { + pr = 0 + } else if pr > 0xffff { + pr = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pg < 0 { + pg = 0 + } else if pg > 0xffff { + pg = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pb < 0 { + pb = 0 + } else if pb > 0xffff { + pb = 0xffff } - - pr := uint32(pr8) * 0x101 - pg := uint32(pg8) * 0x101 - pb := uint32(pb8) * 0x101 dst.Pix[d+0] = uint8(uint32(pr) >> 8) dst.Pix[d+1] = uint8(uint32(pg) >> 8) dst.Pix[d+2] = uint8(uint32(pb) >> 8) @@ -1132,64 +1100,58 @@ func (ablInterpolator) scale_RGBA_YCbCr444(dst *image.RGBA, dr, adr image.Rectan s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) s00j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s00yy1 := int(src.Y[s00i])<<16 + 1<<15 s00cb1 := int(src.Cb[s00j]) - 128 s00cr1 := int(src.Cr[s00j]) - 128 - s00r8 := (s00yy1 + 91881*s00cr1) >> 16 - s00g8 := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 16 - s00b8 := (s00yy1 + 116130*s00cb1) >> 16 - if s00r8 < 0 { - s00r8 = 0 - } else if s00r8 > 0xff { - s00r8 = 0xff + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff } - if s00g8 < 0 { - s00g8 = 0 - } else if s00g8 > 0xff { - s00g8 = 0xff + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff } - if s00b8 < 0 { - s00b8 = 0 - } else if s00b8 > 0xff { - s00b8 = 0xff + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff } - s00ru := uint32(s00r8) * 0x101 - s00gu := uint32(s00g8) * 0x101 - s00bu := uint32(s00b8) * 0x101 s00r := float64(s00ru) s00g := float64(s00gu) s00b := float64(s00bu) s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) s10j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s10yy1 := int(src.Y[s10i])<<16 + 1<<15 s10cb1 := int(src.Cb[s10j]) - 128 s10cr1 := int(src.Cr[s10j]) - 128 - s10r8 := (s10yy1 + 91881*s10cr1) >> 16 - s10g8 := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 16 - s10b8 := (s10yy1 + 116130*s10cb1) >> 16 - if s10r8 < 0 { - s10r8 = 0 - } else if s10r8 > 0xff { - s10r8 = 0xff + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff } - if s10g8 < 0 { - s10g8 = 0 - } else if s10g8 > 0xff { - s10g8 = 0xff + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff } - if s10b8 < 0 { - s10b8 = 0 - } else if s10b8 > 0xff { - s10b8 = 0xff + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff } - s10ru := uint32(s10r8) * 0x101 - s10gu := uint32(s10g8) * 0x101 - s10bu := uint32(s10b8) * 0x101 s10r := float64(s10ru) s10g := float64(s10gu) s10b := float64(s10bu) @@ -1199,64 +1161,58 @@ func (ablInterpolator) scale_RGBA_YCbCr444(dst *image.RGBA, dr, adr image.Rectan s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) s01j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s01yy1 := int(src.Y[s01i])<<16 + 1<<15 s01cb1 := int(src.Cb[s01j]) - 128 s01cr1 := int(src.Cr[s01j]) - 128 - s01r8 := (s01yy1 + 91881*s01cr1) >> 16 - s01g8 := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 16 - s01b8 := (s01yy1 + 116130*s01cb1) >> 16 - if s01r8 < 0 { - s01r8 = 0 - } else if s01r8 > 0xff { - s01r8 = 0xff + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff } - if s01g8 < 0 { - s01g8 = 0 - } else if s01g8 > 0xff { - s01g8 = 0xff + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff } - if s01b8 < 0 { - s01b8 = 0 - } else if s01b8 > 0xff { - s01b8 = 0xff + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff } - s01ru := uint32(s01r8) * 0x101 - s01gu := uint32(s01g8) * 0x101 - s01bu := uint32(s01b8) * 0x101 s01r := float64(s01ru) s01g := float64(s01gu) s01b := float64(s01bu) s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) s11j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s11yy1 := int(src.Y[s11i])<<16 + 1<<15 s11cb1 := int(src.Cb[s11j]) - 128 s11cr1 := int(src.Cr[s11j]) - 128 - s11r8 := (s11yy1 + 91881*s11cr1) >> 16 - s11g8 := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 16 - s11b8 := (s11yy1 + 116130*s11cb1) >> 16 - if s11r8 < 0 { - s11r8 = 0 - } else if s11r8 > 0xff { - s11r8 = 0xff + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff } - if s11g8 < 0 { - s11g8 = 0 - } else if s11g8 > 0xff { - s11g8 = 0xff + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff } - if s11b8 < 0 { - s11b8 = 0 - } else if s11b8 > 0xff { - s11b8 = 0xff + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff } - s11ru := uint32(s11r8) * 0x101 - s11gu := uint32(s11g8) * 0x101 - s11bu := uint32(s11b8) * 0x101 s11r := float64(s11ru) s11g := float64(s11gu) s11b := float64(s11bu) @@ -1316,64 +1272,58 @@ func (ablInterpolator) scale_RGBA_YCbCr422(dst *image.RGBA, dr, adr image.Rectan s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) s00j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s00yy1 := int(src.Y[s00i])<<16 + 1<<15 s00cb1 := int(src.Cb[s00j]) - 128 s00cr1 := int(src.Cr[s00j]) - 128 - s00r8 := (s00yy1 + 91881*s00cr1) >> 16 - s00g8 := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 16 - s00b8 := (s00yy1 + 116130*s00cb1) >> 16 - if s00r8 < 0 { - s00r8 = 0 - } else if s00r8 > 0xff { - s00r8 = 0xff + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff } - if s00g8 < 0 { - s00g8 = 0 - } else if s00g8 > 0xff { - s00g8 = 0xff + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff } - if s00b8 < 0 { - s00b8 = 0 - } else if s00b8 > 0xff { - s00b8 = 0xff + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff } - s00ru := uint32(s00r8) * 0x101 - s00gu := uint32(s00g8) * 0x101 - s00bu := uint32(s00b8) * 0x101 s00r := float64(s00ru) s00g := float64(s00gu) s00b := float64(s00bu) s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) s10j := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s10yy1 := int(src.Y[s10i])<<16 + 1<<15 s10cb1 := int(src.Cb[s10j]) - 128 s10cr1 := int(src.Cr[s10j]) - 128 - s10r8 := (s10yy1 + 91881*s10cr1) >> 16 - s10g8 := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 16 - s10b8 := (s10yy1 + 116130*s10cb1) >> 16 - if s10r8 < 0 { - s10r8 = 0 - } else if s10r8 > 0xff { - s10r8 = 0xff + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff } - if s10g8 < 0 { - s10g8 = 0 - } else if s10g8 > 0xff { - s10g8 = 0xff + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff } - if s10b8 < 0 { - s10b8 = 0 - } else if s10b8 > 0xff { - s10b8 = 0xff + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff } - s10ru := uint32(s10r8) * 0x101 - s10gu := uint32(s10g8) * 0x101 - s10bu := uint32(s10b8) * 0x101 s10r := float64(s10ru) s10g := float64(s10gu) s10b := float64(s10bu) @@ -1383,64 +1333,58 @@ func (ablInterpolator) scale_RGBA_YCbCr422(dst *image.RGBA, dr, adr image.Rectan s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) s01j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s01yy1 := int(src.Y[s01i])<<16 + 1<<15 s01cb1 := int(src.Cb[s01j]) - 128 s01cr1 := int(src.Cr[s01j]) - 128 - s01r8 := (s01yy1 + 91881*s01cr1) >> 16 - s01g8 := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 16 - s01b8 := (s01yy1 + 116130*s01cb1) >> 16 - if s01r8 < 0 { - s01r8 = 0 - } else if s01r8 > 0xff { - s01r8 = 0xff + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff } - if s01g8 < 0 { - s01g8 = 0 - } else if s01g8 > 0xff { - s01g8 = 0xff + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff } - if s01b8 < 0 { - s01b8 = 0 - } else if s01b8 > 0xff { - s01b8 = 0xff + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff } - s01ru := uint32(s01r8) * 0x101 - s01gu := uint32(s01g8) * 0x101 - s01bu := uint32(s01b8) * 0x101 s01r := float64(s01ru) s01g := float64(s01gu) s01b := float64(s01bu) s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) s11j := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s11yy1 := int(src.Y[s11i])<<16 + 1<<15 s11cb1 := int(src.Cb[s11j]) - 128 s11cr1 := int(src.Cr[s11j]) - 128 - s11r8 := (s11yy1 + 91881*s11cr1) >> 16 - s11g8 := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 16 - s11b8 := (s11yy1 + 116130*s11cb1) >> 16 - if s11r8 < 0 { - s11r8 = 0 - } else if s11r8 > 0xff { - s11r8 = 0xff + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff } - if s11g8 < 0 { - s11g8 = 0 - } else if s11g8 > 0xff { - s11g8 = 0xff + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff } - if s11b8 < 0 { - s11b8 = 0 - } else if s11b8 > 0xff { - s11b8 = 0xff + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff } - s11ru := uint32(s11r8) * 0x101 - s11gu := uint32(s11g8) * 0x101 - s11bu := uint32(s11b8) * 0x101 s11r := float64(s11ru) s11g := float64(s11gu) s11b := float64(s11bu) @@ -1500,64 +1444,58 @@ func (ablInterpolator) scale_RGBA_YCbCr420(dst *image.RGBA, dr, adr image.Rectan s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) s00j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s00yy1 := int(src.Y[s00i])<<16 + 1<<15 s00cb1 := int(src.Cb[s00j]) - 128 s00cr1 := int(src.Cr[s00j]) - 128 - s00r8 := (s00yy1 + 91881*s00cr1) >> 16 - s00g8 := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 16 - s00b8 := (s00yy1 + 116130*s00cb1) >> 16 - if s00r8 < 0 { - s00r8 = 0 - } else if s00r8 > 0xff { - s00r8 = 0xff + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff } - if s00g8 < 0 { - s00g8 = 0 - } else if s00g8 > 0xff { - s00g8 = 0xff + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff } - if s00b8 < 0 { - s00b8 = 0 - } else if s00b8 > 0xff { - s00b8 = 0xff + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff } - s00ru := uint32(s00r8) * 0x101 - s00gu := uint32(s00g8) * 0x101 - s00bu := uint32(s00b8) * 0x101 s00r := float64(s00ru) s00g := float64(s00gu) s00b := float64(s00bu) s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) s10j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s10yy1 := int(src.Y[s10i])<<16 + 1<<15 s10cb1 := int(src.Cb[s10j]) - 128 s10cr1 := int(src.Cr[s10j]) - 128 - s10r8 := (s10yy1 + 91881*s10cr1) >> 16 - s10g8 := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 16 - s10b8 := (s10yy1 + 116130*s10cb1) >> 16 - if s10r8 < 0 { - s10r8 = 0 - } else if s10r8 > 0xff { - s10r8 = 0xff + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff } - if s10g8 < 0 { - s10g8 = 0 - } else if s10g8 > 0xff { - s10g8 = 0xff + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff } - if s10b8 < 0 { - s10b8 = 0 - } else if s10b8 > 0xff { - s10b8 = 0xff + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff } - s10ru := uint32(s10r8) * 0x101 - s10gu := uint32(s10g8) * 0x101 - s10bu := uint32(s10b8) * 0x101 s10r := float64(s10ru) s10g := float64(s10gu) s10b := float64(s10bu) @@ -1567,64 +1505,58 @@ func (ablInterpolator) scale_RGBA_YCbCr420(dst *image.RGBA, dr, adr image.Rectan s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) s01j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx0))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s01yy1 := int(src.Y[s01i])<<16 + 1<<15 s01cb1 := int(src.Cb[s01j]) - 128 s01cr1 := int(src.Cr[s01j]) - 128 - s01r8 := (s01yy1 + 91881*s01cr1) >> 16 - s01g8 := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 16 - s01b8 := (s01yy1 + 116130*s01cb1) >> 16 - if s01r8 < 0 { - s01r8 = 0 - } else if s01r8 > 0xff { - s01r8 = 0xff + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff } - if s01g8 < 0 { - s01g8 = 0 - } else if s01g8 > 0xff { - s01g8 = 0xff + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff } - if s01b8 < 0 { - s01b8 = 0 - } else if s01b8 > 0xff { - s01b8 = 0xff + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff } - s01ru := uint32(s01r8) * 0x101 - s01gu := uint32(s01g8) * 0x101 - s01bu := uint32(s01b8) * 0x101 s01r := float64(s01ru) s01g := float64(s01gu) s01b := float64(s01bu) s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) s11j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(sx1))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s11yy1 := int(src.Y[s11i])<<16 + 1<<15 s11cb1 := int(src.Cb[s11j]) - 128 s11cr1 := int(src.Cr[s11j]) - 128 - s11r8 := (s11yy1 + 91881*s11cr1) >> 16 - s11g8 := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 16 - s11b8 := (s11yy1 + 116130*s11cb1) >> 16 - if s11r8 < 0 { - s11r8 = 0 - } else if s11r8 > 0xff { - s11r8 = 0xff + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff } - if s11g8 < 0 { - s11g8 = 0 - } else if s11g8 > 0xff { - s11g8 = 0xff + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff } - if s11b8 < 0 { - s11b8 = 0 - } else if s11b8 > 0xff { - s11b8 = 0xff + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff } - s11ru := uint32(s11r8) * 0x101 - s11gu := uint32(s11g8) * 0x101 - s11bu := uint32(s11b8) * 0x101 s11r := float64(s11ru) s11g := float64(s11gu) s11b := float64(s11bu) @@ -1684,64 +1616,58 @@ func (ablInterpolator) scale_RGBA_YCbCr440(dst *image.RGBA, dr, adr image.Rectan s00i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) s00j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s00yy1 := int(src.Y[s00i])<<16 + 1<<15 s00cb1 := int(src.Cb[s00j]) - 128 s00cr1 := int(src.Cr[s00j]) - 128 - s00r8 := (s00yy1 + 91881*s00cr1) >> 16 - s00g8 := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 16 - s00b8 := (s00yy1 + 116130*s00cb1) >> 16 - if s00r8 < 0 { - s00r8 = 0 - } else if s00r8 > 0xff { - s00r8 = 0xff + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff } - if s00g8 < 0 { - s00g8 = 0 - } else if s00g8 > 0xff { - s00g8 = 0xff + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff } - if s00b8 < 0 { - s00b8 = 0 - } else if s00b8 > 0xff { - s00b8 = 0xff + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff } - s00ru := uint32(s00r8) * 0x101 - s00gu := uint32(s00g8) * 0x101 - s00bu := uint32(s00b8) * 0x101 s00r := float64(s00ru) s00g := float64(s00gu) s00b := float64(s00bu) s10i := (sr.Min.Y+int(sy0)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) s10j := ((sr.Min.Y+int(sy0))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s10yy1 := int(src.Y[s10i])<<16 + 1<<15 s10cb1 := int(src.Cb[s10j]) - 128 s10cr1 := int(src.Cr[s10j]) - 128 - s10r8 := (s10yy1 + 91881*s10cr1) >> 16 - s10g8 := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 16 - s10b8 := (s10yy1 + 116130*s10cb1) >> 16 - if s10r8 < 0 { - s10r8 = 0 - } else if s10r8 > 0xff { - s10r8 = 0xff + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff } - if s10g8 < 0 { - s10g8 = 0 - } else if s10g8 > 0xff { - s10g8 = 0xff + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff } - if s10b8 < 0 { - s10b8 = 0 - } else if s10b8 > 0xff { - s10b8 = 0xff + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff } - s10ru := uint32(s10r8) * 0x101 - s10gu := uint32(s10g8) * 0x101 - s10bu := uint32(s10b8) * 0x101 s10r := float64(s10ru) s10g := float64(s10gu) s10b := float64(s10bu) @@ -1751,64 +1677,58 @@ func (ablInterpolator) scale_RGBA_YCbCr440(dst *image.RGBA, dr, adr image.Rectan s01i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) s01j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx0) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s01yy1 := int(src.Y[s01i])<<16 + 1<<15 s01cb1 := int(src.Cb[s01j]) - 128 s01cr1 := int(src.Cr[s01j]) - 128 - s01r8 := (s01yy1 + 91881*s01cr1) >> 16 - s01g8 := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 16 - s01b8 := (s01yy1 + 116130*s01cb1) >> 16 - if s01r8 < 0 { - s01r8 = 0 - } else if s01r8 > 0xff { - s01r8 = 0xff + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff } - if s01g8 < 0 { - s01g8 = 0 - } else if s01g8 > 0xff { - s01g8 = 0xff + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff } - if s01b8 < 0 { - s01b8 = 0 - } else if s01b8 > 0xff { - s01b8 = 0xff + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff } - s01ru := uint32(s01r8) * 0x101 - s01gu := uint32(s01g8) * 0x101 - s01bu := uint32(s01b8) * 0x101 s01r := float64(s01ru) s01g := float64(s01gu) s01b := float64(s01bu) s11i := (sr.Min.Y+int(sy1)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) s11j := ((sr.Min.Y+int(sy1))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(sx1) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s11yy1 := int(src.Y[s11i])<<16 + 1<<15 s11cb1 := int(src.Cb[s11j]) - 128 s11cr1 := int(src.Cr[s11j]) - 128 - s11r8 := (s11yy1 + 91881*s11cr1) >> 16 - s11g8 := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 16 - s11b8 := (s11yy1 + 116130*s11cb1) >> 16 - if s11r8 < 0 { - s11r8 = 0 - } else if s11r8 > 0xff { - s11r8 = 0xff + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff } - if s11g8 < 0 { - s11g8 = 0 - } else if s11g8 > 0xff { - s11g8 = 0xff + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff } - if s11b8 < 0 { - s11b8 = 0 - } else if s11b8 > 0xff { - s11b8 = 0xff + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff } - s11ru := uint32(s11r8) * 0x101 - s11gu := uint32(s11g8) * 0x101 - s11bu := uint32(s11b8) * 0x101 s11r := float64(s11ru) s11g := float64(s11gu) s11b := float64(s11bu) @@ -2285,64 +2205,58 @@ func (ablInterpolator) transform_RGBA_YCbCr444(dst *image.RGBA, dr, adr image.Re s00i := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) s00j := (sy0-src.Rect.Min.Y)*src.CStride + (sx0 - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s00yy1 := int(src.Y[s00i])<<16 + 1<<15 s00cb1 := int(src.Cb[s00j]) - 128 s00cr1 := int(src.Cr[s00j]) - 128 - s00r8 := (s00yy1 + 91881*s00cr1) >> 16 - s00g8 := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 16 - s00b8 := (s00yy1 + 116130*s00cb1) >> 16 - if s00r8 < 0 { - s00r8 = 0 - } else if s00r8 > 0xff { - s00r8 = 0xff + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff } - if s00g8 < 0 { - s00g8 = 0 - } else if s00g8 > 0xff { - s00g8 = 0xff + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff } - if s00b8 < 0 { - s00b8 = 0 - } else if s00b8 > 0xff { - s00b8 = 0xff + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff } - s00ru := uint32(s00r8) * 0x101 - s00gu := uint32(s00g8) * 0x101 - s00bu := uint32(s00b8) * 0x101 s00r := float64(s00ru) s00g := float64(s00gu) s00b := float64(s00bu) s10i := (sy0-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) s10j := (sy0-src.Rect.Min.Y)*src.CStride + (sx1 - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s10yy1 := int(src.Y[s10i])<<16 + 1<<15 s10cb1 := int(src.Cb[s10j]) - 128 s10cr1 := int(src.Cr[s10j]) - 128 - s10r8 := (s10yy1 + 91881*s10cr1) >> 16 - s10g8 := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 16 - s10b8 := (s10yy1 + 116130*s10cb1) >> 16 - if s10r8 < 0 { - s10r8 = 0 - } else if s10r8 > 0xff { - s10r8 = 0xff + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff } - if s10g8 < 0 { - s10g8 = 0 - } else if s10g8 > 0xff { - s10g8 = 0xff + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff } - if s10b8 < 0 { - s10b8 = 0 - } else if s10b8 > 0xff { - s10b8 = 0xff + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff } - s10ru := uint32(s10r8) * 0x101 - s10gu := uint32(s10g8) * 0x101 - s10bu := uint32(s10b8) * 0x101 s10r := float64(s10ru) s10g := float64(s10gu) s10b := float64(s10bu) @@ -2352,64 +2266,58 @@ func (ablInterpolator) transform_RGBA_YCbCr444(dst *image.RGBA, dr, adr image.Re s01i := (sy1-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) s01j := (sy1-src.Rect.Min.Y)*src.CStride + (sx0 - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s01yy1 := int(src.Y[s01i])<<16 + 1<<15 s01cb1 := int(src.Cb[s01j]) - 128 s01cr1 := int(src.Cr[s01j]) - 128 - s01r8 := (s01yy1 + 91881*s01cr1) >> 16 - s01g8 := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 16 - s01b8 := (s01yy1 + 116130*s01cb1) >> 16 - if s01r8 < 0 { - s01r8 = 0 - } else if s01r8 > 0xff { - s01r8 = 0xff + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff } - if s01g8 < 0 { - s01g8 = 0 - } else if s01g8 > 0xff { - s01g8 = 0xff + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff } - if s01b8 < 0 { - s01b8 = 0 - } else if s01b8 > 0xff { - s01b8 = 0xff + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff } - s01ru := uint32(s01r8) * 0x101 - s01gu := uint32(s01g8) * 0x101 - s01bu := uint32(s01b8) * 0x101 s01r := float64(s01ru) s01g := float64(s01gu) s01b := float64(s01bu) s11i := (sy1-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) s11j := (sy1-src.Rect.Min.Y)*src.CStride + (sx1 - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s11yy1 := int(src.Y[s11i])<<16 + 1<<15 s11cb1 := int(src.Cb[s11j]) - 128 s11cr1 := int(src.Cr[s11j]) - 128 - s11r8 := (s11yy1 + 91881*s11cr1) >> 16 - s11g8 := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 16 - s11b8 := (s11yy1 + 116130*s11cb1) >> 16 - if s11r8 < 0 { - s11r8 = 0 - } else if s11r8 > 0xff { - s11r8 = 0xff + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff } - if s11g8 < 0 { - s11g8 = 0 - } else if s11g8 > 0xff { - s11g8 = 0xff + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff } - if s11b8 < 0 { - s11b8 = 0 - } else if s11b8 > 0xff { - s11b8 = 0xff + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff } - s11ru := uint32(s11r8) * 0x101 - s11gu := uint32(s11g8) * 0x101 - s11bu := uint32(s11b8) * 0x101 s11r := float64(s11ru) s11g := float64(s11gu) s11b := float64(s11bu) @@ -2470,64 +2378,58 @@ func (ablInterpolator) transform_RGBA_YCbCr422(dst *image.RGBA, dr, adr image.Re s00i := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) s00j := (sy0-src.Rect.Min.Y)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s00yy1 := int(src.Y[s00i])<<16 + 1<<15 s00cb1 := int(src.Cb[s00j]) - 128 s00cr1 := int(src.Cr[s00j]) - 128 - s00r8 := (s00yy1 + 91881*s00cr1) >> 16 - s00g8 := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 16 - s00b8 := (s00yy1 + 116130*s00cb1) >> 16 - if s00r8 < 0 { - s00r8 = 0 - } else if s00r8 > 0xff { - s00r8 = 0xff + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff } - if s00g8 < 0 { - s00g8 = 0 - } else if s00g8 > 0xff { - s00g8 = 0xff + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff } - if s00b8 < 0 { - s00b8 = 0 - } else if s00b8 > 0xff { - s00b8 = 0xff + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff } - s00ru := uint32(s00r8) * 0x101 - s00gu := uint32(s00g8) * 0x101 - s00bu := uint32(s00b8) * 0x101 s00r := float64(s00ru) s00g := float64(s00gu) s00b := float64(s00bu) s10i := (sy0-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) s10j := (sy0-src.Rect.Min.Y)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s10yy1 := int(src.Y[s10i])<<16 + 1<<15 s10cb1 := int(src.Cb[s10j]) - 128 s10cr1 := int(src.Cr[s10j]) - 128 - s10r8 := (s10yy1 + 91881*s10cr1) >> 16 - s10g8 := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 16 - s10b8 := (s10yy1 + 116130*s10cb1) >> 16 - if s10r8 < 0 { - s10r8 = 0 - } else if s10r8 > 0xff { - s10r8 = 0xff + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff } - if s10g8 < 0 { - s10g8 = 0 - } else if s10g8 > 0xff { - s10g8 = 0xff + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff } - if s10b8 < 0 { - s10b8 = 0 - } else if s10b8 > 0xff { - s10b8 = 0xff + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff } - s10ru := uint32(s10r8) * 0x101 - s10gu := uint32(s10g8) * 0x101 - s10bu := uint32(s10b8) * 0x101 s10r := float64(s10ru) s10g := float64(s10gu) s10b := float64(s10bu) @@ -2537,64 +2439,58 @@ func (ablInterpolator) transform_RGBA_YCbCr422(dst *image.RGBA, dr, adr image.Re s01i := (sy1-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) s01j := (sy1-src.Rect.Min.Y)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s01yy1 := int(src.Y[s01i])<<16 + 1<<15 s01cb1 := int(src.Cb[s01j]) - 128 s01cr1 := int(src.Cr[s01j]) - 128 - s01r8 := (s01yy1 + 91881*s01cr1) >> 16 - s01g8 := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 16 - s01b8 := (s01yy1 + 116130*s01cb1) >> 16 - if s01r8 < 0 { - s01r8 = 0 - } else if s01r8 > 0xff { - s01r8 = 0xff + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff } - if s01g8 < 0 { - s01g8 = 0 - } else if s01g8 > 0xff { - s01g8 = 0xff + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff } - if s01b8 < 0 { - s01b8 = 0 - } else if s01b8 > 0xff { - s01b8 = 0xff + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff } - s01ru := uint32(s01r8) * 0x101 - s01gu := uint32(s01g8) * 0x101 - s01bu := uint32(s01b8) * 0x101 s01r := float64(s01ru) s01g := float64(s01gu) s01b := float64(s01bu) s11i := (sy1-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) s11j := (sy1-src.Rect.Min.Y)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s11yy1 := int(src.Y[s11i])<<16 + 1<<15 s11cb1 := int(src.Cb[s11j]) - 128 s11cr1 := int(src.Cr[s11j]) - 128 - s11r8 := (s11yy1 + 91881*s11cr1) >> 16 - s11g8 := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 16 - s11b8 := (s11yy1 + 116130*s11cb1) >> 16 - if s11r8 < 0 { - s11r8 = 0 - } else if s11r8 > 0xff { - s11r8 = 0xff + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff } - if s11g8 < 0 { - s11g8 = 0 - } else if s11g8 > 0xff { - s11g8 = 0xff + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff } - if s11b8 < 0 { - s11b8 = 0 - } else if s11b8 > 0xff { - s11b8 = 0xff + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff } - s11ru := uint32(s11r8) * 0x101 - s11gu := uint32(s11g8) * 0x101 - s11bu := uint32(s11b8) * 0x101 s11r := float64(s11ru) s11g := float64(s11gu) s11b := float64(s11bu) @@ -2655,64 +2551,58 @@ func (ablInterpolator) transform_RGBA_YCbCr420(dst *image.RGBA, dr, adr image.Re s00i := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) s00j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s00yy1 := int(src.Y[s00i])<<16 + 1<<15 s00cb1 := int(src.Cb[s00j]) - 128 s00cr1 := int(src.Cr[s00j]) - 128 - s00r8 := (s00yy1 + 91881*s00cr1) >> 16 - s00g8 := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 16 - s00b8 := (s00yy1 + 116130*s00cb1) >> 16 - if s00r8 < 0 { - s00r8 = 0 - } else if s00r8 > 0xff { - s00r8 = 0xff + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff } - if s00g8 < 0 { - s00g8 = 0 - } else if s00g8 > 0xff { - s00g8 = 0xff + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff } - if s00b8 < 0 { - s00b8 = 0 - } else if s00b8 > 0xff { - s00b8 = 0xff + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff } - s00ru := uint32(s00r8) * 0x101 - s00gu := uint32(s00g8) * 0x101 - s00bu := uint32(s00b8) * 0x101 s00r := float64(s00ru) s00g := float64(s00gu) s00b := float64(s00bu) s10i := (sy0-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) s10j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s10yy1 := int(src.Y[s10i])<<16 + 1<<15 s10cb1 := int(src.Cb[s10j]) - 128 s10cr1 := int(src.Cr[s10j]) - 128 - s10r8 := (s10yy1 + 91881*s10cr1) >> 16 - s10g8 := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 16 - s10b8 := (s10yy1 + 116130*s10cb1) >> 16 - if s10r8 < 0 { - s10r8 = 0 - } else if s10r8 > 0xff { - s10r8 = 0xff + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff } - if s10g8 < 0 { - s10g8 = 0 - } else if s10g8 > 0xff { - s10g8 = 0xff + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff } - if s10b8 < 0 { - s10b8 = 0 - } else if s10b8 > 0xff { - s10b8 = 0xff + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff } - s10ru := uint32(s10r8) * 0x101 - s10gu := uint32(s10g8) * 0x101 - s10bu := uint32(s10b8) * 0x101 s10r := float64(s10ru) s10g := float64(s10gu) s10b := float64(s10bu) @@ -2722,64 +2612,58 @@ func (ablInterpolator) transform_RGBA_YCbCr420(dst *image.RGBA, dr, adr image.Re s01i := (sy1-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) s01j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + ((sx0)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s01yy1 := int(src.Y[s01i])<<16 + 1<<15 s01cb1 := int(src.Cb[s01j]) - 128 s01cr1 := int(src.Cr[s01j]) - 128 - s01r8 := (s01yy1 + 91881*s01cr1) >> 16 - s01g8 := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 16 - s01b8 := (s01yy1 + 116130*s01cb1) >> 16 - if s01r8 < 0 { - s01r8 = 0 - } else if s01r8 > 0xff { - s01r8 = 0xff + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff } - if s01g8 < 0 { - s01g8 = 0 - } else if s01g8 > 0xff { - s01g8 = 0xff + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff } - if s01b8 < 0 { - s01b8 = 0 - } else if s01b8 > 0xff { - s01b8 = 0xff + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff } - s01ru := uint32(s01r8) * 0x101 - s01gu := uint32(s01g8) * 0x101 - s01bu := uint32(s01b8) * 0x101 s01r := float64(s01ru) s01g := float64(s01gu) s01b := float64(s01bu) s11i := (sy1-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) s11j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + ((sx1)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s11yy1 := int(src.Y[s11i])<<16 + 1<<15 s11cb1 := int(src.Cb[s11j]) - 128 s11cr1 := int(src.Cr[s11j]) - 128 - s11r8 := (s11yy1 + 91881*s11cr1) >> 16 - s11g8 := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 16 - s11b8 := (s11yy1 + 116130*s11cb1) >> 16 - if s11r8 < 0 { - s11r8 = 0 - } else if s11r8 > 0xff { - s11r8 = 0xff + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff } - if s11g8 < 0 { - s11g8 = 0 - } else if s11g8 > 0xff { - s11g8 = 0xff + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff } - if s11b8 < 0 { - s11b8 = 0 - } else if s11b8 > 0xff { - s11b8 = 0xff + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff } - s11ru := uint32(s11r8) * 0x101 - s11gu := uint32(s11g8) * 0x101 - s11bu := uint32(s11b8) * 0x101 s11r := float64(s11ru) s11g := float64(s11gu) s11b := float64(s11bu) @@ -2840,64 +2724,58 @@ func (ablInterpolator) transform_RGBA_YCbCr440(dst *image.RGBA, dr, adr image.Re s00i := (sy0-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) s00j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + (sx0 - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s00yy1 := int(src.Y[s00i])<<16 + 1<<15 s00cb1 := int(src.Cb[s00j]) - 128 s00cr1 := int(src.Cr[s00j]) - 128 - s00r8 := (s00yy1 + 91881*s00cr1) >> 16 - s00g8 := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 16 - s00b8 := (s00yy1 + 116130*s00cb1) >> 16 - if s00r8 < 0 { - s00r8 = 0 - } else if s00r8 > 0xff { - s00r8 = 0xff + s00ru := (s00yy1 + 91881*s00cr1) >> 8 + s00gu := (s00yy1 - 22554*s00cb1 - 46802*s00cr1) >> 8 + s00bu := (s00yy1 + 116130*s00cb1) >> 8 + if s00ru < 0 { + s00ru = 0 + } else if s00ru > 0xffff { + s00ru = 0xffff } - if s00g8 < 0 { - s00g8 = 0 - } else if s00g8 > 0xff { - s00g8 = 0xff + if s00gu < 0 { + s00gu = 0 + } else if s00gu > 0xffff { + s00gu = 0xffff } - if s00b8 < 0 { - s00b8 = 0 - } else if s00b8 > 0xff { - s00b8 = 0xff + if s00bu < 0 { + s00bu = 0 + } else if s00bu > 0xffff { + s00bu = 0xffff } - s00ru := uint32(s00r8) * 0x101 - s00gu := uint32(s00g8) * 0x101 - s00bu := uint32(s00b8) * 0x101 s00r := float64(s00ru) s00g := float64(s00gu) s00b := float64(s00bu) s10i := (sy0-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) s10j := ((sy0)/2-src.Rect.Min.Y/2)*src.CStride + (sx1 - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s10yy1 := int(src.Y[s10i])<<16 + 1<<15 s10cb1 := int(src.Cb[s10j]) - 128 s10cr1 := int(src.Cr[s10j]) - 128 - s10r8 := (s10yy1 + 91881*s10cr1) >> 16 - s10g8 := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 16 - s10b8 := (s10yy1 + 116130*s10cb1) >> 16 - if s10r8 < 0 { - s10r8 = 0 - } else if s10r8 > 0xff { - s10r8 = 0xff + s10ru := (s10yy1 + 91881*s10cr1) >> 8 + s10gu := (s10yy1 - 22554*s10cb1 - 46802*s10cr1) >> 8 + s10bu := (s10yy1 + 116130*s10cb1) >> 8 + if s10ru < 0 { + s10ru = 0 + } else if s10ru > 0xffff { + s10ru = 0xffff } - if s10g8 < 0 { - s10g8 = 0 - } else if s10g8 > 0xff { - s10g8 = 0xff + if s10gu < 0 { + s10gu = 0 + } else if s10gu > 0xffff { + s10gu = 0xffff } - if s10b8 < 0 { - s10b8 = 0 - } else if s10b8 > 0xff { - s10b8 = 0xff + if s10bu < 0 { + s10bu = 0 + } else if s10bu > 0xffff { + s10bu = 0xffff } - s10ru := uint32(s10r8) * 0x101 - s10gu := uint32(s10g8) * 0x101 - s10bu := uint32(s10b8) * 0x101 s10r := float64(s10ru) s10g := float64(s10gu) s10b := float64(s10bu) @@ -2907,64 +2785,58 @@ func (ablInterpolator) transform_RGBA_YCbCr440(dst *image.RGBA, dr, adr image.Re s01i := (sy1-src.Rect.Min.Y)*src.YStride + (sx0 - src.Rect.Min.X) s01j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + (sx0 - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s01yy1 := int(src.Y[s01i])<<16 + 1<<15 s01cb1 := int(src.Cb[s01j]) - 128 s01cr1 := int(src.Cr[s01j]) - 128 - s01r8 := (s01yy1 + 91881*s01cr1) >> 16 - s01g8 := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 16 - s01b8 := (s01yy1 + 116130*s01cb1) >> 16 - if s01r8 < 0 { - s01r8 = 0 - } else if s01r8 > 0xff { - s01r8 = 0xff + s01ru := (s01yy1 + 91881*s01cr1) >> 8 + s01gu := (s01yy1 - 22554*s01cb1 - 46802*s01cr1) >> 8 + s01bu := (s01yy1 + 116130*s01cb1) >> 8 + if s01ru < 0 { + s01ru = 0 + } else if s01ru > 0xffff { + s01ru = 0xffff } - if s01g8 < 0 { - s01g8 = 0 - } else if s01g8 > 0xff { - s01g8 = 0xff + if s01gu < 0 { + s01gu = 0 + } else if s01gu > 0xffff { + s01gu = 0xffff } - if s01b8 < 0 { - s01b8 = 0 - } else if s01b8 > 0xff { - s01b8 = 0xff + if s01bu < 0 { + s01bu = 0 + } else if s01bu > 0xffff { + s01bu = 0xffff } - s01ru := uint32(s01r8) * 0x101 - s01gu := uint32(s01g8) * 0x101 - s01bu := uint32(s01b8) * 0x101 s01r := float64(s01ru) s01g := float64(s01gu) s01b := float64(s01bu) s11i := (sy1-src.Rect.Min.Y)*src.YStride + (sx1 - src.Rect.Min.X) s11j := ((sy1)/2-src.Rect.Min.Y/2)*src.CStride + (sx1 - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. s11yy1 := int(src.Y[s11i])<<16 + 1<<15 s11cb1 := int(src.Cb[s11j]) - 128 s11cr1 := int(src.Cr[s11j]) - 128 - s11r8 := (s11yy1 + 91881*s11cr1) >> 16 - s11g8 := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 16 - s11b8 := (s11yy1 + 116130*s11cb1) >> 16 - if s11r8 < 0 { - s11r8 = 0 - } else if s11r8 > 0xff { - s11r8 = 0xff + s11ru := (s11yy1 + 91881*s11cr1) >> 8 + s11gu := (s11yy1 - 22554*s11cb1 - 46802*s11cr1) >> 8 + s11bu := (s11yy1 + 116130*s11cb1) >> 8 + if s11ru < 0 { + s11ru = 0 + } else if s11ru > 0xffff { + s11ru = 0xffff } - if s11g8 < 0 { - s11g8 = 0 - } else if s11g8 > 0xff { - s11g8 = 0xff + if s11gu < 0 { + s11gu = 0 + } else if s11gu > 0xffff { + s11gu = 0xffff } - if s11b8 < 0 { - s11b8 = 0 - } else if s11b8 > 0xff { - s11b8 = 0xff + if s11bu < 0 { + s11bu = 0 + } else if s11bu > 0xffff { + s11bu = 0xffff } - s11ru := uint32(s11r8) * 0x101 - s11gu := uint32(s11g8) * 0x101 - s11bu := uint32(s11b8) * 0x101 s11r := float64(s11ru) s11g := float64(s11gu) s11b := float64(s11bu) @@ -3369,32 +3241,29 @@ func (z *kernelScaler) scaleX_YCbCr444(tmp [][4]float64, src *image.YCbCr, sr im pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) pj := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.CStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff } - pru := uint32(pr8) * 0x101 - pgu := uint32(pg8) * 0x101 - pbu := uint32(pb8) * 0x101 pr += float64(pru) * c.weight pg += float64(pgu) * c.weight pb += float64(pbu) * c.weight @@ -3419,32 +3288,29 @@ func (z *kernelScaler) scaleX_YCbCr422(tmp [][4]float64, src *image.YCbCr, sr im pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) pj := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.CStride + ((sr.Min.X+int(c.coord))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff } - pru := uint32(pr8) * 0x101 - pgu := uint32(pg8) * 0x101 - pbu := uint32(pb8) * 0x101 pr += float64(pru) * c.weight pg += float64(pgu) * c.weight pb += float64(pbu) * c.weight @@ -3469,32 +3335,29 @@ func (z *kernelScaler) scaleX_YCbCr420(tmp [][4]float64, src *image.YCbCr, sr im pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) pj := ((sr.Min.Y+int(y))/2-src.Rect.Min.Y/2)*src.CStride + ((sr.Min.X+int(c.coord))/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff } - pru := uint32(pr8) * 0x101 - pgu := uint32(pg8) * 0x101 - pbu := uint32(pb8) * 0x101 pr += float64(pru) * c.weight pg += float64(pgu) * c.weight pb += float64(pbu) * c.weight @@ -3519,32 +3382,29 @@ func (z *kernelScaler) scaleX_YCbCr440(tmp [][4]float64, src *image.YCbCr, sr im pi := (sr.Min.Y+int(y)-src.Rect.Min.Y)*src.YStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) pj := ((sr.Min.Y+int(y))/2-src.Rect.Min.Y/2)*src.CStride + (sr.Min.X + int(c.coord) - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff } - pru := uint32(pr8) * 0x101 - pgu := uint32(pg8) * 0x101 - pbu := uint32(pb8) * 0x101 pr += float64(pru) * c.weight pg += float64(pgu) * c.weight pb += float64(pbu) * c.weight @@ -4019,32 +3879,29 @@ func (q *Kernel) transform_RGBA_YCbCr444(dst *image.RGBA, dr, adr image.Rectangl pi := (ky-src.Rect.Min.Y)*src.YStride + (kx - src.Rect.Min.X) pj := (ky-src.Rect.Min.Y)*src.CStride + (kx - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff } - pru := uint32(pr8) * 0x101 - pgu := uint32(pg8) * 0x101 - pbu := uint32(pb8) * 0x101 pr += float64(pru) * w pg += float64(pgu) * w pb += float64(pbu) * w @@ -4146,32 +4003,29 @@ func (q *Kernel) transform_RGBA_YCbCr422(dst *image.RGBA, dr, adr image.Rectangl pi := (ky-src.Rect.Min.Y)*src.YStride + (kx - src.Rect.Min.X) pj := (ky-src.Rect.Min.Y)*src.CStride + ((kx)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff } - pru := uint32(pr8) * 0x101 - pgu := uint32(pg8) * 0x101 - pbu := uint32(pb8) * 0x101 pr += float64(pru) * w pg += float64(pgu) * w pb += float64(pbu) * w @@ -4273,32 +4127,29 @@ func (q *Kernel) transform_RGBA_YCbCr420(dst *image.RGBA, dr, adr image.Rectangl pi := (ky-src.Rect.Min.Y)*src.YStride + (kx - src.Rect.Min.X) pj := ((ky)/2-src.Rect.Min.Y/2)*src.CStride + ((kx)/2 - src.Rect.Min.X/2) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff } - pru := uint32(pr8) * 0x101 - pgu := uint32(pg8) * 0x101 - pbu := uint32(pb8) * 0x101 pr += float64(pru) * w pg += float64(pgu) * w pb += float64(pbu) * w @@ -4400,32 +4251,29 @@ func (q *Kernel) transform_RGBA_YCbCr440(dst *image.RGBA, dr, adr image.Rectangl pi := (ky-src.Rect.Min.Y)*src.YStride + (kx - src.Rect.Min.X) pj := ((ky)/2-src.Rect.Min.Y/2)*src.CStride + (kx - src.Rect.Min.X) - // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + // This is an inline version of image/color/ycbcr.go's YCbCr.RGBA method. pyy1 := int(src.Y[pi])<<16 + 1<<15 pcb1 := int(src.Cb[pj]) - 128 pcr1 := int(src.Cr[pj]) - 128 - pr8 := (pyy1 + 91881*pcr1) >> 16 - pg8 := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 16 - pb8 := (pyy1 + 116130*pcb1) >> 16 - if pr8 < 0 { - pr8 = 0 - } else if pr8 > 0xff { - pr8 = 0xff + pru := (pyy1 + 91881*pcr1) >> 8 + pgu := (pyy1 - 22554*pcb1 - 46802*pcr1) >> 8 + pbu := (pyy1 + 116130*pcb1) >> 8 + if pru < 0 { + pru = 0 + } else if pru > 0xffff { + pru = 0xffff } - if pg8 < 0 { - pg8 = 0 - } else if pg8 > 0xff { - pg8 = 0xff + if pgu < 0 { + pgu = 0 + } else if pgu > 0xffff { + pgu = 0xffff } - if pb8 < 0 { - pb8 = 0 - } else if pb8 > 0xff { - pb8 = 0xff + if pbu < 0 { + pbu = 0 + } else if pbu > 0xffff { + pbu = 0xffff } - pru := uint32(pr8) * 0x101 - pgu := uint32(pg8) * 0x101 - pbu := uint32(pb8) * 0x101 pr += float64(pru) * w pg += float64(pgu) * w pb += float64(pbu) * w diff --git a/testdata/go-turns-two-down-ab.png b/testdata/go-turns-two-down-ab.png index c7a117069a6f011ac26a539b8430504a3df5fe70..62c2995b1c24c089f41db6a98156a199539202f7 100644 GIT binary patch literal 21385 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

sSGPLwEU?Do7+1_U&{FB?;J1*uicz2 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 diff --git a/testdata/go-turns-two-down-bl.png b/testdata/go-turns-two-down-bl.png index 97176b7466b775b681402adca269ed57ee8bf574..280af36e6a468e925a709632fc369ce90d4dda20 100644 GIT binary patch literal 18604 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 DVEL?8 literal 18547 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 z z5T-Ht)@$LN`og%JSWAhHw((l?{&*}6H-`U@vymM#&>gCHOmAVkO1I!0=?2dXq9bw82BCI}` z7rM|E(U1ZnVF%i4{%BmlsMt^s z4{IEH`$h!)iVdyN&AfBb;HyDu9v~U;WPL@pERFBH z{noqF@W*dl6(;bFq(;9&z;owOUWDa?heu_cZ!zN5@Dv?TL(LmXJwu-+Yere>IhnkWLFR@E%b=kfCK zA)fEylcU>j-(Mb0u5+`)Oy96+sDhpn+BCit%^NScQPMG!35-vCRqGE4i?tI8g+AZp z`V7i44NIR6YnKe5Z6r#j)LU%iZ`^ux<(d$^4co5cnYj$l`@QreRq?SbXzJ4ZWP0z5 zU!Q&B&2C=yEXOjN7r8WZZFOsxKHXZO1v=u=)Co;7g(t#en-%0=37kfwg^6TL`@ zE2{0FbPaFbJVFO^X2pW~`ngAWvG<9W^JJFfk+8jDastPn%@)zocyT;dS>c0_34QX? zOv|jaC8_p>2d24tnF1sQ^slQw3Hr7#?bpp5QS+?YO6iw8 ztkQX_;*i#3;gj#}KGS~FTvf*tJFIktph=vSa$FS?&GS*6GdYuzih)z=GN*=C%XMKu z72*ypj|yG%!0kS}M!&D7GZKrT2xH`eE9K&^Omd&876xiox9ZZH@#nUM6(Y_m72h*7mE!c^Or9QlE-pf(zo-?YjGnqmf$^YmZc0sMM5tH1)2Ws<7H;YJ5HEy3k%p zmocwi38qOlqaGC+cg0DOAWhv|)5fS(8)q{@o_>$DlOeP+&{k8orJjq2Ka^(kdab5R zna)bM(bh&#uCZykYF;&SRuiRPYo&RZQ8jx(b4+-%0F9lsay3%Z+5#V2*825bdQ;4{ zEms%A=!BNuAw9M9?6pPh8--f$pkFLtHYV3h1Zgtu&A~HkkgBP50Jo`EX@+X`A_B9W zilH-TdP1qBCo@z#h^5v8%xLE;eez-I_rP(Dk2HKyTD?u8_qu$*Bw?|$w~lCIqEZX;A>&#qJqtM_V)%3ryRpldF zT~@mXvjvpKYUFL>j~blSoFmcUanpiG%2lyucF$@MZj+2R&R(e}Wz(bh^eg|Gw@)?i z^J;F{D!sya27Saa{~%wAD;B4wQVq z<^|+>no~D2E}g*E_27C`@hTi@^UyQtnSKThCU|p@M=?v62hw-QO*Rz?X5GH@P;ZFw z{;8FoyR9E-HH*DLp&JBUe39<5ptv}Su zu5=Js`KG5{71>Czf!RWc)?^xgq1|)S{Q@zOd8&5CC)1W|v@dk4MKj8r+KZs5Oi~U_ zduXF=8l{LplV9{JHgpD4x8<(hiO0<|PjnW=+Vcb*D%uxitu|5%lhleg%V;c-v-ZqX z!%Wq@b%ie73RdV>eXyn?i3y#|(rM+!k(o`^cQX)ub(~SRqwdUAATye2i+Yn}`%<&U zO>4t!PSwcuR9ZuuDU4=2u}kYy8@1cl|4|#HUMg!Q%+?L6&?6S~=x278D_OmxkGFMI z?W>l~u!$B?n?cdX5N(&L*?K>NLZLofu9Y4Hs})?^JLsAA_4O*Q8UJ4Z009602X)}R TEIw)-00000NkvXXu0mjfQ~Ul)