]> git.sesse.net Git - ffmpeg/commitdiff
diracdec: decode HQ profile slices in rows
authorRostislav Pehlivanov <rpehlivanov@ob-encoder.com>
Thu, 23 Jun 2016 17:06:58 +0000 (18:06 +0100)
committerRostislav Pehlivanov <atomnuker@gmail.com>
Mon, 11 Jul 2016 22:34:54 +0000 (23:34 +0100)
Siginificantly improves the performance.

Signed-off-by: Rostislav Pehlivanov <rpehlivanov@obe.tv>
libavcodec/diracdec.c

index 72947ec22c7a7b665697498dc668fde64413ffe9..c5d00b9a8d7039334d27547b29198843615d1521 100644 (file)
@@ -806,6 +806,16 @@ static int decode_hq_slice(AVCodecContext *avctx, void *arg)
     return 0;
 }
 
+static int decode_hq_slice_row(AVCodecContext *avctx, void *arg, int jobnr, int threadnr)
+{
+    int i;
+    DiracContext *s = avctx->priv_data;
+    DiracSlice *slices = ((DiracSlice *)arg) + s->num_x*jobnr;
+    for (i = 0; i < s->num_x; i++)
+        decode_hq_slice(avctx, &slices[i]);
+    return 0;
+}
+
 /**
  * Dirac Specification ->
  * 13.5.1 low_delay_transform_data()
@@ -857,8 +867,7 @@ static int decode_lowdelay(DiracContext *s)
                     bufsize = 0;
             }
         }
-        avctx->execute(avctx, decode_hq_slice, slices, NULL, slice_num,
-                       sizeof(DiracSlice));
+        avctx->execute2(avctx, decode_hq_slice_row, slices, NULL, s->num_y);
     } else {
         for (slice_y = 0; bufsize > 0 && slice_y < s->num_y; slice_y++) {
             for (slice_x = 0; bufsize > 0 && slice_x < s->num_x; slice_x++) {