31 #define BITSTREAM_WRITER_LE
62 for (y = 0; y < h; y++) {
63 for (x = 0; x < w; x++)
81 int x_start = 0, y_start = 0, trans = -1;
89 int x_end = avctx->
width - 1,
93 while (y_start < y_end) {
94 if (memcmp(ref + y_start*ref_linesize, buf + y_start*linesize,
width))
98 while (y_end > y_start) {
99 if (memcmp(ref + y_end*ref_linesize, buf + y_end*linesize,
width))
103 height = y_end + 1 - y_start;
106 while (x_start < x_end) {
108 for (y = y_start; y < y_end; y++) {
109 if (ref[y*ref_linesize + x_start] != buf[y*linesize + x_start]) {
118 while (x_end > x_start) {
120 for (y = y_start; y < y_end; y++) {
121 if (ref[y*ref_linesize + x_end] != buf[y*linesize + x_end]) {
130 width = x_end + 1 - x_start;
138 bytestream_put_le16(bytestream, x_start);
139 bytestream_put_le16(bytestream, y_start);
140 bytestream_put_le16(bytestream,
width);
141 bytestream_put_le16(bytestream,
height);
144 bytestream_put_byte(bytestream, 0x00);
147 bytestream_put_byte(bytestream, 1<<7 | 0x7);
149 const uint32_t
v = palette[i];
150 bytestream_put_be24(bytestream, v);
165 pal_exdata[trans*4 + 3*!HAVE_BIGENDIAN] = 0x00;
169 bytestream_put_byte(bytestream, 0x08);
174 ptr = buf + y_start*linesize + x_start;
179 for (y = 0; y <
height; y++) {
181 for (x = 0; x <
width; x++)
182 if (ref[x] == ptr[x])
189 for (y = 0; y <
height; y++) {
199 bytestream_put_byte(bytestream, size);
200 if (end - *bytestream < size)
206 bytestream_put_byte(bytestream, 0x00);
214 if (avctx->
width > 65535 || avctx->
height > 65535) {
239 const AVFrame *pict,
int *got_packet)
243 const uint32_t *
palette = NULL;
248 outbuf_ptr = pkt->
data;
256 palette = (uint32_t*)pict->
data[1];
291 #define OFFSET(x) offsetof(GIFContext, x)
292 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM