ffmpeg | branch: master | Nuo Mi <nuomi2...@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;

_______________________________________________
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

To unsubscribe, visit link above, or email
ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to