lavc/libxavs2.c: avoid recomputations of pointers in xavs2_copy_frame* functions

Signed-off-by: hwren <hwrenx@126.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
hwren 2019-12-03 10:41:23 +08:00 committed by Michael Niedermayer
parent 3003917a8f
commit 6721cd942a
1 changed files with 23 additions and 9 deletions

View File

@ -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];
}
}
}