Signed-off-by: hwrenx <[email protected]>
---
libavcodec/libdavs2.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/libavcodec/libdavs2.c b/libavcodec/libdavs2.c
index 218f3ec..15ed3a1 100644
--- a/libavcodec/libdavs2.c
+++ b/libavcodec/libdavs2.c
@@ -62,7 +62,7 @@ static int davs2_dump_frames(AVCodecContext *avctx,
davs2_picture_t *pic, int *g
davs2_seq_info_t *headerset, int ret_type,
AVFrame *frame)
{
DAVS2Context *cad = avctx->priv_data;
- int bytes_per_sample = pic->bytes_per_sample;
+ int bytes_per_sample = pic->bytes_per_sample == 8 ? 1 : 2;
int plane = 0;
int line = 0;
@@ -104,6 +104,7 @@ static int davs2_dump_frames(AVCodecContext *avctx,
davs2_picture_t *pic, int *g
for (plane = 0; plane < 3; ++plane) {
int size_line = pic->widths[plane] * bytes_per_sample;
+ void *dst, *src;
frame->buf[plane] = av_buffer_alloc(size_line * pic->lines[plane]);
if (!frame->buf[plane]){
@@ -114,10 +115,14 @@ static int davs2_dump_frames(AVCodecContext *avctx,
davs2_picture_t *pic, int *g
frame->data[plane] = frame->buf[plane]->data;
frame->linesize[plane] = size_line;
- for (line = 0; line < pic->lines[plane]; ++line)
- memcpy(frame->data[plane] + line * size_line,
- pic->planes[plane] + line * pic->strides[plane],
- pic->widths[plane] * bytes_per_sample);
+ dst = frame->data[plane];
+ src = pic->planes[plane];
+
+ for (line = 0; line < pic->lines[plane]; ++line) {
+ memcpy(dst, src, size_line);
+ dst += size_line;
+ src += pic->strides[plane];
+ }
}
frame->width = cad->headerset.width;
--
2.7.4
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".