[FFmpeg-cvslog] lavc/libxavs2.c: avoid recomputations of pointers in xavs2_copy_frame* functions
hwren
git at videolan.org
Wed Dec 4 21:44:31 EET 2019
ffmpeg | branch: master | hwren <hwrenx at 126.com> | Tue Dec 3 10:41:23 2019 +0800| [6721cd942ad642f373e0f7ed1e191008bfeafdb7] | committer: Michael Niedermayer
lavc/libxavs2.c: avoid recomputations of pointers in xavs2_copy_frame* functions
Signed-off-by: hwren <hwrenx at 126.com>
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6721cd942ad642f373e0f7ed1e191008bfeafdb7
---
libavcodec/libxavs2.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/libavcodec/libxavs2.c b/libavcodec/libxavs2.c
index 3896f3b20d..0e525ee7e8 100644
--- a/libavcodec/libxavs2.c
+++ b/libavcodec/libxavs2.c
@@ -132,28 +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 plane, hIdx, wIdx;
+ uint16_t *p_plane;
+ uint8_t *p_buffer;
+ int plane;
+ int hIdx;
+ int wIdx;
+
for (plane = 0; plane < 3; plane++) {
- int i_stride = pic->img.i_stride[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++) {
- uint16_t *p_plane = (uint16_t *)&pic->img.img_planes[plane][hIdx * i_stride];
- uint8_t *p_buffer = frame->data[plane] + frame->linesize[plane] * hIdx;
- memset(p_plane, 0, i_stride);
+ 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 plane, hIdx;
+ uint8_t *p_plane;
+ uint8_t *p_buffer;
+ int plane;
+ int hIdx;
+ 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( pic->img.img_planes[plane] + pic->img.i_stride[plane] * hIdx,
- frame->data[plane]+frame->linesize[plane] * hIdx,
- pic->img.i_width[plane] * pic->img.in_sample_size);
+ memcpy(p_plane, p_buffer, stride);
+ p_plane += pic->img.i_stride[plane];
+ p_buffer += frame->linesize[plane];
}
}
}
More information about the ffmpeg-cvslog
mailing list