On Tue, Oct 24, 2017 at 8:56 PM, Michael Niedermayer <mich...@niedermayer.cc > wrote:
> On Tue, Oct 24, 2017 at 12:40:22PM -0400, Bjorn Roche wrote: > > Support for transparencies in animated gifs requires modifying both > > libavcodec/gif.c and libavformat/gif.c because both the graphics > > control extension (handled by libavformat/gif.c) and the raw frame data > > (handled by libavcodec/gif.c) must be changed. This is because > > transparencies in GIF can be used both to create a transparent image, > > and to provide optimization. > > > > How transparencies are interpreted in a given frame is controlled by > > the “disposal method”, which must be set appropriately in the graphics > > control extension. > > > > The “in place” disposal method is used when transparency indicates > > optimization, and the “background” disposal method is used when > > transparency is intended to be preserved. In order to support both > > disposal methods, libavcodec/gif.c must signal to libavformat/gif.c > > which disposal method is required for every frame. This is done with a > > new side data type: AV_PKT_DATA_GIF_FRAME_DISPOSAL. This requires a > > change to avcodec.h > > > > Unfortunately, the addition of a new side data type causes some of the > > FATE tests to fail. This is not addressed here. > > > > This patch assumes paletteuse has already been patched to support > > transparency. (e.g. lavfi/paletteuse: fix to support transparency) > > > > Feedback I definitely need: > > - I’ve done a fair bit of testing, but I’m sure I missed some important > > cases. > > - I don’t know if/how to update the FATE tests. > > --- > > libavcodec/avcodec.h | 6 ++ > > libavcodec/gif.c | 196 ++++++++++++++++++++++++++++++ > +++++++++++++++++++-- > > libavformat/gif.c | 16 ++++- > > 3 files changed, 212 insertions(+), 6 deletions(-) > > > > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > > index 52cc5b0ca0..82a5328ce1 100644 > > --- a/libavcodec/avcodec.h > > +++ b/libavcodec/avcodec.h > > @@ -1599,6 +1599,12 @@ enum AVPacketSideDataType { > > */ > > AV_PKT_DATA_CONTENT_LIGHT_LEVEL, > > > > + /** > > + * The disposal method that should be used with the frame. If > missing, > > + * the frame will not be disposed. This contains exactly one byte. > > + */ > > + AV_PKT_DATA_GIF_FRAME_DISPOSAL, > > + > > /** > > * ATSC A53 Part 4 Closed Captions. This metadata should be > associated with > > * a video stream. A53 CC bitstream is stored as uint8_t in > AVPacketSideData.data. > > you cannot add values in the middle of a public enum, that would > change the ABI > Ah, thanks -- I thought that was internal only. Is it safe to add to the end? bjorn -- Bjorn Roche Sr. Video Pipeline Engineer bj...@giphy.com _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel