summaryrefslogtreecommitdiffstats
path: root/libavcodec/diracdec.c
diff options
context:
space:
mode:
authorRostislav Pehlivanov <rpehlivanov@ob-encoder.com>2016-06-23 18:06:58 +0100
committerRostislav Pehlivanov <atomnuker@gmail.com>2016-07-11 23:34:54 +0100
commitb9c6c5f4539dfaf26e8484aece1b39f0a55f8fff (patch)
tree88afa40ac8d384fe56754ac1e79cd6a13a836b8c /libavcodec/diracdec.c
parent17caae72025fd77d8edc07d5b2017b09cf0b1dda (diff)
downloadffmpeg-streaming-b9c6c5f4539dfaf26e8484aece1b39f0a55f8fff.zip
ffmpeg-streaming-b9c6c5f4539dfaf26e8484aece1b39f0a55f8fff.tar.gz
diracdec: decode HQ profile slices in rows
Siginificantly improves the performance. Signed-off-by: Rostislav Pehlivanov <rpehlivanov@obe.tv>
Diffstat (limited to 'libavcodec/diracdec.c')
-rw-r--r--libavcodec/diracdec.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/libavcodec/diracdec.c b/libavcodec/diracdec.c
index 72947ec..c5d00b9 100644
--- a/libavcodec/diracdec.c
+++ b/libavcodec/diracdec.c
@@ -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++) {
OpenPOWER on IntegriCloud