> 在 2019年10月14日,11:09,hwren <hwr...@126.com> 写道: > > Optimize data access from multiplication to iteration. > > Signed-off-by: hwren <hwr...@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-requ...@ffmpeg.org with subject "unsubscribe".
Thanks Steven _______________________________________________ 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".