annotate libvo/vo_aa.c @ 1520:c156984e545e

write fault error fixed
author folke
date Tue, 14 Aug 2001 19:23:17 +0000
parents e0ceb814471d
children 187aa4b576a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
1 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
2 * MPlayer
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
3 *
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
4 * Video driver for AAlib - alpha version
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
5 *
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
6 * by Folke Ashberg <folke@ashberg.de>
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
7 *
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
8 * Code started: Sun Aug 12 2001
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
9 *
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
10 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
11
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
12 #include <stdio.h>
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
13 #include <stdlib.h>
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
14
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
15
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
16 #include <limits.h>
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
17 #include <math.h>
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
18 #include <stdarg.h>
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
19 #include <time.h>
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
20 #include <string.h>
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
21
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
22 #include "config.h"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
23 #include "video_out.h"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
24 #include "video_out_internal.h"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
25 #include "yuv2rgb.h"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
26 #include "sub.h"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
27
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
28 #include "linux/keycodes.h"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
29 #include <aalib.h>
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
30
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
31 #define RGB 0
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
32 #define BGR 1
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
33
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
34 #define DO_INC(val,max,step) if (val + step <=max) val+=step; else val=max;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
35 #define DO_DEC(val,min,step) if (val - step >=min) val-=step; else val=min;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
36
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
37 #define MESSAGE_DURATION 3
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
38 #define MESSAGE_SIZE 512
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
39 #define MESSAGE_DEKO " +++ %s +++ "
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
40
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
41
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
42
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
43 LIBVO_EXTERN(aa)
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
44
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
45 static vo_info_t vo_info = {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
46 "AAlib",
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
47 "aa",
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
48 "Folke Ashberg <folke@ashberg.de>",
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
49 ""
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
50 };
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
51
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
52 /* aa's main context we use */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
53 aa_context *c;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
54 aa_renderparams *p;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
55 static int fast =0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
56 /* used for YV12 streams for the converted RGB image */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
57 uint8_t * convertbuf=NULL;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
58
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
59 /* image infos */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
60 static int image_format, bpp=24;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
61 static int image_width;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
62 static int image_height;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
63 static int bppmul;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
64
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
65 /* osd stuff */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
66 time_t stoposd = 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
67 static int showosd = 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
68 char osdtext[MESSAGE_SIZE];
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
69 char posbar[MESSAGE_SIZE];
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
70 static int osdx, osdy;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
71
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
72 /* for resizing/scaling */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
73 static int *stx;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
74 static int *sty;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
75 double accum;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
76
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
77 /* our version of the playmodes :) */
1518
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
78 static char * osdmodes[] ={ "|>", "||", ">>", "[]" , ">>" };
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
79
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
80 extern void mplayer_put_key(int code);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
81
1518
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
82 /* to disable stdout outputs when curses/linux mode */
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
83 extern int quiet;
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
84
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
85 /* config options */
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
86 int aaopt_extended = 0;
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
87 int aaopt_eight = 0;
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
88 int aaopt_osdcolor = AA_SPECIAL;
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
89 char *aaopt_driver = NULL;
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
90
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
91 void
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
92 resize(void){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
93 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
94 * this function is called by aa lib if windows resizes
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
95 * further during init, because here we have to calculate
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
96 * a little bit
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
97 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
98
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
99 int i;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
100 aa_resize(c);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
101
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
102 showosd=0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
103 osdy=aa_scrheight(c) - ( aa_scrheight(c)/10 );
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
104
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
105 /* now calculating the needed values for resizing */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
106
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
107 /* We only need to use floating point to determine the correct
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
108 stretch vector for one line's worth. */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
109 stx = (int *) malloc(sizeof(int) * image_width);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
110 sty = (int *) malloc(sizeof(int) * image_height);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
111 accum = 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
112 for (i=0; (i < image_width); i++) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
113 int got;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
114 accum += (double)aa_imgwidth(c)/(double)image_width;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
115 got = (int) floor(accum);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
116 stx[i] = got;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
117 accum -= got;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
118 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
119 accum = 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
120 for (i=0; (i < image_height); i++) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
121 int got;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
122 accum += (double)aa_imgheight(c)/(double)image_height;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
123 got = (int) floor(accum);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
124 sty[i] = got;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
125 accum -= got;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
126 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
127 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
128
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
129 void
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
130 osdmessage(int duration, int deko, char *fmt, ...)
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
131 {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
132 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
133 * for outputting a centered string at the bottom
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
134 * of our window for a while
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
135 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
136 va_list ar;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
137 char m[MESSAGE_SIZE];
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
138 va_start(ar, fmt);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
139 vsprintf(m, fmt, ar);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
140 va_end(ar);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
141 if (deko==1) sprintf(osdtext, MESSAGE_DEKO , m);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
142 else strcpy(osdtext, m);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
143 showosd=1;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
144 stoposd = time(NULL) + duration;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
145 osdx=(aa_scrwidth(c) / 2) - (strlen(osdtext) / 2 ) ;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
146 posbar[0]='\0';
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
147 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
148
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
149 void
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
150 osdpercent(int duration, int deko, int min, int max, int val, char * desc, char * unit)
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
151 {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
152 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
153 * prints a bar for setting values
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
154 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
155 float step;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
156 int where;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
157 char m[MESSAGE_SIZE];
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
158 int i;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
159 step=(float)aa_scrwidth(c) /(float)(max-min);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
160 where=(val-min)*step;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
161 sprintf(m,"%s: %i%s",desc, val, unit);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
162 if (deko==1) sprintf(osdtext, MESSAGE_DEKO , m);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
163 else strcpy(osdtext, m);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
164 posbar[0]='|';
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
165 posbar[aa_scrwidth(c)-1]='|';
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
166 for (i=0;i<aa_scrwidth(c);i++){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
167 if (i==where) posbar[i]='#';
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
168 else posbar[i]='-';
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
169 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
170 if (where!=0) posbar[0]='|';
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
171 if (where!=(aa_scrwidth(c)-1) ) posbar[aa_scrwidth(c)-1]='|';
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
172 /* snipp */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
173 posbar[aa_scrwidth(c)]='\0';
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
174 showosd=1;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
175 stoposd = time(NULL) + duration;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
176 osdx=(aa_scrwidth(c) / 2) - (strlen(osdtext) / 2 ) ;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
177 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
178
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
179 static uint32_t
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
180 init(uint32_t width, uint32_t height, uint32_t d_width,
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
181 uint32_t d_height, uint32_t fullscreen, char *title,
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
182 uint32_t format) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
183 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
184 * main init
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
185 * called by mplayer
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
186 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
187
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
188 switch(format) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
189 case IMGFMT_BGR24:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
190 bpp = 24;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
191 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
192 case IMGFMT_RGB24:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
193 bpp = 24;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
194 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
195 case IMGFMT_YV12:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
196 bpp = 24;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
197 /* YUV ? then initialize what we will need */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
198 convertbuf=malloc(width*height*3);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
199 yuv2rgb_init(24,MODE_BGR);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
200 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
201 default:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
202 return 1;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
203 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
204 bppmul=bpp/8;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
205
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
206 /* initializing of aalib */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
207 aa_recommendhidisplay("curses");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
208 aa_recommendhidisplay("X11");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
209 aa_recommendlowdisplay("linux");
1518
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
210
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
211 /* options ? */
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
212 if (aaopt_eight) aa_defparams.supported|=AA_EIGHT;
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
213 if (aaopt_extended && !aaopt_eight) aa_defparams.supported|=AA_EXTENDED;
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
214 if (aaopt_driver!=NULL){
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
215 aa_recommendhidisplay(aaopt_driver);
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
216 }
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
217
1518
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
218
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
219 c = aa_autoinit(&aa_defparams);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
220 aa_resizehandler(c, (void *)resize);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
221
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
222 if (c == NULL) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
223 printf("Can not intialize aalib\n");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
224 return 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
225 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
226 if (!aa_autoinitkbd(c,0)) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
227 printf("Can not intialize keyboard\n");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
228 aa_close(c);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
229 return 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
230 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
231 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
232 if (!aa_autoinitmouse(c,0)) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
233 printf("Can not intialize mouse\n");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
234 aa_close(c);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
235 return 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
236 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
237 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
238 aa_hidecursor(c);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
239 p = aa_getrenderparams();
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
240
1520
c156984e545e write fault error fixed
folke
parents: 1518
diff changeset
241 if ((strstr(c->driver->name,"Curses")) || (strstr(c->driver->name,"Linux"))){
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
242 freopen("/dev/null", "w", stderr);
1518
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
243 quiet=1; /* disable mplayer outputs */
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
244 }
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
245
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
246 image_height = height;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
247 image_width = width;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
248 image_format = format;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
249
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
250 /* needed by prepare_image */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
251 stx = (int *) malloc(sizeof(int) * image_width);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
252 sty = (int *) malloc(sizeof(int) * image_height);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
253
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
254 /* nothing will change its size, be we need some values initialized */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
255 resize();
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
256
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
257 /* say hello */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
258 osdmessage(5, 1, "Welcome to ASCII ARTS MPlayer");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
259
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
260 printf("VO: screendriver: %s\n", c->driver->name);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
261 printf("VO: keyboarddriver: %s\n", c->kbddriver->name);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
262 //printf("VO: mousedriver: %s\n", c->mousedriver->name);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
263
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
264 printf(
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
265 "\n"
1518
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
266 "Options\n"
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
267 "\t-aaosdfont 0=normal, 1=dark, 2=bold, 3-boldfont, 4=reverse, 5=special\n"
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
268 "\t-aaextended use use all 256 characters\n"
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
269 "\t-aaeight use eight bit ascii\n"
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
270 "\n"
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
271 "AA-MPlayer Keys:\n"
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
272 "\t1 : fast rendering\n"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
273 "\t2 : dithering\n"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
274 "\t3 : invert image\n"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
275 "\t4 : contrast -\n"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
276 "\t5 : contrast +\n"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
277 "\t6 : brightness -\n"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
278 "\t7 : brightness +\n"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
279 "\n"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
280 "All other keys are MPlayer standart\n"
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
281
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
282
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
283 );
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
284
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
285 return 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
286 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
287
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
288 static uint32_t
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
289 query_format(uint32_t format) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
290 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
291 * ...are we able to... ?
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
292 * called by mplayer
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
293 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
294 switch(format){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
295 case IMGFMT_YV12:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
296 case IMGFMT_RGB|24:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
297 case IMGFMT_BGR|24:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
298 return 1;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
299 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
300 return 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
301 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
302
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
303 static const vo_info_t*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
304 get_info(void) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
305 /* who i am? */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
306 return (&vo_info);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
307 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
308
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
309 int
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
310 prepare_image(uint8_t *data, int inx, int iny, int outx, int outy){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
311 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
312 * copies an RGB-Image to the aalib imagebuffer
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
313 * also scaling an grayscaling is done here
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
314 * show_image calls us
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
315 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
316
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
317 int value;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
318 int x, y;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
319 int tox, toy;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
320 int ydest;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
321 int i;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
322 int pos;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
323
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
324 toy = 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
325 for (y=0; (y < (0 + iny)); y++) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
326 for (ydest=0; (ydest < sty[y-0]); ydest++) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
327 tox = 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
328 for (x=0; (x < (0 + inx)); x++) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
329 if (!stx[x - 0]) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
330 continue;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
331 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
332 pos=3*(inx*y)+(3*x);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
333 value=(data[pos]+data[pos+1]+data[pos+2])/3;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
334 for (i=0; (i < stx[x - 0]); i++) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
335 //printf("ToX: %i, ToY %i, i=%i, stx=%i, x=%i\n", tox, toy, i, stx[x], x);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
336 c->imagebuffer[(toy*outx) +tox]=value;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
337 tox++;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
338 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
339 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
340 toy++;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
341 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
342 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
343 return 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
344 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
345
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
346 void
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
347 printosd()
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
348 {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
349 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
350 * places the mplayer status osd
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
351 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
352 if (vo_osd_text){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
353 if (vo_osd_text[0]-1<=5)
1518
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
354 aa_puts(c, 0,0, aaopt_osdcolor, osdmodes[vo_osd_text[0]-1]);
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
355 else aa_puts(c, 0,0, aaopt_osdcolor, "?");
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
356 aa_puts(c,2,0, aaopt_osdcolor, vo_osd_text+1);
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
357 aa_puts(c,strlen(vo_osd_text)+1,0, aaopt_osdcolor, " ");
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
358 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
359 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
360
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
361 void
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
362 show_image(uint8_t * src){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
363 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
364 * every frame (flip_page/draw_frame) we will be called
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
365 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
366
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
367 /* events? */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
368 check_events();
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
369
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
370 /* RGB->gray , scaling/resizing, stores data in aalib imgbuf */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
371 prepare_image( src, image_width, image_height,
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
372 aa_imgwidth(c), aa_imgheight(c) );
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
373
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
374 /* Now 'ASCIInate' the image */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
375 if (fast)
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
376 aa_fastrender(c, 0, 0, aa_scrwidth(c), aa_scrheight(c) );
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
377 else
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
378 aa_render(c, p, 0, 0, aa_scrwidth(c), aa_scrheight(c));
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
379
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
380 /* do we have to put our osd to aa's txtbuf ? */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
381 if (showosd)
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
382 {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
383 if (time(NULL)>=stoposd ) showosd=0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
384 /* update osd */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
385 aa_puts(c, osdx, osdy, AA_SPECIAL, osdtext);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
386 /* posbar? */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
387 if (posbar[0]!='\0')
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
388 aa_puts(c, 0, osdy + 1, AA_SPECIAL, posbar);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
389 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
390 /* and the real OSD, but only the time & playmode */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
391 printosd();
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
392
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
393 /* print out */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
394 aa_flush(c);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
395 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
396
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
397 static uint32_t
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
398 draw_frame(uint8_t *src[]) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
399 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
400 * RGB-Video's Only
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
401 * src[0] is handled bu prepare_image
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
402 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
403 show_image(src[0]);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
404 return 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
405 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
406
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
407 static uint32_t
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
408 draw_slice(uint8_t *src[], int stride[],
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
409 int w, int h, int x, int y) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
410 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
411 * for MPGEGS YV12
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
412 * draw a rectangle converted to RGB to a
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
413 * temporary RGB Buffer
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
414 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
415 uint8_t *dst;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
416
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
417 dst = convertbuf+(image_width * y + x) * 3;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
418 yuv2rgb(dst,src[0],src[1],src[2],w,h,image_width*3,stride[0],stride[1]);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
419
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
420 return 0;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
421 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
422
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
423 static void
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
424 flip_page(void) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
425 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
426 * wow! another ready Image, so draw it !
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
427 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
428 if(image_format == IMGFMT_YV12)
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
429 show_image(convertbuf);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
430 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
431
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
432 static void
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
433 check_events(void) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
434 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
435 * any events?
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
436 * called by show_image and mplayer
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
437 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
438 int key;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
439 while ((key=aa_getevent(c,0))!=AA_NONE ){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
440 if (key>255){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
441 /* some conversations */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
442 switch (key) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
443 case AA_UP:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
444 mplayer_put_key(KEY_UP);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
445 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
446 case AA_DOWN:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
447 mplayer_put_key(KEY_DOWN);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
448 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
449 case AA_LEFT:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
450 mplayer_put_key(KEY_LEFT);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
451 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
452 case AA_RIGHT:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
453 mplayer_put_key(KEY_RIGHT);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
454 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
455 case AA_ESC:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
456 mplayer_put_key(KEY_ESC);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
457 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
458 case 65765:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
459 mplayer_put_key(KEY_PAGE_UP);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
460 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
461 case 65766:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
462 mplayer_put_key(KEY_PAGE_DOWN);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
463 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
464 default:
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
465 continue; /* aa lib special key */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
466 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
467 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
468 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
469 switch (key) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
470 /* AA image controls */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
471 case '1':
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
472 fast=!fast;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
473 osdmessage(MESSAGE_DURATION, 1, "Fast mode is now %s", fast==1 ? "on" : "off");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
474 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
475 case '2':
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
476 if (p->dither==AA_FLOYD_S){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
477 p->dither=AA_NONE;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
478 osdmessage(MESSAGE_DURATION, 1, "Dithering: Off");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
479 }else if (p->dither==AA_NONE){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
480 p->dither=AA_ERRORDISTRIB;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
481 osdmessage(MESSAGE_DURATION, 1, "Dithering: Error Distribution");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
482 }else if (p->dither==AA_ERRORDISTRIB){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
483 p->dither=AA_FLOYD_S;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
484 osdmessage(MESSAGE_DURATION, 1, "Dithering: Floyd Steinberg");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
485 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
486 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
487 case '3':
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
488 p->inversion=!p->inversion;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
489 osdmessage(MESSAGE_DURATION, 1, "Invert mode is now %s",
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
490 p->inversion==1 ? "on" : "off");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
491 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
492
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
493 case '4': /* contrast */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
494 DO_DEC(p->contrast,0,1);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
495 osdpercent(MESSAGE_DURATION, 1, 0, 255, p->contrast, "AA-Contrast", "");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
496
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
497 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
498 case '5': /* contrast */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
499 DO_INC(p->contrast,255,1);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
500 osdpercent(MESSAGE_DURATION, 1, 0, 255, p->contrast, "AA-Contrast", "");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
501 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
502 case '6': /* brightness */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
503 DO_DEC(p->bright,0,1);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
504 osdpercent(MESSAGE_DURATION, 1, 0, 255, p->bright, "AA-Brightnes", "");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
505 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
506 case '7': /* brightness */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
507 DO_INC(p->bright,255,1);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
508 osdpercent(MESSAGE_DURATION, 1, 0, 255, p->bright, "AA-Brightnes", "");
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
509 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
510
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
511 default :
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
512 /* nothing if we're interested in?
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
513 * the mplayer should handle it!
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
514 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
515 mplayer_put_key(key);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
516 break;
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
517 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
518 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
519 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
520
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
521 static void
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
522 uninit(void) {
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
523 /*
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
524 * THE END
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
525 */
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
526 aa_close(c);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
527 free(stx);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
528 free(sty);
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
529 if (convertbuf!=NULL) free(convertbuf);
1520
c156984e545e write fault error fixed
folke
parents: 1518
diff changeset
530 if (strstr(c->driver->name,"Curses") || strstr(c->driver->name,"Linux")){
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
531 freopen("/dev/tty", "w", stderr);
1518
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
532 quiet=0; /* enable mplayer outputs */
e0ceb814471d vo_aa: configurable now
folke
parents: 1511
diff changeset
533 }
1511
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
534 }
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
535
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
536 static void
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
537 draw_osd(void){
f29e0c2bb675 Added cool aalib vo driver.
atmos4
parents:
diff changeset
538 }