[FFmpeg-cvslog] avcodec/pthread_frame: Only set PerThreadContext* when frame-threading
Andreas Rheinhardt
git at videolan.org
Mon Sep 18 04:08:30 EEST 2023
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Thu Sep 14 18:30:07 2023 +0200| [f9b6e3e48d2544a448e305f7aa43fe7310ecb1d0] | committer: Andreas Rheinhardt
avcodec/pthread_frame: Only set PerThreadContext* when frame-threading
Otherwise the thread_ctx pointer might be NULL or point to
a SliceThreadContext.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f9b6e3e48d2544a448e305f7aa43fe7310ecb1d0
---
libavcodec/pthread_frame.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
index 4973d64550..b53fb54906 100644
--- a/libavcodec/pthread_frame.c
+++ b/libavcodec/pthread_frame.c
@@ -644,10 +644,12 @@ void ff_thread_await_progress(const ThreadFrame *f, int n, int field)
}
void ff_thread_finish_setup(AVCodecContext *avctx) {
- PerThreadContext *p = avctx->internal->thread_ctx;
+ PerThreadContext *p;
if (!(avctx->active_thread_type&FF_THREAD_FRAME)) return;
+ p = avctx->internal->thread_ctx;
+
p->hwaccel_threadsafe = avctx->hwaccel &&
(ffhwaccel(avctx->hwaccel)->caps_internal & HWACCEL_CAP_THREAD_SAFE);
@@ -956,11 +958,12 @@ void ff_thread_flush(AVCodecContext *avctx)
int ff_thread_can_start_frame(AVCodecContext *avctx)
{
- PerThreadContext *p = avctx->internal->thread_ctx;
-
- if ((avctx->active_thread_type&FF_THREAD_FRAME) && atomic_load(&p->state) != STATE_SETTING_UP &&
+ if ((avctx->active_thread_type & FF_THREAD_FRAME) &&
ffcodec(avctx->codec)->update_thread_context) {
- return 0;
+ PerThreadContext *p = avctx->internal->thread_ctx;
+
+ if (atomic_load(&p->state) != STATE_SETTING_UP)
+ return 0;
}
return 1;
More information about the ffmpeg-cvslog
mailing list