summaryrefslogtreecommitdiff
path: root/libavcodec/utvideodec.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2017-06-26 21:31:12 +0200
committerPaul B Mahol <onemda@gmail.com>2017-06-27 09:54:10 +0200
commit4ed7c2bbc3d04d5410433fd7038f076538e4a944 (patch)
tree083a62e72a7e7a137b94c5ef8a0864399d17e35b /libavcodec/utvideodec.c
parent3594788b713e76449eda0bc9d64b38258c86a594 (diff)
downloadffmpeg-4ed7c2bbc3d04d5410433fd7038f076538e4a944.tar.gz
avcodec/utvideodec: add SIMD for restore_rgb_planes
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavcodec/utvideodec.c')
-rw-r--r--libavcodec/utvideodec.c53
1 files changed, 7 insertions, 46 deletions
diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c
index 0c6f89e83a..44841aaa65 100644
--- a/libavcodec/utvideodec.c
+++ b/libavcodec/utvideodec.c
@@ -333,50 +333,6 @@ fail:
return AVERROR_INVALIDDATA;
}
-static void restore_rgb_planes(AVFrame *frame, int width, int height)
-{
- uint8_t *src_r = (uint8_t *)frame->data[2];
- uint8_t *src_g = (uint8_t *)frame->data[0];
- uint8_t *src_b = (uint8_t *)frame->data[1];
- uint8_t r, g, b;
- int i, j;
-
- for (j = 0; j < height; j++) {
- for (i = 0; i < width; i++) {
- r = src_r[i];
- g = src_g[i];
- b = src_b[i];
- src_r[i] = r + g - 0x80;
- src_b[i] = b + g - 0x80;
- }
- src_r += frame->linesize[2];
- src_g += frame->linesize[0];
- src_b += frame->linesize[1];
- }
-}
-
-static void restore_rgb_planes10(AVFrame *frame, int width, int height)
-{
- uint16_t *src_r = (uint16_t *)frame->data[2];
- uint16_t *src_g = (uint16_t *)frame->data[0];
- uint16_t *src_b = (uint16_t *)frame->data[1];
- int r, g, b;
- int i, j;
-
- for (j = 0; j < height; j++) {
- for (i = 0; i < width; i++) {
- r = src_r[i];
- g = src_g[i];
- b = src_b[i];
- src_r[i] = (r + g - 0x200) & 0x3FF;
- src_b[i] = (b + g - 0x200) & 0x3FF;
- }
- src_r += frame->linesize[2] / 2;
- src_g += frame->linesize[0] / 2;
- src_b += frame->linesize[1] / 2;
- }
-}
-
#undef A
#undef B
#undef C
@@ -696,7 +652,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
}
}
}
- restore_rgb_planes(frame.f, avctx->width, avctx->height);
+ c->utdsp.restore_rgb_planes(frame.f->data[2], frame.f->data[0], frame.f->data[1],
+ frame.f->linesize[2], frame.f->linesize[0], frame.f->linesize[1],
+ avctx->width, avctx->height);
break;
case AV_PIX_FMT_GBRAP10:
case AV_PIX_FMT_GBRP10:
@@ -709,7 +667,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
if (ret)
return ret;
}
- restore_rgb_planes10(frame.f, avctx->width, avctx->height);
+ c->utdsp.restore_rgb_planes10((uint16_t *)frame.f->data[2], (uint16_t *)frame.f->data[0], (uint16_t *)frame.f->data[1],
+ frame.f->linesize[2] / 2, frame.f->linesize[0] / 2, frame.f->linesize[1] / 2,
+ avctx->width, avctx->height);
break;
case AV_PIX_FMT_YUV420P:
for (i = 0; i < 3; i++) {
@@ -830,6 +790,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
c->avctx = avctx;
+ ff_utvideodsp_init(&c->utdsp);
ff_bswapdsp_init(&c->bdsp);
ff_llviddsp_init(&c->llviddsp);