diff options
author | Rostislav Pehlivanov <rpehlivanov@ob-encoder.com> | 2016-06-23 18:06:58 +0100 |
---|---|---|
committer | Rostislav Pehlivanov <atomnuker@gmail.com> | 2016-07-11 23:34:54 +0100 |
commit | b9c6c5f4539dfaf26e8484aece1b39f0a55f8fff (patch) | |
tree | 88afa40ac8d384fe56754ac1e79cd6a13a836b8c | |
parent | 17caae72025fd77d8edc07d5b2017b09cf0b1dda (diff) | |
download | ffmpeg-b9c6c5f4539dfaf26e8484aece1b39f0a55f8fff.tar.gz |
diracdec: decode HQ profile slices in rows
Siginificantly improves the performance.
Signed-off-by: Rostislav Pehlivanov <rpehlivanov@obe.tv>
-rw-r--r-- | libavcodec/diracdec.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/libavcodec/diracdec.c b/libavcodec/diracdec.c index 72947ec22c..c5d00b9a8d 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++) { |