HybridBinarizer.smali
.class public final Lcom/google/zxing/common/HybridBinarizer;
.super Lcom/google/zxing/common/GlobalHistogramBinarizer;
.source "HybridBinarizer.java"
# static fields
.field private static final BLOCK_SIZE:I
.field private static final BLOCK_SIZE_MASK:I
.field private static final BLOCK_SIZE_POWER:I
.field private static final MINIMUM_DIMENSION:I
.field private static final MIN_DYNAMIC_RANGE:I
# instance fields
.field private matrix:Lcom/google/zxing/common/BitMatrix;
# direct methods
.method static constructor <clinit>()V
.registers 1
const v0, 0x1567
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/zxing/common/HybridBinarizer;->BLOCK_SIZE:I
const v0, 0x1568
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/zxing/common/HybridBinarizer;->BLOCK_SIZE_MASK:I
const v0, 0x156c
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/zxing/common/HybridBinarizer;->BLOCK_SIZE_POWER:I
const v0, 0x1547
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/zxing/common/HybridBinarizer;->MINIMUM_DIMENSION:I
const v0, 0x1577
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/zxing/common/HybridBinarizer;->MIN_DYNAMIC_RANGE:I
return-void
.end method
.method public constructor <init>(Lcom/google/zxing/LuminanceSource;)V
.registers 2
.param p1, "source" # Lcom/google/zxing/LuminanceSource;
.line 53
invoke-direct {p0, p1}, Lcom/google/zxing/common/GlobalHistogramBinarizer;-><init>(Lcom/google/zxing/LuminanceSource;)V
.line 54
return-void
.end method
.method private static calculateBlackPoints([BIIII)[[I
.registers 25
.param p0, "luminances" # [B
.param p1, "subWidth" # I
.param p2, "subHeight" # I
.param p3, "width" # I
.param p4, "height" # I
.line 166
move/from16 v0, p1
move/from16 v1, p2
add-int/lit8 v2, p4, -0x8
.line 167
.local v2, "maxYOffset":I
add-int/lit8 v3, p3, -0x8
.line 168
.local v3, "maxXOffset":I
const/4 v4, 0x2
new-array v5, v4, [I
const/4 v6, 0x1
aput v0, v5, v6
const/4 v7, 0x0
aput v1, v5, v7
const-class v8, I
invoke-static {v8, v5}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
move-result-object v5
check-cast v5, [[I
.line 169
.local v5, "blackPoints":[[I
const/4 v8, 0x0
move v9, v8
const/4 v8, 0x0
.local v9, "y":I
:goto_1c
if-ge v9, v1, :cond_bd
.line 170
shl-int/lit8 v10, v9, 0x3
.line 171
.local v7, "yoffset":I
move v7, v10
if-le v10, v2, :cond_24
.line 172
move v7, v2
.line 174
:cond_24
const/4 v10, 0x0
.local v10, "x":I
:goto_25
if-ge v10, v0, :cond_b4
.line 175
shl-int/lit8 v11, v10, 0x3
.line 176
.local v8, "xoffset":I
move v8, v11
if-le v11, v3, :cond_2d
.line 177
move v8, v3
.line 179
:cond_2d
const/4 v11, 0x0
.line 180
.local v11, "sum":I
const/16 v12, 0xff
.line 181
.local v12, "min":I
const/4 v13, 0x0
.line 182
.local v13, "max":I
const/4 v14, 0x0
.local v14, "yy":I
mul-int v15, v7, p3
add-int/2addr v15, v8
.local v15, "offset":I
:goto_35
const/16 v6, 0x8
if-ge v14, v6, :cond_76
.line 183
const/16 v18, 0x0
move/from16 v4, v18
.local v4, "xx":I
:goto_3d
if-ge v4, v6, :cond_51
.line 184
add-int v19, v15, v4
aget-byte v6, p0, v19
and-int/lit16 v6, v6, 0xff
.line 185
.local v6, "pixel":I
add-int/2addr v11, v6
.line 187
if-ge v6, v12, :cond_49
.line 188
move v12, v6
.line 190
:cond_49
if-le v6, v13, :cond_4c
.line 191
move v13, v6
.line 183
.end local v6 # "pixel":I
:cond_4c
add-int/lit8 v4, v4, 0x1
const/16 v6, 0x8
goto :goto_3d
.line 195
.end local v4 # "xx":I
:cond_51
sub-int v4, v13, v12
const/16 v6, 0x18
if-le v4, v6, :cond_6f
.line 197
:goto_57
add-int/lit8 v14, v14, 0x1
add-int v15, v15, p3
const/16 v4, 0x8
if-ge v14, v4, :cond_6f
.line 198
const/4 v6, 0x0
.local v6, "xx":I
:goto_60
if-ge v6, v4, :cond_6e
.line 199
add-int v18, v15, v6
aget-byte v4, p0, v18
and-int/lit16 v4, v4, 0xff
add-int/2addr v11, v4
.line 198
add-int/lit8 v6, v6, 0x1
const/16 v4, 0x8
goto :goto_60
.end local v6 # "xx":I
:cond_6e
goto :goto_57
.line 182
:cond_6f
const/4 v4, 0x1
add-int/2addr v14, v4
add-int v15, v15, p3
const/4 v4, 0x2
const/4 v6, 0x1
goto :goto_35
:cond_76
const/4 v4, 0x1
.line 206
.end local v14 # "yy":I
.end local v15 # "offset":I
shr-int/lit8 v6, v11, 0x6
.line 207
.local v6, "average":I
sub-int v14, v13, v12
const/16 v15, 0x18
if-gt v14, v15, :cond_a8
.line 214
div-int/lit8 v6, v12, 0x2
.line 216
if-lez v9, :cond_a5
if-lez v10, :cond_a5
.line 224
add-int/lit8 v14, v9, -0x1
aget-object v14, v5, v14
aget v14, v14, v10
aget-object v15, v5, v9
add-int/lit8 v17, v10, -0x1
aget v15, v15, v17
const/16 v16, 0x2
mul-int/lit8 v15, v15, 0x2
add-int/2addr v14, v15
add-int/lit8 v15, v9, -0x1
aget-object v15, v5, v15
add-int/lit8 v17, v10, -0x1
aget v15, v15, v17
add-int/2addr v14, v15
div-int/lit8 v14, v14, 0x4
.line 226
.local v14, "averageNeighborBlackPoint":I
if-ge v12, v14, :cond_aa
.line 227
move v6, v14
goto :goto_aa
.line 216
.end local v14 # "averageNeighborBlackPoint":I
:cond_a5
const/16 v16, 0x2
goto :goto_aa
.line 207
:cond_a8
const/16 v16, 0x2
.line 231
:cond_aa
:goto_aa
aget-object v14, v5, v9
aput v6, v14, v10
.line 174
.end local v6 # "average":I
.end local v8 # "xoffset":I
.end local v11 # "sum":I
.end local v12 # "min":I
.end local v13 # "max":I
add-int/lit8 v10, v10, 0x1
const/4 v4, 0x2
const/4 v6, 0x1
goto/16 :goto_25
:cond_b4
const/4 v4, 0x1
const/16 v16, 0x2
.line 169
.end local v7 # "yoffset":I
.end local v10 # "x":I
add-int/lit8 v9, v9, 0x1
const/4 v4, 0x2
const/4 v6, 0x1
goto/16 :goto_1c
.line 234
.end local v9 # "y":I
:cond_bd
return-object v5
.end method
.method private static calculateThresholdForBlock([BIIII[[ILcom/google/zxing/common/BitMatrix;)V
.registers 26
.param p0, "luminances" # [B
.param p1, "subWidth" # I
.param p2, "subHeight" # I
.param p3, "width" # I
.param p4, "height" # I
.param p5, "blackPoints" # [[I
.param p6, "matrix" # Lcom/google/zxing/common/BitMatrix;
.line 108
move/from16 v0, p1
move/from16 v1, p2
add-int/lit8 v2, p4, -0x8
.line 109
.local v2, "maxYOffset":I
add-int/lit8 v9, p3, -0x8
.line 110
.local v9, "maxXOffset":I
const/4 v3, 0x0
.local v3, "y":I
const/4 v4, 0x0
move v10, v3
const/4 v3, 0x0
.end local v3 # "y":I
.local v10, "y":I
:goto_c
if-ge v10, v1, :cond_6d
.line 111
shl-int/lit8 v5, v10, 0x3
.line 112
.local v4, "yoffset":I
move v4, v5
if-le v5, v2, :cond_16
.line 113
move v4, v2
move v11, v4
goto :goto_17
.line 112
:cond_16
move v11, v4
.line 115
.end local v4 # "yoffset":I
.local v11, "yoffset":I
:goto_17
add-int/lit8 v4, v1, -0x3
const/4 v12, 0x2
invoke-static {v10, v12, v4}, Lcom/google/zxing/common/HybridBinarizer;->cap(III)I
move-result v13
.line 116
.local v13, "top":I
const/4 v4, 0x0
move v14, v4
.local v14, "x":I
:goto_20
if-ge v14, v0, :cond_69
.line 117
shl-int/lit8 v4, v14, 0x3
.line 118
.local v3, "xoffset":I
move v3, v4
if-le v4, v9, :cond_2a
.line 119
move v3, v9
move v15, v3
goto :goto_2b
.line 118
:cond_2a
move v15, v3
.line 121
.end local v3 # "xoffset":I
.local v15, "xoffset":I
:goto_2b
add-int/lit8 v3, v0, -0x3
invoke-static {v14, v12, v3}, Lcom/google/zxing/common/HybridBinarizer;->cap(III)I
move-result v16
.line 122
.local v16, "left":I
const/4 v3, 0x0
.line 123
.local v3, "sum":I
const/4 v4, -0x2
move/from16 v17, v3
.end local v3 # "sum":I
.local v4, "z":I
.local v17, "sum":I
:goto_35
if-gt v4, v12, :cond_56
.line 124
add-int v3, v13, v4
aget-object v3, p5, v3
.line 125
.local v3, "blackRow":[I
add-int/lit8 v5, v16, -0x2
aget v5, v3, v5
add-int/lit8 v6, v16, -0x1
aget v6, v3, v6
add-int/2addr v5, v6
aget v6, v3, v16
add-int/2addr v5, v6
add-int/lit8 v6, v16, 0x1
aget v6, v3, v6
add-int/2addr v5, v6
add-int/lit8 v6, v16, 0x2
aget v6, v3, v6
add-int/2addr v5, v6
add-int v17, v17, v5
.line 123
.end local v3 # "blackRow":[I
add-int/lit8 v4, v4, 0x1
goto :goto_35
.line 127
.end local v4 # "z":I
:cond_56
div-int/lit8 v18, v17, 0x19
.line 128
.local v18, "average":I
move-object/from16 v3, p0
move v4, v15
move v5, v11
move/from16 v6, v18
move/from16 v7, p3
move-object/from16 v8, p6
invoke-static/range {v3 .. v8}, Lcom/google/zxing/common/HybridBinarizer;->thresholdBlock([BIIIILcom/google/zxing/common/BitMatrix;)V
.line 116
.end local v15 # "xoffset":I
.end local v16 # "left":I
.end local v17 # "sum":I
.end local v18 # "average":I
add-int/lit8 v14, v14, 0x1
move v3, v15
goto :goto_20
.line 110
.end local v11 # "yoffset":I
.end local v13 # "top":I
.end local v14 # "x":I
:cond_69
add-int/lit8 v10, v10, 0x1
move v4, v11
goto :goto_c
.line 131
.end local v10 # "y":I
:cond_6d
return-void
.end method
.method private static cap(III)I
.registers 3
.param p0, "value" # I
.param p1, "min" # I
.param p2, "max" # I
.line 134
if-ge p0, p1, :cond_3
return p1
:cond_3
if-le p0, p2, :cond_6
return p2
:cond_6
return p0
.end method
.method private static thresholdBlock([BIIIILcom/google/zxing/common/BitMatrix;)V
.registers 12
.param p0, "luminances" # [B
.param p1, "xoffset" # I
.param p2, "yoffset" # I
.param p3, "threshold" # I
.param p4, "stride" # I
.param p5, "matrix" # Lcom/google/zxing/common/BitMatrix;
.line 146
const/4 v0, 0x0
.local v0, "y":I
mul-int v1, p2, p4
add-int/2addr v1, p1
.local v1, "offset":I
:goto_4
const/16 v2, 0x8
if-ge v0, v2, :cond_21
.line 147
const/4 v3, 0x0
.local v3, "x":I
:goto_9
if-ge v3, v2, :cond_1d
.line 149
add-int v4, v1, v3
aget-byte v4, p0, v4
and-int/lit16 v4, v4, 0xff
if-gt v4, p3, :cond_1a
.line 150
add-int v4, p1, v3
add-int v5, p2, v0
invoke-virtual {p5, v4, v5}, Lcom/google/zxing/common/BitMatrix;->set(II)V
.line 147
:cond_1a
add-int/lit8 v3, v3, 0x1
goto :goto_9
.line 146
.end local v3 # "x":I
:cond_1d
add-int/lit8 v0, v0, 0x1
add-int/2addr v1, p4
goto :goto_4
.line 154
.end local v0 # "y":I
.end local v1 # "offset":I
:cond_21
return-void
.end method
# virtual methods
.method public createBinarizer(Lcom/google/zxing/LuminanceSource;)Lcom/google/zxing/Binarizer;
.registers 3
.param p1, "source" # Lcom/google/zxing/LuminanceSource;
.line 93
new-instance v0, Lcom/google/zxing/common/HybridBinarizer;
invoke-direct {v0, p1}, Lcom/google/zxing/common/HybridBinarizer;-><init>(Lcom/google/zxing/LuminanceSource;)V
return-object v0
.end method
.method public getBlackMatrix()Lcom/google/zxing/common/BitMatrix;
.registers 16
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/zxing/NotFoundException;
}
.end annotation
.line 63
iget-object v0, p0, Lcom/google/zxing/common/HybridBinarizer;->matrix:Lcom/google/zxing/common/BitMatrix;
if-eqz v0, :cond_5
.line 64
return-object v0
.line 66
:cond_5
invoke-virtual {p0}, Lcom/google/zxing/common/HybridBinarizer;->getLuminanceSource()Lcom/google/zxing/LuminanceSource;
move-result-object v0
const/4 v1, 0x0
.line 67
.local v1, "source":Lcom/google/zxing/LuminanceSource;
move-object v1, v0
invoke-virtual {v0}, Lcom/google/zxing/LuminanceSource;->getWidth()I
move-result v0
.line 68
.local v0, "width":I
invoke-virtual {v1}, Lcom/google/zxing/LuminanceSource;->getHeight()I
move-result v9
.line 69
.local v9, "height":I
const/16 v2, 0x28
if-lt v0, v2, :cond_4a
if-lt v9, v2, :cond_4a
.line 70
invoke-virtual {v1}, Lcom/google/zxing/LuminanceSource;->getMatrix()[B
move-result-object v10
.line 71
.local v10, "luminances":[B
shr-int/lit8 v2, v0, 0x3
.line 72
.local v2, "subWidth":I
and-int/lit8 v3, v0, 0x7
if-eqz v3, :cond_27
.line 73
add-int/lit8 v2, v2, 0x1
move v11, v2
goto :goto_28
.line 72
:cond_27
move v11, v2
.line 75
.end local v2 # "subWidth":I
.local v11, "subWidth":I
:goto_28
shr-int/lit8 v2, v9, 0x3
.line 76
.local v2, "subHeight":I
and-int/lit8 v3, v9, 0x7
if-eqz v3, :cond_32
.line 77
add-int/lit8 v2, v2, 0x1
move v12, v2
goto :goto_33
.line 76
:cond_32
move v12, v2
.line 79
.end local v2 # "subHeight":I
.local v12, "subHeight":I
:goto_33
invoke-static {v10, v11, v12, v0, v9}, Lcom/google/zxing/common/HybridBinarizer;->calculateBlackPoints([BIIII)[[I
move-result-object v13
.line 81
.local v13, "blackPoints":[[I
new-instance v2, Lcom/google/zxing/common/BitMatrix;
invoke-direct {v2, v0, v9}, Lcom/google/zxing/common/BitMatrix;-><init>(II)V
move-object v14, v2
.line 82
.local v14, "newMatrix":Lcom/google/zxing/common/BitMatrix;
move-object v2, v10
move v3, v11
move v4, v12
move v5, v0
move v6, v9
move-object v7, v13
move-object v8, v14
invoke-static/range {v2 .. v8}, Lcom/google/zxing/common/HybridBinarizer;->calculateThresholdForBlock([BIIII[[ILcom/google/zxing/common/BitMatrix;)V
.line 83
iput-object v14, p0, Lcom/google/zxing/common/HybridBinarizer;->matrix:Lcom/google/zxing/common/BitMatrix;
.line 84
.end local v10 # "luminances":[B
.end local v11 # "subWidth":I
.end local v12 # "subHeight":I
.end local v13 # "blackPoints":[[I
.end local v14 # "newMatrix":Lcom/google/zxing/common/BitMatrix;
goto :goto_50
.line 86
:cond_4a
invoke-super {p0}, Lcom/google/zxing/common/GlobalHistogramBinarizer;->getBlackMatrix()Lcom/google/zxing/common/BitMatrix;
move-result-object v2
iput-object v2, p0, Lcom/google/zxing/common/HybridBinarizer;->matrix:Lcom/google/zxing/common/BitMatrix;
.line 88
:goto_50
iget-object v2, p0, Lcom/google/zxing/common/HybridBinarizer;->matrix:Lcom/google/zxing/common/BitMatrix;
return-object v2
.end method