mirror of https://git.ffmpeg.org/ffmpeg.git
Mark one colour as transparent in the gif image encoder
if the input palette contains at least one colour that is more than 50% transparent. Fixes ticket #715.
This commit is contained in:
parent
51d7cd3596
commit
0cc9949ead
|
@ -62,7 +62,7 @@ static int gif_image_write_header(AVCodecContext *avctx,
|
|||
uint8_t **bytestream, uint32_t *palette)
|
||||
{
|
||||
int i;
|
||||
unsigned int v;
|
||||
unsigned int v, smallest_alpha = 0xFF, alpha_component = 0;
|
||||
|
||||
bytestream_put_buffer(bytestream, "GIF", 3);
|
||||
bytestream_put_buffer(bytestream, "89a", 3);
|
||||
|
@ -77,6 +77,20 @@ static int gif_image_write_header(AVCodecContext *avctx,
|
|||
for(i=0;i<256;i++) {
|
||||
v = palette[i];
|
||||
bytestream_put_be24(bytestream, v);
|
||||
if (v >> 24 < smallest_alpha) {
|
||||
smallest_alpha = v >> 24;
|
||||
alpha_component = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (smallest_alpha < 128) {
|
||||
bytestream_put_byte(bytestream, 0x21); /* Extension Introducer */
|
||||
bytestream_put_byte(bytestream, 0xf9); /* Graphic Control Label */
|
||||
bytestream_put_byte(bytestream, 0x04); /* block length */
|
||||
bytestream_put_byte(bytestream, 0x01); /* Transparent Color Flag */
|
||||
bytestream_put_le16(bytestream, 0x00); /* no delay */
|
||||
bytestream_put_byte(bytestream, alpha_component);
|
||||
bytestream_put_byte(bytestream, 0x00);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 53
|
||||
#define LIBAVCODEC_VERSION_MINOR 41
|
||||
#define LIBAVCODEC_VERSION_MICRO 1
|
||||
#define LIBAVCODEC_VERSION_MICRO 2
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||
LIBAVCODEC_VERSION_MINOR, \
|
||||
|
|
Loading…
Reference in New Issue