diff options
author | Benoit Fouet <benoit.fouet@free.fr> | 2014-11-25 10:52:21 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-11-26 00:59:45 +0100 |
commit | 4acefd25215a0d0ac6cf65971e73400eaaa5e64e (patch) | |
tree | 06f091977104333f0718e7d60f08c4e54b5251d5 /libavformat/apngdec.c | |
parent | 5badcdf20d98b7edede3d7701d31dba58822a99a (diff) |
avformat/apngdec: account for blend and dispose operations.
When the dimensions are the entire frame ones, and the dispose operation
is to reset to background, or the new frame overwrites the new one, then
consider the frame as a key one.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/apngdec.c')
-rw-r--r-- | libavformat/apngdec.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/libavformat/apngdec.c b/libavformat/apngdec.c index d766a87105..dac71f10ee 100644 --- a/libavformat/apngdec.c +++ b/libavformat/apngdec.c @@ -26,6 +26,7 @@ * @see http://www.w3.org/TR/PNG */ +#include "apng.h" #include "avformat.h" #include "avio_internal.h" #include "internal.h" @@ -298,7 +299,10 @@ static int decode_fctl_chunk(AVFormatContext *s, APNGDemuxContext *ctx, AVPacket return AVERROR_INVALIDDATA; ctx->is_key_frame = 0; } else { - ctx->is_key_frame = 1; + if (sequence_number == 0 && dispose_op == APNG_DISPOSE_OP_PREVIOUS) + dispose_op = APNG_DISPOSE_OP_BACKGROUND; + ctx->is_key_frame = dispose_op == APNG_DISPOSE_OP_BACKGROUND || + blend_op == APNG_BLEND_OP_SOURCE; } return 0; |