diff mbox

[FFmpeg-devel,v2,2/4] lavc/libxavs2: optimize data access

Message ID 1571022557-19605-2-git-send-email-hwrenx@126.com
State Superseded
Headers show

Commit Message

hwren Oct. 14, 2019, 3:09 a.m. UTC
Optimize data access from multiplication to iteration.

Signed-off-by: hwren <hwrenx@126.com>
---
 libavcodec/libxavs2.c | 41 +++++++++++++++++++++++++----------------
 1 file changed, 25 insertions(+), 16 deletions(-)

Comments

Liu Steven Oct. 14, 2019, 5:15 a.m. UTC | #1
> 在 2019年10月14日,11:09,hwren <hwrenx@126.com> 写道:
> 
> Optimize data access from multiplication to iteration.
> 
> Signed-off-by: hwren <hwrenx@126.com>
> ---
> libavcodec/libxavs2.c | 41 +++++++++++++++++++++++++----------------
> 1 file changed, 25 insertions(+), 16 deletions(-)
> 
> diff --git a/libavcodec/libxavs2.c b/libavcodec/libxavs2.c
> index 0179a1e..7a41ca2 100644
> --- a/libavcodec/libxavs2.c
> +++ b/libavcodec/libxavs2.c
> @@ -132,29 +132,38 @@ static av_cold int xavs2_init(AVCodecContext *avctx)
> 
> static void xavs2_copy_frame_with_shift(xavs2_picture_t *pic, const AVFrame *frame, const int shift_in)
> {
> -    int j, k;
> -    for (k = 0; k < 3; k++) {
> -        int i_stride = pic->img.i_stride[k];
> -        for (j = 0; j < pic->img.i_lines[k]; j++) {
> -            uint16_t *p_plane = (uint16_t *)&pic->img.img_planes[k][j * i_stride];
> -            int i;
> -            uint8_t *p_buffer = frame->data[k] + frame->linesize[k] * j;
> -            memset(p_plane, 0, i_stride);
> -            for (i = 0; i < pic->img.i_width[k]; i++) {
> -                p_plane[i] = p_buffer[i] << shift_in;
> +    uint16_t *p_plane;
> +    uint8_t * p_buffer;
> +    int       wIdx, hIdx, plane;
Code style need fix,
> +
> +    for (plane = 0; plane < 3; ++plane) {
> +        p_plane  = (uint16_t *)pic->img.img_planes[plane];
> +        p_buffer = frame->data[plane];
> +        for (hIdx = 0; hIdx < pic->img.i_lines[plane]; ++hIdx) {
> +            memset(p_plane, 0, pic->img.i_stride[plane]);
> +            for (wIdx = 0; wIdx < pic->img.i_width[plane]; ++wIdx) {
> +                p_plane[wIdx] = p_buffer[wIdx] << shift_in;
>             }
> +            p_plane += pic->img.i_stride[plane];
> +            p_buffer += frame->linesize[plane];
>         }
>     }
> }
> 
> static void xavs2_copy_frame(xavs2_picture_t *pic, const AVFrame *frame)
> {
> -    int j, k;
> -    for (k = 0; k < 3; k++) {
> -        for (j = 0; j < pic->img.i_lines[k]; j++) {
> -            memcpy( pic->img.img_planes[k] + pic->img.i_stride[k] * j,
> -                    frame->data[k]+frame->linesize[k] * j,
> -                    pic->img.i_width[k] * pic->img.in_sample_size);
> +    uint8_t *p_plane;
> +    uint8_t *p_buffer;
> +    int      hIdx, plane, stride;
need fix
> +
> +    for (plane = 0; plane < 3; ++plane) {
> +        p_plane  = pic->img.img_planes[plane];
> +        p_buffer = frame->data[plane];
> +	 stride   = pic->img.i_width[plane] * pic->img.in_sample_size;
> +        for (hIdx = 0; hIdx < pic->img.i_lines[plane]; ++hIdx) {
> +            memcpy(p_plane, p_buffer, stride);
> +            p_plane += pic->img.i_stride[plane];
> +            p_buffer += frame->linesize[plane];
>         }
>     }
> }
> -- 
> 2.7.4
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

Thanks
Steven
diff mbox

Patch

diff --git a/libavcodec/libxavs2.c b/libavcodec/libxavs2.c
index 0179a1e..7a41ca2 100644
--- a/libavcodec/libxavs2.c
+++ b/libavcodec/libxavs2.c
@@ -132,29 +132,38 @@  static av_cold int xavs2_init(AVCodecContext *avctx)
 
 static void xavs2_copy_frame_with_shift(xavs2_picture_t *pic, const AVFrame *frame, const int shift_in)
 {
-    int j, k;
-    for (k = 0; k < 3; k++) {
-        int i_stride = pic->img.i_stride[k];
-        for (j = 0; j < pic->img.i_lines[k]; j++) {
-            uint16_t *p_plane = (uint16_t *)&pic->img.img_planes[k][j * i_stride];
-            int i;
-            uint8_t *p_buffer = frame->data[k] + frame->linesize[k] * j;
-            memset(p_plane, 0, i_stride);
-            for (i = 0; i < pic->img.i_width[k]; i++) {
-                p_plane[i] = p_buffer[i] << shift_in;
+    uint16_t *p_plane;
+    uint8_t * p_buffer;
+    int       wIdx, hIdx, plane;
+
+    for (plane = 0; plane < 3; ++plane) {
+        p_plane  = (uint16_t *)pic->img.img_planes[plane];
+        p_buffer = frame->data[plane];
+        for (hIdx = 0; hIdx < pic->img.i_lines[plane]; ++hIdx) {
+            memset(p_plane, 0, pic->img.i_stride[plane]);
+            for (wIdx = 0; wIdx < pic->img.i_width[plane]; ++wIdx) {
+                p_plane[wIdx] = p_buffer[wIdx] << shift_in;
             }
+            p_plane += pic->img.i_stride[plane];
+            p_buffer += frame->linesize[plane];
         }
     }
 }
 
 static void xavs2_copy_frame(xavs2_picture_t *pic, const AVFrame *frame)
 {
-    int j, k;
-    for (k = 0; k < 3; k++) {
-        for (j = 0; j < pic->img.i_lines[k]; j++) {
-            memcpy( pic->img.img_planes[k] + pic->img.i_stride[k] * j,
-                    frame->data[k]+frame->linesize[k] * j,
-                    pic->img.i_width[k] * pic->img.in_sample_size);
+    uint8_t *p_plane;
+    uint8_t *p_buffer;
+    int      hIdx, plane, stride;
+
+    for (plane = 0; plane < 3; ++plane) {
+        p_plane  = pic->img.img_planes[plane];
+        p_buffer = frame->data[plane];
+	 stride   = pic->img.i_width[plane] * pic->img.in_sample_size;
+        for (hIdx = 0; hIdx < pic->img.i_lines[plane]; ++hIdx) {
+            memcpy(p_plane, p_buffer, stride);
+            p_plane += pic->img.i_stride[plane];
+            p_buffer += frame->linesize[plane];
         }
     }
 }