[FFmpeg-devel] [PATCH v5 2/4] lavc/libxavs2: optimize data access
hwren
hwrenx at 126.com
Fri Nov 29 09:46:24 EET 2019
ping the remaining three patches.
Thanks,
Huiwen Ren
At 2019-10-14 21:22:43, "hwren" <hwrenx at 126.com> wrote:
>Optimize data access from multiplication to iteration.
>
>Signed-off-by: hwren <hwrenx at 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 at ffmpeg.org
>https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>To unsubscribe, visit link above, or email
>ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list