diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
index 75f4ff4624..2a800e1e35 100644
--- a/libavcodec/pthread_frame.c
+++ b/libavcodec/pthread_frame.c
@@ -458,7 +458,7 @@ void ff_thread_report_progress(ThreadFrame *f, int n, int field)
     atomic_int *progress = f->progress ? (atomic_int*)f->progress->data : NULL;
 
     if (!progress ||
-        atomic_load_explicit(&progress[field], memory_order_acquire) >= n)
+        atomic_load_explicit(&progress[field], memory_order_relaxed) >= n)
         return;
 
     p = f->owner->internal->thread_ctx;
@@ -468,7 +468,7 @@ void ff_thread_report_progress(ThreadFrame *f, int n, int field)
 
     pthread_mutex_lock(&p->progress_mutex);
 
-    atomic_store(&progress[field], n);
+    atomic_store_explicit(&progress[field], n, memory_order_release);
 
     pthread_cond_broadcast(&p->progress_cond);
     pthread_mutex_unlock(&p->progress_mutex);
@@ -745,8 +745,8 @@ int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
         }
         progress = (atomic_int*)f->progress->data;
 
-        atomic_store(&progress[0], -1);
-        atomic_store(&progress[1], -1);
+        atomic_init(&progress[0], -1);
+        atomic_init(&progress[1], -1);
     }
 
     pthread_mutex_lock(&p->parent->buffer_mutex);