annotate gif.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 998691d7f8f5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
1 /*
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
2 * GIF encoder.
8629
04423b2f6e0b cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 8591
diff changeset
3 * Copyright (c) 2000 Fabrice Bellard
04423b2f6e0b cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 8591
diff changeset
4 * Copyright (c) 2002 Francois Revol
04423b2f6e0b cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 8591
diff changeset
5 * Copyright (c) 2006 Baptiste Coudurier
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
6 *
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
7 * This file is part of FFmpeg.
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
8 *
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
9 * FFmpeg is free software; you can redistribute it and/or
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
10 * modify it under the terms of the GNU Lesser General Public
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
11 * License as published by the Free Software Foundation; either
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
12 * version 2.1 of the License, or (at your option) any later version.
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
13 *
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
14 * FFmpeg is distributed in the hope that it will be useful,
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
17 * Lesser General Public License for more details.
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
18 *
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
19 * You should have received a copy of the GNU Lesser General Public
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
20 * License along with FFmpeg; if not, write to the Free Software
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
22 */
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
23
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
24 /*
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
25 * First version by Francois Revol revol@free.fr
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
26 *
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
27 * Features and limitations:
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
28 * - currently no compression is performed,
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
29 * in fact the size of the data is 9/8 the size of the image in 8bpp
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
30 * - uses only a global standard palette
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
31 * - tested with IE 5.0, Opera for BeOS, NetPositive (BeOS), and Mozilla (BeOS).
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
32 *
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
33 * Reference documents:
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
34 * http://www.goice.co.jp/member/mo/formats/gif.html
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
35 * http://astronomy.swin.edu.au/pbourke/dataformats/gif/
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
36 * http://www.dcs.ed.ac.uk/home/mxr/gfx/2d/GIF89a.txt
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
37 *
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
38 * this url claims to have an LZW algorithm not covered by Unisys patent:
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
39 * http://www.msg.net/utility/whirlgif/gifencod.html
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
40 * could help reduce the size of the files _a lot_...
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
41 * some sites mentions an RLE type compression also.
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
42 */
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
43
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
44 #include "avcodec.h"
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
45 #include "bytestream.h"
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
46 #include "lzw.h"
8591
d1e300c41ed5 cleanup gif, use BISTREAM_WRITER_LE
bcoudurier
parents: 7040
diff changeset
47
d1e300c41ed5 cleanup gif, use BISTREAM_WRITER_LE
bcoudurier
parents: 7040
diff changeset
48 /* The GIF format uses reversed order for bitstreams... */
d1e300c41ed5 cleanup gif, use BISTREAM_WRITER_LE
bcoudurier
parents: 7040
diff changeset
49 /* at least they don't use PDP_ENDIAN :) */
d1e300c41ed5 cleanup gif, use BISTREAM_WRITER_LE
bcoudurier
parents: 7040
diff changeset
50 #define BITSTREAM_WRITER_LE
d1e300c41ed5 cleanup gif, use BISTREAM_WRITER_LE
bcoudurier
parents: 7040
diff changeset
51
9411
4cb7c65fc775 Split bitstream.h, put the bitstream writer stuff in the new file
stefano
parents: 8775
diff changeset
52 #include "put_bits.h"
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
53
10626
099e9b33c1b9 move private context declaration at the top
bcoudurier
parents: 10146
diff changeset
54 typedef struct {
099e9b33c1b9 move private context declaration at the top
bcoudurier
parents: 10146
diff changeset
55 AVFrame picture;
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
56 LZWState *lzw;
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
57 uint8_t *buf;
10626
099e9b33c1b9 move private context declaration at the top
bcoudurier
parents: 10146
diff changeset
58 } GIFContext;
099e9b33c1b9 move private context declaration at the top
bcoudurier
parents: 10146
diff changeset
59
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
60 /* GIF header */
10629
f164bb900d0b pass avctx as argument instead of width and height
bcoudurier
parents: 10628
diff changeset
61 static int gif_image_write_header(AVCodecContext *avctx,
f164bb900d0b pass avctx as argument instead of width and height
bcoudurier
parents: 10628
diff changeset
62 uint8_t **bytestream, uint32_t *palette)
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
63 {
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
64 int i;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
65 unsigned int v;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
66
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
67 bytestream_put_buffer(bytestream, "GIF", 3);
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
68 bytestream_put_buffer(bytestream, "89a", 3);
10629
f164bb900d0b pass avctx as argument instead of width and height
bcoudurier
parents: 10628
diff changeset
69 bytestream_put_le16(bytestream, avctx->width);
f164bb900d0b pass avctx as argument instead of width and height
bcoudurier
parents: 10628
diff changeset
70 bytestream_put_le16(bytestream, avctx->height);
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
71
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
72 bytestream_put_byte(bytestream, 0xf7); /* flags: global clut, 256 entries */
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
73 bytestream_put_byte(bytestream, 0x1f); /* background color index */
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
74 bytestream_put_byte(bytestream, 0); /* aspect ratio */
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
75
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
76 /* the global palette */
8774
0a8166d20fd3 remove dead rgb24 code, gif encoder now directly takes palette, patch by Daniel Verkamp, daniel at drv dot nu
bcoudurier
parents: 8773
diff changeset
77 for(i=0;i<256;i++) {
0a8166d20fd3 remove dead rgb24 code, gif encoder now directly takes palette, patch by Daniel Verkamp, daniel at drv dot nu
bcoudurier
parents: 8773
diff changeset
78 v = palette[i];
0a8166d20fd3 remove dead rgb24 code, gif encoder now directly takes palette, patch by Daniel Verkamp, daniel at drv dot nu
bcoudurier
parents: 8773
diff changeset
79 bytestream_put_be24(bytestream, v);
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
80 }
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
81
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
82 return 0;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
83 }
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
84
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
85 static int gif_image_write_image(AVCodecContext *avctx,
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
86 uint8_t **bytestream, uint8_t *end,
10628
3d43d9bcf903 remove useless params
bcoudurier
parents: 10627
diff changeset
87 const uint8_t *buf, int linesize)
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
88 {
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
89 GIFContext *s = avctx->priv_data;
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
90 int len, height;
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
91 const uint8_t *ptr;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
92 /* image block */
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
93
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
94 bytestream_put_byte(bytestream, 0x2c);
10627
3c7adb462b65 remove useless params
bcoudurier
parents: 10626
diff changeset
95 bytestream_put_le16(bytestream, 0);
3c7adb462b65 remove useless params
bcoudurier
parents: 10626
diff changeset
96 bytestream_put_le16(bytestream, 0);
10629
f164bb900d0b pass avctx as argument instead of width and height
bcoudurier
parents: 10628
diff changeset
97 bytestream_put_le16(bytestream, avctx->width);
f164bb900d0b pass avctx as argument instead of width and height
bcoudurier
parents: 10628
diff changeset
98 bytestream_put_le16(bytestream, avctx->height);
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
99 bytestream_put_byte(bytestream, 0x00); /* flags */
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
100 /* no local clut */
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
101
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
102 bytestream_put_byte(bytestream, 0x08);
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
103
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
104 ff_lzw_encode_init(s->lzw, s->buf, avctx->width*avctx->height,
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
105 12, FF_LZW_GIF, put_bits);
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
106
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
107 ptr = buf;
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
108 for (height = avctx->height; height--;) {
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
109 len += ff_lzw_encode(s->lzw, ptr, avctx->width);
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
110 ptr += linesize;
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
111 }
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
112 len += ff_lzw_encode_flush(s->lzw, flush_put_bits);
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
113
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
114 ptr = s->buf;
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
115 while (len > 0) {
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
116 int size = FFMIN(255, len);
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
117 bytestream_put_byte(bytestream, size);
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
118 if (end - *bytestream < size)
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
119 return -1;
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
120 bytestream_put_buffer(bytestream, ptr, size);
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
121 ptr += size;
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
122 len -= size;
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
123 }
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
124 bytestream_put_byte(bytestream, 0x00); /* end of image block */
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
125 bytestream_put_byte(bytestream, 0x3b);
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
126 return 0;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
127 }
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
128
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6152
diff changeset
129 static av_cold int gif_encode_init(AVCodecContext *avctx)
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
130 {
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
131 GIFContext *s = avctx->priv_data;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
132
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
133 avctx->coded_frame = &s->picture;
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
134 s->lzw = av_mallocz(ff_lzw_encode_state_size);
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
135 if (!s->lzw)
11581
998691d7f8f5 Replace all remaining occurrences of AVERROR_NOMEM with
stefano
parents: 11560
diff changeset
136 return AVERROR(ENOMEM);
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
137 s->buf = av_malloc(avctx->width*avctx->height*2);
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
138 if (!s->buf)
11581
998691d7f8f5 Replace all remaining occurrences of AVERROR_NOMEM with
stefano
parents: 11560
diff changeset
139 return AVERROR(ENOMEM);
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
140 return 0;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
141 }
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
142
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
143 /* better than nothing gif encoder */
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
144 static int gif_encode_frame(AVCodecContext *avctx, unsigned char *outbuf, int buf_size, void *data)
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
145 {
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
146 GIFContext *s = avctx->priv_data;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
147 AVFrame *pict = data;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
148 AVFrame *const p = (AVFrame *)&s->picture;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
149 uint8_t *outbuf_ptr = outbuf;
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
150 uint8_t *end = outbuf + buf_size;
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
151
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
152 *p = *pict;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
153 p->pict_type = FF_I_TYPE;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
154 p->key_frame = 1;
10629
f164bb900d0b pass avctx as argument instead of width and height
bcoudurier
parents: 10628
diff changeset
155 gif_image_write_header(avctx, &outbuf_ptr, (uint32_t *)pict->data[1]);
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
156 gif_image_write_image(avctx, &outbuf_ptr, end, pict->data[0], pict->linesize[0]);
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
157 return outbuf_ptr - outbuf;
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
158 }
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
159
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
160 static int gif_encode_close(AVCodecContext *avctx)
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
161 {
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
162 GIFContext *s = avctx->priv_data;
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
163
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
164 av_freep(&s->lzw);
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
165 av_freep(&s->buf);
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
166 return 0;
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
167 }
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
168
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
169 AVCodec gif_encoder = {
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
170 "gif",
11560
8a4984c5cacc Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 10634
diff changeset
171 AVMEDIA_TYPE_VIDEO,
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
172 CODEC_ID_GIF,
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
173 sizeof(GIFContext),
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
174 gif_encode_init,
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
175 gif_encode_frame,
10634
e15eb76d9e47 use lzw compression in gif encoder
bcoudurier
parents: 10629
diff changeset
176 gif_encode_close,
10146
38cfe222e1a4 Mark all pix_fmts and supported_framerates compound literals as const.
reimar
parents: 9431
diff changeset
177 .pix_fmts= (const enum PixelFormat[]){PIX_FMT_RGB8, PIX_FMT_BGR8, PIX_FMT_RGB4_BYTE, PIX_FMT_BGR4_BYTE, PIX_FMT_GRAY8, PIX_FMT_PAL8, PIX_FMT_NONE},
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6788
diff changeset
178 .long_name= NULL_IF_CONFIG_SMALL("GIF (Graphics Interchange Format)"),
4125
f6f67a8bdd09 change gif muxer to simple gif encoder
bcoudurier
parents:
diff changeset
179 };