Here is an update to dav1d 1.2.0.
Changes for 1.2.0 'Arctic Peregrine Falcon':
-------------------------------------------
1.2.0 is a small release of dav1d, adding more SIMD and fixes
- Improvements on attachments of props and T.35 entries on output pictures
- NEON z1/z3 high bit-depth optimizations and improvements for 8bpc
- SSSE3 z2/z3 8bpc and SSSE3 z1/z3 high bit-depth optimziations
- refmvs.save_tmvs optimizations in SSSE3/AVX2/AVX-512
- AVX-512 optimizations for high bit-depth itx (16x64, 32x64, 64x16, 64x32,
64x64)
- AVX2 optimizations for 12bpc for 16x32, 32x16, 32x32 itx
Index: Makefile
===================================================================
RCS file: /home/cvs/ports/multimedia/dav1d/Makefile,v
retrieving revision 1.32
diff -u -p -u -p -r1.32 Makefile
--- Makefile 24 Apr 2023 21:06:59 -0000 1.32
+++ Makefile 5 May 2023 20:14:06 -0000
@@ -1,8 +1,7 @@
COMMENT= small and fast AV1 decoder
-VER= 1.1.0
+VER= 1.2.0
DISTNAME= dav1d-${VER}
-REVISION= 0
CATEGORIES= multimedia
MASTER_SITES= https://downloads.videolan.org/pub/videolan/dav1d/${VER}/
EXTRACT_SUFX= .tar.xz
Index: distinfo
===================================================================
RCS file: /home/cvs/ports/multimedia/dav1d/distinfo,v
retrieving revision 1.16
diff -u -p -u -p -r1.16 distinfo
--- distinfo 9 Apr 2023 19:52:58 -0000 1.16
+++ distinfo 5 May 2023 20:14:13 -0000
@@ -1,2 +1,2 @@
-SHA256 (dav1d-1.1.0.tar.xz) = +1eq54dfKMMPs9uuSjaD0n4vkd3gnOXGDCLO+bxY39E=
-SIZE (dav1d-1.1.0.tar.xz) = 845284
+SHA256 (dav1d-1.2.0.tar.xz) = Ixvti8G7KKQdiNprTCwRjehLkuXx1nyv+ht/garqjG4=
+SIZE (dav1d-1.2.0.tar.xz) = 866120
Index: patches/patch-src_arm_64_ipred16_S
===================================================================
RCS file: /home/cvs/ports/multimedia/dav1d/patches/patch-src_arm_64_ipred16_S,v
retrieving revision 1.1
diff -u -p -u -p -r1.1 patch-src_arm_64_ipred16_S
--- patches/patch-src_arm_64_ipred16_S 24 Apr 2023 21:06:59 -0000 1.1
+++ patches/patch-src_arm_64_ipred16_S 5 May 2023 21:20:53 -0000
@@ -386,8 +386,8 @@ Index: src/arm/64/ipred16.S
+ .popsection
endfunc
- // void ipred_filter_16bpc_neon(pixel *dst, const ptrdiff_t stride,
-@@ -1418,13 +1436,13 @@ function ipred_filter_\bpc\()bpc_neon
+ const padding_mask_buf
+@@ -2445,13 +2463,13 @@ function ipred_filter_\bpc\()bpc_neon
add x6, x6, w5, uxtw
ld1 {v16.8b, v17.8b, v18.8b, v19.8b}, [x6], #32
clz w9, w3
@@ -404,7 +404,7 @@ Index: src/arm/64/ipred16.S
sxtl v18.8h, v18.8b
sxtl v19.8h, v19.8b
add x6, x0, x1
-@@ -1698,11 +1716,13 @@ function ipred_filter_\bpc\()bpc_neon
+@@ -2725,11 +2743,13 @@ function ipred_filter_\bpc\()bpc_neon
9:
ret
@@ -422,7 +422,7 @@ Index: src/arm/64/ipred16.S
endfunc
.endm
-@@ -1722,11 +1742,11 @@ endfunc
+@@ -2749,11 +2769,11 @@ endfunc
function pal_pred_16bpc_neon, export=1
ld1 {v30.8h}, [x2]
clz w9, w4
@@ -437,7 +437,7 @@ Index: src/arm/64/ipred16.S
br x6
40:
AARCH64_VALID_JUMP_TARGET
-@@ -1895,12 +1915,14 @@ function pal_pred_16bpc_neon, export=1
+@@ -2922,12 +2942,14 @@ function pal_pred_16bpc_neon, export=1
b.gt 64b
ret
@@ -457,7 +457,7 @@ Index: src/arm/64/ipred16.S
endfunc
// void ipred_cfl_128_16bpc_neon(pixel *dst, const ptrdiff_t stride,
-@@ -1911,12 +1933,12 @@ endfunc
+@@ -2938,12 +2960,12 @@ endfunc
function ipred_cfl_128_16bpc_neon, export=1
dup v31.8h, w7 // bitdepth_max
clz w9, w3
@@ -473,7 +473,7 @@ Index: src/arm/64/ipred16.S
add x6, x0, x1
lsl x1, x1, #1
movi v30.8h, #0
-@@ -2048,12 +2070,14 @@ L(ipred_cfl_splat_w16):
+@@ -3075,12 +3097,14 @@ L(ipred_cfl_splat_w16):
b.gt 1b
ret
@@ -492,7 +492,7 @@ Index: src/arm/64/ipred16.S
endfunc
// void ipred_cfl_top_16bpc_neon(pixel *dst, const ptrdiff_t stride,
-@@ -2064,12 +2088,12 @@ endfunc
+@@ -3091,12 +3115,12 @@ endfunc
function ipred_cfl_top_16bpc_neon, export=1
dup v31.8h, w7 // bitdepth_max
clz w9, w3
@@ -508,7 +508,7 @@ Index: src/arm/64/ipred16.S
add x6, x0, x1
lsl x1, x1, #1
movi v30.8h, #0
-@@ -2107,11 +2131,13 @@ function ipred_cfl_top_16bpc_neon, export=1
+@@ -3134,11 +3158,13 @@ function ipred_cfl_top_16bpc_neon, export=1
dup v0.8h, v0.h[0]
b L(ipred_cfl_splat_w16)
@@ -526,7 +526,7 @@ Index: src/arm/64/ipred16.S
endfunc
// void ipred_cfl_left_16bpc_neon(pixel *dst, const ptrdiff_t stride,
-@@ -2124,15 +2150,15 @@ function ipred_cfl_left_16bpc_neon, export=1
+@@ -3151,15 +3177,15 @@ function ipred_cfl_left_16bpc_neon, export=1
sub x2, x2, w4, uxtw #1
clz w9, w3
clz w8, w4
@@ -548,7 +548,7 @@ Index: src/arm/64/ipred16.S
add x6, x0, x1
lsl x1, x1, #1
movi v30.8h, #0
-@@ -2174,11 +2200,13 @@ L(ipred_cfl_left_h32):
+@@ -3201,11 +3227,13 @@ L(ipred_cfl_left_h32):
dup v0.8h, v0.h[0]
br x9
@@ -566,7 +566,7 @@ Index: src/arm/64/ipred16.S
endfunc
// void ipred_cfl_16bpc_neon(pixel *dst, const ptrdiff_t stride,
-@@ -2194,16 +2222,15 @@ function ipred_cfl_16bpc_neon, export=1
+@@ -3221,16 +3249,15 @@ function ipred_cfl_16bpc_neon, export=1
clz w9, w3
clz w6, w4
dup v16.4s, w8 // width + height
@@ -587,7 +587,7 @@ Index: src/arm/64/ipred16.S
ushr v16.4s, v16.4s, #1 // (width + height) >> 1
dup v17.4s, w8 // -ctz(width + height)
add x6, x0, x1
-@@ -2327,15 +2354,17 @@ L(ipred_cfl_w32):
+@@ -3354,15 +3381,17 @@ L(ipred_cfl_w32):
dup v0.8h, v0.h[0]
b L(ipred_cfl_splat_w16)
@@ -613,7 +613,7 @@ Index: src/arm/64/ipred16.S
endfunc
// void cfl_ac_420_16bpc_neon(int16_t *const ac, const pixel *const ypx,
-@@ -2344,14 +2373,14 @@ endfunc
+@@ -3371,14 +3400,14 @@ endfunc
function ipred_cfl_ac_420_16bpc_neon, export=1
clz w8, w5
lsl w4, w4, #2
@@ -631,7 +631,7 @@ Index: src/arm/64/ipred16.S
sub w8, w6, w4 // height - h_pad
rbit w9, w5 // rbit(width)
rbit w10, w6 // rbit(height)
-@@ -2483,9 +2512,9 @@ L(ipred_cfl_ac_420_w8_hpad):
+@@ -3510,9 +3539,9 @@ L(ipred_cfl_ac_420_w8_hpad):
L(ipred_cfl_ac_420_w16):
AARCH64_VALID_JUMP_TARGET
@@ -644,7 +644,7 @@ Index: src/arm/64/ipred16.S
br x7
L(ipred_cfl_ac_420_w16_wpad0):
-@@ -2662,17 +2691,19 @@ L(ipred_cfl_ac_420_w16_hpad):
+@@ -3689,17 +3718,19 @@ L(ipred_cfl_ac_420_w16_hpad):
lsl w6, w6, #2
b L(ipred_cfl_ac_420_w4_calc_subtract_dc)
@@ -672,7 +672,7 @@ Index: src/arm/64/ipred16.S
endfunc
// void cfl_ac_422_16bpc_neon(int16_t *const ac, const pixel *const ypx,
-@@ -2681,14 +2712,14 @@ endfunc
+@@ -3708,14 +3739,14 @@ endfunc
function ipred_cfl_ac_422_16bpc_neon, export=1
clz w8, w5
lsl w4, w4, #2
@@ -690,7 +690,7 @@ Index: src/arm/64/ipred16.S
sub w8, w6, w4 // height - h_pad
rbit w9, w5 // rbit(width)
rbit w10, w6 // rbit(height)
-@@ -2789,9 +2820,9 @@ L(ipred_cfl_ac_422_w8_wpad):
+@@ -3816,9 +3847,9 @@ L(ipred_cfl_ac_422_w8_wpad):
L(ipred_cfl_ac_422_w16):
AARCH64_VALID_JUMP_TARGET
@@ -703,7 +703,7 @@ Index: src/arm/64/ipred16.S
br x7
L(ipred_cfl_ac_422_w16_wpad0):
-@@ -2910,17 +2941,19 @@ L(ipred_cfl_ac_422_w16_wpad3):
+@@ -3937,17 +3968,19 @@ L(ipred_cfl_ac_422_w16_wpad3):
mov v1.16b, v3.16b
b L(ipred_cfl_ac_420_w16_hpad)
@@ -731,7 +731,7 @@ Index: src/arm/64/ipred16.S
endfunc
// void cfl_ac_444_16bpc_neon(int16_t *const ac, const pixel *const ypx,
-@@ -2929,14 +2962,14 @@ endfunc
+@@ -3956,14 +3989,14 @@ endfunc
function ipred_cfl_ac_444_16bpc_neon, export=1
clz w8, w5
lsl w4, w4, #2
@@ -749,7 +749,7 @@ Index: src/arm/64/ipred16.S
sub w8, w6, w4 // height - h_pad
rbit w9, w5 // rbit(width)
rbit w10, w6 // rbit(height)
-@@ -3045,10 +3078,11 @@ L(ipred_cfl_ac_444_w16_wpad):
+@@ -4072,10 +4105,11 @@ L(ipred_cfl_ac_444_w16_wpad):
L(ipred_cfl_ac_444_w32):
AARCH64_VALID_JUMP_TARGET
@@ -764,7 +764,7 @@ Index: src/arm/64/ipred16.S
br x7
L(ipred_cfl_ac_444_w32_wpad0):
-@@ -3163,15 +3197,17 @@ L(ipred_cfl_ac_444_w32_hpad):
+@@ -4190,15 +4224,17 @@ L(ipred_cfl_ac_444_w32_hpad):
lsl w6, w6, #3
b L(ipred_cfl_ac_420_w4_calc_subtract_dc)
Index: patches/patch-src_arm_64_ipred_S
===================================================================
RCS file: /home/cvs/ports/multimedia/dav1d/patches/patch-src_arm_64_ipred_S,v
retrieving revision 1.1
diff -u -p -u -p -r1.1 patch-src_arm_64_ipred_S
--- patches/patch-src_arm_64_ipred_S 24 Apr 2023 21:06:59 -0000 1.1
+++ patches/patch-src_arm_64_ipred_S 5 May 2023 21:20:55 -0000
@@ -387,7 +387,7 @@ Index: src/arm/64/ipred.S
endfunc
const padding_mask_buf
-@@ -1604,11 +1622,11 @@ endfunc
+@@ -1614,11 +1632,11 @@ endfunc
// const int dx, const int max_base_x);
function ipred_z1_fill1_8bpc_neon, export=1
clz w9, w3
@@ -402,7 +402,7 @@ Index: src/arm/64/ipred.S
ld1r {v31.16b}, [x10] // padding
mov w7, w5
mov w15, #64
-@@ -1767,12 +1785,14 @@ function ipred_z1_fill1_8bpc_neon, export=1
+@@ -1777,12 +1795,14 @@ function ipred_z1_fill1_8bpc_neon, export=1
mov w3, w12
b 169b
@@ -422,7 +422,7 @@ Index: src/arm/64/ipred.S
endfunc
function ipred_z1_fill2_8bpc_neon, export=1
-@@ -1890,11 +1910,11 @@ endconst
+@@ -1900,11 +1920,11 @@ endconst
function ipred_z3_fill1_8bpc_neon, export=1
cmp w6, #64
clz w9, w3
@@ -437,7 +437,7 @@ Index: src/arm/64/ipred.S
movrel x11, increments
ld1r {v31.16b}, [x10] // padding
ld1 {v30.8h}, [x11] // increments
-@@ -2229,17 +2249,20 @@ L(ipred_z3_fill1_large_w16):
+@@ -2243,17 +2263,20 @@ L(ipred_z3_fill1_large_h16):
9:
ret
@@ -464,7 +464,7 @@ Index: src/arm/64/ipred.S
b.gt L(ipred_z3_fill_padding_wide)
// w3 = remaining width, w4 = constant height
mov w12, w4
-@@ -2250,8 +2273,7 @@ function ipred_z3_fill_padding_neon, export=0
+@@ -2264,8 +2287,7 @@ function ipred_z3_fill_padding_neon, export=0
// power of two in the remaining width, and repeating.
clz w9, w3
sub w9, w9, #25
@@ -474,7 +474,7 @@ Index: src/arm/64/ipred.S
br x9
2:
-@@ -2331,13 +2353,15 @@ function ipred_z3_fill_padding_neon, export=0
+@@ -2345,13 +2367,15 @@ function ipred_z3_fill_padding_neon, export=0
9:
ret
@@ -496,17 +496,7 @@ Index: src/arm/64/ipred.S
L(ipred_z3_fill_padding_wide):
// Fill a WxH rectangle with padding, with W > 16.
-@@ -2367,7 +2391,8 @@ L(ipred_z3_fill_padding_wide):
- endfunc
-
- function ipred_z3_fill2_8bpc_neon, export=1
-- adr x8, L(ipred_z3_fill1_tbl)
-+ adrp x8, L(ipred_z3_fill1_tbl)
-+ add x8, x8, :lo12: L(ipred_z3_fill1_tbl)
- add x10, x2, w6, uxtw // left[max_base_y]
- movrel x11, increments
- ld1r {v31.16b}, [x10] // padding
-@@ -2493,13 +2518,13 @@ function ipred_filter_8bpc_neon, export=1
+@@ -2506,13 +2530,13 @@ function ipred_filter_8bpc_neon, export=1
add x6, x6, w5, uxtw
ld1 {v16.8b, v17.8b, v18.8b, v19.8b}, [x6], #32
clz w9, w3
@@ -523,7 +513,7 @@ Index: src/arm/64/ipred.S
sxtl v18.8h, v18.8b
sxtl v19.8h, v19.8b
add x6, x0, x1
-@@ -2640,11 +2665,13 @@ function ipred_filter_8bpc_neon, export=1
+@@ -2653,11 +2677,13 @@ function ipred_filter_8bpc_neon, export=1
9:
ret
@@ -541,7 +531,7 @@ Index: src/arm/64/ipred.S
endfunc
// void pal_pred_8bpc_neon(pixel *dst, const ptrdiff_t stride,
-@@ -2653,11 +2680,11 @@ endfunc
+@@ -2666,11 +2692,11 @@ endfunc
function pal_pred_8bpc_neon, export=1
ld1 {v0.8h}, [x2]
clz w9, w4
@@ -556,7 +546,7 @@ Index: src/arm/64/ipred.S
add x2, x0, x1
lsl x1, x1, #1
br x6
-@@ -2735,12 +2762,14 @@ function pal_pred_8bpc_neon, export=1
+@@ -2748,12 +2774,14 @@ function pal_pred_8bpc_neon, export=1
b.gt 64b
ret
@@ -576,7 +566,7 @@ Index: src/arm/64/ipred.S
endfunc
// void ipred_cfl_128_8bpc_neon(pixel *dst, const ptrdiff_t stride,
-@@ -2749,12 +2778,12 @@ endfunc
+@@ -2762,12 +2790,12 @@ endfunc
// const int16_t *ac, const int alpha);
function ipred_cfl_128_8bpc_neon, export=1
clz w9, w3
@@ -592,7 +582,7 @@ Index: src/arm/64/ipred.S
add x6, x0, x1
lsl x1, x1, #1
br x7
-@@ -2859,12 +2888,14 @@ L(ipred_cfl_splat_w16):
+@@ -2872,12 +2900,14 @@ L(ipred_cfl_splat_w16):
b.gt 1b
ret
@@ -611,7 +601,7 @@ Index: src/arm/64/ipred.S
endfunc
// void ipred_cfl_top_8bpc_neon(pixel *dst, const ptrdiff_t stride,
-@@ -2873,12 +2904,12 @@ endfunc
+@@ -2886,12 +2916,12 @@ endfunc
// const int16_t *ac, const int alpha);
function ipred_cfl_top_8bpc_neon, export=1
clz w9, w3
@@ -627,7 +617,7 @@ Index: src/arm/64/ipred.S
add x6, x0, x1
lsl x1, x1, #1
br x7
-@@ -2913,11 +2944,13 @@ function ipred_cfl_top_8bpc_neon, export=1
+@@ -2926,11 +2956,13 @@ function ipred_cfl_top_8bpc_neon, export=1
dup v0.8h, v2.h[0]
b L(ipred_cfl_splat_w16)
@@ -645,7 +635,7 @@ Index: src/arm/64/ipred.S
endfunc
// void ipred_cfl_left_8bpc_neon(pixel *dst, const ptrdiff_t stride,
-@@ -2928,15 +2961,15 @@ function ipred_cfl_left_8bpc_neon, export=1
+@@ -2941,15 +2973,15 @@ function ipred_cfl_left_8bpc_neon, export=1
sub x2, x2, w4, uxtw
clz w9, w3
clz w8, w4
@@ -667,7 +657,7 @@ Index: src/arm/64/ipred.S
add x6, x0, x1
lsl x1, x1, #1
br x7
-@@ -2975,11 +3008,13 @@ L(ipred_cfl_left_h32):
+@@ -2988,11 +3020,13 @@ L(ipred_cfl_left_h32):
dup v0.8h, v2.h[0]
br x9
@@ -685,7 +675,7 @@ Index: src/arm/64/ipred.S
endfunc
// void ipred_cfl_8bpc_neon(pixel *dst, const ptrdiff_t stride,
-@@ -2993,16 +3028,15 @@ function ipred_cfl_8bpc_neon, export=1
+@@ -3006,16 +3040,15 @@ function ipred_cfl_8bpc_neon, export=1
clz w9, w3
clz w6, w4
dup v16.8h, w8 // width + height
@@ -706,7 +696,7 @@ Index: src/arm/64/ipred.S
ushr v16.8h, v16.8h, #1 // (width + height) >> 1
dup v17.8h, w8 // -ctz(width + height)
add x6, x0, x1
-@@ -3119,15 +3153,17 @@ L(ipred_cfl_w32):
+@@ -3132,15 +3165,17 @@ L(ipred_cfl_w32):
dup v0.8h, v0.h[0]
b L(ipred_cfl_splat_w16)
@@ -732,7 +722,7 @@ Index: src/arm/64/ipred.S
endfunc
// void cfl_ac_420_8bpc_neon(int16_t *const ac, const pixel *const ypx,
-@@ -3136,14 +3172,14 @@ endfunc
+@@ -3149,14 +3184,14 @@ endfunc
function ipred_cfl_ac_420_8bpc_neon, export=1
clz w8, w5
lsl w4, w4, #2
@@ -750,7 +740,7 @@ Index: src/arm/64/ipred.S
sub w8, w6, w4 // height - h_pad
rbit w9, w5 // rbit(width)
rbit w10, w6 // rbit(height)
-@@ -3282,9 +3318,9 @@ L(ipred_cfl_ac_420_w8_subtract_dc):
+@@ -3295,9 +3330,9 @@ L(ipred_cfl_ac_420_w8_subtract_dc):
L(ipred_cfl_ac_420_w16):
AARCH64_VALID_JUMP_TARGET
@@ -763,7 +753,7 @@ Index: src/arm/64/ipred.S
br x7
L(ipred_cfl_ac_420_w16_wpad0):
-@@ -3441,17 +3477,19 @@ L(ipred_cfl_ac_420_w16_hpad):
+@@ -3454,17 +3489,19 @@ L(ipred_cfl_ac_420_w16_hpad):
lsl w6, w6, #1
b L(ipred_cfl_ac_420_w8_calc_subtract_dc)
@@ -791,7 +781,7 @@ Index: src/arm/64/ipred.S
endfunc
// void cfl_ac_422_8bpc_neon(int16_t *const ac, const pixel *const ypx,
-@@ -3460,14 +3498,14 @@ endfunc
+@@ -3473,14 +3510,14 @@ endfunc
function ipred_cfl_ac_422_8bpc_neon, export=1
clz w8, w5
lsl w4, w4, #2
@@ -809,7 +799,7 @@ Index: src/arm/64/ipred.S
sub w8, w6, w4 // height - h_pad
rbit w9, w5 // rbit(width)
rbit w10, w6 // rbit(height)
-@@ -3558,9 +3596,9 @@ L(ipred_cfl_ac_422_w8_wpad):
+@@ -3571,9 +3608,9 @@ L(ipred_cfl_ac_422_w8_wpad):
L(ipred_cfl_ac_422_w16):
AARCH64_VALID_JUMP_TARGET
@@ -822,7 +812,7 @@ Index: src/arm/64/ipred.S
br x7
L(ipred_cfl_ac_422_w16_wpad0):
-@@ -3663,17 +3701,19 @@ L(ipred_cfl_ac_422_w16_wpad3):
+@@ -3676,17 +3713,19 @@ L(ipred_cfl_ac_422_w16_wpad3):
mov v1.16b, v3.16b
b L(ipred_cfl_ac_420_w16_hpad)
@@ -850,7 +840,7 @@ Index: src/arm/64/ipred.S
endfunc
// void cfl_ac_444_8bpc_neon(int16_t *const ac, const pixel *const ypx,
-@@ -3682,14 +3722,14 @@ endfunc
+@@ -3695,14 +3734,14 @@ endfunc
function ipred_cfl_ac_444_8bpc_neon, export=1
clz w8, w5
lsl w4, w4, #2
@@ -868,7 +858,7 @@ Index: src/arm/64/ipred.S
sub w8, w6, w4 // height - h_pad
rbit w9, w5 // rbit(width)
rbit w10, w6 // rbit(height)
-@@ -3810,9 +3850,10 @@ L(ipred_cfl_ac_444_w16_wpad):
+@@ -3823,9 +3862,10 @@ L(ipred_cfl_ac_444_w16_wpad):
L(ipred_cfl_ac_444_w32):
AARCH64_VALID_JUMP_TARGET
@@ -882,7 +872,7 @@ Index: src/arm/64/ipred.S
br x7
L(ipred_cfl_ac_444_w32_wpad0):
-@@ -3958,15 +3999,17 @@ L(ipred_cfl_ac_444_w32_hpad):
+@@ -3971,15 +4011,17 @@ L(ipred_cfl_ac_444_w32_hpad):
dup v4.8h, v4.h[0]
b L(ipred_cfl_ac_420_w8_subtract_dc)
Index: patches/patch-src_thread_task_c
===================================================================
RCS file: patches/patch-src_thread_task_c
diff -N patches/patch-src_thread_task_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_thread_task_c 5 May 2023 22:24:18 -0000
@@ -0,0 +1,28 @@
+threading: Fix a race on task_thread.init_done
+
+Index: src/thread_task.c
+--- src/thread_task.c.orig
++++ src/thread_task.c
+@@ -327,6 +327,7 @@ int dav1d_task_create_tile_sbrow(Dav1dFrameContext *co
+ f->task_thread.pending_tasks.tail->next = &tasks[0];
+ f->task_thread.pending_tasks.tail = prev_t;
+ atomic_store(&f->task_thread.pending_tasks.merge, 1);
++ atomic_store(&f->task_thread.init_done, 1);
+ pthread_mutex_unlock(&f->task_thread.pending_tasks.lock);
+
+ return 0;
+@@ -730,14 +731,11 @@ void *dav1d_worker_task(void *data) {
+ dav1d_decode_frame_exit(f, DAV1D_ERR(ENOMEM));
+ f->n_tile_data = 0;
+ pthread_cond_signal(&f->task_thread.cond);
+- atomic_store(&f->task_thread.init_done, 1);
+- continue;
+ } else {
+ pthread_mutex_unlock(&ttd->lock);
+ }
+ }
+ }
+- atomic_store(&f->task_thread.init_done, 1);
+ pthread_mutex_lock(&ttd->lock);
+ } else {
+ pthread_mutex_lock(&ttd->lock);