Merge "Fix potential use of uninitialized value"
diff --git a/vp9/common/arm/neon/vp9_mb_lpf_neon.asm b/vp9/common/arm/neon/vp9_mb_lpf_neon.asm
index edf5786..2e8001b 100644
--- a/vp9/common/arm/neon/vp9_mb_lpf_neon.asm
+++ b/vp9/common/arm/neon/vp9_mb_lpf_neon.asm
@@ -361,8 +361,6 @@
vand d16, d20, d19 ; flat && mask
vmov r5, r6, d16
- orrs r5, r5, r6 ; Check for 0
- orreq r7, r7, #1 ; Only do filter branch
; flatmask5(1, p7, p6, p5, p4, p0, q0, q4, q5, q6, q7)
vabd.u8 d22, d3, d7 ; abs(p4 - p0)
@@ -388,10 +386,11 @@
vmov.u8 d22, #0x80
+ orrs r5, r5, r6 ; Check for 0
+ orreq r7, r7, #1 ; Only do filter branch
+
vand d17, d18, d16 ; flat2 && flat && mask
vmov r5, r6, d17
- orrs r5, r5, r6 ; Check for 0
- orreq r7, r7, #2 ; Only do mbfilter branch
; mbfilter() function
@@ -405,15 +404,10 @@
vmov.u8 d27, #3
vsub.s8 d28, d23, d24 ; ( qs0 - ps0)
-
vqsub.s8 d29, d25, d26 ; filter = clamp(ps1-qs1)
-
vmull.s8 q15, d28, d27 ; 3 * ( qs0 - ps0)
-
vand d29, d29, d21 ; filter &= hev
-
vaddw.s8 q15, q15, d29 ; filter + 3 * (qs0 - ps0)
-
vmov.u8 d29, #4
; filter = clamp(filter + 3 * ( qs0 - ps0))
@@ -452,37 +446,37 @@
vaddl.u8 q15, d7, d8 ; op2 = p0 + q0
vmlal.u8 q15, d4, d27 ; op2 = p0 + q0 + p3 * 3
vmlal.u8 q15, d5, d29 ; op2 = p0 + q0 + p3 * 3 + p2 * 2
+ vaddl.u8 q10, d4, d5
vaddw.u8 q15, d6 ; op2=p1 + p0 + q0 + p3 * 3 + p2 *2
+ vaddl.u8 q14, d6, d9
vqrshrn.u16 d18, q15, #3 ; r_op2
- vsubw.u8 q15, d4 ; op1 = op2 - p3
- vsubw.u8 q15, d5 ; op1 -= p2
- vaddw.u8 q15, d6 ; op1 += p1
- vaddw.u8 q15, d9 ; op1 += q1
+ vsub.i16 q15, q10
+ vaddl.u8 q10, d4, d6
+ vadd.i16 q15, q14
+ vaddl.u8 q14, d7, d10
vqrshrn.u16 d19, q15, #3 ; r_op1
- vsubw.u8 q15, d4 ; op0 = op1 - p3
- vsubw.u8 q15, d6 ; op0 -= p1
- vaddw.u8 q15, d7 ; op0 += p0
- vaddw.u8 q15, d10 ; op0 += q2
+ vsub.i16 q15, q10
+ vadd.i16 q15, q14
+ vaddl.u8 q14, d8, d11
vqrshrn.u16 d20, q15, #3 ; r_op0
vsubw.u8 q15, d4 ; oq0 = op0 - p3
vsubw.u8 q15, d7 ; oq0 -= p0
- vaddw.u8 q15, d8 ; oq0 += q0
- vaddw.u8 q15, d11 ; oq0 += q3
+ vadd.i16 q15, q14
+ vaddl.u8 q14, d9, d11
vqrshrn.u16 d21, q15, #3 ; r_oq0
vsubw.u8 q15, d5 ; oq1 = oq0 - p2
vsubw.u8 q15, d8 ; oq1 -= q0
- vaddw.u8 q15, d9 ; oq1 += q1
- vaddw.u8 q15, d11 ; oq1 += q3
+ vadd.i16 q15, q14
+ vaddl.u8 q14, d10, d11
vqrshrn.u16 d22, q15, #3 ; r_oq1
vsubw.u8 q15, d6 ; oq2 = oq0 - p1
vsubw.u8 q15, d9 ; oq2 -= q1
- vaddw.u8 q15, d10 ; oq2 += q2
- vaddw.u8 q15, d11 ; oq2 += q3
+ vadd.i16 q15, q14
vqrshrn.u16 d27, q15, #3 ; r_oq2
; Filter does not set op2 or oq2, so use p2 and q2.
@@ -501,113 +495,104 @@
; wide_mbfilter flat2 && flat && mask branch
vmov.u8 d16, #7
vaddl.u8 q15, d7, d8 ; op6 = p0 + q0
+ vaddl.u8 q12, d2, d3
+ vaddl.u8 q13, d4, d5
+ vaddl.u8 q14, d1, d6
vmlal.u8 q15, d0, d16 ; op6 += p7 * 3
- vmlal.u8 q15, d1, d29 ; op6 += p6 * 2
- vaddw.u8 q15, d2 ; op6 += p5
- vaddw.u8 q15, d3 ; op6 += p4
- vaddw.u8 q15, d4 ; op6 += p3
- vaddw.u8 q15, d5 ; op6 += p2
- vaddw.u8 q15, d6 ; op6 += p1
+ vadd.i16 q12, q13
+ vadd.i16 q15, q14
+ vaddl.u8 q14, d2, d9
+ vadd.i16 q15, q12
+ vaddl.u8 q12, d0, d1
+ vaddw.u8 q15, d1
+ vaddl.u8 q13, d0, d2
+ vadd.i16 q14, q15, q14
vqrshrn.u16 d16, q15, #4 ; w_op6
- vsubw.u8 q15, d0 ; op5 = op6 - p7
- vsubw.u8 q15, d1 ; op5 -= p6
- vaddw.u8 q15, d2 ; op5 += p5
- vaddw.u8 q15, d9 ; op5 += q1
+ vsub.i16 q15, q14, q12
+ vaddl.u8 q14, d3, d10
vqrshrn.u16 d24, q15, #4 ; w_op5
- vsubw.u8 q15, d0 ; op4 = op5 - p7
- vsubw.u8 q15, d2 ; op4 -= p5
- vaddw.u8 q15, d3 ; op4 += p4
- vaddw.u8 q15, d10 ; op4 += q2
+ vsub.i16 q15, q13
+ vaddl.u8 q13, d0, d3
+ vadd.i16 q15, q14
+ vaddl.u8 q14, d4, d11
vqrshrn.u16 d25, q15, #4 ; w_op4
- vsubw.u8 q15, d0 ; op3 = op4 - p7
- vsubw.u8 q15, d3 ; op3 -= p4
- vaddw.u8 q15, d4 ; op3 += p3
- vaddw.u8 q15, d11 ; op3 += q3
+ vadd.i16 q15, q14
+ vaddl.u8 q14, d0, d4
+ vsub.i16 q15, q13
+ vsub.i16 q14, q15, q14
vqrshrn.u16 d26, q15, #4 ; w_op3
- vsubw.u8 q15, d0 ; op2 = op3 - p7
- vsubw.u8 q15, d4 ; op2 -= p3
- vaddw.u8 q15, d5 ; op2 += p2
+ vaddw.u8 q15, q14, d5 ; op2 += p2
+ vaddl.u8 q14, d0, d5
vaddw.u8 q15, d12 ; op2 += q4
+ vbif d26, d4, d17 ; op3 |= p3 & ~(f2 & f & m)
vqrshrn.u16 d27, q15, #4 ; w_op2
- vbif d27, d18, d17 ; op2 |= t_op2 & ~(f2 & f & m)
-
- vsubw.u8 q15, d0 ; op1 = op2 - p7
- vsubw.u8 q15, d5 ; op1 -= p2
+ vsub.i16 q15, q14
+ vaddl.u8 q14, d0, d6
vaddw.u8 q15, d6 ; op1 += p1
vaddw.u8 q15, d13 ; op1 += q5
+ vbif d27, d18, d17 ; op2 |= t_op2 & ~(f2 & f & m)
vqrshrn.u16 d18, q15, #4 ; w_op1
- vbif d18, d19, d17 ; op1 |= t_op1 & ~(f2 & f & m)
-
- vsubw.u8 q15, d0 ; op0 = op1 - p7
- vsubw.u8 q15, d6 ; op0 -= p1
+ vsub.i16 q15, q14
+ vaddl.u8 q14, d0, d7
vaddw.u8 q15, d7 ; op0 += p0
vaddw.u8 q15, d14 ; op0 += q6
+ vbif d18, d19, d17 ; op1 |= t_op1 & ~(f2 & f & m)
vqrshrn.u16 d19, q15, #4 ; w_op0
- vbif d19, d20, d17 ; op0 |= t_op0 & ~(f2 & f & m)
-
- vsubw.u8 q15, d0 ; oq0 = op0 - p7
- vsubw.u8 q15, d7 ; oq0 -= p0
+ vsub.i16 q15, q14
+ vaddl.u8 q14, d1, d8
vaddw.u8 q15, d8 ; oq0 += q0
vaddw.u8 q15, d15 ; oq0 += q7
+ vbif d19, d20, d17 ; op0 |= t_op0 & ~(f2 & f & m)
vqrshrn.u16 d20, q15, #4 ; w_oq0
- vbif d20, d21, d17 ; oq0 |= t_oq0 & ~(f2 & f & m)
-
- vsubw.u8 q15, d1 ; oq1 = oq0 - p6
- vsubw.u8 q15, d8 ; oq1 -= q0
+ vsub.i16 q15, q14
+ vaddl.u8 q14, d2, d9
vaddw.u8 q15, d9 ; oq1 += q1
+ vaddl.u8 q4, d10, d15
vaddw.u8 q15, d15 ; oq1 += q7
+ vbif d20, d21, d17 ; oq0 |= t_oq0 & ~(f2 & f & m)
vqrshrn.u16 d21, q15, #4 ; w_oq1
+ vsub.i16 q15, q14
+ vaddl.u8 q14, d3, d10
+ vadd.i16 q15, q4
+ vaddl.u8 q4, d11, d15
vbif d21, d22, d17 ; oq1 |= t_oq1 & ~(f2 & f & m)
-
- vsubw.u8 q15, d2 ; oq2 = oq1 - p5
- vsubw.u8 q15, d9 ; oq2 -= q1
- vaddw.u8 q15, d10 ; oq2 += q2
- vaddw.u8 q15, d15 ; oq2 += q7
vqrshrn.u16 d22, q15, #4 ; w_oq2
+ vsub.i16 q15, q14
+ vaddl.u8 q14, d4, d11
+ vadd.i16 q15, q4
+ vaddl.u8 q4, d12, d15
vbif d22, d23, d17 ; oq2 |= t_oq2 & ~(f2 & f & m)
-
- vsubw.u8 q15, d3 ; oq3 = oq2 - p4
- vsubw.u8 q15, d10 ; oq3 -= q2
- vaddw.u8 q15, d11 ; oq3 += q3
- vaddw.u8 q15, d15 ; oq3 += q7
vqrshrn.u16 d23, q15, #4 ; w_oq3
+ vsub.i16 q15, q14
+ vaddl.u8 q14, d5, d12
+ vadd.i16 q15, q4
+ vaddl.u8 q4, d13, d15
vbif d16, d1, d17 ; op6 |= p6 & ~(f2 & f & m)
-
- vsubw.u8 q15, d4 ; oq4 = oq3 - p3
- vsubw.u8 q15, d11 ; oq4 -= q3
- vaddw.u8 q15, d12 ; oq4 += q4
- vaddw.u8 q15, d15 ; oq4 += q7
vqrshrn.u16 d1, q15, #4 ; w_oq4
+ vsub.i16 q15, q14
+ vaddl.u8 q14, d6, d13
+ vadd.i16 q15, q4
+ vaddl.u8 q4, d14, d15
vbif d24, d2, d17 ; op5 |= p5 & ~(f2 & f & m)
-
- vsubw.u8 q15, d5 ; oq5 = oq4 - p2
- vsubw.u8 q15, d12 ; oq5 -= q4
- vaddw.u8 q15, d13 ; oq5 += q5
- vaddw.u8 q15, d15 ; oq5 += q7
vqrshrn.u16 d2, q15, #4 ; w_oq5
+ vsub.i16 q15, q14
vbif d25, d3, d17 ; op4 |= p4 & ~(f2 & f & m)
-
- vsubw.u8 q15, d6 ; oq6 = oq5 - p1
- vsubw.u8 q15, d13 ; oq6 -= q5
- vaddw.u8 q15, d14 ; oq6 += q6
- vaddw.u8 q15, d15 ; oq6 += q7
- vqrshrn.u16 d3, q15, #4 ; w_oq6
-
- vbif d26, d4, d17 ; op3 |= p3 & ~(f2 & f & m)
+ vadd.i16 q15, q4
vbif d23, d11, d17 ; oq3 |= q3 & ~(f2 & f & m)
+ vqrshrn.u16 d3, q15, #4 ; w_oq6
vbif d1, d12, d17 ; oq4 |= q4 & ~(f2 & f & m)
vbif d2, d13, d17 ; oq5 |= q5 & ~(f2 & f & m)
vbif d3, d14, d17 ; oq6 |= q6 & ~(f2 & f & m)
diff --git a/vp9/common/arm/neon/vp9_short_idct4x4_add_neon.asm b/vp9/common/arm/neon/vp9_short_idct4x4_add_neon.asm
index 4330322..adc17fc 100644
--- a/vp9/common/arm/neon/vp9_short_idct4x4_add_neon.asm
+++ b/vp9/common/arm/neon/vp9_short_idct4x4_add_neon.asm
@@ -81,17 +81,15 @@
; input[1] * cospi_24_64 - input[3] * cospi_8_64;
; input[1] * cospi_8_64 + input[3] * cospi_24_64;
vmull.s16 q15, d17, d22
- vmull.s16 q0, d19, d20
vmull.s16 q1, d17, d20
- vmull.s16 q2, d19, d22
- vsub.s32 q3, q15, q0
- vadd.s32 q8, q1, q2
+ vmlsl.s16 q15, d19, d20
+ vmlal.s16 q1, d19, d22
; dct_const_round_shift
vqrshrn.s32 d26, q13, #14
vqrshrn.s32 d27, q14, #14
- vqrshrn.s32 d29, q3, #14
- vqrshrn.s32 d28, q8, #14
+ vqrshrn.s32 d29, q15, #14
+ vqrshrn.s32 d28, q1, #14
; stage 2
; output[0] = step[0] + step[3];
@@ -132,17 +130,15 @@
; input[1] * cospi_24_64 - input[3] * cospi_8_64;
; input[1] * cospi_8_64 + input[3] * cospi_24_64;
vmull.s16 q15, d17, d22
- vmull.s16 q0, d19, d20
vmull.s16 q1, d17, d20
- vmull.s16 q2, d19, d22
- vsub.s32 q3, q15, q0
- vadd.s32 q8, q1, q2
+ vmlsl.s16 q15, d19, d20
+ vmlal.s16 q1, d19, d22
; dct_const_round_shift
vqrshrn.s32 d26, q13, #14
vqrshrn.s32 d27, q14, #14
- vqrshrn.s32 d29, q3, #14
- vqrshrn.s32 d28, q8, #14
+ vqrshrn.s32 d29, q15, #14
+ vqrshrn.s32 d28, q1, #14
; stage 2
; output[0] = step[0] + step[3];
diff --git a/vp9/common/arm/neon/vp9_short_idct8x8_add_neon.asm b/vp9/common/arm/neon/vp9_short_idct8x8_add_neon.asm
index f829665..b58f692 100644
--- a/vp9/common/arm/neon/vp9_short_idct8x8_add_neon.asm
+++ b/vp9/common/arm/neon/vp9_short_idct8x8_add_neon.asm
@@ -29,29 +29,21 @@
vmull.s16 q2, d18, d0
vmull.s16 q3, d19, d0
- ; input[7] * cospi_4_64
- vmull.s16 q4, d30, d1
- vmull.s16 q5, d31, d1
-
; input[1]*cospi_28_64-input[7]*cospi_4_64
- vsub.s32 q6, q2, q4
- vsub.s32 q7, q3, q5
+ vmlsl.s16 q2, d30, d1
+ vmlsl.s16 q3, d31, d1
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d8, q6, #14 ; >> 14
- vqrshrn.s32 d9, q7, #14 ; >> 14
+ vqrshrn.s32 d8, q2, #14 ; >> 14
+ vqrshrn.s32 d9, q3, #14 ; >> 14
; input[1] * cospi_4_64
vmull.s16 q2, d18, d1
vmull.s16 q3, d19, d1
- ; input[7] * cospi_28_64
- vmull.s16 q1, d30, d0
- vmull.s16 q5, d31, d0
-
; input[1]*cospi_4_64+input[7]*cospi_28_64
- vadd.s32 q2, q2, q1
- vadd.s32 q3, q3, q5
+ vmlal.s16 q2, d30, d0
+ vmlal.s16 q3, d31, d0
; dct_const_round_shift(input_dc * cospi_16_64)
vqrshrn.s32 d14, q2, #14 ; >> 14
@@ -64,13 +56,9 @@
vmull.s16 q2, d26, d0
vmull.s16 q3, d27, d0
- ; input[3] * cospi_20_64
- vmull.s16 q5, d22, d1
- vmull.s16 q6, d23, d1
-
; input[5] * cospi_12_64 - input[3] * cospi_20_64
- vsub.s32 q2, q2, q5
- vsub.s32 q3, q3, q6
+ vmlsl.s16 q2, d22, d1
+ vmlsl.s16 q3, d23, d1
; dct_const_round_shift(input_dc * cospi_16_64)
vqrshrn.s32 d10, q2, #14 ; >> 14
@@ -80,17 +68,13 @@
vmull.s16 q2, d26, d1
vmull.s16 q3, d27, d1
- ; input[3] * cospi_12_64
- vmull.s16 q9, d22, d0
- vmull.s16 q15, d23, d0
-
; input[5] * cospi_20_64 + input[3] * cospi_12_64
- vadd.s32 q0, q2, q9
- vadd.s32 q1, q3, q15
+ vmlal.s16 q2, d22, d0
+ vmlal.s16 q3, d23, d0
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d12, q0, #14 ; >> 14
- vqrshrn.s32 d13, q1, #14 ; >> 14
+ vqrshrn.s32 d12, q2, #14 ; >> 14
+ vqrshrn.s32 d13, q3, #14 ; >> 14
; stage 2 & stage 3 - even half
vdup.16 d0, r7 ; duplicate cospi_16_64
@@ -115,13 +99,9 @@
vmull.s16 q2, d16, d0
vmull.s16 q3, d17, d0
- ; input[2] * cospi_16_64
- vmull.s16 q13, d24, d0
- vmull.s16 q15, d25, d0
-
; (input[0] - input[2]) * cospi_16_64
- vsub.s32 q2, q2, q13
- vsub.s32 q3, q3, q15
+ vmlsl.s16 q2, d24, d0
+ vmlsl.s16 q3, d25, d0
; dct_const_round_shift(input_dc * cospi_16_64)
vqrshrn.s32 d22, q2, #14 ; >> 14
@@ -135,13 +115,9 @@
vmull.s16 q2, d20, d0
vmull.s16 q3, d21, d0
- ; input[3] * cospi_8_64
- vmull.s16 q13, d28, d1
- vmull.s16 q15, d29, d1
-
; input[1] * cospi_24_64 - input[3] * cospi_8_64
- vsub.s32 q2, q2, q13
- vsub.s32 q3, q3, q15
+ vmlsl.s16 q2, d28, d1
+ vmlsl.s16 q3, d29, d1
; dct_const_round_shift(input_dc * cospi_16_64)
vqrshrn.s32 d26, q2, #14 ; >> 14
@@ -151,17 +127,13 @@
vmull.s16 q2, d20, d1
vmull.s16 q3, d21, d1
- ; input[3] * cospi_24_64
- vmull.s16 q8, d28, d0
- vmull.s16 q10, d29, d0
-
; input[1] * cospi_8_64 + input[3] * cospi_24_64
- vadd.s32 q0, q2, q8
- vadd.s32 q1, q3, q10
+ vmlal.s16 q2, d28, d0
+ vmlal.s16 q3, d29, d0
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d30, q0, #14 ; >> 14
- vqrshrn.s32 d31, q1, #14 ; >> 14
+ vqrshrn.s32 d30, q2, #14 ; >> 14
+ vqrshrn.s32 d31, q3, #14 ; >> 14
vadd.s16 q0, q9, q15 ; output[0] = step[0] + step[3]
@@ -198,13 +170,9 @@
vmull.s16 q9, d28, d16
vmull.s16 q10, d29, d16
- ; step2[5] * cospi_16_64
- vmull.s16 q11, d26, d16
- vmull.s16 q12, d27, d16
-
; (step2[5] + step2[6]) * cospi_16_64
- vadd.s32 q9, q9, q11
- vadd.s32 q10, q10, q12
+ vmlal.s16 q9, d26, d16
+ vmlal.s16 q10, d27, d16
; dct_const_round_shift(input_dc * cospi_16_64)
vqrshrn.s32 d12, q9, #14 ; >> 14
@@ -247,6 +215,7 @@
|vp9_short_idct8x8_add_neon| PROC
push {r4-r9}
+ vpush {d8-d15}
vld1.s16 {q8}, [r0]!
vld1.s16 {q9}, [r0]!
vld1.s16 {q10}, [r0]!
@@ -349,6 +318,7 @@
vst1.64 {d6}, [r0], r2
vst1.64 {d7}, [r0], r2
+ vpop {d8-d15}
pop {r4-r9}
bx lr
ENDP ; |vp9_short_idct8x8_add_neon|
diff --git a/vp9/common/vp9_blockd.h b/vp9/common/vp9_blockd.h
index b3ba690..cff6821 100644
--- a/vp9/common/vp9_blockd.h
+++ b/vp9/common/vp9_blockd.h
@@ -408,7 +408,7 @@
typedef void (*foreach_transformed_block_visitor)(int plane, int block,
BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size,
+ TX_SIZE tx_size,
void *arg);
static INLINE void foreach_transformed_block_in_plane(
@@ -452,7 +452,7 @@
for (r = 0; r < (1 << bh); r += (1 << tx_size)) {
for (c = 0; c < (1 << bw); c += (1 << tx_size)) {
if (r < max_blocks_high && c < max_blocks_wide)
- visit(plane, i, bsize, txfrm_size_b, arg);
+ visit(plane, i, bsize, tx_size, arg);
i += step;
}
}
@@ -460,7 +460,7 @@
const int ss_block_size = bw + bh;
assert(txfrm_size_b <= ss_block_size);
for (i = 0; i < (1 << ss_block_size); i += step)
- visit(plane, i, bsize, txfrm_size_b, arg);
+ visit(plane, i, bsize, tx_size, arg);
}
}
@@ -533,62 +533,54 @@
foreach_predicted_block_in_plane(xd, bsize, plane, visit, arg);
}
-static int raster_block_offset(MACROBLOCKD *xd, BLOCK_SIZE_TYPE bsize,
- int plane, int block, int stride) {
- const int bw = b_width_log2(bsize) - xd->plane[plane].subsampling_x;
- const int y = 4 * (block >> bw), x = 4 * (block & ((1 << bw) - 1));
+static int raster_block_offset(BLOCK_SIZE_TYPE plane_bsize,
+ int raster_block, int stride) {
+ const int bw = b_width_log2(plane_bsize);
+ const int y = 4 * (raster_block >> bw);
+ const int x = 4 * (raster_block & ((1 << bw) - 1));
return y * stride + x;
}
-static int16_t* raster_block_offset_int16(MACROBLOCKD *xd,
- BLOCK_SIZE_TYPE bsize,
- int plane, int block, int16_t *base) {
- const int stride = plane_block_width(bsize, &xd->plane[plane]);
- return base + raster_block_offset(xd, bsize, plane, block, stride);
+static int16_t* raster_block_offset_int16(BLOCK_SIZE_TYPE plane_bsize,
+ int raster_block, int16_t *base) {
+ const int stride = 4 << b_width_log2(plane_bsize);
+ return base + raster_block_offset(plane_bsize, raster_block, stride);
}
-static uint8_t* raster_block_offset_uint8(MACROBLOCKD *xd,
- BLOCK_SIZE_TYPE bsize,
- int plane, int block,
- uint8_t *base, int stride) {
- return base + raster_block_offset(xd, bsize, plane, block, stride);
+static uint8_t* raster_block_offset_uint8(BLOCK_SIZE_TYPE plane_bsize,
+ int raster_block, uint8_t *base,
+ int stride) {
+ return base + raster_block_offset(plane_bsize, raster_block, stride);
}
-static int txfrm_block_to_raster_block(MACROBLOCKD *xd,
- BLOCK_SIZE_TYPE bsize,
- int plane, int block,
- TX_SIZE tx_size) {
- const int bwl = b_width_log2(bsize) - xd->plane[plane].subsampling_x;
- const int ss_txfrm_size = tx_size << 1;
+static int txfrm_block_to_raster_block(BLOCK_SIZE_TYPE plane_bsize,
+ TX_SIZE tx_size, int block) {
+ const int bwl = b_width_log2(plane_bsize);
const int tx_cols_log2 = bwl - tx_size;
const int tx_cols = 1 << tx_cols_log2;
- const int raster_mb = block >> ss_txfrm_size;
+ const int raster_mb = block >> (tx_size << 1);
const int x = (raster_mb & (tx_cols - 1)) << tx_size;
- const int y = raster_mb >> tx_cols_log2 << tx_size;
+ const int y = (raster_mb >> tx_cols_log2) << tx_size;
return x + (y << bwl);
}
-static void txfrm_block_to_raster_xy(MACROBLOCKD *xd,
- BLOCK_SIZE_TYPE bsize,
- int plane, int block,
- TX_SIZE tx_size,
+static void txfrm_block_to_raster_xy(BLOCK_SIZE_TYPE plane_bsize,
+ TX_SIZE tx_size, int block,
int *x, int *y) {
- const int bwl = b_width_log2(bsize) - xd->plane[plane].subsampling_x;
- const int ss_txfrm_size = tx_size << 1;
+ const int bwl = b_width_log2(plane_bsize);
const int tx_cols_log2 = bwl - tx_size;
const int tx_cols = 1 << tx_cols_log2;
- const int raster_mb = block >> ss_txfrm_size;
+ const int raster_mb = block >> (tx_size << 1);
*x = (raster_mb & (tx_cols - 1)) << tx_size;
*y = raster_mb >> tx_cols_log2 << tx_size;
}
-static void extend_for_intra(MACROBLOCKD* const xd, BLOCK_SIZE_TYPE bsize,
+static void extend_for_intra(MACROBLOCKD* const xd, BLOCK_SIZE_TYPE plane_bsize,
int plane, int block, TX_SIZE tx_size) {
struct macroblockd_plane *const pd = &xd->plane[plane];
uint8_t *const buf = pd->dst.buf;
const int stride = pd->dst.stride;
- const int bw = plane_block_width(bsize, pd);
- const int bh = plane_block_height(bsize, pd);
+
int x, y;
- txfrm_block_to_raster_xy(xd, bsize, plane, block, tx_size, &x, &y);
+ txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &x, &y);
x = x * 4 - 1;
y = y * 4 - 1;
// Copy a pixel into the umv if we are in a situation where the block size
@@ -596,6 +588,7 @@
// TODO(JBB): Should be able to do the full extend in place so we don't have
// to do this multiple times.
if (xd->mb_to_right_edge < 0) {
+ const int bw = 4 << b_width_log2(plane_bsize);
const int umv_border_start = bw + (xd->mb_to_right_edge >>
(3 + pd->subsampling_x));
@@ -605,6 +598,7 @@
}
if (xd->mb_to_bottom_edge < 0) {
+ const int bh = 4 << b_height_log2(plane_bsize);
const int umv_border_start = bh + (xd->mb_to_bottom_edge >>
(3 + pd->subsampling_y));
int i;
diff --git a/vp9/common/vp9_entropymode.c b/vp9/common/vp9_entropymode.c
index 2aeabca..0fa4f4a 100644
--- a/vp9/common/vp9_entropymode.c
+++ b/vp9/common/vp9_entropymode.c
@@ -23,7 +23,7 @@
{ 113, 9, 36, 155, 111, 157, 32, 44, 161 } /* y = d135 */,
{ 116, 9, 55, 176, 76, 96, 37, 61, 149 } /* y = d117 */,
{ 115, 9, 28, 141, 161, 167, 21, 25, 193 } /* y = d153 */,
- { 120, 12, 32, 145, 195, 142, 32, 38, 86 } /* y = d27 */,
+ { 120, 12, 32, 145, 195, 142, 32, 38, 86 } /* y = d207 */,
{ 116, 12, 64, 120, 140, 125, 49, 115, 121 } /* y = d63 */,
{ 102, 19, 66, 162, 182, 122, 35, 59, 128 } /* y = tm */
};
@@ -45,7 +45,7 @@
{ 83, 5, 42, 156, 111, 152, 26, 49, 152 } /* y = d135 */,
{ 80, 5, 58, 178, 74, 83, 33, 62, 145 } /* y = d117 */,
{ 86, 5, 32, 154, 192, 168, 14, 22, 163 } /* y = d153 */,
- { 85, 5, 32, 156, 216, 148, 19, 29, 73 } /* y = d27 */,
+ { 85, 5, 32, 156, 216, 148, 19, 29, 73 } /* y = d207 */,
{ 77, 7, 64, 116, 132, 122, 37, 126, 120 } /* y = d63 */,
{ 101, 21, 107, 181, 192, 103, 19, 67, 125 } /* y = tm */
};
@@ -109,7 +109,7 @@
{ 72, 35, 36, 149, 68, 206, 68, 63, 105 } /* left = d135 */,
{ 73, 31, 28, 138, 57, 124, 55, 122, 151 } /* left = d117 */,
{ 67, 23, 21, 140, 126, 197, 40, 37, 171 } /* left = d153 */,
- { 86, 27, 28, 128, 154, 212, 45, 43, 53 } /* left = d27 */,
+ { 86, 27, 28, 128, 154, 212, 45, 43, 53 } /* left = d207 */,
{ 74, 32, 27, 107, 86, 160, 63, 134, 102 } /* left = d63 */,
{ 59, 67, 44, 140, 161, 202, 78, 67, 119 } /* left = tm */
}, { /* above = v */
@@ -120,7 +120,7 @@
{ 46, 41, 76, 140, 63, 184, 69, 112, 57 } /* left = d135 */,
{ 38, 32, 85, 140, 46, 112, 54, 151, 133 } /* left = d117 */,
{ 39, 27, 61, 131, 110, 175, 44, 75, 136 } /* left = d153 */,
- { 52, 30, 74, 113, 130, 175, 51, 64, 58 } /* left = d27 */,
+ { 52, 30, 74, 113, 130, 175, 51, 64, 58 } /* left = d207 */,
{ 47, 35, 80, 100, 74, 143, 64, 163, 74 } /* left = d63 */,
{ 36, 61, 116, 114, 128, 162, 80, 125, 82 } /* left = tm */
}, { /* above = h */
@@ -131,7 +131,7 @@
{ 58, 50, 25, 139, 115, 232, 39, 52, 118 } /* left = d135 */,
{ 50, 35, 33, 153, 104, 162, 64, 59, 131 } /* left = d117 */,
{ 44, 24, 16, 150, 177, 202, 33, 19, 156 } /* left = d153 */,
- { 55, 27, 12, 153, 203, 218, 26, 27, 49 } /* left = d27 */,
+ { 55, 27, 12, 153, 203, 218, 26, 27, 49 } /* left = d207 */,
{ 53, 49, 21, 110, 116, 168, 59, 80, 76 } /* left = d63 */,
{ 38, 72, 19, 168, 203, 212, 50, 50, 107 } /* left = tm */
}, { /* above = d45 */
@@ -142,7 +142,7 @@
{ 60, 32, 33, 112, 71, 220, 64, 89, 104 } /* left = d135 */,
{ 53, 26, 34, 130, 56, 149, 84, 120, 103 } /* left = d117 */,
{ 53, 21, 23, 133, 109, 210, 56, 77, 172 } /* left = d153 */,
- { 77, 19, 29, 112, 142, 228, 55, 66, 36 } /* left = d27 */,
+ { 77, 19, 29, 112, 142, 228, 55, 66, 36 } /* left = d207 */,
{ 61, 29, 29, 93, 97, 165, 83, 175, 162 } /* left = d63 */,
{ 47, 47, 43, 114, 137, 181, 100, 99, 95 } /* left = tm */
}, { /* above = d135 */
@@ -153,7 +153,7 @@
{ 52, 31, 22, 158, 40, 209, 58, 62, 89 } /* left = d135 */,
{ 44, 31, 29, 147, 46, 158, 56, 102, 198 } /* left = d117 */,
{ 35, 19, 12, 135, 87, 209, 41, 45, 167 } /* left = d153 */,
- { 55, 25, 21, 118, 95, 215, 38, 39, 66 } /* left = d27 */,
+ { 55, 25, 21, 118, 95, 215, 38, 39, 66 } /* left = d207 */,
{ 51, 38, 25, 113, 58, 164, 70, 93, 97 } /* left = d63 */,
{ 47, 54, 34, 146, 108, 203, 72, 103, 151 } /* left = tm */
}, { /* above = d117 */
@@ -164,7 +164,7 @@
{ 40, 26, 35, 154, 40, 185, 51, 97, 123 } /* left = d135 */,
{ 35, 19, 34, 179, 19, 97, 48, 129, 124 } /* left = d117 */,
{ 36, 20, 26, 136, 62, 164, 33, 77, 154 } /* left = d153 */,
- { 45, 18, 32, 130, 90, 157, 40, 79, 91 } /* left = d27 */,
+ { 45, 18, 32, 130, 90, 157, 40, 79, 91 } /* left = d207 */,
{ 45, 26, 28, 129, 45, 129, 49, 147, 123 } /* left = d63 */,
{ 38, 44, 51, 136, 74, 162, 57, 97, 121 } /* left = tm */
}, { /* above = d153 */
@@ -175,10 +175,10 @@
{ 47, 29, 17, 153, 64, 220, 59, 51, 114 } /* left = d135 */,
{ 46, 16, 24, 136, 76, 147, 41, 64, 172 } /* left = d117 */,
{ 34, 17, 11, 108, 152, 187, 13, 15, 209 } /* left = d153 */,
- { 51, 24, 14, 115, 133, 209, 32, 26, 104 } /* left = d27 */,
+ { 51, 24, 14, 115, 133, 209, 32, 26, 104 } /* left = d207 */,
{ 55, 30, 18, 122, 79, 179, 44, 88, 116 } /* left = d63 */,
{ 37, 49, 25, 129, 168, 164, 41, 54, 148 } /* left = tm */
- }, { /* above = d27 */
+ }, { /* above = d207 */
{ 82, 22, 32, 127, 143, 213, 39, 41, 70 } /* left = dc */,
{ 62, 44, 61, 123, 105, 189, 48, 57, 64 } /* left = v */,
{ 47, 25, 17, 175, 222, 220, 24, 30, 86 } /* left = h */,
@@ -186,7 +186,7 @@
{ 57, 39, 23, 151, 68, 216, 55, 63, 58 } /* left = d135 */,
{ 49, 30, 35, 141, 70, 168, 82, 40, 115 } /* left = d117 */,
{ 51, 25, 15, 136, 129, 202, 38, 35, 139 } /* left = d153 */,
- { 68, 26, 16, 111, 141, 215, 29, 28, 28 } /* left = d27 */,
+ { 68, 26, 16, 111, 141, 215, 29, 28, 28 } /* left = d207 */,
{ 59, 39, 19, 114, 75, 180, 77, 104, 42 } /* left = d63 */,
{ 40, 61, 26, 126, 152, 206, 61, 59, 93 } /* left = tm */
}, { /* above = d63 */
@@ -197,7 +197,7 @@
{ 48, 31, 27, 114, 63, 183, 82, 116, 56 } /* left = d135 */,
{ 43, 28, 37, 121, 63, 123, 61, 192, 169 } /* left = d117 */,
{ 42, 17, 24, 109, 97, 177, 56, 76, 122 } /* left = d153 */,
- { 58, 18, 28, 105, 139, 182, 70, 92, 63 } /* left = d27 */,
+ { 58, 18, 28, 105, 139, 182, 70, 92, 63 } /* left = d207 */,
{ 46, 23, 32, 74, 86, 150, 67, 183, 88 } /* left = d63 */,
{ 36, 38, 48, 92, 122, 165, 88, 137, 91 } /* left = tm */
}, { /* above = tm */
@@ -208,7 +208,7 @@
{ 49, 50, 35, 144, 95, 205, 63, 78, 59 } /* left = d135 */,
{ 41, 53, 52, 148, 71, 142, 65, 128, 51 } /* left = d117 */,
{ 40, 36, 28, 143, 143, 202, 40, 55, 137 } /* left = d153 */,
- { 52, 34, 29, 129, 183, 227, 42, 35, 43 } /* left = d27 */,
+ { 52, 34, 29, 129, 183, 227, 42, 35, 43 } /* left = d207 */,
{ 42, 44, 44, 104, 105, 164, 64, 130, 80 } /* left = d63 */,
{ 43, 81, 53, 140, 169, 204, 68, 84, 72 } /* left = tm */
}
diff --git a/vp9/common/vp9_reconinter.c b/vp9/common/vp9_reconinter.c
index b2a55d0..9a1f5fc 100644
--- a/vp9/common/vp9_reconinter.c
+++ b/vp9/common/vp9_reconinter.c
@@ -115,9 +115,8 @@
struct build_inter_predictors_args {
MACROBLOCKD *xd;
int x, y;
- struct buf_2d *dst;
- struct buf_2d *pre[2];
};
+
static void build_inter_predictors(int plane, int block,
BLOCK_SIZE_TYPE bsize,
int pred_w, int pred_h,
@@ -141,8 +140,8 @@
for (ref = 0; ref < 1 + use_second_ref; ++ref) {
struct scale_factors *const scale = &xd->scale_factor[ref];
- struct buf_2d *const pre_buf = arg->pre[ref];
- struct buf_2d *const dst_buf = arg->dst;
+ struct buf_2d *const pre_buf = &pd->pre[ref];
+ struct buf_2d *const dst_buf = &pd->dst;
const uint8_t *const pre = pre_buf->buf + scaled_buffer_offset(x, y,
pre_buf->stride, scale);
@@ -182,8 +181,6 @@
for (plane = plane_from; plane <= plane_to; ++plane) {
struct build_inter_predictors_args args = {
xd, mi_col * MI_SIZE, mi_row * MI_SIZE,
- &xd->plane[plane].dst,
- {&xd->plane[plane].pre[0], &xd->plane[plane].pre[1]}
};
foreach_predicted_block_in_plane(xd, bsize, plane, build_inter_predictors,
&args);
diff --git a/vp9/common/vp9_reconintra.c b/vp9/common/vp9_reconintra.c
index 84a4b54..bc75481 100644
--- a/vp9/common/vp9_reconintra.c
+++ b/vp9/common/vp9_reconintra.c
@@ -49,8 +49,8 @@
intra_pred_sized(type, 16) \
intra_pred_sized(type, 32)
-static INLINE void d27_predictor(uint8_t *dst, ptrdiff_t stride, int bs,
- const uint8_t *above, const uint8_t *left) {
+static INLINE void d207_predictor(uint8_t *dst, ptrdiff_t stride, int bs,
+ const uint8_t *above, const uint8_t *left) {
int r, c;
// first column
@@ -76,7 +76,7 @@
for (c = 0; c < bs - 2; ++c)
dst[r * stride + c] = dst[(r + 1) * stride + c - 2];
}
-intra_pred_allsizes(d27)
+intra_pred_allsizes(d207)
static INLINE void d63_predictor(uint8_t *dst, ptrdiff_t stride, int bs,
const uint8_t *above, const uint8_t *left) {
@@ -297,7 +297,7 @@
intra_pred_allsizes(pred[V_PRED], v);
intra_pred_allsizes(pred[H_PRED], h);
- intra_pred_allsizes(pred[D27_PRED], d27);
+ intra_pred_allsizes(pred[D27_PRED], d207);
intra_pred_allsizes(pred[D45_PRED], d45);
intra_pred_allsizes(pred[D63_PRED], d63);
intra_pred_allsizes(pred[D117_PRED], d117);
diff --git a/vp9/common/vp9_rtcd_defs.sh b/vp9/common/vp9_rtcd_defs.sh
index 31633cb..aa8088d 100644
--- a/vp9/common/vp9_rtcd_defs.sh
+++ b/vp9/common/vp9_rtcd_defs.sh
@@ -46,8 +46,8 @@
#
# RECON
#
-prototype void vp9_d27_predictor_4x4 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
-specialize vp9_d27_predictor_4x4
+prototype void vp9_d207_predictor_4x4 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
+specialize vp9_d207_predictor_4x4
prototype void vp9_d45_predictor_4x4 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
specialize vp9_d45_predictor_4x4 $ssse3_x86inc
@@ -85,8 +85,8 @@
prototype void vp9_dc_128_predictor_4x4 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
specialize vp9_dc_128_predictor_4x4
-prototype void vp9_d27_predictor_8x8 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
-specialize vp9_d27_predictor_8x8
+prototype void vp9_d207_predictor_8x8 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
+specialize vp9_d207_predictor_8x8
prototype void vp9_d45_predictor_8x8 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
specialize vp9_d45_predictor_8x8 $ssse3_x86inc
@@ -124,8 +124,8 @@
prototype void vp9_dc_128_predictor_8x8 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
specialize vp9_dc_128_predictor_8x8
-prototype void vp9_d27_predictor_16x16 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
-specialize vp9_d27_predictor_16x16
+prototype void vp9_d207_predictor_16x16 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
+specialize vp9_d207_predictor_16x16
prototype void vp9_d45_predictor_16x16 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
specialize vp9_d45_predictor_16x16 $ssse3_x86inc
@@ -163,8 +163,8 @@
prototype void vp9_dc_128_predictor_16x16 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
specialize vp9_dc_128_predictor_16x16
-prototype void vp9_d27_predictor_32x32 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
-specialize vp9_d27_predictor_32x32
+prototype void vp9_d207_predictor_32x32 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
+specialize vp9_d207_predictor_32x32
prototype void vp9_d45_predictor_32x32 "uint8_t *dst, ptrdiff_t y_stride, const uint8_t *above, const uint8_t *left"
specialize vp9_d45_predictor_32x32 $ssse3_x86inc
diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c
index 0a38d6f..bf98009 100644
--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -88,17 +88,16 @@
}
static void decode_block(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+ TX_SIZE tx_size, void *arg) {
MACROBLOCKD* const xd = arg;
struct macroblockd_plane *const pd = &xd->plane[plane];
+ const BLOCK_SIZE_TYPE plane_bsize = get_plane_block_size(bsize, pd);
int16_t* const qcoeff = BLOCK_OFFSET(pd->qcoeff, block);
const int stride = pd->dst.stride;
const int eob = pd->eobs[block];
- const TX_SIZE tx_size = (TX_SIZE)(ss_txfrm_size >> 1);
- const int raster_block = txfrm_block_to_raster_block(xd, bsize, plane,
- block, tx_size);
- uint8_t* const dst = raster_block_offset_uint8(xd, bsize, plane,
- raster_block,
+ const int raster_block = txfrm_block_to_raster_block(plane_bsize, tx_size,
+ block);
+ uint8_t* const dst = raster_block_offset_uint8(plane_bsize, raster_block,
pd->dst.buf, stride);
switch (tx_size) {
case TX_4X4: {
@@ -126,18 +125,16 @@
}
static void decode_block_intra(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+ TX_SIZE tx_size, void *arg) {
MACROBLOCKD* const xd = arg;
struct macroblockd_plane *const pd = &xd->plane[plane];
+ const BLOCK_SIZE_TYPE plane_bsize = get_plane_block_size(bsize, pd);
MODE_INFO *const mi = xd->mode_info_context;
- const TX_SIZE tx_size = (TX_SIZE)(ss_txfrm_size >> 1);
- const int raster_block = txfrm_block_to_raster_block(xd, bsize, plane,
- block, tx_size);
- uint8_t* const dst = raster_block_offset_uint8(xd, bsize, plane,
- raster_block,
+ const int raster_block = txfrm_block_to_raster_block(plane_bsize, tx_size,
+ block);
+ uint8_t* const dst = raster_block_offset_uint8(plane_bsize, raster_block,
pd->dst.buf, pd->dst.stride);
int b_mode;
- int plane_b_size;
const int tx_ib = raster_block >> tx_size;
const int mode = (plane == 0) ? mi->mbmi.mode : mi->mbmi.uv_mode;
@@ -149,10 +146,9 @@
}
if (xd->mb_to_right_edge < 0 || xd->mb_to_bottom_edge < 0)
- extend_for_intra(xd, bsize, plane, block, tx_size);
+ extend_for_intra(xd, plane_bsize, plane, block, tx_size);
- plane_b_size = b_width_log2(bsize) - pd->subsampling_x;
- vp9_predict_intra_block(xd, tx_ib, plane_b_size, tx_size, b_mode,
+ vp9_predict_intra_block(xd, tx_ib, b_width_log2(plane_bsize), tx_size, b_mode,
dst, pd->dst.stride,
dst, pd->dst.stride);
@@ -160,7 +156,7 @@
if (mi->mbmi.skip_coeff)
return;
- decode_block(plane, block, bsize, ss_txfrm_size, arg);
+ decode_block(plane, block, bsize, tx_size, arg);
}
static int decode_tokens(VP9D_COMP *pbi, BLOCK_SIZE_TYPE bsize, vp9_reader *r) {
diff --git a/vp9/decoder/vp9_detokenize.c b/vp9/decoder/vp9_detokenize.c
index 314c9fd..5bd0142 100644
--- a/vp9/decoder/vp9_detokenize.c
+++ b/vp9/decoder/vp9_detokenize.c
@@ -249,10 +249,8 @@
int *eobtotal;
};
-static void decode_block(int plane, int block,
- BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size,
- void *argv) {
+static void decode_block(int plane, int block, BLOCK_SIZE_TYPE bsize,
+ TX_SIZE tx_size, void *argv) {
const struct decode_block_args* const arg = argv;
const int bw = b_width_log2(bsize);
@@ -261,7 +259,7 @@
struct segmentation *seg = &arg->pbi->common.seg;
struct macroblockd_plane* pd = &xd->plane[plane];
const int segment_id = xd->mode_info_context->mbmi.segment_id;
- const TX_SIZE tx_size = ss_txfrm_size >> 1;
+ const int ss_txfrm_size = tx_size << 1;
const int seg_eob = get_eob(seg, segment_id, 16 << ss_txfrm_size);
const int off = block >> ss_txfrm_size;
const int mod = bw - tx_size - pd->subsampling_x;
diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c
index b396113..65725bf 100644
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -125,24 +125,22 @@
}
// Stub for alternative experimental activity measures.
-static unsigned int alt_activity_measure(VP9_COMP *cpi, MACROBLOCK *x,
- int use_dc_pred) {
- return vp9_encode_intra(cpi, x, use_dc_pred);
+static unsigned int alt_activity_measure(MACROBLOCK *x, int use_dc_pred) {
+ return vp9_encode_intra(x, use_dc_pred);
}
DECLARE_ALIGNED(16, static const uint8_t, vp9_64x64_zeros[64*64]) = {0};
// Measure the activity of the current macroblock
// What we measure here is TBD so abstracted to this function
#define ALT_ACT_MEASURE 1
-static unsigned int mb_activity_measure(VP9_COMP *cpi, MACROBLOCK *x,
- int mb_row, int mb_col) {
+static unsigned int mb_activity_measure(MACROBLOCK *x, int mb_row, int mb_col) {
unsigned int mb_activity;
if (ALT_ACT_MEASURE) {
int use_dc_pred = (mb_col || mb_row) && (!mb_col || !mb_row);
// Or use and alternative.
- mb_activity = alt_activity_measure(cpi, x, use_dc_pred);
+ mb_activity = alt_activity_measure(x, use_dc_pred);
} else {
// Original activity measure from Tim T's code.
mb_activity = tt_activity_measure(x);
@@ -299,7 +297,7 @@
#endif
// measure activity
- mb_activity = mb_activity_measure(cpi, x, mb_row, mb_col);
+ mb_activity = mb_activity_measure(x, mb_row, mb_col);
// Keep frame sum
activity_sum += mb_activity;
@@ -2641,8 +2639,8 @@
}
if (mbmi->ref_frame[0] == INTRA_FRAME) {
- vp9_encode_intra_block_y(cm, x, MAX(bsize, BLOCK_8X8));
- vp9_encode_intra_block_uv(cm, x, MAX(bsize, BLOCK_8X8));
+ vp9_encode_intra_block_y(x, MAX(bsize, BLOCK_8X8));
+ vp9_encode_intra_block_uv(x, MAX(bsize, BLOCK_8X8));
if (output_enabled)
sum_intra_stats(cpi, x);
} else {
@@ -2668,7 +2666,7 @@
if (mbmi->ref_frame[0] == INTRA_FRAME) {
vp9_tokenize_sb(cpi, t, !output_enabled, MAX(bsize, BLOCK_8X8));
} else if (!x->skip) {
- vp9_encode_sb(cm, x, MAX(bsize, BLOCK_8X8));
+ vp9_encode_sb(x, MAX(bsize, BLOCK_8X8));
vp9_tokenize_sb(cpi, t, !output_enabled, MAX(bsize, BLOCK_8X8));
} else {
int mb_skip_context = xd->left_available ? (mi - 1)->mbmi.skip_coeff : 0;
diff --git a/vp9/encoder/vp9_encodeintra.c b/vp9/encoder/vp9_encodeintra.c
index edbd2d9..7393974 100644
--- a/vp9/encoder/vp9_encodeintra.c
+++ b/vp9/encoder/vp9_encodeintra.c
@@ -15,14 +15,14 @@
#include "vp9/encoder/vp9_encodemb.h"
#include "vp9/encoder/vp9_encodeintra.h"
-int vp9_encode_intra(VP9_COMP *cpi, MACROBLOCK *x, int use_16x16_pred) {
+int vp9_encode_intra(MACROBLOCK *x, int use_16x16_pred) {
MB_MODE_INFO * mbmi = &x->e_mbd.mode_info_context->mbmi;
- (void) cpi;
x->skip_encode = 0;
mbmi->mode = DC_PRED;
mbmi->ref_frame[0] = INTRA_FRAME;
- mbmi->txfm_size = use_16x16_pred ? (mbmi->sb_type >= BLOCK_16X16 ?
- TX_16X16 : TX_8X8) : TX_4X4;
- vp9_encode_intra_block_y(&cpi->common, x, mbmi->sb_type);
+ mbmi->txfm_size = use_16x16_pred ? (mbmi->sb_type >= BLOCK_16X16 ? TX_16X16
+ : TX_8X8)
+ : TX_4X4;
+ vp9_encode_intra_block_y(x, mbmi->sb_type);
return vp9_get_mb_ss(x->plane[0].src_diff);
}
diff --git a/vp9/encoder/vp9_encodeintra.h b/vp9/encoder/vp9_encodeintra.h
index 16ac59e..18171a5 100644
--- a/vp9/encoder/vp9_encodeintra.h
+++ b/vp9/encoder/vp9_encodeintra.h
@@ -13,12 +13,8 @@
#include "vp9/encoder/vp9_onyx_int.h"
-int vp9_encode_intra(VP9_COMP *cpi, MACROBLOCK *x, int use_16x16_pred);
-void encode_block_intra(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg);
-void vp9_encode_intra_block_y(VP9_COMMON *const cm, MACROBLOCK *mb,
- BLOCK_SIZE_TYPE bs);
-void vp9_encode_intra_block_uv(VP9_COMMON *const cm, MACROBLOCK *mb,
- BLOCK_SIZE_TYPE bs);
+int vp9_encode_intra(MACROBLOCK *x, int use_16x16_pred);
+void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE_TYPE bsize,
+ TX_SIZE tx_size, void *arg);
#endif // VP9_ENCODER_VP9_ENCODEINTRA_H_
diff --git a/vp9/encoder/vp9_encodemb.c b/vp9/encoder/vp9_encodemb.c
index ea85ac6..633c1cc 100644
--- a/vp9/encoder/vp9_encodemb.c
+++ b/vp9/encoder/vp9_encodemb.c
@@ -146,31 +146,33 @@
ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l,
TX_SIZE tx_size) {
MACROBLOCKD *const xd = &mb->e_mbd;
+ struct macroblockd_plane *pd = &xd->plane[plane];
+ const BLOCK_SIZE_TYPE plane_bsize = get_plane_block_size(bsize, pd);
const int ref = is_inter_block(&xd->mode_info_context->mbmi);
vp9_token_state tokens[1025][2];
unsigned best_index[1025][2];
const int16_t *coeff_ptr = BLOCK_OFFSET(mb->plane[plane].coeff, block);
int16_t *qcoeff_ptr;
int16_t *dqcoeff_ptr;
- int eob = xd->plane[plane].eobs[block], final_eob, sz = 0;
+ int eob = pd->eobs[block], final_eob, sz = 0;
const int i0 = 0;
int rc, x, next, i;
int64_t rdmult, rddiv, rd_cost0, rd_cost1;
int rate0, rate1, error0, error1, t0, t1;
int best, band, pt;
- PLANE_TYPE type = xd->plane[plane].plane_type;
+ PLANE_TYPE type = pd->plane_type;
int err_mult = plane_rd_mult[type];
int default_eob;
const int16_t *scan, *nb;
const int mul = 1 + (tx_size == TX_32X32);
uint8_t token_cache[1024];
- const int ib = txfrm_block_to_raster_block(xd, bsize, plane, block, tx_size);
- const int16_t *dequant_ptr = xd->plane[plane].dequant;
+ const int ib = txfrm_block_to_raster_block(plane_bsize, tx_size, block);
+ const int16_t *dequant_ptr = pd->dequant;
const uint8_t * band_translate;
assert((!type && !plane) || (type && plane));
- dqcoeff_ptr = BLOCK_OFFSET(xd->plane[plane].dqcoeff, block);
- qcoeff_ptr = BLOCK_OFFSET(xd->plane[plane].qcoeff, block);
+ dqcoeff_ptr = BLOCK_OFFSET(pd->dqcoeff, block);
+ qcoeff_ptr = BLOCK_OFFSET(pd->qcoeff, block);
switch (tx_size) {
default:
case TX_4X4:
@@ -372,19 +374,21 @@
void vp9_optimize_b(int plane, int block, BLOCK_SIZE_TYPE bsize,
TX_SIZE tx_size, MACROBLOCK *mb, struct optimize_ctx *ctx) {
MACROBLOCKD *const xd = &mb->e_mbd;
+ const BLOCK_SIZE_TYPE plane_bsize = get_plane_block_size(bsize,
+ &xd->plane[plane]);
int x, y;
// find current entropy context
- txfrm_block_to_raster_xy(xd, bsize, plane, block, tx_size, &x, &y);
+ txfrm_block_to_raster_xy(plane_bsize, tx_size, block, &x, &y);
optimize_b(mb, plane, block, bsize, &ctx->ta[plane][x], &ctx->tl[plane][y],
tx_size);
}
static void optimize_block(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+ TX_SIZE tx_size, void *arg) {
const struct encode_b_args* const args = arg;
- vp9_optimize_b(plane, block, bsize, ss_txfrm_size >> 1, args->x, args->ctx);
+ vp9_optimize_b(plane, block, bsize, tx_size, args->x, args->ctx);
}
void optimize_init_b(int plane, BLOCK_SIZE_TYPE bsize, void *arg) {
@@ -428,17 +432,16 @@
}
}
-void vp9_optimize_sby(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
+void vp9_optimize_sby(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
struct optimize_ctx ctx;
- struct encode_b_args arg = {cm, x, &ctx};
+ struct encode_b_args arg = {x, &ctx};
optimize_init_b(0, bsize, &arg);
foreach_transformed_block_in_plane(&x->e_mbd, bsize, 0, optimize_block, &arg);
}
-void vp9_optimize_sbuv(VP9_COMMON *const cm, MACROBLOCK *x,
- BLOCK_SIZE_TYPE bsize) {
+void vp9_optimize_sbuv(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
struct optimize_ctx ctx;
- struct encode_b_args arg = {cm, x, &ctx};
+ struct encode_b_args arg = {x, &ctx};
int i;
for (i = 1; i < MAX_MB_PLANE; ++i)
optimize_init_b(i, bsize, &arg);
@@ -446,8 +449,8 @@
foreach_transformed_block_uv(&x->e_mbd, bsize, optimize_block, &arg);
}
-void xform_quant(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+void vp9_xform_quant(int plane, int block, BLOCK_SIZE_TYPE plane_bsize,
+ TX_SIZE tx_size, void *arg) {
struct encode_b_args* const args = arg;
MACROBLOCK* const x = args->x;
MACROBLOCKD* const xd = &x->e_mbd;
@@ -458,8 +461,7 @@
int16_t *dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block);
const int16_t *scan, *iscan;
uint16_t *eob = &pd->eobs[block];
- const TX_SIZE tx_size = (TX_SIZE)(ss_txfrm_size >> 1);
- const int bwl = b_width_log2(bsize) - pd->subsampling_x, bw = 1 << bwl;
+ const int bwl = b_width_log2(plane_bsize), bw = 1 << bwl;
const int twl = bwl - tx_size, twmask = (1 << twl) - 1;
int xoff, yoff;
int16_t *src_diff;
@@ -521,19 +523,19 @@
}
static void encode_block(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+ TX_SIZE tx_size, void *arg) {
struct encode_b_args *const args = arg;
MACROBLOCK *const x = args->x;
MACROBLOCKD *const xd = &x->e_mbd;
- const TX_SIZE tx_size = (TX_SIZE)(ss_txfrm_size >> 1);
- const int raster_block = txfrm_block_to_raster_block(xd, bsize, plane,
- block, tx_size);
struct macroblockd_plane *const pd = &xd->plane[plane];
+ const BLOCK_SIZE_TYPE plane_bsize = get_plane_block_size(bsize, pd);
+ const int raster_block = txfrm_block_to_raster_block(plane_bsize, tx_size,
+ block);
+
int16_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block);
- uint8_t *const dst = raster_block_offset_uint8(xd, bsize, plane,
- raster_block,
+ uint8_t *const dst = raster_block_offset_uint8(plane_bsize, raster_block,
pd->dst.buf, pd->dst.stride);
- xform_quant(plane, block, bsize, ss_txfrm_size, arg);
+ vp9_xform_quant(plane, block, plane_bsize, tx_size, arg);
if (x->optimize)
vp9_optimize_b(plane, block, bsize, tx_size, x, args->ctx);
@@ -565,25 +567,24 @@
}
}
-void vp9_xform_quant_sby(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
+void vp9_xform_quant_sby(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
MACROBLOCKD* const xd = &x->e_mbd;
- struct encode_b_args arg = {cm, x, NULL};
+ struct encode_b_args arg = {x, NULL};
- foreach_transformed_block_in_plane(xd, bsize, 0, xform_quant, &arg);
+ foreach_transformed_block_in_plane(xd, bsize, 0, vp9_xform_quant, &arg);
}
-void vp9_xform_quant_sbuv(VP9_COMMON *cm, MACROBLOCK *x,
- BLOCK_SIZE_TYPE bsize) {
+void vp9_xform_quant_sbuv(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
MACROBLOCKD* const xd = &x->e_mbd;
- struct encode_b_args arg = {cm, x, NULL};
+ struct encode_b_args arg = {x, NULL};
- foreach_transformed_block_uv(xd, bsize, xform_quant, &arg);
+ foreach_transformed_block_uv(xd, bsize, vp9_xform_quant, &arg);
}
-void vp9_encode_sby(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
+void vp9_encode_sby(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
MACROBLOCKD *const xd = &x->e_mbd;
struct optimize_ctx ctx;
- struct encode_b_args arg = {cm, x, &ctx};
+ struct encode_b_args arg = {x, &ctx};
vp9_subtract_sby(x, bsize);
if (x->optimize)
@@ -592,10 +593,10 @@
foreach_transformed_block_in_plane(xd, bsize, 0, encode_block, &arg);
}
-void vp9_encode_sbuv(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
+void vp9_encode_sbuv(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
MACROBLOCKD *const xd = &x->e_mbd;
struct optimize_ctx ctx;
- struct encode_b_args arg = {cm, x, &ctx};
+ struct encode_b_args arg = {x, &ctx};
vp9_subtract_sbuv(x, bsize);
if (x->optimize) {
@@ -607,10 +608,10 @@
foreach_transformed_block_uv(xd, bsize, encode_block, &arg);
}
-void vp9_encode_sb(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
+void vp9_encode_sb(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
MACROBLOCKD *const xd = &x->e_mbd;
struct optimize_ctx ctx;
- struct encode_b_args arg = {cm, x, &ctx};
+ struct encode_b_args arg = {x, &ctx};
vp9_subtract_sb(x, bsize);
@@ -623,22 +624,22 @@
foreach_transformed_block(xd, bsize, encode_block, &arg);
}
-void encode_block_intra(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+void vp9_encode_block_intra(int plane, int block, BLOCK_SIZE_TYPE bsize,
+ TX_SIZE tx_size, void *arg) {
struct encode_b_args* const args = arg;
MACROBLOCK *const x = args->x;
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *mbmi = &xd->mode_info_context->mbmi;
- const TX_SIZE tx_size = (TX_SIZE)(ss_txfrm_size >> 1);
struct macroblock_plane *const p = &x->plane[plane];
struct macroblockd_plane *const pd = &xd->plane[plane];
+ const BLOCK_SIZE_TYPE plane_bsize = get_plane_block_size(bsize, pd);
int16_t *coeff = BLOCK_OFFSET(p->coeff, block);
int16_t *qcoeff = BLOCK_OFFSET(pd->qcoeff, block);
int16_t *dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block);
const int16_t *scan, *iscan;
TX_TYPE tx_type;
MB_PREDICTION_MODE mode;
- const int bwl = b_width_log2(bsize) - pd->subsampling_x, bw = 1 << bwl;
+ const int bwl = b_width_log2(plane_bsize), bw = 1 << bwl;
const int twl = bwl - tx_size, twmask = (1 << twl) - 1;
int xoff, yoff;
uint8_t *src, *dst;
@@ -646,7 +647,7 @@
uint16_t *eob = &pd->eobs[block];
if (xd->mb_to_right_edge < 0 || xd->mb_to_bottom_edge < 0) {
- extend_for_intra(xd, bsize, plane, block, tx_size);
+ extend_for_intra(xd, plane_bsize, plane, block, tx_size);
}
// if (x->optimize)
@@ -775,20 +776,18 @@
}
}
-void vp9_encode_intra_block_y(VP9_COMMON *cm, MACROBLOCK *x,
- BLOCK_SIZE_TYPE bsize) {
+void vp9_encode_intra_block_y(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
MACROBLOCKD* const xd = &x->e_mbd;
struct optimize_ctx ctx;
- struct encode_b_args arg = {cm, x, &ctx};
+ struct encode_b_args arg = {x, &ctx};
- foreach_transformed_block_in_plane(xd, bsize, 0,
- encode_block_intra, &arg);
+ foreach_transformed_block_in_plane(xd, bsize, 0, vp9_encode_block_intra,
+ &arg);
}
-void vp9_encode_intra_block_uv(VP9_COMMON *cm, MACROBLOCK *x,
- BLOCK_SIZE_TYPE bsize) {
+void vp9_encode_intra_block_uv(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize) {
MACROBLOCKD* const xd = &x->e_mbd;
struct optimize_ctx ctx;
- struct encode_b_args arg = {cm, x, &ctx};
- foreach_transformed_block_uv(xd, bsize, encode_block_intra, &arg);
+ struct encode_b_args arg = {x, &ctx};
+ foreach_transformed_block_uv(xd, bsize, vp9_encode_block_intra, &arg);
}
diff --git a/vp9/encoder/vp9_encodemb.h b/vp9/encoder/vp9_encodemb.h
index f2f7903..139e163 100644
--- a/vp9/encoder/vp9_encodemb.h
+++ b/vp9/encoder/vp9_encodemb.h
@@ -28,27 +28,30 @@
};
struct encode_b_args {
- VP9_COMMON *cm;
MACROBLOCK *x;
struct optimize_ctx *ctx;
};
void vp9_optimize_b(int plane, int block, BLOCK_SIZE_TYPE bsize,
TX_SIZE tx_size, MACROBLOCK *x, struct optimize_ctx *ctx);
-void vp9_optimize_sby(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
-void vp9_optimize_sbuv(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
+void vp9_optimize_sby(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
+void vp9_optimize_sbuv(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
-void vp9_encode_sb(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
-void vp9_encode_sby(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
-void vp9_encode_sbuv(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
+void vp9_encode_sb(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
+void vp9_encode_sby(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
+void vp9_encode_sbuv(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
-void xform_quant(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg);
-void vp9_xform_quant_sby(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
-void vp9_xform_quant_sbuv(VP9_COMMON *cm, MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
+void vp9_xform_quant(int plane, int block, BLOCK_SIZE_TYPE plane_bsize,
+ TX_SIZE tx_size, void *arg);
+void vp9_xform_quant_sby(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
+void vp9_xform_quant_sbuv(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
void vp9_subtract_sby(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
void vp9_subtract_sbuv(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
-void vp9_subtract_sb(MACROBLOCK *xd, BLOCK_SIZE_TYPE bsize);
+void vp9_subtract_sb(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
+
+void vp9_encode_intra_block_y(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
+void vp9_encode_intra_block_uv(MACROBLOCK *x, BLOCK_SIZE_TYPE bsize);
+
#endif // VP9_ENCODER_VP9_ENCODEMB_H_
diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c
index 8eab71c..6b37cc9 100644
--- a/vp9/encoder/vp9_firstpass.c
+++ b/vp9/encoder/vp9_firstpass.c
@@ -568,7 +568,7 @@
1 << mi_height_log2(xd->mode_info_context->mbmi.sb_type));
// do intra 16x16 prediction
- this_error = vp9_encode_intra(cpi, x, use_dc_pred);
+ this_error = vp9_encode_intra(x, use_dc_pred);
// "intrapenalty" below deals with situations where the intra and inter error scores are very low (eg a plain black frame)
// We do not have special cases in first pass for 0,0 and nearest etc so all inter modes carry an overhead cost estimate fot the mv.
@@ -667,7 +667,7 @@
vp9_build_inter_predictors_sby(xd, mb_row << 1,
mb_col << 1,
xd->mode_info_context->mbmi.sb_type);
- vp9_encode_sby(cm, x, xd->mode_info_context->mbmi.sb_type);
+ vp9_encode_sby(x, xd->mode_info_context->mbmi.sb_type);
sum_mvr += mv.as_mv.row;
sum_mvr_abs += abs(mv.as_mv.row);
sum_mvc += mv.as_mv.col;
diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c
index 6269da5..6482615 100644
--- a/vp9/encoder/vp9_rdopt.c
+++ b/vp9/encoder/vp9_rdopt.c
@@ -556,7 +556,6 @@
}
struct rdcost_block_args {
- VP9_COMMON *cm;
MACROBLOCK *x;
ENTROPY_CONTEXT t_above[16];
ENTROPY_CONTEXT t_left[16];
@@ -571,8 +570,8 @@
const int16_t *scan, *nb;
};
-static void dist_block(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+static void dist_block(int plane, int block, TX_SIZE tx_size, void *arg) {
+ const int ss_txfrm_size = tx_size << 1;
struct rdcost_block_args* args = arg;
MACROBLOCK* const x = args->x;
MACROBLOCKD* const xd = &x->e_mbd;
@@ -596,26 +595,29 @@
}
}
-static void rate_block(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+static void rate_block(int plane, int block, BLOCK_SIZE_TYPE plane_bsize,
+ TX_SIZE tx_size, void *arg) {
struct rdcost_block_args* args = arg;
MACROBLOCKD *const xd = &args->x->e_mbd;
+ struct macroblockd_plane *const pd = &xd->plane[plane];
+
int x_idx, y_idx;
- txfrm_block_to_raster_xy(xd, bsize, plane, block, args->tx_size,
- &x_idx, &y_idx);
+ txfrm_block_to_raster_xy(plane_bsize, args->tx_size, block, &x_idx, &y_idx);
args->rate += cost_coeffs(args->x, plane, block,
- xd->plane[plane].plane_type, args->t_above + x_idx,
+ pd->plane_type, args->t_above + x_idx,
args->t_left + y_idx, args->tx_size,
args->scan, args->nb);
}
static void block_yrd_txfm(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+ TX_SIZE tx_size, void *arg) {
struct rdcost_block_args *args = arg;
MACROBLOCK *const x = args->x;
MACROBLOCKD *const xd = &x->e_mbd;
- struct encode_b_args encode_args = {args->cm, x, NULL};
+ struct encode_b_args encode_args = {x, NULL};
+ const BLOCK_SIZE_TYPE plane_bsize = get_plane_block_size(bsize,
+ &xd->plane[plane]);
int64_t rd1, rd2, rd;
if (args->skip)
@@ -632,15 +634,15 @@
}
if (!is_inter_block(&xd->mode_info_context->mbmi))
- encode_block_intra(plane, block, bsize, ss_txfrm_size, &encode_args);
+ vp9_encode_block_intra(plane, block, bsize, tx_size, &encode_args);
else
- xform_quant(plane, block, bsize, ss_txfrm_size, &encode_args);
+ vp9_xform_quant(plane, block, plane_bsize, tx_size, &encode_args);
- dist_block(plane, block, bsize, ss_txfrm_size, args);
- rate_block(plane, block, bsize, ss_txfrm_size, args);
+ dist_block(plane, block, tx_size, args);
+ rate_block(plane, block, plane_bsize, tx_size, args);
}
-static void txfm_rd_in_plane(VP9_COMMON *const cm, MACROBLOCK *x,
+static void txfm_rd_in_plane(MACROBLOCK *x,
int *rate, int64_t *distortion,
int *skippable, int64_t *sse,
int64_t ref_best_rd, int plane,
@@ -651,7 +653,7 @@
const int num_4x4_blocks_wide = num_4x4_blocks_wide_lookup[bs];
const int num_4x4_blocks_high = num_4x4_blocks_high_lookup[bs];
int i;
- struct rdcost_block_args args = { cm, x, { 0 }, { 0 }, tx_size,
+ struct rdcost_block_args args = { x, { 0 }, { 0 }, tx_size,
num_4x4_blocks_wide, num_4x4_blocks_high,
0, 0, 0, ref_best_rd, 0 };
if (plane == 0)
@@ -724,7 +726,7 @@
} else {
mbmi->txfm_size = TX_4X4;
}
- txfm_rd_in_plane(cm, x, rate, distortion, skip,
+ txfm_rd_in_plane(x, rate, distortion, skip,
&sse[mbmi->txfm_size], ref_best_rd, 0, bs,
mbmi->txfm_size);
cpi->txfm_stepdown_count[0]++;
@@ -908,7 +910,7 @@
// Actually encode using the chosen mode if a model was used, but do not
// update the r, d costs
- txfm_rd_in_plane(cm, x, rate, distortion, skip, &sse[mbmi->txfm_size],
+ txfm_rd_in_plane(x, rate, distortion, skip, &sse[mbmi->txfm_size],
ref_best_rd, 0, bs, mbmi->txfm_size);
if (max_txfm_size == TX_32X32 &&
@@ -932,7 +934,6 @@
int *skip, int64_t *psse, BLOCK_SIZE_TYPE bs,
int64_t txfm_cache[TX_MODES],
int64_t ref_best_rd) {
- VP9_COMMON *const cm = &cpi->common;
int r[TX_SIZES][2], s[TX_SIZES];
int64_t d[TX_SIZES], sse[TX_SIZES];
MACROBLOCKD *xd = &x->e_mbd;
@@ -972,14 +973,14 @@
skip, sse, ref_best_rd, bs);
} else {
if (bs >= BLOCK_32X32)
- txfm_rd_in_plane(cm, x, &r[TX_32X32][0], &d[TX_32X32], &s[TX_32X32],
+ txfm_rd_in_plane(x, &r[TX_32X32][0], &d[TX_32X32], &s[TX_32X32],
&sse[TX_32X32], ref_best_rd, 0, bs, TX_32X32);
if (bs >= BLOCK_16X16)
- txfm_rd_in_plane(cm, x, &r[TX_16X16][0], &d[TX_16X16], &s[TX_16X16],
+ txfm_rd_in_plane(x, &r[TX_16X16][0], &d[TX_16X16], &s[TX_16X16],
&sse[TX_16X16], ref_best_rd, 0, bs, TX_16X16);
- txfm_rd_in_plane(cm, x, &r[TX_8X8][0], &d[TX_8X8], &s[TX_8X8],
+ txfm_rd_in_plane(x, &r[TX_8X8][0], &d[TX_8X8], &s[TX_8X8],
&sse[TX_8X8], ref_best_rd, 0, bs, TX_8X8);
- txfm_rd_in_plane(cm, x, &r[TX_4X4][0], &d[TX_4X4], &s[TX_4X4],
+ txfm_rd_in_plane(x, &r[TX_4X4][0], &d[TX_4X4], &s[TX_4X4],
&sse[TX_4X4], ref_best_rd, 0, bs, TX_4X4);
choose_txfm_size_from_rd(cpi, x, r, rate, d, distortion, s,
skip, txfm_cache, bs);
@@ -1026,9 +1027,9 @@
struct macroblockd_plane *pd = &xd->plane[0];
const int src_stride = p->src.stride;
const int dst_stride = pd->dst.stride;
- uint8_t *src_init = raster_block_offset_uint8(xd, BLOCK_8X8, 0, ib,
+ uint8_t *src_init = raster_block_offset_uint8(BLOCK_8X8, ib,
p->src.buf, src_stride);
- uint8_t *dst_init = raster_block_offset_uint8(xd, BLOCK_8X8, 0, ib,
+ uint8_t *dst_init = raster_block_offset_uint8(BLOCK_8X8, ib,
pd->dst.buf, dst_stride);
int16_t *src_diff, *coeff;
@@ -1071,8 +1072,7 @@
block = ib + idy * 2 + idx;
xd->mode_info_context->bmi[block].as_mode = mode;
- src_diff = raster_block_offset_int16(xd, BLOCK_8X8, 0, block,
- p->src_diff);
+ src_diff = raster_block_offset_int16(BLOCK_8X8, block, p->src_diff);
coeff = BLOCK_OFFSET(x->plane[0].coeff, block);
vp9_predict_intra_block(xd, block, 1,
TX_4X4, mode,
@@ -1299,7 +1299,7 @@
*skippable = 1;
for (plane = 1; plane < MAX_MB_PLANE; ++plane) {
- txfm_rd_in_plane(cm, x, &pnrate, &pndist, &pnskip, &pnsse,
+ txfm_rd_in_plane(x, &pnrate, &pndist, &pnskip, &pnsse,
INT64_MAX, plane, bsize, uv_txfm_size);
*rate += pnrate;
*distortion += pndist;
@@ -1502,18 +1502,17 @@
const int height = plane_block_height(bsize, pd);
int idx, idy;
const int src_stride = x->plane[0].src.stride;
- uint8_t* const src = raster_block_offset_uint8(xd, BLOCK_8X8, 0, i,
+ uint8_t* const src = raster_block_offset_uint8(BLOCK_8X8, i,
x->plane[0].src.buf,
src_stride);
- int16_t* src_diff = raster_block_offset_int16(xd, BLOCK_8X8, 0, i,
+ int16_t* src_diff = raster_block_offset_int16(BLOCK_8X8, i,
x->plane[0].src_diff);
int16_t* coeff = BLOCK_OFFSET(x->plane[0].coeff, i);
- uint8_t* const pre = raster_block_offset_uint8(xd, BLOCK_8X8, 0, i,
+ uint8_t* const pre = raster_block_offset_uint8(BLOCK_8X8, i,
pd->pre[0].buf,
pd->pre[0].stride);
- uint8_t* const dst = raster_block_offset_uint8(xd, BLOCK_8X8, 0, i,
- pd->dst.buf,
- pd->dst.stride);
+ uint8_t* const dst = raster_block_offset_uint8(BLOCK_8X8, i,
+ pd->dst.buf, pd->dst.stride);
int64_t thisdistortion = 0, thissse = 0;
int thisrate = 0;
@@ -1525,8 +1524,7 @@
if (mi->mbmi.ref_frame[1] > 0) {
uint8_t* const second_pre =
- raster_block_offset_uint8(xd, BLOCK_8X8, 0, i,
- pd->pre[1].buf, pd->pre[1].stride);
+ raster_block_offset_uint8(BLOCK_8X8, 0, pd->pre[1].buf, pd->pre[1].stride);
vp9_build_inter_predictor(second_pre, pd->pre[1].stride,
dst, pd->dst.stride,
&mi->bmi[i].as_mv[1].as_mv,
@@ -1543,7 +1541,7 @@
int64_t ssz, rd, rd1, rd2;
k += (idy * 2 + idx);
- src_diff = raster_block_offset_int16(xd, BLOCK_8X8, 0, k,
+ src_diff = raster_block_offset_int16(BLOCK_8X8, k,
x->plane[0].src_diff);
coeff = BLOCK_OFFSET(x->plane[0].coeff, k);
x->fwd_txm4x4(src_diff, coeff, 16);
@@ -1606,21 +1604,18 @@
}
static INLINE void mi_buf_shift(MACROBLOCK *x, int i) {
- MB_MODE_INFO *mbmi = &x->e_mbd.mode_info_context->mbmi;
- x->plane[0].src.buf =
- raster_block_offset_uint8(&x->e_mbd, BLOCK_8X8, 0, i,
- x->plane[0].src.buf,
- x->plane[0].src.stride);
- assert(((intptr_t)x->e_mbd.plane[0].pre[0].buf & 0x7) == 0);
- x->e_mbd.plane[0].pre[0].buf =
- raster_block_offset_uint8(&x->e_mbd, BLOCK_8X8, 0, i,
- x->e_mbd.plane[0].pre[0].buf,
- x->e_mbd.plane[0].pre[0].stride);
+ MB_MODE_INFO *const mbmi = &x->e_mbd.mode_info_context->mbmi;
+ struct macroblock_plane *const p = &x->plane[0];
+ struct macroblockd_plane *const pd = &x->e_mbd.plane[0];
+
+ p->src.buf = raster_block_offset_uint8(BLOCK_8X8, i, p->src.buf,
+ p->src.stride);
+ assert(((intptr_t)pd->pre[0].buf & 0x7) == 0);
+ pd->pre[0].buf = raster_block_offset_uint8(BLOCK_8X8, i, pd->pre[0].buf,
+ pd->pre[0].stride);
if (mbmi->ref_frame[1])
- x->e_mbd.plane[0].pre[1].buf =
- raster_block_offset_uint8(&x->e_mbd, BLOCK_8X8, 0, i,
- x->e_mbd.plane[0].pre[1].buf,
- x->e_mbd.plane[0].pre[1].stride);
+ pd->pre[1].buf = raster_block_offset_uint8(BLOCK_8X8, i, pd->pre[1].buf,
+ pd->pre[1].stride);
}
static INLINE void mi_buf_restore(MACROBLOCK *x, struct buf_2d orig_src,
diff --git a/vp9/encoder/vp9_tokenize.c b/vp9/encoder/vp9_tokenize.c
index 7c6073f..96d4dde 100644
--- a/vp9/encoder/vp9_tokenize.c
+++ b/vp9/encoder/vp9_tokenize.c
@@ -98,9 +98,8 @@
};
static void set_entropy_context_b(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+ TX_SIZE tx_size, void *arg) {
struct tokenize_b_args* const args = arg;
- const TX_SIZE tx_size = (TX_SIZE)(ss_txfrm_size >> 1);
MACROBLOCKD *const xd = args->xd;
const int bwl = b_width_log2(bsize);
const int off = block >> (2 * tx_size);
@@ -122,12 +121,11 @@
}
static void tokenize_b(int plane, int block, BLOCK_SIZE_TYPE bsize,
- int ss_txfrm_size, void *arg) {
+ TX_SIZE tx_size, void *arg) {
struct tokenize_b_args* const args = arg;
VP9_COMP *cpi = args->cpi;
MACROBLOCKD *xd = args->xd;
TOKENEXTRA **tp = args->tp;
- const TX_SIZE tx_size = (TX_SIZE)(ss_txfrm_size >> 1);
const int tx_size_in_blocks = 1 << tx_size;
MB_MODE_INFO *mbmi = &xd->mode_info_context->mbmi;
int pt; /* near block/prev token context index */
@@ -242,7 +240,7 @@
};
static void is_skippable(int plane, int block,
- BLOCK_SIZE_TYPE bsize, int ss_txfrm_size, void *argv) {
+ BLOCK_SIZE_TYPE bsize, TX_SIZE tx_size, void *argv) {
struct is_skippable_args *args = argv;
args->skippable[0] &= (!args->xd->plane[plane].eobs[block]);
}