Mercurial > mplayer.hg
annotate libvo/vo_directfb.c @ 7180:28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
author | arpi |
---|---|
date | Fri, 30 Aug 2002 21:44:20 +0000 |
parents | eca7dbad0166 |
children | 5b39e79af5fe |
rev | line source |
---|---|
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1 /* |
3341 | 2 MPlayer video driver for DirectFramebuffer device |
3 | |
4 (C) 2001 | |
5 | |
6 Written by Jiri Svoboda <Jiri.Svoboda@seznam.cz> | |
7 | |
8 Inspired by vo_sdl and vo_fbdev. | |
9 | |
10 To get second head working delete line 120 | |
11 from fbdev.c (from DirectFB sources version 0.9.7) | |
12 Line contains following: | |
13 fbdev->fd = open( "/dev/fb0", O_RDWR ); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
14 |
3341 | 15 Parts of this code taken from DirectFB examples: |
16 (c) Copyright 2000 convergence integrated media GmbH. | |
17 All rights reserved. | |
18 | |
19 This library is free software; you can redistribute it and/or | |
20 modify it under the terms of the GNU Lesser General Public | |
21 License as published by the Free Software Foundation; either | |
22 version 2 of the License, or (at your option) any later version. | |
23 | |
24 This library is distributed in the hope that it will be useful, | |
25 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
26 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
27 Lesser General Public License for more details. | |
28 | |
29 You should have received a copy of the GNU Lesser General Public | |
30 License along with this library; if not, write to the | |
31 Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
32 Boston, MA 02111-1307, USA. | |
33 */ | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
34 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
35 // directfb includes |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
36 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
37 #include <directfb.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
38 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
39 // other things |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
40 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
41 #include <stdio.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
42 #include <stdlib.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
43 #include <string.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
44 #include <fcntl.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
45 #include <unistd.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
46 #include <errno.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
47 #include <ctype.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
48 #include <assert.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
49 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
50 #include <sys/mman.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
51 #include <sys/ioctl.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
52 #include <sys/kd.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
53 #include <linux/fb.h> |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
54 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
55 #include "config.h" |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
56 #include "video_out.h" |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
57 #include "video_out_internal.h" |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
58 #include "fastmemcpy.h" |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
59 #include "sub.h" |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
60 #include "../postproc/rgb2rgb.h" |
5611 | 61 |
5189 | 62 #include "aspect.h" |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
63 |
5611 | 64 #ifndef min |
65 #define min(x,y) (((x)<(y))?(x):(y)) | |
66 #endif | |
67 | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
68 LIBVO_EXTERN(directfb) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
69 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
70 static vo_info_t vo_info = { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
71 "Direct Framebuffer Device", |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
72 "directfb", |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
73 "Jiri Svoboda Jiri.Svoboda@seznam.cz", |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
74 "" |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
75 }; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
76 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
77 extern int verbose; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
78 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
79 /****************************** |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
80 * directfb * |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
81 ******************************/ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
82 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
83 /* |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
84 * (Globals) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
85 */ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
86 static IDirectFB *dfb = NULL; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
87 static IDirectFBSurface *primary = NULL; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
88 static IDirectFBInputDevice *keyboard = NULL; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
89 static IDirectFBDisplayLayer *videolayer = NULL; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
90 static DFBDisplayLayerConfig dlc; |
5189 | 91 static unsigned int screen_width = 0; |
92 static unsigned int screen_height = 0; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
93 static DFBSurfacePixelFormat frame_format; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
94 static unsigned int frame_pixel_size = 0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
95 static unsigned int source_pixel_size = 0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
96 static int xoffset=0,yoffset=0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
97 #define DFBCHECK(x...) \ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
98 { \ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
99 DFBResult err = x; \ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
100 \ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
101 if (err != DFB_OK) \ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
102 { \ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
103 fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ ); \ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
104 DirectFBErrorFatal( #x, err ); \ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
105 } \ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
106 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
107 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
108 /* |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
109 * The frame is to be loaded into a surface that we can blit from. |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
110 */ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
111 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
112 static IDirectFBSurface *frame = NULL; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
113 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
114 /* |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
115 * A buffer for input events. |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
116 */ |
5026
693b917ac916
DirectFB 0.9.9 support - patch by Aubin Paul <aubin@punknews.org>
arpi
parents:
4596
diff
changeset
|
117 |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
118 #if DIRECTFBVERSION > 908 |
5026
693b917ac916
DirectFB 0.9.9 support - patch by Aubin Paul <aubin@punknews.org>
arpi
parents:
4596
diff
changeset
|
119 static IDirectFBEventBuffer *buffer = NULL; |
693b917ac916
DirectFB 0.9.9 support - patch by Aubin Paul <aubin@punknews.org>
arpi
parents:
4596
diff
changeset
|
120 #else |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
121 static IDirectFBInputBuffer *buffer = NULL; |
5026
693b917ac916
DirectFB 0.9.9 support - patch by Aubin Paul <aubin@punknews.org>
arpi
parents:
4596
diff
changeset
|
122 #endif |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
123 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
124 /****************************** |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
125 * vo_directfb * |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
126 ******************************/ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
127 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
128 /* command line/config file options */ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
129 #ifdef HAVE_FBDEV |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
130 extern char *fb_dev_name; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
131 #else |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
132 char *fb_dev_name; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
133 #endif |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
134 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
135 static void (*draw_alpha_p)(int w, int h, unsigned char *src, |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
136 unsigned char *srca, int stride, unsigned char *dst, |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
137 int dstride); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
138 |
5189 | 139 static uint32_t in_width; |
140 static uint32_t in_height; | |
141 static uint32_t out_width=1; | |
142 static uint32_t out_height=1; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
143 static uint32_t pixel_format; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
144 static int fs; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
145 static int flip; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
146 static int stretch=0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
147 struct modes_t { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
148 int valid; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
149 unsigned int width; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
150 unsigned int height; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
151 int overx,overy; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
152 } modes [4]; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
153 static unsigned int best_bpp=5; |
5189 | 154 // videolayer stuff |
155 static int videolayeractive=0; | |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
156 static int videolayerpresent=0; |
5189 | 157 //some info about videolayer - filled on preinit |
158 struct vlayer_t { | |
159 int iv12; | |
160 int i420; | |
161 int yuy2; | |
162 int uyvy; | |
163 int brightness; | |
164 int saturation; | |
165 int contrast; | |
166 int hue; | |
6717 | 167 int hwscale; |
5189 | 168 } videolayercaps; |
169 // workabout for DirectFB bug | |
170 static int buggyYV12BitBlt=0; | |
171 static int memcpyBitBlt=0; | |
6717 | 172 // |
173 static int hwstretchblit=0; | |
5189 | 174 #define DIRECTRENDER |
175 #ifdef DIRECTRENDER | |
176 static int dr_enabled=0; | |
177 static int framelocked=0; | |
178 #endif | |
6717 | 179 #define FLIPPING |
180 #ifdef FLIPPING | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
181 static int do_flipping=1; // turn (on) off flipping - prepared for cmd line switch |
6717 | 182 static int wait_vsync_after_flip=0; |
183 static int flipping=0; // flipping is active | |
184 static int invram=0; // backbuffer in video memory | |
185 static int blitperformed=0; // in case of temporary frame we will blit before drawing osd | |
186 #endif | |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
187 // primary & frame stuff |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
188 static int frameallocated=0; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
189 static int primaryallocated=0; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
190 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
191 DFBEnumerationResult enum_modes_callback( unsigned int width,unsigned int height,unsigned int bpp, void *data) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
192 { |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
193 int overx=0,overy=0,closer=0,over=0; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
194 unsigned int index=bpp/8-1; |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
195 int we_are_under=0; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
196 |
5189 | 197 if (verbose) printf("DirectFB: Validator entered %i %i %i\n",width,height,bpp); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
198 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
199 overx=width-out_width; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
200 overy=height-out_height; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
201 if (!modes[index].valid) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
202 modes[index].valid=1; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
203 modes[index].width=width; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
204 modes[index].height=height; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
205 modes[index].overx=overx; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
206 modes[index].overy=overy; |
6717 | 207 if (verbose) printf("DirectFB: Mode added %i %i %i\n",width,height,bpp); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
208 } |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
209 if ((modes[index].overy<0)||(modes[index].overx<0)) we_are_under=1; // stored mode is smaller than req mode |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
210 if (abs(overx*overy)<abs(modes[index].overx * modes[index].overy)) closer=1; // current mode is closer to desired res |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
211 if ((overx>=0)&&(overy>=0)) over=1; // current mode is bigger or equaul to desired res |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
212 if ((closer && (over || we_are_under)) || (we_are_under && over)) { |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
213 modes[index].valid=1; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
214 modes[index].width=width; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
215 modes[index].height=height; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
216 modes[index].overx=overx; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
217 modes[index].overy=overy; |
6717 | 218 if (verbose) printf("DirectFB: Better mode added %i %i %i\n",width,height,bpp); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
219 }; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
220 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
221 return DFENUM_OK; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
222 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
223 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
224 |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
225 #if DIRECTFBVERSION > 912 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
226 DFBEnumerationResult enum_layers_callback( DFBDisplayLayerID id, |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
227 DFBDisplayLayerDescription desc, |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
228 void *data ) |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
229 { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
230 DFBDisplayLayerCapabilities caps = desc.caps; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
231 #else |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
232 DFBEnumerationResult enum_layers_callback( unsigned int id, |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
233 DFBDisplayLayerCapabilities caps, |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
234 void *data ) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
235 { |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
236 #endif |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
237 IDirectFBDisplayLayer **layer = (IDirectFBDisplayLayer **)data; |
5189 | 238 if (verbose) { |
239 printf("\nDirectFB: Layer %d:\n", id ); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
240 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
241 if (caps & DLCAPS_SURFACE) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
242 printf( " - Has a surface.\n" ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
243 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
244 if (caps & DLCAPS_ALPHACHANNEL) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
245 printf( " - Supports blending based on alpha channel.\n" ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
246 |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
247 #if DIRECTFBVERSION > 909 |
5890 | 248 if (caps & DLCAPS_SRC_COLORKEY) |
249 printf( " - Supports source based color keying.\n" ); | |
250 | |
251 if (caps & DLCAPS_DST_COLORKEY) | |
252 printf( " - Supports destination based color keying.\n" ); | |
253 #else | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
254 if (caps & DLCAPS_COLORKEYING) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
255 printf( " - Supports color keying.\n" ); |
5890 | 256 #endif |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
257 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
258 if (caps & DLCAPS_FLICKER_FILTERING) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
259 printf( " - Supports flicker filtering.\n" ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
260 |
6717 | 261 /* renamed in dfb v. 0.9.13 |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
262 if (caps & DLCAPS_INTERLACED_VIDEO) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
263 printf( " - Can natively display interlaced video.\n" ); |
6717 | 264 */ |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
265 if (caps & DLCAPS_OPACITY) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
266 printf( " - Supports blending based on global alpha factor.\n" ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
267 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
268 if (caps & DLCAPS_SCREEN_LOCATION) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
269 printf( " - Can be positioned on the screen.\n" ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
270 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
271 if (caps & DLCAPS_BRIGHTNESS) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
272 printf( " - Brightness can be adjusted.\n" ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
273 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
274 if (caps & DLCAPS_CONTRAST) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
275 printf( " - Contrast can be adjusted.\n" ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
276 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
277 if (caps & DLCAPS_HUE) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
278 printf( " - Hue can be adjusted.\n" ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
279 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
280 if (caps & DLCAPS_SATURATION) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
281 printf( " - Saturation can be adjusted.\n" ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
282 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
283 printf("\n"); |
5189 | 284 } |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
285 /* We take the first layer not being the primary */ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
286 if (id != DLID_PRIMARY) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
287 DFBResult ret; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
288 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
289 ret = dfb->GetDisplayLayer( dfb, id, layer ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
290 if (ret) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
291 DirectFBError( "dfb->GetDisplayLayer failed", ret ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
292 else |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
293 return DFENUM_CANCEL; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
294 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
295 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
296 return DFENUM_OK; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
297 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
298 |
4354 | 299 static uint32_t preinit(const char *arg) |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
300 { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
301 DFBSurfaceDescription dsc; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
302 DFBResult ret; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
303 DFBDisplayLayerConfigFlags failed; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
304 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
305 /* |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
306 * (Initialize) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
307 */ |
5189 | 308 |
309 if (verbose) printf("DirectFB: Preinit entered\n"); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
310 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
311 DFBCHECK (DirectFBInit (NULL,NULL)); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
312 |
6717 | 313 if (!((directfb_major_version <= 0) && |
314 (directfb_minor_version <= 9) && | |
315 (directfb_micro_version < 7))) | |
3651
8148193fee93
working with 0.9.6 too (0.9.6 is coming with debian woody)
alex
parents:
3588
diff
changeset
|
316 { |
8148193fee93
working with 0.9.6 too (0.9.6 is coming with debian woody)
alex
parents:
3588
diff
changeset
|
317 if (!fb_dev_name && !(fb_dev_name = getenv("FRAMEBUFFER"))) fb_dev_name = "/dev/fb0"; |
8148193fee93
working with 0.9.6 too (0.9.6 is coming with debian woody)
alex
parents:
3588
diff
changeset
|
318 DFBCHECK (DirectFBSetOption ("fbdev",fb_dev_name)); |
8148193fee93
working with 0.9.6 too (0.9.6 is coming with debian woody)
alex
parents:
3588
diff
changeset
|
319 } |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
320 |
6717 | 321 // use own bitblt for YV12 beacuse bug in dfb till 0.9.11 |
5189 | 322 if ((directfb_major_version <= 0) && |
323 (directfb_minor_version <= 9) && | |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
324 (directfb_micro_version <= 11)) { |
5189 | 325 buggyYV12BitBlt=1; |
326 if (verbose) printf("DirectFB: Buggy YV12BitBlt!\n"); | |
327 } | |
328 | |
6717 | 329 #ifdef FLIPPING |
330 // activate flipping from release 0.9.11 | |
331 if ((directfb_major_version <= 0) && | |
332 (directfb_minor_version <= 9) && | |
333 (directfb_micro_version <= 10)) { | |
334 do_flipping=0; | |
335 } else { | |
336 // (de)activated by default - should be overwritten by cmd line option | |
337 // do_flipping=1; | |
338 } | |
339 // wait for vsync if ver <0.9.13 | |
340 if ((directfb_major_version <= 0) && | |
341 (directfb_minor_version <= 9) && | |
342 (directfb_micro_version <= 12)) { | |
343 wait_vsync_after_flip=1; | |
344 if (verbose) printf("DirectFB: Manual wait for vsync enabled!\n"); | |
345 } else { | |
346 wait_vsync_after_flip=0; | |
347 } | |
348 #endif | |
349 | |
3588
8e56fe18e7fb
Applied patch by Jiri Svoboda <Jiri.Svoboda@seznam.cz>:
pl
parents:
3341
diff
changeset
|
350 // uncomment this if you do not wish to create a new vt for DirectFB |
6717 | 351 // DFBCHECK (DirectFBSetOption ("no-vt-switch","")); |
3588
8e56fe18e7fb
Applied patch by Jiri Svoboda <Jiri.Svoboda@seznam.cz>:
pl
parents:
3341
diff
changeset
|
352 |
8e56fe18e7fb
Applied patch by Jiri Svoboda <Jiri.Svoboda@seznam.cz>:
pl
parents:
3341
diff
changeset
|
353 // uncomment this if you want to allow vt switching |
6717 | 354 // DFBCHECK (DirectFBSetOption ("vt-switching","")); |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
355 #if DIRECTFBVERSION > 908 |
5189 | 356 // uncomment this if you want to hide gfx cursor (req dfb >=0.9.9) |
357 DFBCHECK (DirectFBSetOption ("no-cursor","")); | |
358 #endif | |
359 | |
3588
8e56fe18e7fb
Applied patch by Jiri Svoboda <Jiri.Svoboda@seznam.cz>:
pl
parents:
3341
diff
changeset
|
360 DFBCHECK (DirectFBSetOption ("bg-color","00000000")); |
8e56fe18e7fb
Applied patch by Jiri Svoboda <Jiri.Svoboda@seznam.cz>:
pl
parents:
3341
diff
changeset
|
361 |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
362 DFBCHECK (DirectFBCreate (&dfb)); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
363 DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN)); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
364 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
365 // lets try to get YUY2 layer - borrowed from DirectFb examples |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
366 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
367 /* Enumerate display layers */ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
368 DFBCHECK (dfb->EnumDisplayLayers( dfb, enum_layers_callback, &videolayer )); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
369 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
370 if (!videolayer) { |
5189 | 371 if (verbose) printf("DirectFB: No videolayer found\n"); |
372 // no videolayer found | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
373 // printf( "\nNo additional layers have been found.\n" ); |
5189 | 374 videolayeractive=0; |
375 | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
376 } else { |
6717 | 377 // just to be sure that layer is hidden during config |
378 videolayer->SetOpacity(videolayer,0); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
379 |
5189 | 380 // there is an additional layer so test it for YUV formats |
381 // some videolayers support RGB formats - not used now | |
382 if (verbose) printf("DirectFB: Testing videolayer caps\n"); | |
383 | |
384 dlc.flags = DLCONF_PIXELFORMAT; | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
385 #if DIRECTFBVERSION > 908 |
5189 | 386 dlc.pixelformat = DSPF_YV12; |
387 ret = videolayer->TestConfiguration( videolayer, &dlc, &failed ); | |
388 if (ret==DFB_OK) { | |
389 videolayercaps.iv12=1; | |
390 if (verbose) printf("DirectFB: Videolayer supports YV12 format\n"); | |
391 } else { | |
392 videolayercaps.iv12=0; | |
393 if (verbose) printf("DirectFB: Videolayer doesn't support YV12 format\n"); | |
394 }; | |
395 | |
396 dlc.pixelformat = DSPF_I420; | |
397 ret = videolayer->TestConfiguration( videolayer, &dlc, &failed ); | |
398 if (ret==DFB_OK) { | |
399 videolayercaps.i420=1; | |
400 if (verbose) printf("DirectFB: Videolayer supports I420 format\n"); | |
401 } else { | |
402 videolayercaps.i420=0; | |
403 if (verbose) printf("DirectFB: Videolayer doesn't support I420 format\n"); | |
404 }; | |
405 #else | |
406 videolayercaps.yuy2=0; | |
407 #endif | |
408 | |
409 dlc.pixelformat = DSPF_YUY2; | |
410 ret = videolayer->TestConfiguration( videolayer, &dlc, &failed ); | |
411 if (ret==DFB_OK) { | |
412 videolayercaps.yuy2=1; | |
413 if (verbose) printf("DirectFB: Videolayer supports YUY2 format\n"); | |
414 } else { | |
415 videolayercaps.yuy2=0; | |
416 if (verbose) printf("DirectFB: Videolayer doesn't support YUY2 format\n"); | |
417 }; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
418 |
5189 | 419 dlc.pixelformat = DSPF_UYVY; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
420 ret = videolayer->TestConfiguration( videolayer, &dlc, &failed ); |
5189 | 421 if (ret==DFB_OK) { |
422 videolayercaps.uyvy=1; | |
423 if (verbose) printf("DirectFB: Videolayer supports UYVY format\n"); | |
424 } else { | |
425 videolayercaps.uyvy=0; | |
426 if (verbose) printf("DirectFB: Videolayer doesn't support UYVY format\n"); | |
427 }; | |
428 | |
429 // test for color caps | |
430 { | |
431 DFBDisplayLayerCapabilities caps; | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
432 #if DIRECTFBVERSION > 912 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
433 DFBDisplayLayerDescription desc; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
434 videolayer->GetDescription(videolayer,&desc); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
435 caps = desc.caps; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
436 #else |
5189 | 437 videolayer->GetCapabilities(videolayer,&caps); |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
438 #endif |
5189 | 439 if (caps & DLCAPS_BRIGHTNESS) { |
440 videolayercaps.brightness=1; | |
441 } else { | |
442 videolayercaps.brightness=0; | |
443 }; | |
444 | |
445 if (caps & DLCAPS_CONTRAST) { | |
446 videolayercaps.contrast=1; | |
447 } else { | |
448 videolayercaps.contrast=0; | |
449 }; | |
450 | |
451 if (caps & DLCAPS_HUE) { | |
452 videolayercaps.hue=1; | |
453 } else { | |
454 videolayercaps.hue=0; | |
455 }; | |
456 | |
457 if (caps & DLCAPS_SATURATION) { | |
458 videolayercaps.saturation=1; | |
459 } else { | |
460 videolayercaps.saturation=0; | |
461 }; | |
462 | |
6717 | 463 // test if layer can change size/position |
464 if (caps & DLCAPS_SCREEN_LOCATION) { | |
465 videolayercaps.hwscale=1; | |
466 } else { | |
467 videolayercaps.hwscale=0; | |
468 }; | |
469 | |
5189 | 470 |
471 } | |
472 | |
473 | |
474 // is there a working yuv ? if no we will not use videolayer | |
475 if ((videolayercaps.iv12==0)&&(videolayercaps.i420==0)&&(videolayercaps.yuy2==0)&&(videolayercaps.uyvy==0)) { | |
476 // videolayer doesn't work with yuv so release it | |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
477 videolayerpresent=0; |
5189 | 478 videolayer->SetOpacity(videolayer,0); |
479 videolayer->Release(videolayer); | |
480 } else { | |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
481 videolayerpresent=1; |
5189 | 482 }; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
483 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
484 |
6717 | 485 // check generic card capabilities (for hw scaling) |
486 { | |
487 DFBCardCapabilities caps; | |
488 DFBCHECK (dfb->GetCardCapabilities(dfb,&caps)); | |
489 if (caps.acceleration_mask & DFXL_STRETCHBLIT) hwstretchblit=1; else hwstretchblit=0; | |
6952
fc505cbab7ce
new directfb driver for 0.9.13+ by jiri.svoboda@seznam.cz
arpi
parents:
6920
diff
changeset
|
490 if (verbose && hwstretchblit) printf("DirectFB: Card supports hw stretch blit\n"); |
6717 | 491 } |
492 | |
5189 | 493 // just look at RGB things for main layer |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
494 modes[0].valid=0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
495 modes[1].valid=0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
496 modes[2].valid=0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
497 modes[3].valid=0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
498 DFBCHECK (dfb->EnumVideoModes(dfb,enum_modes_callback,NULL)); |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
499 |
6717 | 500 |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
501 /* |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
502 * (Get keyboard) |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
503 */ |
6717 | 504 ret = dfb->GetInputDevice (dfb, DIDID_KEYBOARD, &keyboard); |
505 | |
506 if (ret==DFB_OK) { | |
507 if (verbose) { | |
508 printf("DirectFB: Keyboard init OK\n"); | |
509 } | |
510 } else { | |
511 keyboard = NULL; | |
512 printf("DirectFB: Keyboard init FAILED\n"); | |
513 } | |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
514 |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
515 /* |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
516 * Create an input buffer for the keyboard. |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
517 */ |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
518 #if DIRECTFBVERSION > 908 |
6717 | 519 if (keyboard) DFBCHECK (keyboard->CreateEventBuffer (keyboard, &buffer)); |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
520 #else |
6717 | 521 if (keyboard) DFBCHECK (keyboard->CreateInputBuffer (keyboard, &buffer)); |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
522 #endif |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
523 // just to start with clean ... |
6717 | 524 if (buffer) buffer->Reset(buffer); |
4359
266ebffd8fc9
no longer required to call preinit from init and query_format, mplayer.c does this
alex
parents:
4354
diff
changeset
|
525 return 0; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
526 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
527 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
528 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
529 |
4433 | 530 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
531 uint32_t d_height, uint32_t fullscreen, char *title, |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6952
diff
changeset
|
532 uint32_t format) |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
533 { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
534 /* |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
535 * (Locals) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
536 */ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
537 DFBSurfaceDescription dsc; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
538 DFBResult ret; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
539 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
540 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
541 int vm = fullscreen & 0x02; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
542 int zoom = fullscreen & 0x04; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
543 |
5189 | 544 if (verbose) printf("DirectFB: Config entered [%ix%i]\n",width,height); |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
545 if (verbose) printf("DirectFB: With requested format: %s\n",vo_format_name(format)); |
5189 | 546 |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
547 fs = fullscreen & 0x01; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
548 flip = fullscreen & 0x08; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
549 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
550 pixel_format=format; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
551 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
552 in_width = width; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
553 in_height = height; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
554 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
555 if (d_width) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
556 out_width = d_width; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
557 out_height = d_height; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
558 } else { |
5189 | 559 d_width = out_width = in_width; |
560 d_height = out_height = in_height; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
561 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
562 |
5189 | 563 // just look at RGB things for main layer - once again - now we now desired screen size |
564 modes[0].valid=0; | |
565 modes[1].valid=0; | |
566 modes[2].valid=0; | |
567 modes[3].valid=0; | |
568 DFBCHECK (dfb->EnumVideoModes(dfb,enum_modes_callback,NULL)); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
569 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
570 if (vm) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
571 // need better algorithm just hack |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
572 switch (format) { |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
573 case IMGFMT_RGB32: |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
574 case IMGFMT_BGR32: |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
575 if (modes[3].valid) { |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
576 dfb->SetVideoMode(dfb,modes[3].width,modes[3].height,32); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
577 if (verbose) printf("DirectFB: Trying to set videomode [%ix%i 32 bpp]\n",modes[3].width,modes[3].height); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
578 }; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
579 break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
580 case IMGFMT_RGB24: |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
581 case IMGFMT_BGR24: |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
582 if (modes[2].valid) { |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
583 dfb->SetVideoMode(dfb,modes[2].width,modes[2].height,24); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
584 if (verbose) printf("DirectFB: Trying to set videomode [%ix%i 24 bpp]\n",modes[2].width,modes[2].height); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
585 }; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
586 break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
587 case IMGFMT_RGB16: |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
588 case IMGFMT_BGR16: |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
589 case IMGFMT_RGB15: |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
590 case IMGFMT_BGR15: |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
591 if (modes[1].valid) { |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
592 dfb->SetVideoMode(dfb,modes[1].width,modes[1].height,16); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
593 if (verbose) printf("DirectFB: Trying to set videomode [%ix%i 16 bpp]\n",modes[1].width,modes[1].height); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
594 }; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
595 break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
596 |
6717 | 597 default: // try all of them in order 24bit 16bit 32bit 8bit |
598 if (modes[2].valid) { | |
599 dfb->SetVideoMode(dfb,modes[2].width,modes[2].height,24); | |
600 if (verbose) printf("DirectFB: Trying to set videomode [%ix%i 24 bpp]\n",modes[2].width,modes[2].height); | |
601 } | |
602 else if (modes[1].valid) { | |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
603 dfb->SetVideoMode(dfb,modes[1].width,modes[1].height,16); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
604 if (verbose) printf("DirectFB: Trying to set videomode [%ix%i 16 bpp]\n",modes[1].width,modes[1].height); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
605 } |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
606 else if (modes[3].valid) { |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
607 dfb->SetVideoMode(dfb,modes[3].width,modes[3].height,32); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
608 if (verbose) printf("DirectFB: Trying to set videomode [%ix%i 32 bpp]\n",modes[3].width,modes[3].height); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
609 } |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
610 else if (modes[0].valid) { |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
611 dfb->SetVideoMode(dfb,modes[0].width,modes[0].height,8); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
612 if (verbose) printf("DirectFB: Trying to set videomode [%ix%i 8 bpp]\n",modes[0].width,modes[0].height); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
613 } |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
614 break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
615 }; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
616 |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
617 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
618 |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
619 // release primary if it is already allocated |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
620 if (primaryallocated) { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
621 if (verbose ) printf("DirectFB: Release primary\n"); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
622 primary->Release (primary); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
623 primaryallocated=0; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
624 }; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
625 |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
626 videolayeractive=0; // will be enabled on succes later |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
627 |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
628 if (videolayerpresent) { |
5189 | 629 |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
630 // try to set proper w a h values matching image size |
5189 | 631 dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
632 dlc.width = in_width; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
633 dlc.height = in_height; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
634 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
635 ret = videolayer->SetConfiguration( videolayer, &dlc ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
636 |
5189 | 637 if (ret) { |
638 if (verbose) printf("DirectFB: Set layer size failed\n"); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
639 }; |
5189 | 640 |
641 // try to set correct pixel format (closest to required) | |
642 | |
643 dlc.flags = DLCONF_PIXELFORMAT; | |
644 dlc.pixelformat = 0; | |
645 switch (pixel_format) { | |
646 case IMGFMT_YV12: | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
647 #if DIRECTFBVERSION > 908 |
5189 | 648 if (videolayercaps.i420==1) { |
649 dlc.pixelformat=DSPF_I420; | |
650 break; | |
651 } else if (videolayercaps.iv12==1) { | |
652 dlc.pixelformat=DSPF_YV12; | |
653 break; | |
654 }; | |
655 | |
656 #endif | |
657 case IMGFMT_YUY2: if (videolayercaps.yuy2==1) { | |
658 dlc.pixelformat=DSPF_YUY2; | |
659 break; | |
660 // temporary disabled - do not have conv tool to uyvy | |
661 /* } else if (videolayercaps.uyvy==1) { | |
662 dlc.pixelformat=DSPF_UYVY; | |
663 break; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
664 */ |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
665 #if DIRECTFBVERSION > 908 |
5189 | 666 } else if (videolayercaps.i420==1) { |
667 dlc.pixelformat=DSPF_I420; | |
668 break; | |
669 } else if (videolayercaps.iv12==1) { | |
670 dlc.pixelformat=DSPF_YV12; | |
671 break; | |
672 #endif | |
673 }; | |
674 // shouldn't happen - if it reaches here -> bug | |
675 | |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
676 case IMGFMT_RGB32: dlc.pixelformat = DSPF_ARGB; break; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
677 case IMGFMT_BGR32: dlc.pixelformat = DSPF_ARGB; break; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
678 case IMGFMT_RGB24: dlc.pixelformat = DSPF_RGB24; break; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
679 case IMGFMT_BGR24: dlc.pixelformat = DSPF_RGB24; break; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
680 case IMGFMT_RGB16: dlc.pixelformat = DSPF_RGB16; break; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
681 case IMGFMT_BGR16: dlc.pixelformat = DSPF_RGB16; break; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
682 case IMGFMT_RGB15: dlc.pixelformat = DSPF_RGB15; break; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
683 case IMGFMT_BGR15: dlc.pixelformat = DSPF_RGB15; break; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
684 default: dlc.pixelformat = DSPF_RGB24; break; |
5189 | 685 } |
686 | |
687 if (verbose) switch (dlc.pixelformat) { | |
688 case DSPF_ARGB: printf("DirectFB: layer format ARGB\n"); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
689 break; |
5189 | 690 case DSPF_RGB32: printf("DirectFB: layer format RGB32\n"); |
691 break; | |
692 case DSPF_RGB24: printf("DirectFB: layer format RGB24\n"); | |
693 break; | |
694 case DSPF_RGB16: printf("DirectFB: layer format RGB16\n"); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
695 break; |
5189 | 696 case DSPF_RGB15: printf("DirectFB: layer format RGB15\n"); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
697 break; |
5189 | 698 case DSPF_YUY2: printf("DirectFB: layer format YUY2\n"); |
699 break; | |
700 case DSPF_UYVY: printf("DirectFB: layer format UYVY\n"); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
701 break; |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
702 #if DIRECTFBVERSION > 908 |
5189 | 703 case DSPF_YV12: printf("DirectFB: layer format YV12\n"); |
704 break; | |
705 case DSPF_I420: printf("DirectFB: layer format I420\n"); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
706 break; |
5189 | 707 #endif |
708 default: printf("DirectFB: - unknown format ->exit\n"); return 1; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
709 } |
5189 | 710 |
711 ret =videolayer->SetConfiguration( videolayer, &dlc ); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
712 if (!ret) { |
5189 | 713 if (verbose) printf("DirectFB: SetConfiguration for layer OK\n"); |
6717 | 714 |
715 #ifdef FLIPPING | |
716 // try to set flipping for videolayer | |
717 if (do_flipping) { | |
718 dlc.flags = DLCONF_BUFFERMODE; | |
719 dlc.buffermode = DLBM_BACKVIDEO; | |
720 invram = 1; | |
721 flipping = 1; | |
722 ret =videolayer->SetConfiguration( videolayer, &dlc ); | |
723 if (ret!=DFB_OK) { | |
724 invram = 0; | |
725 if (!((directfb_major_version <= 0) && | |
726 (directfb_minor_version <= 9) && | |
727 (directfb_micro_version <= 11))) { | |
728 | |
729 dlc.buffermode = DLBM_BACKSYSTEM; | |
730 ret =videolayer->SetConfiguration( videolayer, &dlc ); | |
731 if (ret!=DFB_OK) { | |
732 flipping = 0; | |
733 } | |
734 } else { flipping = 0; }; | |
735 } | |
736 if (verbose) if (flipping) { | |
737 printf("DirectFB: SetFlipping for layer: OK (vram=%i)\n",invram); | |
738 } else { | |
739 printf("DirectFB: SetFlipping for layer: FAILED\n"); | |
740 } | |
741 } else flipping=0; | |
742 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
743 ret = videolayer->GetSurface( videolayer, &primary ); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
744 if (!ret){ |
5189 | 745 videolayeractive=1; |
6717 | 746 if (verbose) printf("DirectFB: Get surface for layer: OK\n"); |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
747 primaryallocated=1; |
6717 | 748 // set videolayer to be visible |
749 videolayer->SetOpacity(videolayer,0xFF); | |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
750 } else { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
751 videolayeractive=0; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
752 if (videolayer) videolayer->SetOpacity(videolayer,0); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
753 }; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
754 } else { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
755 videolayeractive=0; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
756 if (videolayer) videolayer->SetOpacity(videolayer,0); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
757 }; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
758 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
759 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
760 |
6717 | 761 // for flipping we will use BitBlt not integrated directfb flip (if necessary) |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
762 dsc.flags = DSDESC_CAPS | DSDESC_PIXELFORMAT; |
6717 | 763 dsc.caps = DSCAPS_PRIMARY /*| DSCAPS_VIDEOONLY*/; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
764 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
765 switch (format) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
766 case IMGFMT_RGB32: dsc.pixelformat = DSPF_ARGB; source_pixel_size= 4; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
767 case IMGFMT_BGR32: dsc.pixelformat = DSPF_ARGB; source_pixel_size= 4; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
768 case IMGFMT_RGB24: dsc.pixelformat = DSPF_RGB24; source_pixel_size= 3; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
769 case IMGFMT_BGR24: dsc.pixelformat = DSPF_RGB24; source_pixel_size= 3; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
770 case IMGFMT_RGB16: dsc.pixelformat = DSPF_RGB16; source_pixel_size= 2; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
771 case IMGFMT_BGR16: dsc.pixelformat = DSPF_RGB16; source_pixel_size= 2; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
772 case IMGFMT_RGB15: dsc.pixelformat = DSPF_RGB15; source_pixel_size= 2; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
773 case IMGFMT_BGR15: dsc.pixelformat = DSPF_RGB15; source_pixel_size= 2; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
774 default: dsc.pixelformat = DSPF_RGB24; source_pixel_size=2; break; //YUV formats |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
775 }; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
776 |
5189 | 777 if (!videolayeractive) { |
6717 | 778 #ifdef FLIPPING |
779 if (do_flipping) { | |
780 flipping = 1; | |
781 invram = 0; | |
782 dsc.caps |= DSCAPS_FLIPPING; | |
783 ret = dfb->CreateSurface( dfb, &dsc, &primary ); | |
784 if (ret!=DFB_OK) { | |
785 dsc.caps &= ~DSCAPS_FLIPPING; | |
5189 | 786 DFBCHECK (dfb->CreateSurface( dfb, &dsc, &primary )); |
6717 | 787 flipping = 0; |
788 } else { | |
789 // test flipping again | |
790 DFBCHECK (primary->GetCapabilities(primary,&dsc.caps)); | |
791 if (!(dsc.caps & DSCAPS_FLIPPING)) { | |
792 printf("DirectFB: Error - surface sucesfully created with flipping flag, but doesn't support it.\n"); | |
793 flipping = 0; | |
794 } else { | |
795 // test fliping in real - sometimes flips fails even if shouldn't | |
796 DFBResult ret; | |
797 ret = primary->Flip(primary,NULL,0); | |
798 if (ret!=DFB_OK) { | |
799 // recreate surface as non flipping | |
800 printf("DirectFB: Error - surface sucesfully created with flipping flag, but test flip failed.\n"); | |
801 flipping = 0; | |
802 dsc.caps &= ~DSCAPS_FLIPPING; | |
803 primary->Release(primary); | |
804 DFBCHECK (dfb->CreateSurface( dfb, &dsc, &primary )); | |
805 } | |
806 | |
807 } | |
808 } | |
809 /* if (verbose) if (flipping) { | |
810 printf("DirectFB: Flipping for primary: OK\n"); | |
811 } else { | |
812 printf("DirectFB: Flipping for primary: FAILED\n"); | |
813 } | |
814 */ } else { | |
815 flipping = 0; | |
816 #endif | |
817 DFBCHECK (dfb->CreateSurface( dfb, &dsc, &primary )); | |
818 #ifdef FLIPPING | |
819 } | |
820 #endif | |
821 | |
822 if (verbose) printf("DirectFB: Get primary surface: OK\n"); | |
823 | |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
824 primaryallocated=1; |
5189 | 825 } |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
826 |
6717 | 827 #ifdef FLIPPING |
828 // final check for flipping - based on real caps | |
829 | |
830 DFBCHECK (primary->GetCapabilities(primary,&dsc.caps)); | |
831 if (!(dsc.caps & DSCAPS_FLIPPING)) { | |
832 printf("DirectFB: Flipping si NOT active.\n"); | |
833 flipping = 0; | |
834 } else { | |
835 printf("DirectFB: Flipping is active.\n"); | |
836 flipping = 1; | |
837 } | |
838 // } | |
839 #endif | |
840 | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
841 DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height)); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
842 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
843 DFBCHECK (primary->GetPixelFormat (primary, &frame_format)); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
844 |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
845 // temporary frame buffer |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
846 dsc.flags = DSDESC_CAPS | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_WIDTH; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
847 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
848 dsc.width = in_width; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
849 dsc.height = in_height; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
850 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
851 // at this time use pixel req format or format of main disp |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
852 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
853 switch (format) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
854 case IMGFMT_RGB32: dsc.pixelformat = DSPF_ARGB; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
855 case IMGFMT_BGR32: dsc.pixelformat = DSPF_ARGB; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
856 case IMGFMT_RGB24: dsc.pixelformat = DSPF_RGB24; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
857 case IMGFMT_BGR24: dsc.pixelformat = DSPF_RGB24; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
858 case IMGFMT_RGB16: dsc.pixelformat = DSPF_RGB16; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
859 case IMGFMT_BGR16: dsc.pixelformat = DSPF_RGB16; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
860 case IMGFMT_RGB15: dsc.pixelformat = DSPF_RGB15; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
861 case IMGFMT_BGR15: dsc.pixelformat = DSPF_RGB15; break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
862 default: dsc.pixelformat = frame_format; break; // uknown or YUV -> retain layer format eg. RGB or YUY2 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
863 }; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
864 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
865 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
866 /* |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
867 * Create a surface based on the description of the source frame |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
868 */ |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
869 #if DIRECTFBVERSION > 908 |
5189 | 870 if (((dsc.pixelformat==DSPF_YV12)||(dsc.pixelformat==DSPF_I420)) && buggyYV12BitBlt) { |
871 memcpyBitBlt = 1; | |
872 } else { | |
873 memcpyBitBlt = 0; | |
874 }; | |
875 #else | |
876 memcpyBitBlt = 0; | |
877 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
878 |
6717 | 879 |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
880 // release frame if it is already allocated |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
881 if (frameallocated) { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
882 if (verbose ) printf("DirectFB: Release frame\n"); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
883 frame->Release (frame); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
884 frameallocated=0; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
885 }; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
886 |
6717 | 887 // picture size and position |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
888 |
6717 | 889 aspect_save_orig(in_width,in_height); |
890 aspect_save_prescale(d_width,d_height); | |
891 if (videolayeractive) {// try to set pos for YUY2 layer and proper aspect ratio | |
892 aspect_save_screenres(10000,10000); | |
893 aspect(&out_width,&out_height,A_ZOOM); | |
894 | |
895 ret = videolayer->SetScreenLocation(videolayer,(1-(float)out_width/10000)/2,(1-(float)out_height/10000)/2,((float)out_width/10000),((float)out_height/10000)); | |
896 | |
897 xoffset = 0; | |
898 yoffset = 0; | |
5189 | 899 } else { |
6717 | 900 // aspect ratio correction for zoom to fullscreen |
901 aspect_save_screenres(screen_width,screen_height); | |
902 | |
903 if(fs) /* -fs */ | |
904 aspect(&out_width,&out_height,A_ZOOM); | |
905 else | |
906 aspect(&out_width,&out_height,A_NOZOOM); | |
907 | |
908 | |
909 xoffset = (screen_width - out_width) / 2; | |
910 yoffset = (screen_height - out_height) / 2; | |
5189 | 911 } |
6717 | 912 |
913 if (((out_width != in_width) || (out_height != in_height)) && (!videolayeractive)) {stretch = 1;} else stretch=0; //yuy doesn't like strech and should not be needed | |
914 | |
915 #ifdef FLIPPING | |
916 // frame will not be allocated in case of overlay or nonstrech blit on primary | |
917 if (flipping && (!stretch)) { | |
918 frame = primary; | |
919 frameallocated = 0; | |
920 if (verbose) printf("DirectFB: Frame is NOT used (flipping is active).\n"); | |
921 } else { | |
922 #endif | |
923 /* | |
5189 | 924 dsc.caps = DSCAPS_SYSTEMONLY; |
6717 | 925 //let dfb decide where frame should be - preparation for AGP support |
926 */ | |
927 dsc.flags &=~DSDESC_CAPS; | |
928 | |
5189 | 929 DFBCHECK (dfb->CreateSurface( dfb, &dsc, &frame)); |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
930 frameallocated=1; |
6717 | 931 #ifdef FLIPPING |
932 if (verbose) if (flipping) { | |
933 printf("DirectFB: Frame created (flipping&stretch is active).\n"); | |
934 } else { | |
935 printf("DirectFB: Frame created (flipping is NOT active).\n"); | |
936 }; | |
937 }; | |
938 #endif | |
5189 | 939 |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
940 DFBCHECK (frame->GetPixelFormat (frame, &frame_format)); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
941 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
942 switch (frame_format) { |
5189 | 943 case DSPF_ARGB: if (verbose) printf("DirectFB: frame format ARGB\n"); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
944 frame_pixel_size = 4; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
945 break; |
5189 | 946 case DSPF_RGB32: if (verbose) printf("DirectFB: frame format RGB32\n"); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
947 frame_pixel_size = 4; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
948 break; |
5189 | 949 case DSPF_RGB24: if (verbose) printf("DirectFB: frame format RGB24\n"); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
950 frame_pixel_size = 3; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
951 break; |
5189 | 952 case DSPF_RGB16: if (verbose) printf("DirectFB: frame format RGB16\n"); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
953 frame_pixel_size = 2; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
954 break; |
5189 | 955 case DSPF_RGB15: if (verbose) printf("DirectFB: frame format RGB15\n"); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
956 frame_pixel_size = 2; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
957 break; |
5189 | 958 case DSPF_YUY2: if (verbose) printf("DirectFB: frame format YUY2\n"); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
959 frame_pixel_size = 2; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
960 break; |
5189 | 961 case DSPF_UYVY: if (verbose) printf("DirectFB: frame format UYVY\n"); |
962 frame_pixel_size = 2; | |
963 break; | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
964 #if DIRECTFBVERSION > 908 |
5189 | 965 case DSPF_YV12: if (verbose) printf("DirectFB: frame format YV12\n"); |
966 frame_pixel_size = 1; | |
967 break; | |
968 case DSPF_I420: if (verbose) printf("DirectFB: frame format I420\n"); | |
969 frame_pixel_size = 1; | |
970 break; | |
971 #endif | |
972 default: printf("DirectFB: - unknown format ->exit\n"); return 1; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
973 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
974 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
975 if ((out_width < in_width || out_height < in_height) && (!fs)) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
976 printf("Screensize is smaller than video size !\n"); |
5189 | 977 // return 1; // doesn't matter we will rescale |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
978 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
979 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
980 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
981 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
982 // yuv2rgb transform init |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
983 |
5189 | 984 if (((format == IMGFMT_YV12) || (format == IMGFMT_YUY2)) && (!videolayeractive)){ yuv2rgb_init(frame_pixel_size * 8,MODE_RGB);}; |
985 | |
986 if ((verbose)&&(memcpyBitBlt)) printf("DirectFB: Using memcpyBitBlt\n"); | |
987 #ifdef DIRECTRENDER | |
6717 | 988 //direct rendering is enabled in case of same buffer and img format |
5189 | 989 if ((format==IMGFMT_RGB32)&&(frame_format ==DSPF_ARGB) || |
990 (format==IMGFMT_BGR32)&&(frame_format ==DSPF_ARGB) || | |
991 (format==IMGFMT_RGB24)&&(frame_format ==DSPF_RGB24) || | |
992 (format==IMGFMT_BGR24)&&(frame_format ==DSPF_RGB24) || | |
993 (format==IMGFMT_RGB16)&&(frame_format ==DSPF_RGB16) || | |
994 (format==IMGFMT_BGR16)&&(frame_format ==DSPF_RGB16) || | |
995 (format==IMGFMT_RGB15)&&(frame_format ==DSPF_RGB15) || | |
996 (format==IMGFMT_BGR15)&&(frame_format ==DSPF_RGB15) || | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
997 #if DIRECTFBVERSION > 908 |
5189 | 998 (format==IMGFMT_YUY2)&&(frame_format ==DSPF_YUY2) || |
999 (format==IMGFMT_YV12)&&(frame_format ==DSPF_I420) || | |
1000 (format==IMGFMT_YV12)&&(frame_format ==DSPF_YV12)){ | |
1001 #else | |
1002 (format==IMGFMT_YUY2)&&(frame_format ==DSPF_YUY2)){ | |
1003 #endif | |
1004 dr_enabled=1; | |
1005 if (verbose) printf("DirectFB: Direct rendering supported\n"); | |
1006 } else { | |
1007 dr_enabled=0; | |
1008 if (verbose) printf("DirectFB: Direct rendering not supported\n"); | |
1009 }; | |
1010 #endif | |
1011 | |
1012 | |
1013 if (verbose) printf("DirectFB: Config finished [%ix%i]\n",out_width,out_height); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1014 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1015 return 0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1016 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1017 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1018 static uint32_t query_format(uint32_t format) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1019 { |
6211 | 1020 int ret = VFCAP_CSP_SUPPORTED|VFCAP_OSD; /* osd/sub is supported on every bpp */ |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1021 |
4359
266ebffd8fc9
no longer required to call preinit from init and query_format, mplayer.c does this
alex
parents:
4354
diff
changeset
|
1022 // preinit(NULL); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1023 |
5189 | 1024 if (verbose ) printf("DirectFB: Format query: %s\n",vo_format_name(format)); |
6717 | 1025 |
1026 switch (format) { | |
1027 // primary | |
1028 case IMGFMT_RGB32: | |
1029 case IMGFMT_BGR32: | |
1030 case IMGFMT_RGB24: | |
1031 case IMGFMT_BGR24: | |
1032 case IMGFMT_RGB16: | |
1033 case IMGFMT_BGR16: | |
1034 case IMGFMT_RGB15: | |
1035 case IMGFMT_BGR15: if (hwstretchblit) ret |=VFCAP_HWSCALE_UP|VFCAP_HWSCALE_DOWN; | |
1036 break; | |
1037 // overlay | |
1038 case IMGFMT_YUY2: | |
1039 case IMGFMT_YV12: if (videolayercaps.hwscale) ret |=VFCAP_HWSCALE_UP|VFCAP_HWSCALE_DOWN; | |
1040 break; | |
1041 } | |
1042 | |
1043 | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1044 switch (format) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1045 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1046 // RGB mode works only if color depth is same as on screen and this driver doesn't know before init |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1047 // so we couldn't report supported formats well |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1048 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1049 // Just support those detected by preinit |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1050 case IMGFMT_RGB32: |
6211 | 1051 case IMGFMT_BGR32: if (modes[3].valid) return ret; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1052 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1053 case IMGFMT_RGB24: |
6211 | 1054 case IMGFMT_BGR24: if (modes[2].valid) return ret; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1055 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1056 case IMGFMT_RGB16: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1057 case IMGFMT_BGR16: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1058 case IMGFMT_RGB15: |
6211 | 1059 case IMGFMT_BGR15: if (modes[1].valid) return ret; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1060 break; |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1061 case IMGFMT_YUY2: if (videolayerpresent) { |
6717 | 1062 if (videolayercaps.hwscale) ret |=VFCAP_HWSCALE_UP|VFCAP_HWSCALE_DOWN; |
5189 | 1063 if (videolayercaps.yuy2) { |
6211 | 1064 return ret|VFCAP_CSP_SUPPORTED_BY_HW; |
6717 | 1065 // disabled - MPlayer will do conversion automatically |
1066 /* } else { | |
6211 | 1067 return ret; |
6717 | 1068 */ }; |
5189 | 1069 }; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1070 break; |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1071 case IMGFMT_YV12: if ((videolayerpresent) && |
5189 | 1072 (videolayercaps.i420 || videolayercaps.iv12)) |
6211 | 1073 return ret|VFCAP_CSP_SUPPORTED_BY_HW; |
6717 | 1074 // disabled - MPlayer will do conversion automatically |
1075 /* else return ret; | |
1076 */ break; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1077 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1078 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1079 return 0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1080 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1081 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1082 static const vo_info_t *get_info(void) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1083 { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1084 return &vo_info; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1085 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1086 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1087 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1088 unsigned char *srca, int stride) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1089 { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1090 void *dst; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1091 int pitch; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1092 int len; |
6717 | 1093 static IDirectFBSurface *surface = NULL; |
1094 | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1095 |
5189 | 1096 #ifdef DIRECTRENDER |
1097 if(framelocked) { | |
1098 frame->Unlock(frame); | |
1099 framelocked=0; | |
1100 }; | |
1101 #endif | |
6717 | 1102 #ifdef FLIPPING |
1103 if (flipping && stretch) { | |
1104 DFBCHECK (primary->Lock(primary,DSLF_WRITE,&dst,&pitch)); | |
1105 } else { | |
1106 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1107 DFBCHECK (frame->Lock(frame,DSLF_WRITE,&dst,&pitch)); |
6717 | 1108 #ifdef FLIPPING |
1109 } | |
1110 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1111 switch(frame_format) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1112 case DSPF_RGB32: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1113 case DSPF_ARGB: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1114 vo_draw_alpha_rgb32(w,h,src,srca,stride,((uint8_t *) dst)+pitch*y0 + frame_pixel_size*x0,pitch); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1115 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1116 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1117 case DSPF_RGB24: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1118 vo_draw_alpha_rgb24(w,h,src,srca,stride,((uint8_t *) dst)+pitch*y0 + frame_pixel_size*x0,pitch); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1119 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1120 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1121 case DSPF_RGB16: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1122 vo_draw_alpha_rgb16(w,h,src,srca,stride,((uint8_t *) dst)+pitch*y0 + frame_pixel_size*x0,pitch); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1123 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1124 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1125 case DSPF_RGB15: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1126 vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) dst)+pitch*y0 + frame_pixel_size*x0,pitch); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1127 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1128 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1129 case DSPF_YUY2: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1130 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) dst) + pitch*y0 + frame_pixel_size*x0,pitch); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1131 break; |
3341 | 1132 |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1133 case DSPF_UYVY: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1134 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) dst) + pitch*y0 + frame_pixel_size*x0 + 1,pitch); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1135 break; |
5189 | 1136 |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1137 #if DIRECTFBVERSION > 908 |
5189 | 1138 case DSPF_I420: |
1139 case DSPF_YV12: | |
1140 vo_draw_alpha_yv12(w,h,src,srca,stride,((uint8_t *) dst) + pitch*y0 + frame_pixel_size*x0,pitch); | |
1141 break; | |
1142 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1143 } |
6717 | 1144 #ifdef FLIPPING |
1145 if (flipping && stretch) { | |
1146 DFBCHECK (primary->Unlock(primary)); | |
1147 } else { | |
1148 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1149 DFBCHECK (frame->Unlock(frame)); |
6717 | 1150 #ifdef FLIPPING |
1151 } | |
1152 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1153 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1154 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1155 static uint32_t draw_frame(uint8_t *src[]) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1156 { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1157 void *dst; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1158 int pitch; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1159 int len; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1160 |
5189 | 1161 // printf("Drawframe\n"); |
1162 #ifdef DIRECTRENDER | |
1163 if(framelocked) { | |
1164 frame->Unlock(frame); | |
1165 framelocked=0; | |
1166 }; | |
1167 #endif | |
1168 | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1169 DFBCHECK (frame->Lock(frame,DSLF_WRITE,&dst,&pitch)); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1170 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1171 switch (frame_format) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1172 case DSPF_ARGB: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1173 case DSPF_RGB32: |
5189 | 1174 case DSPF_RGB24: |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1175 case DSPF_RGB16: |
5189 | 1176 case DSPF_RGB15: switch (pixel_format) { |
1177 case IMGFMT_YV12: | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1178 yuv2rgb(dst,src[0],src[1],src[2],in_width,in_height,pitch,in_width,in_width/2); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1179 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1180 /* how to handle this? need conversion from YUY2 to RGB*/ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1181 /* case IMGFMT_YUY2: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1182 yuv2rgb(dst,src[0],src[0]+1,src[0]+3,1,in_height*in_width/2,frame_pixel_size*2,4,4); //odd pixels |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1183 yuv2rgb(dst+1,src[0]+2,src[0]+1,src[0]+3,1,in_height*in_width/2,frame_pixel_size*2,4,4); //even pixels |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1184 break;*/ |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1185 // RGB - just copy |
5189 | 1186 default: if (source_pixel_size==frame_pixel_size) { |
1187 if (pitch==(in_width*frame_pixel_size)) { | |
1188 memcpy(dst,src[0],in_width * in_height * source_pixel_size); | |
1189 } else { | |
1190 int i; | |
1191 int sp=in_width*source_pixel_size; | |
1192 int ll=min(sp,pitch); | |
1193 for (i=0;i<in_height;i++) { | |
1194 memcpy(dst+i*pitch,src[0]+i*sp,ll); | |
1195 }; | |
1196 }; | |
1197 }; | |
1198 }; | |
1199 break; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1200 case DSPF_YUY2: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1201 switch (pixel_format) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1202 case IMGFMT_YV12: yv12toyuy2(src[0],src[1],src[2],dst,in_width,in_height,in_width,in_width >>1,pitch); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1203 break; |
5189 | 1204 case IMGFMT_YUY2: if (pitch==(in_width*2)) { |
1205 memcpy(dst,src[0],in_width * in_height * source_pixel_size); | |
1206 } else { | |
1207 int i; | |
1208 for (i=0;i<in_height;i++) { | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1209 memcpy(dst+i*pitch,src[0]+i*in_width*2,in_width*2); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1210 } |
5189 | 1211 } |
1212 break; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1213 // hopefully there will be no RGB in this case otherwise convert - not implemented |
5189 | 1214 }; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1215 break; |
5189 | 1216 |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1217 #if DIRECTFBVERSION > 908 |
5189 | 1218 case DSPF_YV12: |
1219 switch (pixel_format) { | |
1220 case IMGFMT_YV12: { | |
1221 int i; | |
1222 int p=min(in_width,pitch); | |
1223 for (i=0;i<in_height;i++) { | |
1224 memcpy(dst+i*pitch,src[0]+i*in_width,p); | |
1225 } | |
1226 dst += pitch*in_height; | |
1227 p = p/2; | |
1228 for (i=0;i<in_height/2;i++) { | |
1229 memcpy(dst+i*pitch/2,src[2]+i*in_width/2,p); | |
1230 } | |
1231 dst += pitch*in_height/4; | |
1232 for (i=0;i<in_height/2;i++) { | |
1233 memcpy(dst+i*pitch/2,src[1]+i*in_width/2,p); | |
1234 } | |
1235 }; | |
1236 break; | |
1237 case IMGFMT_YUY2: yuy2toyv12(src[0],dst,dst+pitch*in_height+pitch*in_height/4,dst+pitch*in_height,in_width,in_height,pitch,pitch/2,pitch/2); | |
1238 break; | |
1239 // hopefully there will be no RGB in this case otherwise convert - not implemented | |
1240 } | |
1241 break; | |
1242 case DSPF_I420: | |
1243 switch (pixel_format) { | |
1244 case IMGFMT_YV12: { | |
1245 int i; | |
1246 int p=min(in_width,pitch); | |
1247 for (i=0;i<in_height;i++) { | |
1248 memcpy(dst+i*pitch,src[0]+i*in_width,p); | |
1249 } | |
1250 dst += pitch*in_height; | |
1251 p = p/2; | |
1252 for (i=0;i<in_height/2;i++) { | |
1253 memcpy(dst+i*pitch/2,src[1]+i*in_width/2,p); | |
1254 } | |
1255 dst += pitch*in_height/4; | |
1256 for (i=0;i<in_height/2;i++) { | |
1257 memcpy(dst+i*pitch/2,src[2]+i*in_width/2,p); | |
1258 } | |
1259 }; | |
1260 break; | |
1261 case IMGFMT_YUY2: yuy2toyv12(src[0],dst,dst+pitch*in_height,dst+pitch*in_height+pitch*in_height/4,in_width,in_height,pitch,pitch/2,pitch/2); | |
1262 break; | |
1263 // hopefully there will be no RGB in this case otherwise convert - not implemented | |
1264 } | |
1265 break; | |
1266 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1267 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1268 DFBCHECK (frame->Unlock(frame)); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1269 return 0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1270 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1271 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1272 static uint32_t draw_slice(uint8_t *src[], int stride[], int w, int h, int x, int y) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1273 { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1274 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1275 int err; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1276 void *dst; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1277 uint8_t *s; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1278 int pitch; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1279 int i; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1280 |
5189 | 1281 #ifdef DIRECTRENDER |
1282 if(framelocked) { | |
1283 frame->Unlock(frame); | |
1284 framelocked=0; | |
1285 }; | |
1286 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1287 |
5189 | 1288 err = frame->Lock(frame,DSLF_WRITE,&dst,&pitch); |
1289 // err = primary->Lock(primary,DSLF_WRITE,&dst,&pitch); // for direct rendering | |
1290 | |
1291 // printf("Drawslice w=%i h=%i x=%i y=%i pitch=%i\n",w,h,x,y,pitch); | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1292 |
5189 | 1293 if (err) { |
1294 printf("DirectFB: Frame lock failed!"); | |
1295 return 1; | |
1296 }; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1297 switch (frame_format) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1298 case DSPF_ARGB: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1299 case DSPF_RGB32: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1300 case DSPF_RGB24: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1301 case DSPF_RGB16: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1302 case DSPF_RGB15: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1303 switch (pixel_format) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1304 case IMGFMT_YV12: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1305 yuv2rgb(dst+ y * pitch + frame_pixel_size*x ,src[0],src[1],src[2],w,h,pitch,stride[0],stride[1]); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1306 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1307 default: if (source_pixel_size==frame_pixel_size) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1308 dst += x * frame_pixel_size; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1309 s = src[0]; |
5189 | 1310 for (i=y;i<(y+h);i++) { |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1311 memcpy(dst,s,w); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1312 dst += (pitch); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1313 s += stride[0]; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1314 }; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1315 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1316 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1317 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1318 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1319 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1320 case DSPF_YUY2: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1321 switch (pixel_format) { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1322 case IMGFMT_YV12: yv12toyuy2(src[0],src[1],src[2],dst + pitch*y + frame_pixel_size*x ,w,h,stride[0],stride[1],pitch); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1323 break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1324 // hopefully there will be no RGB in this case otherwise convert - not implemented |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1325 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1326 break; |
5189 | 1327 |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1328 #if DIRECTFBVERSION > 908 |
5189 | 1329 case DSPF_YV12: |
1330 switch (pixel_format) { | |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1331 case IMGFMT_YV12: { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1332 void *d,*s; |
5189 | 1333 int i; |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1334 d = dst + pitch*y + x; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1335 s = src[0]; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1336 for (i=0;i<h;i++) { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1337 memcpy(d,s,w); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1338 d+=pitch; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1339 s+=stride[0]; |
5189 | 1340 } |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1341 d = dst + pitch*in_height + pitch*y/4 + x/2; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1342 s = src[2]; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1343 for (i=0;i<h/2;i++) { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1344 memcpy(d,s,w/2); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1345 d+=pitch/2; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1346 s+=stride[2]; |
5189 | 1347 } |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1348 d = dst + pitch*in_height + pitch*in_height/4 + pitch*y/4 + x/2; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1349 s = src[1]; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1350 for (i=0;i<h/2;i++) { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1351 memcpy(d,s,w/2); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1352 d+=pitch/2; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1353 s+=stride[1]; |
5189 | 1354 } |
1355 }; | |
1356 break; | |
1357 /* case IMGFMT_YUY2: { | |
1358 int i; | |
1359 for (i=y;i<(y+h);i++) { | |
1360 yuy2toyv12(src[0]+i*stride[0],dst+i*pitch+x*frame_pixel_size,dst+pitch*(in_height+i/2)+x*frame_pixel_size/2,dst+pitch*(in_height+in_height/4+i/2)+x*frame_pixel_size/2,w,h,pitch,pitch/2,pitch/2); | |
1361 } | |
1362 } | |
1363 | |
1364 break; | |
1365 */ // hopefully there will be no RGB in this case otherwise convert - not implemented | |
1366 } | |
1367 break; | |
1368 | |
1369 case DSPF_I420: | |
1370 switch (pixel_format) { | |
1371 case IMGFMT_YV12: { | |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1372 void *d,*s; |
5189 | 1373 int i; |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1374 d = dst + pitch*y + x; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1375 s = src[0]; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1376 for (i=0;i<h;i++) { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1377 memcpy(d,s,w); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1378 d+=pitch; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1379 s+=stride[0]; |
5189 | 1380 } |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1381 d = dst + pitch*in_height + pitch*y/4 + x/2; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1382 s = src[1]; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1383 for (i=0;i<h/2;i++) { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1384 memcpy(d,s,w/2); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1385 d+=pitch/2; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1386 s+=stride[1]; |
5189 | 1387 } |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1388 d = dst + pitch*in_height + pitch*in_height/4 + pitch*y/4 + x/2; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1389 s = src[2]; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1390 for (i=0;i<h/2;i++) { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1391 memcpy(d,s,w/2); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1392 d+=pitch/2; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1393 s+=stride[2]; |
5189 | 1394 } |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1395 }; |
5189 | 1396 break; |
1397 /* case IMGFMT_YUY2: { | |
1398 int i; | |
1399 for (i=y;i<(y+h);i++) { | |
1400 yuy2toyv12(src[0]+i*stride[0],dst+i*pitch+x*frame_pixel_size,dst+pitch*(in_height+in_height/4+i/2)+x*frame_pixel_size/2,dst+pitch*(in_height+i/2)+x*frame_pixel_size/2,w,h,pitch,pitch/2,pitch/2); | |
1401 } | |
1402 } | |
1403 | |
1404 break; | |
1405 */ // hopefully there will be no RGB in this case otherwise convert - not implemented | |
1406 } | |
1407 break; | |
1408 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1409 }; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1410 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1411 frame->Unlock(frame); |
5189 | 1412 // primary->Unlock(primary); |
1413 | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1414 return 0; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1415 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1416 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1417 extern void mplayer_put_key(int code); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1418 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1419 #include "../linux/keycodes.h" |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1420 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1421 static void check_events(void) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1422 { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1423 |
6717 | 1424 if (buffer) { |
1425 | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1426 DFBInputEvent event; |
5189 | 1427 //if (verbose) printf ("DirectFB: Check events entered\n"); |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1428 #if DIRECTFBVERSION > 909 |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1429 if (buffer->GetEvent(buffer, DFB_EVENT (&event)) == DFB_OK) { |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1430 #else |
5189 | 1431 if (buffer->GetEvent(buffer, &event) == DFB_OK) { |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1432 #endif |
3341 | 1433 if (event.type == DIET_KEYPRESS) { |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1434 #if DIRECTFBVERSION > 910 |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1435 switch (event.key_symbol) { |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1436 case DIKS_ESCAPE: |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1437 mplayer_put_key('q'); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1438 break; |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1439 case DIKS_PAGE_UP: mplayer_put_key(KEY_PAGE_UP);break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1440 case DIKS_PAGE_DOWN: mplayer_put_key(KEY_PAGE_DOWN);break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1441 case DIKS_CURSOR_UP: mplayer_put_key(KEY_UP);break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1442 case DIKS_CURSOR_DOWN: mplayer_put_key(KEY_DOWN);break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1443 case DIKS_CURSOR_LEFT: mplayer_put_key(KEY_LEFT);break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1444 case DIKS_CURSOR_RIGHT: mplayer_put_key(KEY_RIGHT);break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1445 case DIKS_INSERT: mplayer_put_key(KEY_INSERT);break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1446 case DIKS_DELETE: mplayer_put_key(KEY_DELETE);break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1447 case DIKS_HOME: mplayer_put_key(KEY_HOME);break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1448 case DIKS_END: mplayer_put_key(KEY_END);break; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1449 |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1450 default:mplayer_put_key(event.key_symbol); |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1451 }; |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1452 #else /* DirectFB < 0.9.11 */ |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1453 switch (event.keycode) { |
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1454 case DIKC_ESCAPE: mplayer_put_key('q');break; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1455 case DIKC_KP_PLUS: mplayer_put_key('+');break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1456 case DIKC_KP_MINUS: mplayer_put_key('-');break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1457 case DIKC_TAB: mplayer_put_key('\t');break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1458 case DIKC_PAGEUP: mplayer_put_key(KEY_PAGE_UP);break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1459 case DIKC_PAGEDOWN: mplayer_put_key(KEY_PAGE_DOWN);break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1460 case DIKC_UP: mplayer_put_key(KEY_UP);break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1461 case DIKC_DOWN: mplayer_put_key(KEY_DOWN);break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1462 case DIKC_LEFT: mplayer_put_key(KEY_LEFT);break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1463 case DIKC_RIGHT: mplayer_put_key(KEY_RIGHT);break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1464 case DIKC_ASTERISK: |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1465 case DIKC_KP_MULT:mplayer_put_key('*');break; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1466 case DIKC_KP_DIV: mplayer_put_key('/');break; |
3341 | 1467 case DIKC_INSERT: mplayer_put_key(KEY_INSERT);break; |
1468 case DIKC_DELETE: mplayer_put_key(KEY_DELETE);break; | |
1469 case DIKC_HOME: mplayer_put_key(KEY_HOME);break; | |
1470 case DIKC_END: mplayer_put_key(KEY_END);break; | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1471 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1472 default:mplayer_put_key(event.key_ascii); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1473 }; |
6262
ae3cfbfc8e3f
-updates vo_directfb (+configure&makefile) according to planned changes
arpi
parents:
6211
diff
changeset
|
1474 #endif |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1475 }; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1476 }; |
6717 | 1477 } |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1478 // empty buffer, because of repeating (keyboard repeat is faster than key handling |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1479 // and this causes problems during seek) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1480 // temporary workabout should be solved in the future |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1481 |
6717 | 1482 if (buffer) buffer->Reset(buffer); |
5189 | 1483 //if (verbose) printf ("DirectFB: Check events finished\n"); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1484 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1485 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1486 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1487 static void draw_osd(void) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1488 { |
6717 | 1489 // if flipping is active we will draw directly to primary |
1490 // we will also blit from frame to primary if necessary | |
1491 #ifdef FLIPPING | |
1492 if (stretch && flipping) { | |
1493 DFBRectangle rect; | |
1494 rect.x=xoffset; | |
1495 rect.y=yoffset; | |
1496 rect.w=out_width; | |
1497 rect.h=out_height; | |
1498 #ifdef DIRECTRENDER | |
1499 if(framelocked) { | |
1500 frame->Unlock(frame); | |
1501 framelocked=0; | |
1502 }; | |
1503 #endif | |
1504 // lets clear blackborders | |
1505 primary->SetColor(primary,0,0,0,0); | |
1506 // top | |
1507 primary->FillRectangle(primary,0,0,screen_width,yoffset); | |
1508 // bottom | |
1509 primary->FillRectangle(primary,0,screen_height-yoffset,screen_width,yoffset); | |
1510 //left | |
1511 // primary->FillRectangle(primary,0,yoffset,xoffset,screen_height-2*yoffset); | |
1512 //right | |
1513 // primary->FillRectangle(primary,screen_width-xoffset-1,yoffset,xoffset,screen_height-2*yoffset); | |
1514 | |
1515 DFBCHECK (primary->StretchBlit(primary,frame,NULL,&rect)); | |
1516 blitperformed=1; | |
1517 vo_draw_text(screen_width, screen_height, draw_alpha); | |
1518 } else { | |
1519 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1520 vo_draw_text(in_width, in_height, draw_alpha); |
6717 | 1521 #ifdef FLIPPING |
1522 } | |
1523 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1524 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1525 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1526 static void flip_page(void) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1527 { |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1528 DFBSurfaceBlittingFlags flags=DSBLIT_NOFX; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1529 |
5189 | 1530 // if (verbose) printf("DirectFB: Flip page entered"); |
1531 | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1532 DFBCHECK (primary->SetBlittingFlags(primary,flags)); |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1533 |
5189 | 1534 #ifdef DIRECTRENDER |
1535 if(framelocked) { | |
1536 frame->Unlock(frame); | |
1537 framelocked=0; | |
1538 }; | |
1539 #endif | |
6717 | 1540 if (stretch |
1541 #ifdef FLIPPING | |
1542 && (!blitperformed) | |
1543 #endif | |
1544 ) { | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1545 DFBRectangle rect; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1546 rect.x=xoffset; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1547 rect.y=yoffset; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1548 rect.w=out_width; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1549 rect.h=out_height; |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1550 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1551 DFBCHECK (primary->StretchBlit(primary,frame,NULL,&rect)); |
6717 | 1552 #ifdef FLIPPING |
1553 blitperformed=0; | |
1554 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1555 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1556 else { |
6717 | 1557 #ifdef FLIPPING |
1558 if (!flipping) { | |
1559 #endif | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1560 #if DIRECTFBVERSION > 908 |
5189 | 1561 if (!memcpyBitBlt) { |
1562 #endif | |
1563 DFBCHECK (primary->Blit(primary,frame,NULL,xoffset,yoffset)); | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1564 #if DIRECTFBVERSION > 908 |
5189 | 1565 } else { |
1566 | |
1567 int err,err2; | |
1568 void *dst,*src; | |
1569 int pitch,pitch2; | |
1570 | |
1571 // printf("MemcpyBlit"); | |
1572 | |
1573 err = frame->Lock(frame,DSLF_READ,&src,&pitch); | |
1574 err2 = primary->Lock(primary,DSLF_WRITE,&dst,&pitch2); | |
1575 | |
1576 // printf("DirectFB: pitch=%i pitch2=%i\n",pitch,pitch2); | |
1577 | |
1578 | |
1579 if (pitch==pitch2) { | |
1580 memcpy(dst,src,in_height * pitch * 1.5); | |
1581 } else | |
1582 { | |
1583 int i; | |
1584 int p=min(pitch,pitch2); | |
1585 for (i=0;i<in_height;i++) { | |
1586 memcpy (dst+i*pitch2,src+i*pitch,p); | |
1587 }; | |
1588 dst+= in_height * pitch2; | |
1589 src+= in_height * pitch; | |
1590 p=p/2; | |
1591 for (i=0;i<in_height/2;i++) { | |
1592 memcpy (dst+i*pitch2/2,src+i*pitch/2,p); | |
1593 }; | |
1594 dst+= in_height * pitch2/4; | |
1595 src+= in_height * pitch/4; | |
1596 for (i=0;i<in_height/2;i++) { | |
1597 memcpy (dst+i*pitch2/2,src+i*pitch/2,p); | |
1598 }; | |
1599 } | |
1600 frame->Unlock(frame); | |
1601 primary->Unlock(primary); | |
1602 }; | |
1603 #endif | |
6717 | 1604 #ifdef FLIPPING |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1605 }; |
6717 | 1606 #endif |
1607 }; | |
1608 #ifdef FLIPPING | |
1609 if (flipping) { | |
1610 if (videolayeractive && wait_vsync_after_flip) { | |
1611 DFBCHECK (primary->Flip (primary, NULL, /*DSFLIP_WAITFORSYNC*/0)); | |
1612 /* workabout for videolayer | |
1613 flip will take place on next vsync, but pointers are updated instanlty -> | |
1614 -> decoding goes into "new" buffer which is still displayed -> | |
1615 -> so wait for vsync to be safe (and have surfaces REALLY flipped) | |
1616 */ | |
1617 dfb->WaitForSync(dfb); | |
1618 } else { | |
1619 DFBCHECK (primary->Flip (primary, NULL, DSFLIP_WAITFORSYNC)); | |
1620 }; | |
1621 }; | |
1622 #endif | |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1623 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1624 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1625 static void uninit(void) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1626 { |
5189 | 1627 if (verbose ) printf("DirectFB: uninit entered\n"); |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1628 /* |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1629 * (Release) |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1630 */ |
5189 | 1631 if (verbose ) printf("DirectFB: Release buffer\n"); |
6717 | 1632 if (buffer) buffer->Release (buffer); |
5189 | 1633 if (verbose ) printf("DirectFB: Release keyboard\n"); |
6717 | 1634 if (keyboard) keyboard->Release (keyboard); |
5258
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1635 if (frameallocated) { |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1636 if (verbose ) printf("DirectFB: Release frame\n"); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1637 frame->Release (frame); |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1638 frameallocated=0; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1639 }; |
c9ccddcbdd81
ixes bug in draw_slice and also fixes compilance to
atmos4
parents:
5189
diff
changeset
|
1640 |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1641 // we will not release dfb and layer because there could be a new film |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1642 |
5189 | 1643 if (verbose ) printf("DirectFB: Release primary\n"); |
3588
8e56fe18e7fb
Applied patch by Jiri Svoboda <Jiri.Svoboda@seznam.cz>:
pl
parents:
3341
diff
changeset
|
1644 primary->Release (primary); |
8e56fe18e7fb
Applied patch by Jiri Svoboda <Jiri.Svoboda@seznam.cz>:
pl
parents:
3341
diff
changeset
|
1645 // switch off BES |
8e56fe18e7fb
Applied patch by Jiri Svoboda <Jiri.Svoboda@seznam.cz>:
pl
parents:
3341
diff
changeset
|
1646 if (videolayer) videolayer->SetOpacity(videolayer,0); |
5189 | 1647 |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1648 #if DIRECTFBVERSION > 908 |
5189 | 1649 if (verbose&&videolayer ) printf("DirectFB: Release videolayer\n"); |
1650 if (videolayer) videolayer->Release(videolayer); | |
1651 | |
1652 if (verbose ) printf("DirectFB: Release DirectFB library\n"); | |
1653 dfb->Release (dfb); | |
1654 #endif | |
1655 | |
1656 if (verbose ) printf("DirectFB: Uninit done.\n"); | |
1657 } | |
1658 | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1659 static uint32_t directfb_set_video_eq(char *data, int value) //data==name |
5189 | 1660 { |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1661 |
5189 | 1662 DFBColorAdjustment ca; |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1663 float factor = (float)0xffff / 200.0; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1664 DFBDisplayLayerCapabilities caps; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1665 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1666 if (videolayer) { |
5189 | 1667 |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1668 #if DIRECTFBVERSION > 912 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1669 DFBDisplayLayerDescription desc; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1670 videolayer->GetDescription(videolayer,&desc); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1671 caps = desc.caps; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1672 #else |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1673 videolayer->GetCapabilities(videolayer,&caps); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1674 #endif |
5189 | 1675 ca.flags=DCAF_NONE; |
1676 | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1677 if (! strcmp( data,"brightness" )) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1678 if (caps & DLCAPS_BRIGHTNESS) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1679 ca.brightness = value * factor +0x8000; |
5189 | 1680 ca.flags |= DCAF_BRIGHTNESS; |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1681 if (verbose) printf("DirectFB: SetVEq Brightness 0x%X %i\n",ca.brightness,value); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1682 } else return VO_FALSE; |
5189 | 1683 } |
1684 | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1685 if (! strcmp( data,"contrast" )) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1686 if ((caps & DLCAPS_CONTRAST)) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1687 ca.contrast = value * factor + 0x8000; |
5189 | 1688 ca.flags |= DCAF_CONTRAST; |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1689 if (verbose) printf("DirectFB: SetVEq Contrast 0x%X %i\n",ca.contrast,value); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1690 } else return VO_FALSE; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1691 } |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1692 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1693 if (! strcmp( data,"hue" )) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1694 if ((caps & DLCAPS_HUE)) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1695 ca.hue = value * factor + 0x8000; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1696 ca.flags |= DCAF_HUE; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1697 if (verbose) printf("DirectFB: SetVEq Hue 0x%X %i\n",ca.hue,value); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1698 } else return VO_FALSE; |
5189 | 1699 } |
1700 | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1701 if (! strcmp( data,"saturation" )) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1702 if ((caps & DLCAPS_SATURATION)) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1703 ca.saturation = value * factor + 0x8000; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1704 ca.flags |= DCAF_SATURATION; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1705 if (verbose) printf("DirectFB: SetVEq Saturation 0x%X %i\n",ca.saturation,value); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1706 } else return VO_FALSE; |
5189 | 1707 } |
1708 | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1709 if (ca.flags != DCAF_NONE) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1710 videolayer->SetColorAdjustment(videolayer,&ca); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1711 return VO_TRUE; |
5189 | 1712 } |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1713 } |
5189 | 1714 |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1715 return VO_FALSE; |
3275
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1716 |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1717 } |
38344371432f
vo DirectFB support by Jiri Svoboda <Jiri.Svoboda@seznam.cz>
arpi
parents:
diff
changeset
|
1718 |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1719 static uint32_t directfb_get_video_eq(char *data, int *value) // data==name |
5189 | 1720 { |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1721 |
5189 | 1722 DFBColorAdjustment ca; |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1723 float factor = 200.0 / (float)0xffff; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1724 DFBDisplayLayerCapabilities caps; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1725 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1726 if (videolayer) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1727 #if DIRECTFBVERSION > 912 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1728 DFBDisplayLayerDescription desc; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1729 videolayer->GetDescription(videolayer,&desc); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1730 caps = desc.caps; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1731 #else |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1732 videolayer->GetCapabilities(videolayer,&caps); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1733 #endif |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1734 |
5189 | 1735 videolayer->GetColorAdjustment(videolayer,&ca); |
1736 | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1737 if (! strcmp( data,"brightness" )) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1738 if (caps & DLCAPS_BRIGHTNESS) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1739 *value = (int) ((ca.brightness-0x8000) * factor); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1740 if (verbose) printf("DirectFB: GetVEq Brightness 0x%X %i\n",ca.brightness,*value); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1741 return VO_TRUE; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1742 } else return VO_FALSE; |
5189 | 1743 } |
1744 | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1745 if (! strcmp( data,"contrast" )) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1746 if ((caps & DLCAPS_CONTRAST)) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1747 *value = (int) ((ca.contrast-0x8000) * factor); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1748 if (verbose) printf("DirectFB: GetVEq Contrast 0x%X %i\n",ca.contrast,*value); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1749 return VO_TRUE; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1750 } else return VO_FALSE; |
5189 | 1751 } |
1752 | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1753 if (! strcmp( data,"hue" )) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1754 if ((caps & DLCAPS_HUE)) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1755 *value = (int) ((ca.hue-0x8000) * factor); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1756 if (verbose) printf("DirectFB: GetVEq Hue 0x%X %i\n",ca.hue,*value); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1757 return VO_TRUE; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1758 } else return VO_FALSE; |
5189 | 1759 } |
1760 | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1761 if (! strcmp( data,"saturation" )) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1762 if ((caps & DLCAPS_SATURATION)) { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1763 *value = (int) ((ca.saturation-0x8000) * factor); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1764 if (verbose) printf("DirectFB: GetVEq Saturation 0x%X %i\n",ca.saturation,*value); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1765 return VO_TRUE; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1766 } else return VO_FALSE; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1767 } |
5189 | 1768 } |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1769 return VO_FALSE; |
5189 | 1770 } |
1771 | |
1772 #ifdef DIRECTRENDER | |
1773 static uint32_t get_image(mp_image_t *mpi){ | |
1774 int err; | |
1775 void *dst; | |
1776 int pitch; | |
1777 | |
1778 // printf("DirectFB: get_image() called\n"); | |
1779 | |
1780 // now we are always in system memory (in this version - mybe will change in future) | |
6717 | 1781 #ifdef FLIPPING |
1782 if((mpi->flags&MP_IMGFLAG_READABLE) && invram) return VO_FALSE; // slow video ram | |
1783 #endif | |
5189 | 1784 // printf("width=%d vs. pitch=%d, flags=0x%X \n",mpi->width,pitch,mpi->flags); |
1785 if((mpi->width==pitch/frame_pixel_size) || | |
1786 (mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH))){ | |
1787 // we're lucky or codec accepts stride => ok, let's go! | |
1788 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
1789 | |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1790 #if DIRECTFBVERSION > 908 |
5189 | 1791 err = frame->Lock(frame,DSLF_WRITE/*|DSLF_READ*/,&dst,&pitch); |
1792 // err = primary->Lock(primary,DSLF_WRITE,&dst,&pitch); // for real direct rendering | |
1793 | |
1794 if (err) { | |
1795 printf("DirectFB: Frame lock failed!"); | |
1796 return VO_FALSE; | |
1797 }; | |
1798 framelocked=1; | |
1799 | |
1800 //YV12 format | |
1801 mpi->planes[0]=dst; | |
1802 switch(frame_format) { | |
1803 case DSPF_I420: mpi->planes[1]=dst + pitch*in_height; | |
1804 mpi->planes[2]=mpi->planes[1] + pitch*in_height/4; | |
1805 break; | |
1806 case DSPF_YV12: mpi->planes[2]=dst + pitch*in_height; | |
1807 mpi->planes[1]=mpi->planes[1] + pitch*in_height/4; | |
1808 break; | |
1809 | |
1810 } | |
1811 mpi->width=mpi->stride[0]=pitch; | |
1812 mpi->stride[1]=mpi->stride[2]=pitch/2; | |
1813 #else | |
1814 return VO_FALSE; | |
1815 #endif | |
1816 } else { | |
1817 err = frame->Lock(frame,DSLF_WRITE/*|DSLF_READ*/,&dst,&pitch); | |
1818 // err = primary->Lock(primary,DSLF_WRITE,&dst,&pitch); // for real direct rendering | |
1819 | |
1820 if (err) { | |
1821 printf("DirectFB: Frame lock failed!"); | |
1822 return VO_FALSE; | |
1823 }; | |
1824 framelocked=1; | |
1825 //YUY2 and RGB formats | |
1826 mpi->planes[0]=dst; | |
1827 mpi->width=pitch/frame_pixel_size; | |
1828 mpi->stride[0]=pitch; | |
1829 } | |
1830 mpi->flags|=MP_IMGFLAG_DIRECT; | |
1831 // printf("DirectFB: get_image() SUCCESS -> Direct Rendering ENABLED\n"); | |
1832 return VO_TRUE; | |
1833 } | |
1834 | |
1835 if(framelocked) { | |
1836 frame->Unlock(frame); | |
1837 framelocked=0; | |
1838 }; | |
1839 return VO_FALSE; | |
1840 } | |
1841 #endif | |
1842 | |
4596 | 1843 static uint32_t control(uint32_t request, void *data, ...) |
4352 | 1844 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
1845 switch (request) { |
6920
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1846 case VOCTRL_SET_EQUALIZER: |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1847 { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1848 va_list ap; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1849 int value; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1850 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1851 va_start(ap, data); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1852 value = va_arg(ap, int); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1853 va_end(ap); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1854 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1855 return(directfb_set_video_eq(data, value)); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1856 } |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1857 case VOCTRL_GET_EQUALIZER: |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1858 { |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1859 va_list ap; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1860 int *value; |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1861 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1862 va_start(ap, data); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1863 value = va_arg(ap, int*); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1864 va_end(ap); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1865 |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1866 return(directfb_get_video_eq(data, value)); |
447ee5862f5d
updates, using DIRECTFBVERSION and video EQ support by Jiri.Svoboda@seznam.cz
arpi
parents:
6717
diff
changeset
|
1867 } |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
1868 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
1869 return query_format(*((uint32_t*)data)); |
5189 | 1870 #ifdef DIRECTRENDER |
1871 case VOCTRL_GET_IMAGE: | |
1872 // printf("DirectFB: control(VOCTRL_GET_IMAGE) called\n"); | |
1873 if (dr_enabled) return get_image(data); | |
1874 #endif | |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
1875 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4433
diff
changeset
|
1876 return VO_NOTIMPL; |
4352 | 1877 } |