Mercurial > mplayer.hg
annotate libvo/vo_gif89a.c @ 14742:76d461a061df
Unified colorkey code for vo xv and vo xvmc.
Made the code also more flexible.
Colorkey drawing is now by default done as
proposed by Marko Macek.
Patch also approved by iive.
author | al |
---|---|
date | Sun, 20 Feb 2005 22:43:25 +0000 |
parents | e49a62a6e3cb |
children | 05aa13cdf92f |
rev | line source |
---|---|
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
1 /* |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
2 MPlayer video driver for animated gif output |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
3 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
4 (C) 2002 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
5 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
6 Written by Joey Parrish <joey@nicewarrior.org> |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
7 Based on vo_directfb2.c |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
8 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
9 This library is free software; you can redistribute it and/or |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
10 modify it under the terms of the GNU Lesser General Public |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
11 License as published by the Free Software Foundation; either |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
12 version 2 of the License, or (at your option) any later version. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
13 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
14 This library is distributed in the hope that it will be useful, |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
15 but WITHOUT ANY WARRANTY; without even the implied warranty of |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
17 Lesser General Public License for more details. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
18 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
19 You should have received a copy of the GNU Lesser General Public |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
20 License along with this library; if not, write to the |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
21 Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
22 Boston, MA 02111-1307, USA. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
23 */ |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
24 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
25 /* Notes: |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
26 * when setting output framerate, frames will be ignored as needed |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
27 * to achieve the desired rate. no frames will be duplicated. |
6053 | 28 * |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
29 * output framerate can be specified as a float |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
30 * value now, instead of just an int. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
31 * |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
32 * adjustments will be made to both the frame drop cycle and the |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
33 * delay per frame to achieve the desired output framerate. |
6053 | 34 * |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
35 * time values are in centiseconds, because that's |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
36 * what the gif spec uses for it's delay values. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
37 * |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
38 * preinit looks for arguments in one of the following formats (in this order): |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
39 * fps:filename -- sets the framerate (float) and output file |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
40 * fps -- sets the framerate (float), default file out.gif |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
41 * filename -- defaults to 5 fps, sets output file |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
42 * (none) -- defaults to 5 fps, output file out.gif |
6053 | 43 * |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
44 * trying to put the filename before the framerate will result in the |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
45 * entire argument being interpretted as the filename. |
6053 | 46 */ |
47 | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
48 #include <gif_lib.h> |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
49 |
6053 | 50 #include <stdio.h> |
51 #include <stdlib.h> | |
52 #include <string.h> | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
53 #include <unistd.h> |
6053 | 54 |
55 #include "config.h" | |
56 #include "video_out.h" | |
57 #include "video_out_internal.h" | |
58 | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
59 #define MPLAYER_VERSION 0.90 |
9540 | 60 #define VO_GIF_REVISION 6 |
6053 | 61 |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
62 static vo_info_t info = { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
63 "animated GIF output", |
6053 | 64 "gif89a", |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
65 "Joey Parrish joey@nicewarrior.org", |
6053 | 66 "" |
67 }; | |
68 | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
69 LIBVO_EXTERN(gif89a) |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8123
diff
changeset
|
70 |
6053 | 71 extern int verbose; |
72 extern int vo_config_count; | |
73 | |
74 | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
75 // how many frames per second we are aiming for during output. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
76 static float target_fps; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
77 // default value for output fps. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
78 static const float default_fps = 5.00; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
79 // the ideal gif delay per frame. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
80 static float ideal_delay; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
81 // the ideal time thus far. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
82 static float ideal_time; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
83 // actual time thus far. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
84 static int real_time; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
85 // nominal framedrop cycle length in frames |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
86 static float frame_cycle; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
87 // position in the framedrop cycle |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
88 static int cycle_pos; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
89 // adjustment of the framedrop cycle |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
90 static float frame_adj; |
6053 | 91 |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
92 // the output width and height |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
93 static uint32_t img_width; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
94 static uint32_t img_height; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
95 // image data for slice rendering |
8665 | 96 static uint8_t *slice_data = NULL; |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
97 // reduced image data for flip_page |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
98 static uint8_t *reduce_data = NULL; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
99 // reduced color map for flip_page |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
100 static ColorMapObject *reduce_cmap = NULL; |
6053 | 101 |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
102 // a pointer to the gif structure |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
103 static GifFileType *new_gif = NULL; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
104 // a string to contain the filename of the output gif |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
105 static char *gif_filename = NULL; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
106 // the default output filename |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
107 #define DEFAULT_FILE "out.gif" |
6053 | 108 |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
109 static uint32_t preinit(const char *arg) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
110 { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
111 float fps; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
112 if (verbose) printf("GIF89a: Preinit entered\n"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
113 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
114 target_fps = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
115 fps = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
116 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
117 if (arg) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
118 char *temp = NULL; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
119 if (sscanf(arg, "%f", &fps)) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
120 if (fps < 0) fps = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
121 // find the next argument |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
122 temp = strchr(arg, ':'); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
123 if (temp != NULL) temp++; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
124 } else { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
125 // find the first argument |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
126 temp = (char *)arg; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
127 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
128 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
129 if (temp != NULL) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
130 if (*temp != '\0') { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
131 gif_filename = strdup(temp); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
132 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
133 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
134 } |
6053 | 135 |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
136 if (fps > vo_fps) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
137 fps = vo_fps; // i will not duplicate frames. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
138 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
139 if (fps <= 0) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
140 target_fps = default_fps; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
141 if (verbose) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
142 printf("GIF89a: default, %.2f fps\n", target_fps); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
143 } else { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
144 target_fps = fps; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
145 if (verbose) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
146 printf("GIF89a: output fps forced to %.2f\n", target_fps); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
147 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
148 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
149 ideal_delay = 100 / target_fps; // in centiseconds |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
150 frame_cycle = vo_fps / target_fps; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
151 // we make one output frame every (frame_cycle) frames, on average. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
152 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
153 if (gif_filename == NULL) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
154 gif_filename = strdup(DEFAULT_FILE); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
155 if (verbose) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
156 printf("GIF89a: default, file \"%s\"\n", gif_filename); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
157 } else { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
158 if (verbose) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
159 printf("GIF89a: file forced to \"%s\"\n", gif_filename); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
160 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
161 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
162 if (verbose) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
163 printf("GIF89a: Preinit OK\n"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
164 return 0; |
6053 | 165 } |
166 | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
167 static uint32_t config(uint32_t s_width, uint32_t s_height, uint32_t d_width, |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
168 uint32_t d_height, uint32_t fullscreen, char *title, |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
169 uint32_t format) |
6053 | 170 { |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
171 #ifdef HAVE_GIF_4 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
172 // these are control blocks for the gif looping extension. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
173 char LB1[] = "NETSCAPE2.0"; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
174 char LB2[] = { 1, 0, 0 }; |
6078
4a9c7041141d
cleanups, removed swscaler, osd support - by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6053
diff
changeset
|
175 #endif |
4a9c7041141d
cleanups, removed swscaler, osd support - by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6053
diff
changeset
|
176 |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
177 if (verbose) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
178 printf("GIF89a: Config entered [%ix%i]\n",s_width,s_height); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
179 printf("GIF89a: With requested format: %s\n",vo_format_name(format)); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
180 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
181 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
182 // save these for later. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
183 img_width = s_width; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
184 img_height = s_height; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
185 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
186 // multiple configs without uninit are not allowed. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
187 // this is because config opens a new gif file. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
188 if (vo_config_count > 0) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
189 if (verbose) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
190 printf("GIF89a: Reconfigure attempted.\n"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
191 return 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
192 } |
8665 | 193 // reconfigure need not be a fatal error, so return 0. |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
194 // multiple configs without uninit will result in two |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
195 // movies concatenated in one gif file. the output |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
196 // gif will have the dimensions of the first movie. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
197 |
9540 | 198 if (format != IMGFMT_RGB24) { |
199 printf("GIF89a: Error - given unsupported colorspace.\n"); | |
200 return 1; | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
201 } |
9540 | 202 |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
203 // the EGifSetGifVersion line causes segfaults in certain |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
204 // earlier versions of libungif. i don't know exactly which, |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
205 // but certainly in all those before v4. if you have problems, |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
206 // you need to upgrade your gif library. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
207 #ifdef HAVE_GIF_4 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
208 EGifSetGifVersion("89a"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
209 #else |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
210 printf("GIF89a: Your version of libungif needs to be upgraded.\n"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
211 printf("GIF89a: Some functionality has been disabled.\n"); |
6078
4a9c7041141d
cleanups, removed swscaler, osd support - by Joey Parrish <joey@yunamusic.com>
arpi
parents:
6053
diff
changeset
|
212 #endif |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
213 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
214 new_gif = EGifOpenFileName(gif_filename, 0); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
215 if (new_gif == NULL) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
216 printf("GIF89a: error opening file \"%s\" for output.\n", gif_filename); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
217 return 1; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
218 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
219 |
9540 | 220 slice_data = malloc(img_width * img_height * 3); |
221 if (slice_data == NULL) { | |
222 printf("GIF89a: malloc failed.\n"); | |
223 return 1; | |
224 } | |
225 | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
226 reduce_data = malloc(img_width * img_height); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
227 if (reduce_data == NULL) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
228 printf("GIF89a: malloc failed.\n"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
229 return 1; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
230 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
231 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
232 reduce_cmap = MakeMapObject(256, NULL); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
233 if (reduce_cmap == NULL) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
234 printf("GIF89a: malloc failed.\n"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
235 return 1; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
236 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
237 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
238 // initialize the delay and framedrop variables. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
239 ideal_time = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
240 real_time = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
241 cycle_pos = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
242 frame_adj = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
243 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
244 // set the initial width and height info. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
245 EGifPutScreenDesc(new_gif, s_width, s_height, 256, 0, reduce_cmap); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
246 #ifdef HAVE_GIF_4 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
247 // version 3 of libungif does not support multiple control blocks. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
248 // looping requires multiple control blocks. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
249 // therefore, looping is only enabled for v4 and up. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
250 EGifPutExtensionFirst(new_gif, 0xFF, 11, LB1); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
251 EGifPutExtensionLast(new_gif, 0, 3, LB2); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
252 #endif |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
253 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
254 if (verbose) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
255 printf("GIF89a: Config finished.\n"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
256 return 0; |
6053 | 257 } |
258 | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
259 // we do not draw osd. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
260 void draw_osd() {} |
6053 | 261 |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
262 // we do not handle events. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
263 static void check_events(void) {} |
6053 | 264 |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
265 static int gif_reduce(int width, int height, uint8_t *src, uint8_t *dst, GifColorType *colors) |
6053 | 266 { |
267 unsigned char Ra[width * height]; | |
268 unsigned char Ga[width * height]; | |
269 unsigned char Ba[width * height]; | |
270 unsigned char *R, *G, *B; | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
271 int size = 256; |
6053 | 272 int i; |
273 | |
274 R = Ra; G = Ga; B = Ba; | |
275 for (i = 0; i < width * height; i++) | |
276 { | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
277 *R++ = *src++; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
278 *G++ = *src++; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
279 *B++ = *src++; |
6053 | 280 } |
281 | |
282 R = Ra; G = Ga; B = Ba; | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
283 return QuantizeBuffer(width, height, &size, R, G, B, dst, colors); |
6053 | 284 } |
285 | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
286 static void flip_page(void) |
6053 | 287 { |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
288 char CB[4]; // control block |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
289 int delay = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
290 int ret; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
291 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
292 cycle_pos++; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
293 if (cycle_pos < frame_cycle - frame_adj) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
294 return; // we are skipping this frame |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
295 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
296 // quantize the image |
9540 | 297 ret = gif_reduce(img_width, img_height, slice_data, reduce_data, reduce_cmap->Colors); |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
298 if (ret == GIF_ERROR) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
299 printf("GIF89a: Quantize failed.\n"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
300 return; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
301 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
302 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
303 // calculate frame delays and frame skipping |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
304 ideal_time += ideal_delay; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
305 delay = (int)(ideal_time - real_time); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
306 real_time += delay; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
307 frame_adj += cycle_pos; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
308 frame_adj -= frame_cycle; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
309 cycle_pos = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
310 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
311 // set up the delay control block |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
312 CB[0] = (char)(delay >> 8); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
313 CB[1] = (char)(delay & 0xff); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
314 CB[2] = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
315 CB[3] = 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
316 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
317 // put the control block with delay info |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
318 EGifPutExtension(new_gif, 0xF9, 0x04, CB); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
319 // put the image description |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
320 EGifPutImageDesc(new_gif, 0, 0, img_width, img_height, 0, reduce_cmap); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
321 // put the image itself |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
322 EGifPutLine(new_gif, reduce_data, img_width * img_height); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
323 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
324 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
325 static uint32_t draw_frame(uint8_t *src[]) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
326 { |
9540 | 327 return 1; |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
328 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
329 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
330 static uint32_t draw_slice(uint8_t *src[], int stride[], int w, int h, int x, int y) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
331 { |
9540 | 332 uint8_t *dst, *frm; |
333 int i; | |
8665 | 334 dst = slice_data + (img_width * y + x) * 3; |
9540 | 335 frm = src[0]; |
336 for (i = 0; i < h; i++) { | |
337 memcpy(dst, frm, w * 3); | |
338 dst += (img_width * 3); | |
339 frm += stride[0]; | |
340 } | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
341 return 0; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
342 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
343 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
344 static uint32_t query_format(uint32_t format) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
345 { |
9540 | 346 if (format == IMGFMT_RGB24) |
347 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_TIMER | VFCAP_ACCEPT_STRIDE; | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
348 return 0; |
6053 | 349 } |
350 | |
351 static uint32_t control(uint32_t request, void *data, ...) | |
352 { | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
353 if (request == VOCTRL_QUERY_FORMAT) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
354 return query_format(*((uint32_t*)data)); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
355 } |
9540 | 356 if (request == VOCTRL_DUPLICATE_FRAME) { |
357 flip_page(); | |
358 return VO_TRUE; | |
359 } | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
360 return VO_NOTIMPL; |
6053 | 361 } |
362 | |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
363 static void uninit(void) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
364 { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
365 if (verbose) |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
366 printf("GIF89a: Uninit entered\n"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
367 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
368 if (new_gif != NULL) { |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
369 char temp[256]; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
370 // comment the gif and close it |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
371 snprintf(temp, 256, "MPlayer gif output v%2.2f-%d (c) %s\r\n", |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
372 MPLAYER_VERSION, VO_GIF_REVISION, |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
373 "joey@nicewarrior.org"); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
374 EGifPutComment(new_gif, temp); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
375 EGifCloseFile(new_gif); // also frees gif storage space. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
376 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
377 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
378 // free our allocated ram |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
379 if (gif_filename != NULL) free(gif_filename); |
8665 | 380 if (slice_data != NULL) free(slice_data); |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
381 if (reduce_data != NULL) free(reduce_data); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
382 if (reduce_cmap != NULL) FreeMapObject(reduce_cmap); |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
383 |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
384 // set the pointers back to null. |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
385 new_gif = NULL; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
386 gif_filename = NULL; |
8665 | 387 slice_data = NULL; |
8514
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
388 reduce_data = NULL; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
389 reduce_cmap = NULL; |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
390 } |
a1ff87c254ff
I have rewritten the gif89a vo in order to solve some problems I had
arpi
parents:
8148
diff
changeset
|
391 |