aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorNuo Mi <nuomi2021@gmail.com>2024-07-28 11:17:57 +0800
committerNuo Mi <nuomi2021@gmail.com>2024-08-15 20:19:45 +0800
commitbdb79fe60afaf54505f1ffa8b5324bf05c700929 (patch)
treea96cef7879878d13386265cd0f200a7e005b63b7 /libavcodec
parent7eb1df44ae6daea1fa68ff2fdd96a13d3111be3e (diff)
downloadffmpeg-bdb79fe60afaf54505f1ffa8b5324bf05c700929.tar.gz
avcodec/vvcdec: thread, ensure the parse stage gets the highest priority
The parser stage is not parallelizable. We need to schedule it as soon as possible to create later stages, which are more parallelizable clips | before | after | delta --------------------------------------------|--------|-------|------ RitualDance_1920x1080_60_10_420_37_RA.266 | 342.7 | 365.3 | 6.59% NovosobornayaSquare_1920x1080.bin | 321.7 | 400 | 24.34% Tango2_3840x2160_60_10_420_27_LD.266 | 82.3 | 91.7 | 11.42% RitualDance_1920x1080_60_10_420_32_LD.266 | 323.7 | 319.3 | -1.36% Chimera_8bit_1080P_1000_frames.vvc | 364 | 411.3 | 12.99% BQTerrace_1920x1080_60_10_420_22_RA.vvc | 162.7 | 185.7 | 14.14%
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/vvc/thread.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libavcodec/vvc/thread.c b/libavcodec/vvc/thread.c
index 8dd9a36fd5..28065d726f 100644
--- a/libavcodec/vvc/thread.c
+++ b/libavcodec/vvc/thread.c
@@ -385,14 +385,15 @@ static int task_priority_higher(const AVTask *_a, const AVTask *_b)
const VVCTask *a = (const VVCTask*)_a;
const VVCTask *b = (const VVCTask*)_b;
- CHECK(a->fc->decode_order, b->fc->decode_order); //decode order
- if (a->stage == VVC_TASK_STAGE_PARSE || b->stage == VVC_TASK_STAGE_PARSE) {
+ if (a->stage <= VVC_TASK_STAGE_PARSE || b->stage <= VVC_TASK_STAGE_PARSE) {
CHECK(a->stage, b->stage);
+ CHECK(a->fc->decode_order, b->fc->decode_order); //decode order
CHECK(a->ry, b->ry);
return a->rx < b->rx;
}
+ CHECK(a->fc->decode_order, b->fc->decode_order); //decode order
CHECK(a->rx + a->ry + a->stage, b->rx + b->ry + b->stage); //zigzag with type
CHECK(a->rx + a->ry, b->rx + b->ry); //zigzag
return a->ry < b->ry;