ping the remaining three patches.
Thanks, Huiwen Ren At 2019-10-14 21:22:43, "hwren" <hwr...@126.com> wrote: >Optimize data access from multiplication to iteration. > >Signed-off-by: hwren <hwr...@126.com> >--- > libavcodec/libxavs2.c | 45 +++++++++++++++++++++++++++++---------------- > 1 file changed, 29 insertions(+), 16 deletions(-) > >diff --git a/libavcodec/libxavs2.c b/libavcodec/libxavs2.c >index 0179a1e..b5c07ec 100644 >--- a/libavcodec/libxavs2.c >+++ b/libavcodec/libxavs2.c >@@ -132,29 +132,42 @@ 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; >+ int hIdx; >+ int 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; >+ int plane; >+ int 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]; > } > } > } >-- >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-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".