mirror of
https://github.com/librempeg/librempeg
synced 2024-11-22 18:49:58 +00:00
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% Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
b6b22d5f56
commit
92c4710e4c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user