diff options
author | Nuo Mi <nuomi2021@gmail.com> | 2024-07-28 11:17:57 +0800 |
---|---|---|
committer | Nuo Mi <nuomi2021@gmail.com> | 2024-08-15 20:19:45 +0800 |
commit | bdb79fe60afaf54505f1ffa8b5324bf05c700929 (patch) | |
tree | a96cef7879878d13386265cd0f200a7e005b63b7 /libavcodec | |
parent | 7eb1df44ae6daea1fa68ff2fdd96a13d3111be3e (diff) | |
download | ffmpeg-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.c | 5 |
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; |