[FFmpeg-cvslog] avcodec/vvcdec: thread, ensure the parse stage gets the highest priority

Nuo Mi git at videolan.org
Thu Aug 15 15:43:45 EEST 2024


ffmpeg | branch: master | Nuo Mi <nuomi2021 at gmail.com> | Sun Jul 28 11:17:57 2024 +0800| [bdb79fe60afaf54505f1ffa8b5324bf05c700929] | committer: Nuo Mi

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%

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bdb79fe60afaf54505f1ffa8b5324bf05c700929
---

 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;



More information about the ffmpeg-cvslog mailing list