[PATCH 01/11] 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% --- libavcodec/vvc/thread.c | 5 +++-- 1 file 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; -- 2.34.1
On 7/28/2024 12:17 AM, Nuo Mi wrote:
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% --- libavcodec/vvc/thread.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
One of the patches from this set introduced use of uninitialized values. See https://fate.ffmpeg.org/report.cgi?time=20240821174441&slot=x86_64-archlinux-gcc-valgrind
participants (2)
-
James Almer -
Nuo Mi