annotate libvo/vo_fbdev.c @ 5950:184f37880f90

Darwin needs to run ranlib on any static lib before linking, we do this in this script just before the final linking.
author atmos4
date Fri, 03 May 2002 19:23:15 +0000
parents 75fe20ca2386
children aee9c32349a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
305
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
1 /*
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
2 * Video driver for Framebuffer device
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
3 * by Szabolcs Berecz <szabi@inf.elte.hu>
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
4 * (C) 2001
305
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
5 *
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
6 * Some idea and code borrowed from Chris Lawrence's ppmtofb-0.27
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
7 */
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
8
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
9 #define FBDEV "fbdev: "
e847396dc49f some changes...
szabii
parents: 383
diff changeset
10
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
11 #include <stdio.h>
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
12 #include <stdlib.h>
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
13 #include <string.h>
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
14 #include <fcntl.h>
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
15 #include <unistd.h>
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
16 #include <errno.h>
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
17 #include <ctype.h>
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
18 #include <assert.h>
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
19
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
20 #include <sys/mman.h>
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
21 #include <sys/ioctl.h>
2354
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
22 #include <sys/kd.h>
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
23 #include <linux/fb.h>
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
24
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
25 #include "config.h"
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
26 #include "video_out.h"
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
27 #include "video_out_internal.h"
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
28 #include "fastmemcpy.h"
633
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
29 #include "sub.h"
2556
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2354
diff changeset
30 #include "../postproc/rgb2rgb.h"
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
31 #ifdef CONFIG_VIDIX
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
32 #include "vosub_vidix.h"
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
33 #endif
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
34 #include "aspect.h"
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
35
4756
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
36 #ifdef HAVE_PNG
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
37 extern vo_functions_t video_out_png;
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
38 #endif
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
39
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
40 LIBVO_EXTERN(fbdev)
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
41
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
42 static vo_info_t vo_info = {
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
43 "Framebuffer Device",
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
44 "fbdev",
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
45 "Szabolcs Berecz <szabi@inf.elte.hu>",
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
46 ""
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
47 };
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
48
379
368f16e72583 cleanup
szabii
parents: 365
diff changeset
49 extern int verbose;
368f16e72583 cleanup
szabii
parents: 365
diff changeset
50
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
51 #ifdef CONFIG_VIDIX
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
52 /* Name of VIDIX driver */
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
53 static const char *vidix_name = NULL;
4386
09f77684a676 did not compile when --disable-vidix was used
pl
parents: 4380
diff changeset
54 #endif
4380
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
55 static int pre_init_err = 0xFFFFFFFEUL;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
56 /******************************
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
57 * fb.modes support *
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
58 ******************************/
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
59
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
60 typedef struct {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
61 char *name;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
62 uint32_t xres, yres, vxres, vyres, depth;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
63 uint32_t pixclock, left, right, upper, lower, hslen, vslen;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
64 uint32_t sync;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
65 uint32_t vmode;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
66 } fb_mode_t;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
67
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
68 #define PRINT_LINENUM printf(" at line %d\n", line_num)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
69
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
70 #define MAX_NR_TOKEN 16
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
71
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
72 #define MAX_LINE_LEN 1000
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
73
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
74 #define RET_EOF -1
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
75 #define RET_EOL -2
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
76
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
77 static int validate_mode(fb_mode_t *m)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
78 {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
79 if (!m->xres) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
80 printf("needs geometry ");
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
81 return 0;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
82 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
83 if (!m->pixclock) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
84 printf("needs timings ");
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
85 return 0;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
86 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
87 return 1;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
88 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
89
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
90 static FILE *fp;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
91 static int line_num = 0;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
92 static char *line;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
93 static char *token[MAX_NR_TOKEN];
4756
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
94 static uint32_t dstFourcc;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
95
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
96 static int get_token(int num)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
97 {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
98 static int read_nextline = 1;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
99 static int line_pos;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
100 int i;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
101 char c;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
102
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
103 if (num >= MAX_NR_TOKEN) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
104 printf("get_token(): max >= MAX_NR_TOKEN!");
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
105 goto out_eof;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
106 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
107
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
108 if (read_nextline) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
109 if (!fgets(line, MAX_LINE_LEN, fp))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
110 goto out_eof;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
111 line_pos = 0;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
112 ++line_num;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
113 read_nextline = 0;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
114 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
115 for (i = 0; i < num; i++) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
116 while (isspace(line[line_pos]))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
117 ++line_pos;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
118 if (line[line_pos] == '\0' || line[line_pos] == '#') {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
119 read_nextline = 1;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
120 goto out_eol;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
121 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
122 token[i] = line + line_pos;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
123 c = line[line_pos];
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
124 if (c == '"' || c == '\'') {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
125 token[i]++;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
126 while (line[++line_pos] != c && line[line_pos])
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
127 /* NOTHING */;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
128 if (!line[line_pos])
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
129 goto out_eol;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
130 line[line_pos] = ' ';
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
131 } else {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
132 for (/* NOTHING */; !isspace(line[line_pos]) &&
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
133 line[line_pos]; line_pos++)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
134 /* NOTHING */;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
135 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
136 if (!line[line_pos]) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
137 read_nextline = 1;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
138 if (i == num - 1)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
139 goto out_ok;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
140 goto out_eol;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
141 }
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
142 line[line_pos++] = '\0';
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
143 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
144 out_ok:
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
145 return i;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
146 out_eof:
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
147 return RET_EOF;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
148 out_eol:
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
149 return RET_EOL;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
150 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
151
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
152 static fb_mode_t *fb_modes = NULL;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
153 static int nr_modes = 0;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
154
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
155 static int parse_fbmode_cfg(char *cfgfile)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
156 {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
157 #define CHECK_IN_MODE_DEF\
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
158 do {\
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
159 if (!in_mode_def) {\
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
160 printf("'needs 'mode' first");\
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
161 goto err_out_print_linenum;\
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
162 }\
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
163 } while (0)
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
164
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
165 fb_mode_t *mode = NULL;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
166 char *endptr; // strtoul()...
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
167 int in_mode_def = 0;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
168 int tmp, i;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
169
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
170 if (verbose > 0)
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
171 printf("Reading %s: ", cfgfile);
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
172
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
173 if ((fp = fopen(cfgfile, "r")) == NULL) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
174 printf("can't open '%s': %s\n", cfgfile, strerror(errno));
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
175 return -1;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
176 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
177
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
178 if ((line = (char *) malloc(MAX_LINE_LEN + 1)) == NULL) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
179 printf("can't get memory for 'line': %s\n", strerror(errno));
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
180 return -2;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
181 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
182
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
183 /*
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
184 * check if the cfgfile starts with 'mode'
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
185 */
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
186 while ((tmp = get_token(1)) == RET_EOL)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
187 /* NOTHING */;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
188 if (tmp == RET_EOF)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
189 goto out;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
190 if (!strcmp(token[0], "mode"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
191 goto loop_enter;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
192 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
193
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
194 while ((tmp = get_token(1)) != RET_EOF) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
195 if (tmp == RET_EOL)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
196 continue;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
197 if (!strcmp(token[0], "mode")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
198 if (in_mode_def) {
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
199 printf("'endmode' required");
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
200 goto err_out_print_linenum;
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
201 }
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
202 if (!validate_mode(mode))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
203 goto err_out_not_valid;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
204 loop_enter:
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
205 if (!(fb_modes = (fb_mode_t *) realloc(fb_modes,
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
206 sizeof(fb_mode_t) * (nr_modes + 1)))) {
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
207 printf("can't realloc 'fb_modes' (nr_modes = %d):"
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
208 " %s\n", nr_modes, strerror(errno));
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
209 goto err_out;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
210 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
211 mode=fb_modes + nr_modes;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
212 ++nr_modes;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
213 memset(mode,0,sizeof(fb_mode_t));
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
214
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
215 if (get_token(1) < 0)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
216 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
217 for (i = 0; i < nr_modes - 1; i++) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
218 if (!strcmp(token[0], fb_modes[i].name)) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
219 printf("mode name '%s' isn't unique", token[0]);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
220 goto err_out_print_linenum;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
221 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
222 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
223 if (!(mode->name = strdup(token[0]))) {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
224 printf("can't strdup -> 'name': %s\n", strerror(errno));
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
225 goto err_out;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
226 }
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
227 in_mode_def = 1;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
228 } else if (!strcmp(token[0], "geometry")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
229 CHECK_IN_MODE_DEF;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
230 if (get_token(5) < 0)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
231 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
232 mode->xres = strtoul(token[0], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
233 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
234 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
235 mode->yres = strtoul(token[1], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
236 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
237 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
238 mode->vxres = strtoul(token[2], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
239 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
240 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
241 mode->vyres = strtoul(token[3], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
242 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
243 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
244 mode->depth = strtoul(token[4], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
245 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
246 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
247 } else if (!strcmp(token[0], "timings")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
248 CHECK_IN_MODE_DEF;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
249 if (get_token(7) < 0)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
250 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
251 mode->pixclock = strtoul(token[0], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
252 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
253 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
254 mode->left = strtoul(token[1], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
255 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
256 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
257 mode->right = strtoul(token[2], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
258 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
259 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
260 mode->upper = strtoul(token[3], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
261 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
262 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
263 mode->lower = strtoul(token[4], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
264 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
265 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
266 mode->hslen = strtoul(token[5], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
267 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
268 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
269 mode->vslen = strtoul(token[6], &endptr, 0);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
270 if (*endptr)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
271 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
272 } else if (!strcmp(token[0], "endmode")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
273 CHECK_IN_MODE_DEF;
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
274 in_mode_def = 0;
383
086c66d570d8 some fixes
szabii
parents: 380
diff changeset
275 } else if (!strcmp(token[0], "accel")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
276 CHECK_IN_MODE_DEF;
383
086c66d570d8 some fixes
szabii
parents: 380
diff changeset
277 if (get_token(1) < 0)
086c66d570d8 some fixes
szabii
parents: 380
diff changeset
278 goto err_out_parse_error;
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
279 /*
e847396dc49f some changes...
szabii
parents: 383
diff changeset
280 * it's only used for text acceleration
e847396dc49f some changes...
szabii
parents: 383
diff changeset
281 * so we just ignore it.
e847396dc49f some changes...
szabii
parents: 383
diff changeset
282 */
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
283 } else if (!strcmp(token[0], "hsync")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
284 CHECK_IN_MODE_DEF;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
285 if (get_token(1) < 0)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
286 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
287 if (!strcmp(token[0], "low"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
288 mode->sync &= ~FB_SYNC_HOR_HIGH_ACT;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
289 else if(!strcmp(token[0], "high"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
290 mode->sync |= FB_SYNC_HOR_HIGH_ACT;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
291 else
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
292 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
293 } else if (!strcmp(token[0], "vsync")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
294 CHECK_IN_MODE_DEF;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
295 if (get_token(1) < 0)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
296 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
297 if (!strcmp(token[0], "low"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
298 mode->sync &= ~FB_SYNC_VERT_HIGH_ACT;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
299 else if(!strcmp(token[0], "high"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
300 mode->sync |= FB_SYNC_VERT_HIGH_ACT;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
301 else
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
302 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
303 } else if (!strcmp(token[0], "csync")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
304 CHECK_IN_MODE_DEF;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
305 if (get_token(1) < 0)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
306 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
307 if (!strcmp(token[0], "low"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
308 mode->sync &= ~FB_SYNC_COMP_HIGH_ACT;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
309 else if(!strcmp(token[0], "high"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
310 mode->sync |= FB_SYNC_COMP_HIGH_ACT;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
311 else
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
312 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
313 } else if (!strcmp(token[0], "extsync")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
314 CHECK_IN_MODE_DEF;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
315 if (get_token(1) < 0)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
316 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
317 if (!strcmp(token[0], "false"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
318 mode->sync &= ~FB_SYNC_EXT;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
319 else if(!strcmp(token[0], "true"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
320 mode->sync |= FB_SYNC_EXT;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
321 else
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
322 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
323 } else if (!strcmp(token[0], "laced")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
324 CHECK_IN_MODE_DEF;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
325 if (get_token(1) < 0)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
326 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
327 if (!strcmp(token[0], "false"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
328 mode->vmode = FB_VMODE_NONINTERLACED;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
329 else if (!strcmp(token[0], "true"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
330 mode->vmode = FB_VMODE_INTERLACED;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
331 else
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
332 goto err_out_parse_error;
479
1302e63cee73 dumb bug
szabii
parents: 476
diff changeset
333 } else if (!strcmp(token[0], "double")) {
977
d3354ad8aa7b small fix
szabii
parents: 950
diff changeset
334 CHECK_IN_MODE_DEF;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
335 if (get_token(1) < 0)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
336 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
337 if (!strcmp(token[0], "false"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
338 ;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
339 else if (!strcmp(token[0], "true"))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
340 mode->vmode = FB_VMODE_DOUBLE;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
341 else
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
342 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
343 } else
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
344 goto err_out_parse_error;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
345 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
346 if (!validate_mode(mode))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
347 goto err_out_not_valid;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
348 out:
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
349 if (verbose > 0)
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
350 printf("%d modes\n", nr_modes);
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
351 free(line);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
352 fclose(fp);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
353 return nr_modes;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
354 err_out_parse_error:
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
355 printf("parse error");
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
356 err_out_print_linenum:
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
357 PRINT_LINENUM;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
358 err_out:
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
359 if (fb_modes) {
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
360 free(fb_modes);
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
361 fb_modes = NULL;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
362 }
e847396dc49f some changes...
szabii
parents: 383
diff changeset
363 nr_modes = 0;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
364 free(line);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
365 free(fp);
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
366 return -2;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
367 err_out_not_valid:
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
368 printf("previous mode is not correct");
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
369 goto err_out_print_linenum;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
370 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
371
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
372 static fb_mode_t *find_mode_by_name(char *name)
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
373 {
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
374 int i;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
375
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
376 for (i = 0; i < nr_modes; i++)
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
377 if (!strcmp(name, fb_modes[i].name))
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
378 return fb_modes + i;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
379 return NULL;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
380 }
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
381
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
382 static float dcf(fb_mode_t *m) //driving clock frequency
e847396dc49f some changes...
szabii
parents: 383
diff changeset
383 {
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
384 return 1e12f / m->pixclock;
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
385 }
e847396dc49f some changes...
szabii
parents: 383
diff changeset
386
e847396dc49f some changes...
szabii
parents: 383
diff changeset
387 static float hsf(fb_mode_t *m) //horizontal scan frequency
e847396dc49f some changes...
szabii
parents: 383
diff changeset
388 {
e847396dc49f some changes...
szabii
parents: 383
diff changeset
389 int htotal = m->left + m->xres + m->right + m->hslen;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
390 return dcf(m) / htotal;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
391 }
e847396dc49f some changes...
szabii
parents: 383
diff changeset
392
e847396dc49f some changes...
szabii
parents: 383
diff changeset
393 static float vsf(fb_mode_t *m) //vertical scan frequency
e847396dc49f some changes...
szabii
parents: 383
diff changeset
394 {
e847396dc49f some changes...
szabii
parents: 383
diff changeset
395 int vtotal = m->upper + m->yres + m->lower + m->vslen;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
396 return hsf(m) / vtotal;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
397 }
e847396dc49f some changes...
szabii
parents: 383
diff changeset
398
e847396dc49f some changes...
szabii
parents: 383
diff changeset
399 typedef struct {
e847396dc49f some changes...
szabii
parents: 383
diff changeset
400 float min;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
401 float max;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
402 } range_t;
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
403
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
404 static int in_range(range_t *r, float f)
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
405 {
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
406 for (/* NOTHING */; (r->min != -1 && r->max != -1); r++)
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
407 if (f >= r->min && f <= r->max)
e847396dc49f some changes...
szabii
parents: 383
diff changeset
408 return 1;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
409 return 0;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
410 }
e847396dc49f some changes...
szabii
parents: 383
diff changeset
411
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
412 static int mode_works(fb_mode_t *m, range_t *hfreq, range_t *vfreq,
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
413 range_t *dotclock)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
414 {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
415 float h = hsf(m);
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
416 float v = vsf(m);
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
417 float d = dcf(m);
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
418 int ret = 1;
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
419
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
420 if (verbose > 1)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
421 printf(FBDEV "mode %dx%d:", m->xres, m->yres);
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
422 if (!in_range(hfreq, h)) {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
423 ret = 0;
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
424 if (verbose > 1)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
425 printf(" hsync out of range.");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
426 }
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
427 if (!in_range(vfreq, v)) {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
428 ret = 0;
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
429 if (verbose > 1)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
430 printf(" vsync out of range.");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
431 }
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
432 if (!in_range(dotclock, d)) {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
433 ret = 0;
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
434 if (verbose > 1)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
435 printf(" dotclock out of range.");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
436 }
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
437 if (verbose > 1) {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
438 if (ret)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
439 printf(" hsync, vsync, dotclock ok.\n");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
440 else
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
441 printf("\n");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
442 }
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
443
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
444 return ret;
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
445 }
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
446
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
447 static fb_mode_t *find_best_mode(int xres, int yres, range_t *hfreq,
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
448 range_t *vfreq, range_t *dotclock)
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
449 {
e847396dc49f some changes...
szabii
parents: 383
diff changeset
450 int i;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
451 fb_mode_t *best = fb_modes;
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
452 fb_mode_t *curr;
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
453
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
454 if (verbose > 1)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
455 printf(FBDEV "Searching for first working mode\n");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
456
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
457 for (i = 0; i < nr_modes; i++, best++)
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
458 if (mode_works(best, hfreq, vfreq, dotclock))
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
459 break;
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
460
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
461 if (i == nr_modes)
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
462 return NULL;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
463 if (i == nr_modes - 1)
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
464 return best;
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
465
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
466 if (verbose > 1) {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
467 printf(FBDEV "First working mode: %dx%d\n", best->xres, best->yres);
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
468 printf(FBDEV "Searching for better modes\n");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
469 }
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
470
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
471 for (curr = best + 1; i < nr_modes - 1; i++, curr++) {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
472 if (!mode_works(curr, hfreq, vfreq, dotclock))
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
473 continue;
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
474
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
475 if (verbose > 1)
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
476 printf(FBDEV);
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
477
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
478 if (best->xres < xres || best->yres < yres) {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
479 if (curr->xres > best->xres || curr->yres > best->yres) {
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
480 if (verbose > 1)
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
481 printf("better than %dx%d, which is too small.\n",
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
482 best->xres, best->yres);
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
483 best = curr;
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
484 } else if (verbose > 1)
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
485 printf("too small.\n");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
486 } else if (curr->xres == best->xres && curr->yres == best->yres &&
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
487 vsf(curr) > vsf(best)) {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
488 if (verbose > 1)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
489 printf("faster screen refresh.\n");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
490 best = curr;
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
491 } else if ((curr->xres <= best->xres && curr->yres <= best->yres) &&
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
492 (curr->xres >= xres && curr->yres >= yres)) {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
493 if (verbose > 1)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
494 printf("better than %dx%d, which is too large.\n",
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
495 best->xres, best->yres);
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
496 best = curr;
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
497 } else if (verbose > 1) {
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
498 if (curr->xres < xres || curr->yres < yres)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
499 printf("too small.\n");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
500 else if (curr->xres > best->xres || curr->yres > best->yres)
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
501 printf("too large.\n");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
502 else printf("it's worse, don't know why.\n");
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
503 }
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
504 }
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
505
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
506 return best;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
507 }
e847396dc49f some changes...
szabii
parents: 383
diff changeset
508
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
509 static void set_bpp(struct fb_var_screeninfo *p, int bpp)
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
510 {
476
1897ed6661bf small change
szabii
parents: 423
diff changeset
511 p->bits_per_pixel = (bpp + 1) & ~1;
1087
e2e9a82f9134 nothing important
szabii
parents: 1076
diff changeset
512 p->red.msb_right = p->green.msb_right = p->blue.msb_right = p->transp.msb_right = 0;
563
5eb28ba8a96a nothing important
szabii
parents: 550
diff changeset
513 p->transp.offset = p->transp.length = 0;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
514 p->blue.offset = 0;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
515 switch (bpp) {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
516 case 32:
563
5eb28ba8a96a nothing important
szabii
parents: 550
diff changeset
517 p->transp.offset = 24;
5eb28ba8a96a nothing important
szabii
parents: 550
diff changeset
518 p->transp.length = 8;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
519 case 24:
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
520 p->red.offset = 16;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
521 p->red.length = 8;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
522 p->green.offset = 8;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
523 p->green.length = 8;
550
58b24a998cb5 nothing important?
szabii
parents: 538
diff changeset
524 p->blue.length = 8;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
525 break;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
526 case 16:
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
527 p->red.offset = 11;
550
58b24a998cb5 nothing important?
szabii
parents: 538
diff changeset
528 p->green.length = 6;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
529 p->red.length = 5;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
530 p->green.offset = 5;
550
58b24a998cb5 nothing important?
szabii
parents: 538
diff changeset
531 p->blue.length = 5;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
532 break;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
533 case 15:
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
534 p->red.offset = 10;
550
58b24a998cb5 nothing important?
szabii
parents: 538
diff changeset
535 p->green.length = 5;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
536 p->red.length = 5;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
537 p->green.offset = 5;
550
58b24a998cb5 nothing important?
szabii
parents: 538
diff changeset
538 p->blue.length = 5;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
539 break;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
540 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
541 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
542
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
543 static void fb_mode2fb_vinfo(fb_mode_t *m, struct fb_var_screeninfo *v)
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
544 {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
545 v->xres = m->xres;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
546 v->yres = m->yres;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
547 v->xres_virtual = m->vxres;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
548 v->yres_virtual = m->vyres;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
549 set_bpp(v, m->depth);
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
550 v->pixclock = m->pixclock;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
551 v->left_margin = m->left;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
552 v->right_margin = m->right;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
553 v->upper_margin = m->upper;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
554 v->lower_margin = m->lower;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
555 v->hsync_len = m->hslen;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
556 v->vsync_len = m->vslen;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
557 v->sync = m->sync;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
558 v->vmode = m->vmode;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
559 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
560
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
561 static range_t *str2range(char *s)
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
562 {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
563 float tmp_min, tmp_max;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
564 char *endptr = s; // to start the loop
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
565 range_t *r = NULL;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
566 int i;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
567
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
568 if (!s)
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
569 return NULL;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
570 for (i = 0; *endptr; i++) {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
571 if (*s == ',')
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
572 goto out_err;
538
eea574dff0fd dumb bug fixed
szabii
parents: 520
diff changeset
573 if (!(r = (range_t *) realloc(r, sizeof(*r) * (i + 2)))) {
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
574 printf("can't realloc 'r'\n");
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
575 return NULL;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
576 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
577 tmp_min = strtod(s, &endptr);
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
578 if (*endptr == 'k' || *endptr == 'K') {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
579 tmp_min *= 1000.0;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
580 endptr++;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
581 } else if (*endptr == 'm' || *endptr == 'M') {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
582 tmp_min *= 1000000.0;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
583 endptr++;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
584 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
585 if (*endptr == '-') {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
586 tmp_max = strtod(endptr + 1, &endptr);
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
587 if (*endptr == 'k' || *endptr == 'K') {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
588 tmp_max *= 1000.0;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
589 endptr++;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
590 } else if (*endptr == 'm' || *endptr == 'M') {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
591 tmp_max *= 1000000.0;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
592 endptr++;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
593 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
594 if (*endptr != ',' && *endptr)
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
595 goto out_err;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
596 } else if (*endptr == ',' || !*endptr) {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
597 tmp_max = tmp_min;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
598 } else
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
599 goto out_err;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
600 r[i].min = tmp_min;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
601 r[i].max = tmp_max;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
602 if (r[i].min < 0 || r[i].max < 0)
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
603 goto out_err;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
604 s = endptr + 1;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
605 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
606 r[i].min = r[i].max = -1;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
607 return r;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
608 out_err:
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
609 if (r)
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
610 free(r);
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
611 return NULL;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
612 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
613
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
614 /******************************
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
615 * vo_fbdev *
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
616 ******************************/
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
617
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
618 /* command line/config file options */
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
619 char *fb_dev_name = NULL;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
620 char *fb_mode_cfgfile = "/etc/fb.modes";
e847396dc49f some changes...
szabii
parents: 383
diff changeset
621 char *fb_mode_name = NULL;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
622 char *monitor_hfreq_str = NULL;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
623 char *monitor_vfreq_str = NULL;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
624 char *monitor_dotclock_str = NULL;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
625
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
626 /* fb.modes related variables */
1087
e2e9a82f9134 nothing important
szabii
parents: 1076
diff changeset
627 static range_t *monitor_hfreq = NULL;
e2e9a82f9134 nothing important
szabii
parents: 1076
diff changeset
628 static range_t *monitor_vfreq = NULL;
e2e9a82f9134 nothing important
szabii
parents: 1076
diff changeset
629 static range_t *monitor_dotclock = NULL;
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
630 static fb_mode_t *fb_mode = NULL;
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
631
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
632 /* vt related variables */
1087
e2e9a82f9134 nothing important
szabii
parents: 1076
diff changeset
633 static int vt_fd;
e2e9a82f9134 nothing important
szabii
parents: 1076
diff changeset
634 static FILE *vt_fp;
e2e9a82f9134 nothing important
szabii
parents: 1076
diff changeset
635 static int vt_doit = 1;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
636
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
637 /* vo_fbdev related variables */
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
638 static int fb_dev_fd;
2354
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
639 static int fb_tty_fd;
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
640 static size_t fb_size;
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
641 static uint8_t *frame_buffer;
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
642 static uint8_t *L123123875; /* thx .so :) */
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
643 static struct fb_fix_screeninfo fb_finfo;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
644 static struct fb_var_screeninfo fb_orig_vinfo;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
645 static struct fb_var_screeninfo fb_vinfo;
481
6e8a887c99cd cmap bug fixed (I think)
szabii
parents: 479
diff changeset
646 static struct fb_cmap fb_oldcmap;
6e8a887c99cd cmap bug fixed (I think)
szabii
parents: 479
diff changeset
647 static int fb_cmap_changed = 0;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
648 static int fb_pixel_size; // 32: 4 24: 3 16: 2 15: 2
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
649 static int fb_real_bpp; // 32: 24 24: 24 16: 16 15: 15
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
650 static int fb_bpp; // 32: 32 24: 24 16: 16 15: 15
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
651 static int fb_bpp_we_want; // 32: 32 24: 24 16: 16 15: 15
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
652 static int fb_line_len;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
653 static int fb_xres;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
654 static int fb_yres;
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
655 static void (*draw_alpha_p)(int w, int h, unsigned char *src,
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
656 unsigned char *srca, int stride, unsigned char *dst,
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
657 int dstride);
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
658
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
659 static uint8_t *next_frame;
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
660 static int in_width;
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
661 static int in_height;
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
662 static int out_width;
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
663 static int out_height;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
664 static int first_row;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
665 static int last_row;
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
666 static uint32_t pixel_format;
804
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
667 static int fs;
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
668 static int flip;
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
669
305
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
670 /*
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
671 * Note: this function is completely cut'n'pasted from
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
672 * Chris Lawrence's code.
311
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
673 * (modified a bit to fit in my code...)
305
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
674 */
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
675 struct fb_cmap *make_directcolor_cmap(struct fb_var_screeninfo *var)
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
676 {
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
677 /* Hopefully any DIRECTCOLOR device will have a big enough palette
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
678 * to handle mapping the full color depth.
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
679 * e.g. 8 bpp -> 256 entry palette
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
680 *
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
681 * We could handle some sort of gamma here
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
682 */
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
683 int i, cols, rcols, gcols, bcols;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
684 uint16_t *red, *green, *blue;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
685 struct fb_cmap *cmap;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
686
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
687 rcols = 1 << var->red.length;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
688 gcols = 1 << var->green.length;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
689 bcols = 1 << var->blue.length;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
690
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
691 /* Make our palette the length of the deepest color */
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
692 cols = (rcols > gcols ? rcols : gcols);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
693 cols = (cols > bcols ? cols : bcols);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
694
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
695 red = malloc(cols * sizeof(red[0]));
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
696 if(!red) {
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
697 printf("Can't allocate red palette with %d entries.\n", cols);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
698 return NULL;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
699 }
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
700 for(i=0; i< rcols; i++)
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
701 red[i] = (65535/(rcols-1)) * i;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
702
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
703 green = malloc(cols * sizeof(green[0]));
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
704 if(!green) {
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
705 printf("Can't allocate green palette with %d entries.\n", cols);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
706 free(red);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
707 return NULL;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
708 }
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
709 for(i=0; i< gcols; i++)
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
710 green[i] = (65535/(gcols-1)) * i;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
711
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
712 blue = malloc(cols * sizeof(blue[0]));
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
713 if(!blue) {
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
714 printf("Can't allocate blue palette with %d entries.\n", cols);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
715 free(red);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
716 free(green);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
717 return NULL;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
718 }
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
719 for(i=0; i< bcols; i++)
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
720 blue[i] = (65535/(bcols-1)) * i;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
721
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
722 cmap = malloc(sizeof(struct fb_cmap));
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
723 if(!cmap) {
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
724 printf("Can't allocate color map\n");
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
725 free(red);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
726 free(green);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
727 free(blue);
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
728 return NULL;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
729 }
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
730 cmap->start = 0;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
731 cmap->transp = 0;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
732 cmap->len = cols;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
733 cmap->red = red;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
734 cmap->blue = blue;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
735 cmap->green = green;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
736 cmap->transp = NULL;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
737
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
738 return cmap;
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
739 }
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
740
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
741 #ifdef CONFIG_VIDIX
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
742 static uint32_t parseSubDevice(const char *sd)
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
743 {
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
744 if(memcmp(sd,"vidix",5) == 0) vidix_name = &sd[5]; /* vidix_name will be valid within init() */
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
745 else { printf(FBDEV "Unknown subdevice: '%s'\n", sd); return -1; }
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
746 return 0;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
747 }
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
748 #endif
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
749
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
750 static int fb_preinit(void)
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
751 {
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
752 static int fb_preinit_done = 0;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
753 static int fb_works = 0;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
754
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
755 if (fb_preinit_done)
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
756 return fb_works;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
757
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
758 if (!fb_dev_name && !(fb_dev_name = getenv("FRAMEBUFFER")))
e847396dc49f some changes...
szabii
parents: 383
diff changeset
759 fb_dev_name = "/dev/fb0";
e847396dc49f some changes...
szabii
parents: 383
diff changeset
760 if (verbose > 0)
e847396dc49f some changes...
szabii
parents: 383
diff changeset
761 printf(FBDEV "using %s\n", fb_dev_name);
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
762
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
763 if ((fb_dev_fd = open(fb_dev_name, O_RDWR)) == -1) {
e847396dc49f some changes...
szabii
parents: 383
diff changeset
764 printf(FBDEV "Can't open %s: %s\n", fb_dev_name, strerror(errno));
e847396dc49f some changes...
szabii
parents: 383
diff changeset
765 goto err_out;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
766 }
e847396dc49f some changes...
szabii
parents: 383
diff changeset
767 if (ioctl(fb_dev_fd, FBIOGET_VSCREENINFO, &fb_vinfo)) {
e847396dc49f some changes...
szabii
parents: 383
diff changeset
768 printf(FBDEV "Can't get VSCREENINFO: %s\n", strerror(errno));
e847396dc49f some changes...
szabii
parents: 383
diff changeset
769 goto err_out_fd;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
770 }
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
771 fb_orig_vinfo = fb_vinfo;
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
772
2354
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
773 if ((fb_tty_fd = open("/dev/tty", O_RDWR)) < 0) {
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
774 if (verbose > 0)
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
775 printf(FBDEV "notice: Can't open /dev/tty: %s\n", strerror(errno));
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
776 }
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
777
663
121cb2047c08 nothing important
szabii
parents: 659
diff changeset
778 fb_bpp = fb_vinfo.bits_per_pixel;
121cb2047c08 nothing important
szabii
parents: 659
diff changeset
779
1076
52bbb0e913d8 8bpp fix
szabii
parents: 977
diff changeset
780 if (fb_bpp == 8 && !vo_dbpp) {
52bbb0e913d8 8bpp fix
szabii
parents: 977
diff changeset
781 printf(FBDEV "8 bpp output is not supported.\n");
2354
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
782 goto err_out_tty_fd;
1076
52bbb0e913d8 8bpp fix
szabii
parents: 977
diff changeset
783 }
52bbb0e913d8 8bpp fix
szabii
parents: 977
diff changeset
784
1561
e71337d1e58b more verbose videomode selection
szabi
parents: 1501
diff changeset
785 /* 16 and 15 bpp is reported as 16 bpp */
663
121cb2047c08 nothing important
szabii
parents: 659
diff changeset
786 if (fb_bpp == 16)
121cb2047c08 nothing important
szabii
parents: 659
diff changeset
787 fb_bpp = fb_vinfo.red.length + fb_vinfo.green.length +
121cb2047c08 nothing important
szabii
parents: 659
diff changeset
788 fb_vinfo.blue.length;
121cb2047c08 nothing important
szabii
parents: 659
diff changeset
789
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
790 if (vo_dbpp) {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
791 if (vo_dbpp != 15 && vo_dbpp != 16 && vo_dbpp != 24 &&
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
792 vo_dbpp != 32) {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
793 printf(FBDEV "can't switch to %d bpp\n", vo_dbpp);
1076
52bbb0e913d8 8bpp fix
szabii
parents: 977
diff changeset
794 goto err_out_fd;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
795 }
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
796 fb_bpp = vo_dbpp;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
797 }
245
cb4c682746c0 disabled scrollback buffer (virtual fb size set to real screen size)
szabii
parents: 231
diff changeset
798
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
799 fb_preinit_done = 1;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
800 fb_works = 1;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
801 return 1;
2354
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
802 err_out_tty_fd:
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
803 close(fb_tty_fd);
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
804 fb_tty_fd = -1;
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
805 err_out_fd:
e847396dc49f some changes...
szabii
parents: 383
diff changeset
806 close(fb_dev_fd);
e847396dc49f some changes...
szabii
parents: 383
diff changeset
807 fb_dev_fd = -1;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
808 err_out:
e847396dc49f some changes...
szabii
parents: 383
diff changeset
809 fb_preinit_done = 1;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
810 fb_works = 0;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
811 return 0;
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
812 }
245
cb4c682746c0 disabled scrollback buffer (virtual fb size set to real screen size)
szabii
parents: 231
diff changeset
813
633
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
814 static void lots_of_printf(void)
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
815 {
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
816 if (verbose > 0) {
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
817 printf(FBDEV "var info:\n");
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
818 printf(FBDEV "xres: %u\n", fb_vinfo.xres);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
819 printf(FBDEV "yres: %u\n", fb_vinfo.yres);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
820 printf(FBDEV "xres_virtual: %u\n", fb_vinfo.xres_virtual);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
821 printf(FBDEV "yres_virtual: %u\n", fb_vinfo.yres_virtual);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
822 printf(FBDEV "xoffset: %u\n", fb_vinfo.xoffset);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
823 printf(FBDEV "yoffset: %u\n", fb_vinfo.yoffset);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
824 printf(FBDEV "bits_per_pixel: %u\n", fb_vinfo.bits_per_pixel);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
825 printf(FBDEV "grayscale: %u\n", fb_vinfo.grayscale);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
826 printf(FBDEV "red: %lu %lu %lu\n",
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
827 (unsigned long) fb_vinfo.red.offset,
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
828 (unsigned long) fb_vinfo.red.length,
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
829 (unsigned long) fb_vinfo.red.msb_right);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
830 printf(FBDEV "green: %lu %lu %lu\n",
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
831 (unsigned long) fb_vinfo.green.offset,
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
832 (unsigned long) fb_vinfo.green.length,
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
833 (unsigned long) fb_vinfo.green.msb_right);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
834 printf(FBDEV "blue: %lu %lu %lu\n",
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
835 (unsigned long) fb_vinfo.blue.offset,
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
836 (unsigned long) fb_vinfo.blue.length,
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
837 (unsigned long) fb_vinfo.blue.msb_right);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
838 printf(FBDEV "transp: %lu %lu %lu\n",
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
839 (unsigned long) fb_vinfo.transp.offset,
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
840 (unsigned long) fb_vinfo.transp.length,
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
841 (unsigned long) fb_vinfo.transp.msb_right);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
842 printf(FBDEV "nonstd: %u\n", fb_vinfo.nonstd);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
843 if (verbose > 1) {
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
844 printf(FBDEV "activate: %u\n", fb_vinfo.activate);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
845 printf(FBDEV "height: %u\n", fb_vinfo.height);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
846 printf(FBDEV "width: %u\n", fb_vinfo.width);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
847 printf(FBDEV "accel_flags: %u\n", fb_vinfo.accel_flags);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
848 printf(FBDEV "timing:\n");
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
849 printf(FBDEV "pixclock: %u\n", fb_vinfo.pixclock);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
850 printf(FBDEV "left_margin: %u\n", fb_vinfo.left_margin);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
851 printf(FBDEV "right_margin: %u\n", fb_vinfo.right_margin);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
852 printf(FBDEV "upper_margin: %u\n", fb_vinfo.upper_margin);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
853 printf(FBDEV "lower_margin: %u\n", fb_vinfo.lower_margin);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
854 printf(FBDEV "hsync_len: %u\n", fb_vinfo.hsync_len);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
855 printf(FBDEV "vsync_len: %u\n", fb_vinfo.vsync_len);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
856 printf(FBDEV "sync: %u\n", fb_vinfo.sync);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
857 printf(FBDEV "vmode: %u\n", fb_vinfo.vmode);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
858 }
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
859 printf(FBDEV "fix info:\n");
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
860 printf(FBDEV "framebuffer size: %d bytes\n", fb_finfo.smem_len);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
861 printf(FBDEV "type: %lu\n", (unsigned long) fb_finfo.type);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
862 printf(FBDEV "type_aux: %lu\n", (unsigned long) fb_finfo.type_aux);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
863 printf(FBDEV "visual: %lu\n", (unsigned long) fb_finfo.visual);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
864 printf(FBDEV "line_length: %lu bytes\n", (unsigned long) fb_finfo.line_length);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
865 if (verbose > 1) {
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
866 printf(FBDEV "id: %.16s\n", fb_finfo.id);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
867 printf(FBDEV "smem_start: %p\n", (void *) fb_finfo.smem_start);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
868 printf(FBDEV "xpanstep: %u\n", fb_finfo.xpanstep);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
869 printf(FBDEV "ypanstep: %u\n", fb_finfo.ypanstep);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
870 printf(FBDEV "ywrapstep: %u\n", fb_finfo.ywrapstep);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
871 printf(FBDEV "mmio_start: %p\n", (void *) fb_finfo.mmio_start);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
872 printf(FBDEV "mmio_len: %u bytes\n", fb_finfo.mmio_len);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
873 printf(FBDEV "accel: %u\n", fb_finfo.accel);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
874 }
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
875 printf(FBDEV "fb_bpp: %d\n", fb_bpp);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
876 printf(FBDEV "fb_real_bpp: %d\n", fb_real_bpp);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
877 printf(FBDEV "fb_pixel_size: %d bytes\n", fb_pixel_size);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
878 printf(FBDEV "other:\n");
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
879 printf(FBDEV "in_width: %d\n", in_width);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
880 printf(FBDEV "in_height: %d\n", in_height);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
881 printf(FBDEV "out_width: %d\n", out_width);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
882 printf(FBDEV "out_height: %d\n", out_height);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
883 printf(FBDEV "first_row: %d\n", first_row);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
884 printf(FBDEV "last_row: %d\n", last_row);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
885 if (verbose > 1)
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
886 printf(FBDEV "draw_alpha_p:%dbpp = %p\n", fb_bpp, draw_alpha_p);
633
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
887 }
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
888 }
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
889
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
890 static void vt_set_textarea(int u, int l)
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
891 {
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
892 /* how can I determine the font height?
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
893 * just use 16 for now
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
894 */
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
895 int urow = ((u + 15) / 16) + 1;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
896 int lrow = l / 16;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
897
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
898 if (verbose > 1)
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
899 printf(FBDEV "vt_set_textarea(%d,%d): %d,%d\n", u, l, urow, lrow);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
900 fprintf(vt_fp, "\33[%d;%dr\33[%d;%dH", urow, lrow, lrow, 0);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
901 fflush(vt_fp);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
902 }
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
903
4433
df8e0f71cc3c new info for tuning
nick
parents: 4386
diff changeset
904 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
905 uint32_t d_height, uint32_t fullscreen, char *title,
4433
df8e0f71cc3c new info for tuning
nick
parents: 4386
diff changeset
906 uint32_t format,const vo_tune_info_t *info)
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
907 {
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
908 struct fb_cmap *cmap;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
909 int vm = fullscreen & 0x02;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
910 int zoom = fullscreen & 0x04;
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
911
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
912 fs = fullscreen & 0x01;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
913 flip = fullscreen & 0x08;
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
914
4380
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
915 if(pre_init_err == 0xFFFFFFFEUL)
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
916 {
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
917 printf(FBDEV "Internal fatal error: init() was called before preinit()\n");
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
918 return -1;
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
919 }
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
920
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
921 if (pre_init_err) return 1;
245
cb4c682746c0 disabled scrollback buffer (virtual fb size set to real screen size)
szabii
parents: 231
diff changeset
922
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
923 if (zoom
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
924 #ifdef CONFIG_VIDIX
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
925 && !vidix_name
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
926 #endif
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
927 ) {
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
928 printf(FBDEV "-zoom is not supported\n");
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
929 return 1;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
930 }
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
931 if (fb_mode_name && !vm) {
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
932 printf(FBDEV "-fbmode can only be used with -vm\n");
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
933 return 1;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
934 }
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
935 if (vm && (parse_fbmode_cfg(fb_mode_cfgfile) < 0))
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
936 return 1;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
937 if (d_width && (fs || vm)) {
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
938 out_width = d_width;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
939 out_height = d_height;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
940 } else {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
941 out_width = width;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
942 out_height = height;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
943 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
944 in_width = width;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
945 in_height = height;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
946 pixel_format = format;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
947
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
948 if (fb_mode_name) {
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
949 if (!(fb_mode = find_mode_by_name(fb_mode_name))) {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
950 printf(FBDEV "can't find requested video mode\n");
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
951 return 1;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
952 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
953 fb_mode2fb_vinfo(fb_mode, &fb_vinfo);
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
954 } else if (vm) {
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
955 monitor_hfreq = str2range(monitor_hfreq_str);
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
956 monitor_vfreq = str2range(monitor_vfreq_str);
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
957 monitor_dotclock = str2range(monitor_dotclock_str);
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
958 if (!monitor_hfreq || !monitor_vfreq || !monitor_dotclock) {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
959 printf(FBDEV "you have to specify the capabilities of"
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
960 " the monitor.\n");
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
961 return 1;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
962 }
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
963 if (!(fb_mode = find_best_mode(out_width, out_height,
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
964 monitor_hfreq, monitor_vfreq,
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
965 monitor_dotclock))) {
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
966 printf(FBDEV "can't find best video mode\n");
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
967 return 1;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
968 }
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
969 printf(FBDEV "using mode %dx%d @ %.1fHz\n", fb_mode->xres,
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
970 fb_mode->yres, vsf(fb_mode));
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
971 fb_mode2fb_vinfo(fb_mode, &fb_vinfo);
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
972 }
418
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
973 fb_bpp_we_want = fb_bpp;
d75c826a8ab9 lots of changes
szabii
parents: 393
diff changeset
974 set_bpp(&fb_vinfo, fb_bpp);
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
975 fb_vinfo.xres_virtual = fb_vinfo.xres;
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
976 fb_vinfo.yres_virtual = fb_vinfo.yres;
245
cb4c682746c0 disabled scrollback buffer (virtual fb size set to real screen size)
szabii
parents: 231
diff changeset
977
2354
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
978 if (fb_tty_fd >= 0 && ioctl(fb_tty_fd, KDSETMODE, KD_GRAPHICS) < 0) {
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
979 if (verbose > 0)
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
980 printf(FBDEV "Can't set graphics mode: %s\n", strerror(errno));
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
981 close(fb_tty_fd);
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
982 fb_tty_fd = -1;
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
983 }
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
984
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
985 if (ioctl(fb_dev_fd, FBIOPUT_VSCREENINFO, &fb_vinfo)) {
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
986 printf(FBDEV "Can't put VSCREENINFO: %s\n", strerror(errno));
2354
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
987 if (fb_tty_fd >= 0 && ioctl(fb_tty_fd, KDSETMODE, KD_TEXT) < 0) {
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
988 printf(FBDEV "Can't restore text mode: %s\n", strerror(errno));
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
989 }
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
990 return 1;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
991 }
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
992
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
993 fb_pixel_size = fb_vinfo.bits_per_pixel / 8;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
994 fb_real_bpp = fb_vinfo.red.length + fb_vinfo.green.length +
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
995 fb_vinfo.blue.length;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
996 fb_bpp = (fb_pixel_size == 4) ? 32 : fb_real_bpp;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
997 if (fb_bpp_we_want != fb_bpp)
1076
52bbb0e913d8 8bpp fix
szabii
parents: 977
diff changeset
998 printf(FBDEV "requested %d bpp, got %d bpp!!!\n",
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
999 fb_bpp_we_want, fb_bpp);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1000
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1001 switch (fb_bpp) {
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1002 case 32:
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1003 draw_alpha_p = vo_draw_alpha_rgb32;
4756
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1004 dstFourcc = IMGFMT_BGR32;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1005 break;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1006 case 24:
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1007 draw_alpha_p = vo_draw_alpha_rgb24;
4756
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1008 dstFourcc = IMGFMT_BGR24;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1009 break;
4756
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1010 default:
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1011 case 16:
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1012 draw_alpha_p = vo_draw_alpha_rgb16;
4756
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1013 dstFourcc = IMGFMT_BGR16;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1014 break;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1015 case 15:
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1016 draw_alpha_p = vo_draw_alpha_rgb15;
4756
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1017 dstFourcc = IMGFMT_BGR15;
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1018 break;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1019 }
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1020
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1021 if (flip & ((((pixel_format & 0xff) + 7) / 8) != fb_pixel_size)) {
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1022 printf(FBDEV "Flipped output with depth conversion is not "
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1023 "supported\n");
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1024 return 1;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1025 }
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1026
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1027 fb_xres = fb_vinfo.xres;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1028 fb_yres = fb_vinfo.yres;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1029
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1030 if (vm || fs) {
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1031 out_width = fb_xres;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1032 out_height = fb_yres;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1033 }
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1034 if (out_width < in_width || out_height < in_height) {
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1035 printf(FBDEV "screensize is smaller than video size\n");
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1036 return 1;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1037 }
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1038
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1039 first_row = (out_height - in_height) / 2;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1040 last_row = (out_height + in_height) / 2;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1041
618
b105a9f2bbe7 some cleanup
szabii
parents: 616
diff changeset
1042 if (ioctl(fb_dev_fd, FBIOGET_FSCREENINFO, &fb_finfo)) {
b105a9f2bbe7 some cleanup
szabii
parents: 616
diff changeset
1043 printf(FBDEV "Can't get FSCREENINFO: %s\n", strerror(errno));
b105a9f2bbe7 some cleanup
szabii
parents: 616
diff changeset
1044 return 1;
b105a9f2bbe7 some cleanup
szabii
parents: 616
diff changeset
1045 }
633
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
1046
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
1047 lots_of_printf();
245
cb4c682746c0 disabled scrollback buffer (virtual fb size set to real screen size)
szabii
parents: 231
diff changeset
1048
633
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
1049 if (fb_finfo.type != FB_TYPE_PACKED_PIXELS) {
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
1050 printf(FBDEV "type %d not supported\n", fb_finfo.type);
bdaa6d334d01 some cleanup
szabii
parents: 618
diff changeset
1051 return 1;
305
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
1052 }
618
b105a9f2bbe7 some cleanup
szabii
parents: 616
diff changeset
1053
379
368f16e72583 cleanup
szabii
parents: 365
diff changeset
1054 switch (fb_finfo.visual) {
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1055 case FB_VISUAL_TRUECOLOR:
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1056 break;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1057 case FB_VISUAL_DIRECTCOLOR:
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1058 if (verbose > 0)
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1059 printf(FBDEV "creating cmap for directcolor\n");
481
6e8a887c99cd cmap bug fixed (I think)
szabii
parents: 479
diff changeset
1060 if (ioctl(fb_dev_fd, FBIOGETCMAP, &fb_oldcmap)) {
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1061 printf(FBDEV "can't get cmap: %s\n",
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1062 strerror(errno));
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1063 return 1;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1064 }
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1065 if (!(cmap = make_directcolor_cmap(&fb_vinfo)))
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1066 return 1;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1067 if (ioctl(fb_dev_fd, FBIOPUTCMAP, cmap)) {
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1068 printf(FBDEV "can't put cmap: %s\n",
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1069 strerror(errno));
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1070 return 1;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1071 }
481
6e8a887c99cd cmap bug fixed (I think)
szabii
parents: 479
diff changeset
1072 fb_cmap_changed = 1;
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1073 free(cmap->red);
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1074 free(cmap->green);
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1075 free(cmap->blue);
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1076 free(cmap);
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1077 break;
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1078 default:
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1079 printf(FBDEV "visual: %d not yet supported\n",
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1080 fb_finfo.visual);
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1081 return 1;
245
cb4c682746c0 disabled scrollback buffer (virtual fb size set to real screen size)
szabii
parents: 231
diff changeset
1082 }
618
b105a9f2bbe7 some cleanup
szabii
parents: 616
diff changeset
1083
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1084 fb_line_len = fb_finfo.line_length;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
1085 fb_size = fb_finfo.smem_len;
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1086 frame_buffer = NULL;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1087 next_frame = NULL;
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
1088 #ifdef CONFIG_VIDIX
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1089 if(vidix_name)
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1090 {
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1091 unsigned image_width,image_height,x_offset,y_offset;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1092 image_width=width;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1093 image_height=height;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1094 if(zoom > 1)
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1095 {
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1096 aspect_save_orig(width,height);
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1097 aspect_save_prescale(d_width,d_height);
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1098 aspect_save_screenres(fb_xres,fb_yres);
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1099 aspect(&image_width,&image_height,A_ZOOM);
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1100 }
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1101 else
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1102 if(fs)
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1103 {
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1104 image_width = fb_xres;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1105 image_height = fb_yres;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1106 }
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1107 if(fb_xres > image_width)
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1108 x_offset = (fb_xres - image_width) / 2;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1109 else x_offset = 0;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1110 if(fb_yres > image_height)
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1111 y_offset = (fb_yres - image_height) / 2;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1112 else y_offset = 0;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1113 if(vidix_init(width,height,x_offset,y_offset,image_width,
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1114 image_height,format,fb_bpp,
4434
e956fa7f79c7 Use new tune info
nick
parents: 4433
diff changeset
1115 fb_xres,fb_yres,info) != 0)
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1116 {
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1117 printf(FBDEV "Can't initialize VIDIX driver\n");
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1118 vidix_name = NULL;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1119 vidix_term();
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1120 return -1;
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1121 }
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1122 else printf(FBDEV "Using VIDIX\n");
4198
7e2bf04c9a7c added vidix_start() and vidix_stop() for better runtime-resize support ;)
alex
parents: 4089
diff changeset
1123 vidix_start();
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1124 }
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1125 else
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
1126 #endif
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1127 {
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1128 if ((frame_buffer = (uint8_t *) mmap(0, fb_size, PROT_READ | PROT_WRITE,
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1129 MAP_SHARED, fb_dev_fd, 0)) == (uint8_t *) -1) {
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1130 printf(FBDEV "Can't mmap %s: %s\n", fb_dev_name, strerror(errno));
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1131 return 1;
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1132 }
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1133 L123123875 = frame_buffer + (out_width - in_width) * fb_pixel_size /
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1134 2 + (out_height - in_height) * fb_line_len / 2;
229
a8170ba5496f maybe it can play avi :)
szabii
parents: 225
diff changeset
1135
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1136 if (verbose > 0) {
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1137 if (verbose > 1) {
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1138 printf(FBDEV "frame_buffer @ %p\n", frame_buffer);
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1139 printf(FBDEV "L123123875 @ %p\n", L123123875);
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1140 }
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1141 printf(FBDEV "pixel per line: %d\n", fb_line_len / fb_pixel_size);
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1142 }
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1143
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1144 if (!(next_frame = (uint8_t *) malloc(in_width * in_height * fb_pixel_size))) {
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1145 printf(FBDEV "Can't malloc next_frame: %s\n", strerror(errno));
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1146 return 1;
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1147 }
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1148 if (fs || vm)
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1149 memset(frame_buffer, '\0', fb_line_len * fb_yres);
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1150
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1151 if (format == IMGFMT_YV12)
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1152 yuv2rgb_init(fb_bpp, MODE_RGB);
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1153 }
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1154 if (vt_doit && (vt_fd = open("/dev/tty", O_WRONLY)) == -1) {
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1155 printf(FBDEV "can't open /dev/tty: %s\n", strerror(errno));
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1156 vt_doit = 0;
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1157 }
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1158 if (vt_doit && !(vt_fp = fdopen(vt_fd, "w"))) {
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1159 printf(FBDEV "can't fdopen /dev/tty: %s\n", strerror(errno));
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1160 vt_doit = 0;
804
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1161 }
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1162
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1163 if (vt_doit)
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1164 vt_set_textarea(last_row, fb_yres);
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1165
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1166 return 0;
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1167 }
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1168
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1169 static uint32_t query_format(uint32_t format)
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1170 {
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
1171 int ret = 0x4; /* osd/sub is supported on every bpp */
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1172
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1173 if (!fb_preinit())
305
6c3a6322f81c directcolor support?
szabii
parents: 278
diff changeset
1174 return 0;
311
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1175 if ((format & IMGFMT_BGR_MASK) == IMGFMT_BGR) {
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1176 int bpp = format & 0xff;
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1177
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
1178 if (bpp == fb_bpp)
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1179 return ret|0x2;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
1180 else if (bpp == 15 && fb_bpp == 16)
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1181 return ret|0x1;
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
1182 else if (bpp == 24 && fb_bpp == 32)
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1183 return ret|0x1;
311
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1184 }
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1185 if (format == IMGFMT_YV12)
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
1186 return ret|0x1;
311
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1187 return 0;
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1188 }
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1189
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1190 static const vo_info_t *get_info(void)
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1191 {
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1192 return &vo_info;
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1193 }
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1194
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1195 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src,
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1196 unsigned char *srca, int stride)
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1197 {
4210
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1198 unsigned char *dst;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1199 int dstride;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1200
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1201 #ifdef USE_CONVERT2FB
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1202 if (pixel_format == IMGFMT_YV12) {
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1203 dst = L123123875 + (fb_xres * y0 + x0) * fb_pixel_size;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1204 dstride = fb_xres * fb_pixel_size;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1205 }
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1206 else
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1207 #endif
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1208 {
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1209 dst = next_frame + (in_width * y0 + x0) * fb_pixel_size;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1210 dstride = in_width * fb_pixel_size;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1211 }
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
1212
658
ae02d4734ad6 some cleanups
szabii
parents: 633
diff changeset
1213 (*draw_alpha_p)(w, h, src, srca, stride, dst, dstride);
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1214 }
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1215
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1216 static uint32_t draw_frame(uint8_t *src[])
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1217 {
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1218 if (pixel_format == IMGFMT_YV12) {
4210
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1219 #ifdef USE_CONVERT2FB
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1220 yuv2rgb(L123123875, src[0], src[1], src[2], fb_xres,
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1221 fb_yres, fb_xres * fb_pixel_size,
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1222 in_width, in_width / 2);
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1223 #else
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1224 yuv2rgb(next_frame, src[0], src[1], src[2], in_width,
278
604b37178b3d now it works in 15bpp mode
szabii
parents: 277
diff changeset
1225 in_height, in_width * fb_pixel_size,
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1226 in_width, in_width / 2);
4210
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1227 #endif
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1228
804
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1229 } else if (flip) {
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1230 int h = in_height;
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1231 int len = in_width * fb_pixel_size;
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1232 char *d = next_frame + (in_height - 1) * len;
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1233 char *s = src[0];
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1234 while (h--) {
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1235 memcpy(d, s, len);
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1236 s += len;
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1237 d -= len;
c3fad5e1698e flip support if (screen depth == frame depth)
szabii
parents: 663
diff changeset
1238 }
311
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1239 } else {
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1240 int sbpp = ((pixel_format & 0xff) + 7) / 8;
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1241 char *d = next_frame;
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1242 char *s = src[0];
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1243 if (sbpp == fb_pixel_size) {
2556
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2354
diff changeset
1244 if (fb_real_bpp == 16 && pixel_format == (IMGFMT_BGR|15))
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2354
diff changeset
1245 rgb15to16(s, d, 2 * in_width * in_height);
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2354
diff changeset
1246 else
71934dc06490 Using new stuff of rgb15to16
nick
parents: 2354
diff changeset
1247 memcpy(d, s, sbpp * in_width * in_height);
311
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1248 }
15a5f7635538 codecs.conf support
szabii
parents: 306
diff changeset
1249 }
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1250 return 0;
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1251 }
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1252
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1253 static uint32_t draw_slice(uint8_t *src[], int stride[], int w, int h, int x,
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1254 int y)
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1255 {
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1256 uint8_t *dest;
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1257
4210
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1258 #ifdef USE_CONVERT2FB
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1259 if (pixel_format == IMGFMT_YV12) {
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1260 if(x < fb_xres && y < fb_yres) {
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1261 if(x+w > fb_xres) w= fb_xres-x;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1262 if(y+h > fb_yres) h= fb_yres-y;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1263
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1264 dest = L123123875 + (fb_xres * y + x) * fb_pixel_size;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1265 yuv2rgb(dest, src[0], src[1], src[2], w, h, fb_xres * fb_pixel_size,
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1266 stride[0], stride[1]);
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1267 }
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1268
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1269 return 0;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1270 }
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1271 #endif
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1272
278
604b37178b3d now it works in 15bpp mode
szabii
parents: 277
diff changeset
1273 dest = next_frame + (in_width * y + x) * fb_pixel_size;
604b37178b3d now it works in 15bpp mode
szabii
parents: 277
diff changeset
1274 yuv2rgb(dest, src[0], src[1], src[2], w, h, in_width * fb_pixel_size,
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1275 stride[0], stride[1]);
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1276 return 0;
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1277 }
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1278
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1279 static void check_events(void)
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1280 {
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1281 }
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1282
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1283 static void put_frame(void)
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1284 {
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1285 int i, out_offset = 0, in_offset = 0;
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1286
4210
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1287 #ifdef USE_CONVERT2FB
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1288 if(pixel_format == IMGFMT_YV12)
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1289 return;
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1290 #endif
d43f0e4ac781 fbdev nocopy option - Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4198
diff changeset
1291
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1292 for (i = 0; i < in_height; i++) {
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1293 memcpy(L123123875 + out_offset, next_frame + in_offset,
423
bb28d8242239 small change
szabii
parents: 418
diff changeset
1294 in_width * fb_pixel_size);
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1295 out_offset += fb_line_len;
278
604b37178b3d now it works in 15bpp mode
szabii
parents: 277
diff changeset
1296 in_offset += in_width * fb_pixel_size;
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1297 }
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1298 }
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1299
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1087
diff changeset
1300 static void draw_osd(void)
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1087
diff changeset
1301 {
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1087
diff changeset
1302 vo_draw_text(in_width, in_height, draw_alpha);
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1087
diff changeset
1303 }
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1087
diff changeset
1304
246
5673f9146c54 clear the frame on uninit
szabii
parents: 245
diff changeset
1305 static void flip_page(void)
5673f9146c54 clear the frame on uninit
szabii
parents: 245
diff changeset
1306 {
519
5e8d5422854d changed query_format return; lots of fixes/changes
szabii
parents: 503
diff changeset
1307 put_frame();
246
5673f9146c54 clear the frame on uninit
szabii
parents: 245
diff changeset
1308 }
5673f9146c54 clear the frame on uninit
szabii
parents: 245
diff changeset
1309
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1310 static void uninit(void)
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1311 {
379
368f16e72583 cleanup
szabii
parents: 365
diff changeset
1312 if (verbose > 0)
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1313 printf(FBDEV "uninit\n");
481
6e8a887c99cd cmap bug fixed (I think)
szabii
parents: 479
diff changeset
1314 if (fb_cmap_changed) {
6e8a887c99cd cmap bug fixed (I think)
szabii
parents: 479
diff changeset
1315 if (ioctl(fb_dev_fd, FBIOPUTCMAP, &fb_oldcmap))
393
e847396dc49f some changes...
szabii
parents: 383
diff changeset
1316 printf(FBDEV "Can't restore original cmap\n");
481
6e8a887c99cd cmap bug fixed (I think)
szabii
parents: 479
diff changeset
1317 fb_cmap_changed = 0;
306
344d115a285d restore old cmap
szabii
parents: 305
diff changeset
1318 }
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1319 if(next_frame) free(next_frame);
503
4aa16f9ff929 fbdev reset fixed
szabii
parents: 481
diff changeset
1320 if (ioctl(fb_dev_fd, FBIOGET_VSCREENINFO, &fb_vinfo))
4aa16f9ff929 fbdev reset fixed
szabii
parents: 481
diff changeset
1321 printf(FBDEV "ioctl FBIOGET_VSCREENINFO: %s\n", strerror(errno));
4aa16f9ff929 fbdev reset fixed
szabii
parents: 481
diff changeset
1322 fb_orig_vinfo.xoffset = fb_vinfo.xoffset;
4aa16f9ff929 fbdev reset fixed
szabii
parents: 481
diff changeset
1323 fb_orig_vinfo.yoffset = fb_vinfo.yoffset;
379
368f16e72583 cleanup
szabii
parents: 365
diff changeset
1324 if (ioctl(fb_dev_fd, FBIOPUT_VSCREENINFO, &fb_orig_vinfo))
503
4aa16f9ff929 fbdev reset fixed
szabii
parents: 481
diff changeset
1325 printf(FBDEV "Can't reset original fb_var_screeninfo: %s\n", strerror(errno));
2354
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
1326 if (fb_tty_fd >= 0) {
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
1327 if (ioctl(fb_tty_fd, KDSETMODE, KD_TEXT) < 0)
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
1328 printf(FBDEV "Can't restore text mode: %s\n", strerror(errno));
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
1329 }
950
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1330 if (vt_doit)
de1e10c4da3c some little cleanup
szabii
parents: 865
diff changeset
1331 vt_set_textarea(0, fb_orig_vinfo.yres);
2354
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
1332 close(fb_tty_fd);
359
db6b78fa7331 video mode change supported
szabii
parents: 354
diff changeset
1333 close(fb_dev_fd);
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1334 if(frame_buffer) munmap(frame_buffer, fb_size);
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
1335 #ifdef CONFIG_VIDIX
4084
e7be28567230 VIDIX expansion, Usage: -vo fbdev:vidix (-fs -zoom). Zoom is supported for VIDIX!!!
nick
parents: 2732
diff changeset
1336 if(vidix_name) vidix_term();
4089
e1c6178de089 Configurable VIDIX usage
nick
parents: 4084
diff changeset
1337 #endif
225
62ec84961b27 vo_fbdev added
szabii
parents:
diff changeset
1338 }
2354
0e2f4c4e55d4 Applied patch to switch to graphics mode with -fs by achurch@achurch.org (Andrew Church)
atmos4
parents: 1561
diff changeset
1339
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4210
diff changeset
1340 static uint32_t preinit(const char *arg)
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4210
diff changeset
1341 {
4380
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
1342 pre_init_err = 0;
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
1343 #ifdef CONFIG_VIDIX
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
1344 if(vo_subdevice) parseSubDevice(vo_subdevice);
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
1345 if(vidix_name) pre_init_err = vidix_preinit(vidix_name,&video_out_fbdev);
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
1346 if(verbose > 2)
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
1347 printf("vo_subdevice: initialization returns: %i\n",pre_init_err);
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
1348 #endif
ae5e4cc0e52d Use real preinit
nick
parents: 4352
diff changeset
1349 if(!pre_init_err) return (pre_init_err=(fb_preinit()?0:-1));
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4210
diff changeset
1350 }
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4210
diff changeset
1351
4756
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1352 #ifdef HAVE_PNG
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1353 static int fbdev_screenshot(void)
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1354 {
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1355 uint32_t i;
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1356 uint8_t *ptrs[fb_vinfo.yres];
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1357 if(video_out_png.preinit(NULL))
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1358 {
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1359 printf("\nvo_fbdev: can't preinit vo_png\n");
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1360 return 1;
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1361 }
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1362 if(!video_out_png.control(VOCTRL_QUERY_FORMAT, &dstFourcc))
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1363 {
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1364 printf("\nvo_fbdev: vo_png doesn't support: %s fourcc\n",vo_format_name(dstFourcc));
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1365 return 1;
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1366 }
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1367 if(video_out_png.config(fb_vinfo.xres,
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1368 fb_vinfo.yres,
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1369 fb_vinfo.xres,
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1370 fb_vinfo.yres,
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1371 0,NULL,dstFourcc,NULL))
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1372 {
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1373 printf("\nvo_fbdev: can't configure vo_png\n");
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1374 return 1;
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1375 }
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1376 ptrs[0] = L123123875;
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1377 for(i=1;i<fb_vinfo.yres;i++)
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1378 ptrs[i] = ptrs[i-1]+fb_line_len;
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1379 if(video_out_png.draw_frame(ptrs))
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1380 {
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1381 printf("\nvo_fbdev: vo_png: error during dumping\n");
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1382 return 1;
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1383 }
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1384
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1385 video_out_png.uninit();
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1386 if(verbose) printf("\nvo_fbdev: png output has been created\n");
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1387 return 0;
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1388 }
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1389 #endif
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1390
4596
c35d7ce151b3 10000hl to Holm... control MUST BE static...
arpi
parents: 4592
diff changeset
1391 static uint32_t control(uint32_t request, void *data, ...)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4210
diff changeset
1392 {
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4434
diff changeset
1393 switch (request) {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4434
diff changeset
1394 case VOCTRL_QUERY_FORMAT:
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4434
diff changeset
1395 return query_format(*((uint32_t*)data));
4756
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1396 #ifdef HAVE_PNG
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1397 case VOCTRL_SCREENSHOT:
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1398 return fbdev_screenshot();
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1399 break;
75fe20ca2386 Screenshot on the fly
nick
parents: 4596
diff changeset
1400 #endif
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4434
diff changeset
1401 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4434
diff changeset
1402 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4210
diff changeset
1403 }