X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fpngenc.c;h=a6233075c10d70c16c543d017a613c52edd42e6b;hb=5889bc16a4f62cd1d548acafbd446e87401cd5f8;hp=bc61f8fd773245f434ad47fe119c071c6474032a;hpb=e40b33a9d79c4686b8eaad67125bd38bbcae5872;p=ffmpeg diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c index bc61f8fd773..a6233075c10 100644 --- a/libavcodec/pngenc.c +++ b/libavcodec/pngenc.c @@ -766,12 +766,11 @@ static int apng_encode_frame(AVCodecContext *avctx, const AVFrame *pict, // Do disposal if (last_fctl_chunk.dispose_op != APNG_DISPOSE_OP_PREVIOUS) { - memcpy(diffFrame->data[0], s->last_frame->data[0], - s->last_frame->linesize[0] * s->last_frame->height); + av_frame_copy(diffFrame, s->last_frame); if (last_fctl_chunk.dispose_op == APNG_DISPOSE_OP_BACKGROUND) { for (y = last_fctl_chunk.y_offset; y < last_fctl_chunk.y_offset + last_fctl_chunk.height; ++y) { - size_t row_start = s->last_frame->linesize[0] * y + bpp * last_fctl_chunk.x_offset; + size_t row_start = diffFrame->linesize[0] * y + bpp * last_fctl_chunk.x_offset; memset(diffFrame->data[0] + row_start, 0, bpp * last_fctl_chunk.width); } } @@ -779,8 +778,7 @@ static int apng_encode_frame(AVCodecContext *avctx, const AVFrame *pict, if (!s->prev_frame) continue; - memcpy(diffFrame->data[0], s->prev_frame->data[0], - s->prev_frame->linesize[0] * s->prev_frame->height); + av_frame_copy(diffFrame, s->prev_frame); } // Do inverse blending @@ -945,13 +943,12 @@ static int encode_apng(AVCodecContext *avctx, AVPacket *pkt, } // Do disposal, but not blending - memcpy(s->prev_frame->data[0], s->last_frame->data[0], - s->last_frame->linesize[0] * s->last_frame->height); + av_frame_copy(s->prev_frame, s->last_frame); if (s->last_frame_fctl.dispose_op == APNG_DISPOSE_OP_BACKGROUND) { uint32_t y; uint8_t bpp = (s->bits_per_pixel + 7) >> 3; for (y = s->last_frame_fctl.y_offset; y < s->last_frame_fctl.y_offset + s->last_frame_fctl.height; ++y) { - size_t row_start = s->last_frame->linesize[0] * y + bpp * s->last_frame_fctl.x_offset; + size_t row_start = s->prev_frame->linesize[0] * y + bpp * s->last_frame_fctl.x_offset; memset(s->prev_frame->data[0] + row_start, 0, bpp * s->last_frame_fctl.width); } }