Mercurial > sdl-ios-xcode
comparison src/video/photon/SDL_phyuv.c @ 1662:782fd950bd46 SDL-1.3
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid.
The code is now run through a consistent indent format:
indent -i4 -nut -nsc -br -ce
The headers are being converted to automatically generate doxygen documentation.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 28 May 2006 13:04:16 +0000 |
parents | 51038e80ae59 |
children | 4da1ee79c9af |
comparison
equal
deleted
inserted
replaced
1661:281d3f4870e5 | 1662:782fd950bd46 |
---|---|
34 | 34 |
35 #define OVERLAY_STATE_UNINIT 0 | 35 #define OVERLAY_STATE_UNINIT 0 |
36 #define OVERLAY_STATE_ACTIVE 1 | 36 #define OVERLAY_STATE_ACTIVE 1 |
37 | 37 |
38 /* The functions are used to manipulate software video overlays */ | 38 /* The functions are used to manipulate software video overlays */ |
39 static struct private_yuvhwfuncs ph_yuvfuncs = | 39 static struct private_yuvhwfuncs ph_yuvfuncs = { |
40 { | |
41 ph_LockYUVOverlay, | 40 ph_LockYUVOverlay, |
42 ph_UnlockYUVOverlay, | 41 ph_UnlockYUVOverlay, |
43 ph_DisplayYUVOverlay, | 42 ph_DisplayYUVOverlay, |
44 ph_FreeYUVOverlay | 43 ph_FreeYUVOverlay |
45 }; | 44 }; |
46 | 45 |
47 int grab_ptrs2(PgVideoChannel_t* channel, FRAMEDATA* Frame0, FRAMEDATA* Frame1) | 46 int |
47 grab_ptrs2 (PgVideoChannel_t * channel, FRAMEDATA * Frame0, | |
48 FRAMEDATA * Frame1) | |
48 { | 49 { |
49 int planes = 0; | 50 int planes = 0; |
50 | 51 |
51 /* Buffers have moved; re-obtain the pointers */ | 52 /* Buffers have moved; re-obtain the pointers */ |
52 Frame0->Y = (unsigned char *)PdGetOffscreenContextPtr(channel->yplane1); | 53 Frame0->Y = (unsigned char *) PdGetOffscreenContextPtr (channel->yplane1); |
53 Frame1->Y = (unsigned char *)PdGetOffscreenContextPtr(channel->yplane2); | 54 Frame1->Y = (unsigned char *) PdGetOffscreenContextPtr (channel->yplane2); |
54 Frame0->U = (unsigned char *)PdGetOffscreenContextPtr(channel->vplane1); | 55 Frame0->U = (unsigned char *) PdGetOffscreenContextPtr (channel->vplane1); |
55 Frame1->U = (unsigned char *)PdGetOffscreenContextPtr(channel->vplane2); | 56 Frame1->U = (unsigned char *) PdGetOffscreenContextPtr (channel->vplane2); |
56 Frame0->V = (unsigned char *)PdGetOffscreenContextPtr(channel->uplane1); | 57 Frame0->V = (unsigned char *) PdGetOffscreenContextPtr (channel->uplane1); |
57 Frame1->V = (unsigned char *)PdGetOffscreenContextPtr(channel->uplane2); | 58 Frame1->V = (unsigned char *) PdGetOffscreenContextPtr (channel->uplane2); |
58 | 59 |
59 if (Frame0->Y) | 60 if (Frame0->Y) |
60 planes++; | 61 planes++; |
61 | 62 |
62 if (Frame0->U) | 63 if (Frame0->U) |
66 planes++; | 67 planes++; |
67 | 68 |
68 return planes; | 69 return planes; |
69 } | 70 } |
70 | 71 |
71 SDL_Overlay* ph_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SDL_Surface* display) | 72 SDL_Overlay * |
73 ph_CreateYUVOverlay (_THIS, int width, int height, Uint32 format, | |
74 SDL_Surface * display) | |
72 { | 75 { |
73 SDL_Overlay* overlay; | 76 SDL_Overlay *overlay; |
74 struct private_yuvhwdata* hwdata; | 77 struct private_yuvhwdata *hwdata; |
75 int vidport; | 78 int vidport; |
76 int rtncode; | 79 int rtncode; |
77 int planes; | 80 int planes; |
78 int i=0; | 81 int i = 0; |
79 PhPoint_t pos; | 82 PhPoint_t pos; |
80 | 83 |
81 /* Create the overlay structure */ | 84 /* Create the overlay structure */ |
82 overlay = SDL_calloc(1, sizeof(SDL_Overlay)); | 85 overlay = SDL_calloc (1, sizeof (SDL_Overlay)); |
83 | 86 |
84 if (overlay == NULL) | 87 if (overlay == NULL) { |
85 { | 88 SDL_OutOfMemory (); |
86 SDL_OutOfMemory(); | |
87 return NULL; | 89 return NULL; |
88 } | 90 } |
89 | 91 |
90 /* Fill in the basic members */ | 92 /* Fill in the basic members */ |
91 overlay->format = format; | 93 overlay->format = format; |
92 overlay->w = width; | 94 overlay->w = width; |
93 overlay->h = height; | 95 overlay->h = height; |
94 overlay->hwdata = NULL; | 96 overlay->hwdata = NULL; |
95 | 97 |
96 /* Set up the YUV surface function structure */ | 98 /* Set up the YUV surface function structure */ |
97 overlay->hwfuncs = &ph_yuvfuncs; | 99 overlay->hwfuncs = &ph_yuvfuncs; |
98 | 100 |
99 /* Create the pixel data and lookup tables */ | 101 /* Create the pixel data and lookup tables */ |
100 hwdata = SDL_calloc(1, sizeof(struct private_yuvhwdata)); | 102 hwdata = SDL_calloc (1, sizeof (struct private_yuvhwdata)); |
101 | 103 |
102 if (hwdata == NULL) | 104 if (hwdata == NULL) { |
103 { | 105 SDL_OutOfMemory (); |
104 SDL_OutOfMemory(); | 106 SDL_FreeYUVOverlay (overlay); |
105 SDL_FreeYUVOverlay(overlay); | |
106 return NULL; | 107 return NULL; |
107 } | 108 } |
108 | 109 |
109 overlay->hwdata = hwdata; | 110 overlay->hwdata = hwdata; |
110 | 111 |
111 PhDCSetCurrent(0); | 112 PhDCSetCurrent (0); |
112 if (overlay->hwdata->channel == NULL) | 113 if (overlay->hwdata->channel == NULL) { |
113 { | 114 if ((overlay->hwdata->channel = |
114 if ((overlay->hwdata->channel = PgCreateVideoChannel(Pg_VIDEO_CHANNEL_SCALER, 0)) == NULL) | 115 PgCreateVideoChannel (Pg_VIDEO_CHANNEL_SCALER, 0)) == NULL) { |
115 { | 116 SDL_SetError |
116 SDL_SetError("ph_CreateYUVOverlay(): Create channel failed: %s\n", strerror(errno)); | 117 ("ph_CreateYUVOverlay(): Create channel failed: %s\n", |
117 SDL_FreeYUVOverlay(overlay); | 118 strerror (errno)); |
119 SDL_FreeYUVOverlay (overlay); | |
118 return NULL; | 120 return NULL; |
119 | 121 |
120 } | 122 } |
121 } | 123 } |
122 | 124 |
123 overlay->hwdata->forcedredraw=0; | 125 overlay->hwdata->forcedredraw = 0; |
124 | 126 |
125 PtGetAbsPosition(window, &pos.x, &pos.y); | 127 PtGetAbsPosition (window, &pos.x, &pos.y); |
126 overlay->hwdata->CurrentWindowPos.x = pos.x; | 128 overlay->hwdata->CurrentWindowPos.x = pos.x; |
127 overlay->hwdata->CurrentWindowPos.y = pos.y; | 129 overlay->hwdata->CurrentWindowPos.y = pos.y; |
128 overlay->hwdata->CurrentViewPort.pos.x = 0; | 130 overlay->hwdata->CurrentViewPort.pos.x = 0; |
129 overlay->hwdata->CurrentViewPort.pos.y = 0; | 131 overlay->hwdata->CurrentViewPort.pos.y = 0; |
130 overlay->hwdata->CurrentViewPort.size.w = width; | 132 overlay->hwdata->CurrentViewPort.size.w = width; |
131 overlay->hwdata->CurrentViewPort.size.h = height; | 133 overlay->hwdata->CurrentViewPort.size.h = height; |
132 overlay->hwdata->State = OVERLAY_STATE_UNINIT; | 134 overlay->hwdata->State = OVERLAY_STATE_UNINIT; |
133 overlay->hwdata->FrameData0 = (FRAMEDATA *) SDL_calloc(1, sizeof(FRAMEDATA)); | 135 overlay->hwdata->FrameData0 = |
134 overlay->hwdata->FrameData1 = (FRAMEDATA *) SDL_calloc(1, sizeof(FRAMEDATA)); | 136 (FRAMEDATA *) SDL_calloc (1, sizeof (FRAMEDATA)); |
137 overlay->hwdata->FrameData1 = | |
138 (FRAMEDATA *) SDL_calloc (1, sizeof (FRAMEDATA)); | |
135 | 139 |
136 vidport = -1; | 140 vidport = -1; |
137 i=0; | 141 i = 0; |
138 | 142 |
139 overlay->hwdata->ischromakey=0; | 143 overlay->hwdata->ischromakey = 0; |
140 | 144 |
141 do { | 145 do { |
142 SDL_memset(&overlay->hwdata->caps, 0x00, sizeof(PgScalerCaps_t)); | 146 SDL_memset (&overlay->hwdata->caps, 0x00, sizeof (PgScalerCaps_t)); |
143 overlay->hwdata->caps.size = sizeof(PgScalerCaps_t); | 147 overlay->hwdata->caps.size = sizeof (PgScalerCaps_t); |
144 rtncode = PgGetScalerCapabilities(overlay->hwdata->channel, i, &overlay->hwdata->caps); | 148 rtncode = |
145 if (rtncode==0) | 149 PgGetScalerCapabilities (overlay->hwdata->channel, i, |
146 { | 150 &overlay->hwdata->caps); |
147 if (overlay->hwdata->caps.format==format) | 151 if (rtncode == 0) { |
148 { | 152 if (overlay->hwdata->caps.format == format) { |
149 if ((overlay->hwdata->caps.flags & Pg_SCALER_CAP_DST_CHROMA_KEY) == Pg_SCALER_CAP_DST_CHROMA_KEY) | 153 if ((overlay->hwdata->caps. |
150 { | 154 flags & Pg_SCALER_CAP_DST_CHROMA_KEY) == |
151 overlay->hwdata->ischromakey=1; | 155 Pg_SCALER_CAP_DST_CHROMA_KEY) { |
152 } | 156 overlay->hwdata->ischromakey = 1; |
153 vidport=1; | 157 } |
154 break; | 158 vidport = 1; |
159 break; | |
155 } | 160 } |
156 } | 161 } else { |
157 else | 162 break; |
158 { | |
159 break; | |
160 } | 163 } |
161 i++; | 164 i++; |
162 } while(1); | 165 } |
163 | 166 while (1); |
164 | 167 |
165 if (vidport == -1) | 168 |
166 { | 169 if (vidport == -1) { |
167 SDL_SetError("No available video ports for requested format\n"); | 170 SDL_SetError ("No available video ports for requested format\n"); |
168 SDL_FreeYUVOverlay(overlay); | 171 SDL_FreeYUVOverlay (overlay); |
169 return NULL; | 172 return NULL; |
170 } | 173 } |
171 | 174 |
172 overlay->hwdata->format = format; | 175 overlay->hwdata->format = format; |
173 overlay->hwdata->props.format = format; | 176 overlay->hwdata->props.format = format; |
174 overlay->hwdata->props.size = sizeof(PgScalerProps_t); | 177 overlay->hwdata->props.size = sizeof (PgScalerProps_t); |
175 overlay->hwdata->props.src_dim.w = width; | 178 overlay->hwdata->props.src_dim.w = width; |
176 overlay->hwdata->props.src_dim.h = height; | 179 overlay->hwdata->props.src_dim.h = height; |
177 | 180 |
178 /* overlay->hwdata->chromakey = PgGetOverlayChromaColor(); */ | 181 /* overlay->hwdata->chromakey = PgGetOverlayChromaColor(); */ |
179 overlay->hwdata->chromakey = PgRGB(12, 6, 12); /* very dark pink color */ | 182 overlay->hwdata->chromakey = PgRGB (12, 6, 12); /* very dark pink color */ |
180 overlay->hwdata->props.color_key = overlay->hwdata->chromakey; | 183 overlay->hwdata->props.color_key = overlay->hwdata->chromakey; |
181 | 184 |
182 PhAreaToRect(&overlay->hwdata->CurrentViewPort, &overlay->hwdata->props.viewport); | 185 PhAreaToRect (&overlay->hwdata->CurrentViewPort, |
186 &overlay->hwdata->props.viewport); | |
183 | 187 |
184 overlay->hwdata->props.flags = Pg_SCALER_PROP_DOUBLE_BUFFER; | 188 overlay->hwdata->props.flags = Pg_SCALER_PROP_DOUBLE_BUFFER; |
185 | 189 |
186 if ((overlay->hwdata->ischromakey)&&(overlay->hwdata->chromakey)) | 190 if ((overlay->hwdata->ischromakey) && (overlay->hwdata->chromakey)) { |
187 { | |
188 overlay->hwdata->props.flags |= Pg_SCALER_PROP_CHROMA_ENABLE; | 191 overlay->hwdata->props.flags |= Pg_SCALER_PROP_CHROMA_ENABLE; |
189 overlay->hwdata->props.flags |= Pg_SCALER_PROP_CHROMA_SPECIFY_KEY_MASK; | 192 overlay->hwdata->props.flags |= |
190 } | 193 Pg_SCALER_PROP_CHROMA_SPECIFY_KEY_MASK; |
191 else | 194 } else { |
192 { | |
193 overlay->hwdata->props.flags &= ~Pg_SCALER_PROP_CHROMA_ENABLE; | 195 overlay->hwdata->props.flags &= ~Pg_SCALER_PROP_CHROMA_ENABLE; |
194 } | 196 } |
195 | 197 |
196 rtncode = PgConfigScalerChannel(overlay->hwdata->channel, &overlay->hwdata->props); | 198 rtncode = |
197 | 199 PgConfigScalerChannel (overlay->hwdata->channel, |
198 switch(rtncode) | 200 &overlay->hwdata->props); |
199 { | 201 |
200 case -1: SDL_SetError("PgConfigScalerChannel failed\n"); | 202 switch (rtncode) { |
201 SDL_FreeYUVOverlay(overlay); | 203 case -1: |
202 return NULL; | 204 SDL_SetError ("PgConfigScalerChannel failed\n"); |
203 case 1: | 205 SDL_FreeYUVOverlay (overlay); |
204 case 0: | 206 return NULL; |
205 default: | 207 case 1: |
206 break; | 208 case 0: |
207 } | 209 default: |
208 | 210 break; |
209 planes = grab_ptrs2(overlay->hwdata->channel, overlay->hwdata->FrameData0, overlay->hwdata->FrameData1); | 211 } |
210 | 212 |
211 if(overlay->hwdata->channel->yplane1 != NULL) | 213 planes = |
214 grab_ptrs2 (overlay->hwdata->channel, overlay->hwdata->FrameData0, | |
215 overlay->hwdata->FrameData1); | |
216 | |
217 if (overlay->hwdata->channel->yplane1 != NULL) | |
212 overlay->hwdata->YStride = overlay->hwdata->channel->yplane1->pitch; | 218 overlay->hwdata->YStride = overlay->hwdata->channel->yplane1->pitch; |
213 if(overlay->hwdata->channel->vplane1 != NULL) | 219 if (overlay->hwdata->channel->vplane1 != NULL) |
214 overlay->hwdata->UStride = overlay->hwdata->channel->vplane1->pitch; | 220 overlay->hwdata->UStride = overlay->hwdata->channel->vplane1->pitch; |
215 if(overlay->hwdata->channel->uplane1 != NULL) | 221 if (overlay->hwdata->channel->uplane1 != NULL) |
216 overlay->hwdata->VStride = overlay->hwdata->channel->uplane1->pitch; | 222 overlay->hwdata->VStride = overlay->hwdata->channel->uplane1->pitch; |
217 | 223 |
218 /* check for the validness of all planes */ | 224 /* check for the validness of all planes */ |
219 if ((overlay->hwdata->channel->yplane1 == NULL) && | 225 if ((overlay->hwdata->channel->yplane1 == NULL) && |
220 (overlay->hwdata->channel->uplane1 == NULL) && | 226 (overlay->hwdata->channel->uplane1 == NULL) && |
221 (overlay->hwdata->channel->vplane1 == NULL)) | 227 (overlay->hwdata->channel->vplane1 == NULL)) { |
222 { | 228 SDL_FreeYUVOverlay (overlay); |
223 SDL_FreeYUVOverlay(overlay); | 229 SDL_SetError ("PgConfigScaler() returns all planes equal NULL\n"); |
224 SDL_SetError("PgConfigScaler() returns all planes equal NULL\n"); | 230 return NULL; |
225 return NULL; | |
226 } | 231 } |
227 /* | 232 /* |
228 overlay->hwdata->current = PgNextVideoFrame(overlay->hwdata->channel); | 233 overlay->hwdata->current = PgNextVideoFrame(overlay->hwdata->channel); |
229 | 234 |
230 if (overlay->hwdata->current==0) | 235 if (overlay->hwdata->current==0) |
242 overlay->hwdata->locked = 1; | 247 overlay->hwdata->locked = 1; |
243 */ | 248 */ |
244 | 249 |
245 /* Find the pitch and offset values for the overlay */ | 250 /* Find the pitch and offset values for the overlay */ |
246 overlay->planes = planes; | 251 overlay->planes = planes; |
247 overlay->pitches = SDL_calloc(overlay->planes, sizeof(Uint16)); | 252 overlay->pitches = SDL_calloc (overlay->planes, sizeof (Uint16)); |
248 overlay->pixels = SDL_calloc(overlay->planes, sizeof(Uint8*)); | 253 overlay->pixels = SDL_calloc (overlay->planes, sizeof (Uint8 *)); |
249 if (!overlay->pitches || !overlay->pixels) | 254 if (!overlay->pitches || !overlay->pixels) { |
250 { | 255 SDL_OutOfMemory (); |
251 SDL_OutOfMemory(); | 256 SDL_FreeYUVOverlay (overlay); |
252 SDL_FreeYUVOverlay(overlay); | 257 return (NULL); |
253 return(NULL); | 258 } |
254 } | 259 |
255 | 260 if (overlay->planes > 0) { |
256 if (overlay->planes > 0) | |
257 { | |
258 overlay->pitches[0] = overlay->hwdata->channel->yplane1->pitch; | 261 overlay->pitches[0] = overlay->hwdata->channel->yplane1->pitch; |
259 overlay->pixels[0] = overlay->hwdata->CurrentFrameData->Y; | 262 overlay->pixels[0] = overlay->hwdata->CurrentFrameData->Y; |
260 } | 263 } |
261 if (overlay->planes > 1) | 264 if (overlay->planes > 1) { |
262 { | |
263 overlay->pitches[1] = overlay->hwdata->channel->vplane1->pitch; | 265 overlay->pitches[1] = overlay->hwdata->channel->vplane1->pitch; |
264 overlay->pixels[1] = overlay->hwdata->CurrentFrameData->U; | 266 overlay->pixels[1] = overlay->hwdata->CurrentFrameData->U; |
265 } | 267 } |
266 if (overlay->planes > 2) | 268 if (overlay->planes > 2) { |
267 { | |
268 overlay->pitches[2] = overlay->hwdata->channel->uplane1->pitch; | 269 overlay->pitches[2] = overlay->hwdata->channel->uplane1->pitch; |
269 overlay->pixels[2] = overlay->hwdata->CurrentFrameData->V; | 270 overlay->pixels[2] = overlay->hwdata->CurrentFrameData->V; |
270 } | 271 } |
271 | 272 |
272 overlay->hwdata->State = OVERLAY_STATE_ACTIVE; | 273 overlay->hwdata->State = OVERLAY_STATE_ACTIVE; |
273 overlay->hwdata->scaler_on = 0; | 274 overlay->hwdata->scaler_on = 0; |
274 overlay->hw_overlay = 1; | 275 overlay->hw_overlay = 1; |
275 | 276 |
276 current_overlay=overlay; | 277 current_overlay = overlay; |
277 | 278 |
278 return overlay; | 279 return overlay; |
279 } | 280 } |
280 | 281 |
281 int ph_LockYUVOverlay(_THIS, SDL_Overlay* overlay) | 282 int |
283 ph_LockYUVOverlay (_THIS, SDL_Overlay * overlay) | |
282 { | 284 { |
283 if (overlay == NULL) | 285 if (overlay == NULL) { |
284 { | |
285 return -1; | 286 return -1; |
286 } | 287 } |
287 | 288 |
288 overlay->hwdata->locked = 1; | 289 overlay->hwdata->locked = 1; |
289 | 290 |
319 overlay->pitches[2] = overlay->hwdata->channel->vplane1->pitch; | 320 overlay->pitches[2] = overlay->hwdata->channel->vplane1->pitch; |
320 overlay->pixels[2] = overlay->hwdata->CurrentFrameData->V; | 321 overlay->pixels[2] = overlay->hwdata->CurrentFrameData->V; |
321 } | 322 } |
322 */ | 323 */ |
323 | 324 |
324 return(0); | 325 return (0); |
325 } | 326 } |
326 | 327 |
327 void ph_UnlockYUVOverlay(_THIS, SDL_Overlay* overlay) | 328 void |
329 ph_UnlockYUVOverlay (_THIS, SDL_Overlay * overlay) | |
328 { | 330 { |
329 if (overlay == NULL) | 331 if (overlay == NULL) { |
330 { | |
331 return; | 332 return; |
332 } | 333 } |
333 | 334 |
334 overlay->hwdata->locked = 0; | 335 overlay->hwdata->locked = 0; |
335 } | 336 } |
336 | 337 |
337 int ph_DisplayYUVOverlay(_THIS, SDL_Overlay* overlay, SDL_Rect* src, SDL_Rect* dst) | 338 int |
339 ph_DisplayYUVOverlay (_THIS, SDL_Overlay * overlay, SDL_Rect * src, | |
340 SDL_Rect * dst) | |
338 { | 341 { |
339 int rtncode; | 342 int rtncode; |
340 PhPoint_t pos; | 343 PhPoint_t pos; |
341 SDL_Rect backrect; | 344 SDL_Rect backrect; |
342 PhRect_t windowextent; | 345 PhRect_t windowextent; |
343 int winchanged=0; | 346 int winchanged = 0; |
344 | 347 |
345 if ((overlay == NULL) || (overlay->hwdata==NULL)) | 348 if ((overlay == NULL) || (overlay->hwdata == NULL)) { |
346 { | |
347 return -1; | 349 return -1; |
348 } | 350 } |
349 | 351 |
350 if (overlay->hwdata->State == OVERLAY_STATE_UNINIT) | 352 if (overlay->hwdata->State == OVERLAY_STATE_UNINIT) { |
351 { | |
352 return -1; | 353 return -1; |
353 } | 354 } |
354 | 355 |
355 PtGetAbsPosition(window, &pos.x, &pos.y); | 356 PtGetAbsPosition (window, &pos.x, &pos.y); |
356 if ((pos.x!=overlay->hwdata->CurrentWindowPos.x) || | 357 if ((pos.x != overlay->hwdata->CurrentWindowPos.x) || |
357 (pos.y!=overlay->hwdata->CurrentWindowPos.y)) | 358 (pos.y != overlay->hwdata->CurrentWindowPos.y)) { |
358 { | 359 winchanged = 1; |
359 winchanged=1; | 360 overlay->hwdata->CurrentWindowPos.x = pos.x; |
360 overlay->hwdata->CurrentWindowPos.x=pos.x; | 361 overlay->hwdata->CurrentWindowPos.y = pos.y; |
361 overlay->hwdata->CurrentWindowPos.y=pos.y; | |
362 } | 362 } |
363 | 363 |
364 /* If CurrentViewPort position/size has been changed, then move/resize the viewport */ | 364 /* If CurrentViewPort position/size has been changed, then move/resize the viewport */ |
365 if ((overlay->hwdata->CurrentViewPort.pos.x != dst->x) || | 365 if ((overlay->hwdata->CurrentViewPort.pos.x != dst->x) || |
366 (overlay->hwdata->CurrentViewPort.pos.y != dst->y) || | 366 (overlay->hwdata->CurrentViewPort.pos.y != dst->y) || |
367 (overlay->hwdata->CurrentViewPort.size.w != dst->w) || | 367 (overlay->hwdata->CurrentViewPort.size.w != dst->w) || |
368 (overlay->hwdata->CurrentViewPort.size.h != dst->h) || | 368 (overlay->hwdata->CurrentViewPort.size.h != dst->h) || |
369 (overlay->hwdata->scaler_on==0) || (winchanged==1) || | 369 (overlay->hwdata->scaler_on == 0) || (winchanged == 1) || |
370 (overlay->hwdata->forcedredraw==1)) | 370 (overlay->hwdata->forcedredraw == 1)) { |
371 { | 371 |
372 | 372 if (overlay->hwdata->ischromakey == 1) { |
373 if (overlay->hwdata->ischromakey==1) | |
374 { | |
375 /* restore screen behind the overlay/chroma color. */ | 373 /* restore screen behind the overlay/chroma color. */ |
376 backrect.x=overlay->hwdata->CurrentViewPort.pos.x; | 374 backrect.x = overlay->hwdata->CurrentViewPort.pos.x; |
377 backrect.y=overlay->hwdata->CurrentViewPort.pos.y; | 375 backrect.y = overlay->hwdata->CurrentViewPort.pos.y; |
378 backrect.w=overlay->hwdata->CurrentViewPort.size.w; | 376 backrect.w = overlay->hwdata->CurrentViewPort.size.w; |
379 backrect.h=overlay->hwdata->CurrentViewPort.size.h; | 377 backrect.h = overlay->hwdata->CurrentViewPort.size.h; |
380 this->UpdateRects(this, 1, &backrect); | 378 this->UpdateRects (this, 1, &backrect); |
381 | 379 |
382 /* Draw the new rectangle of the chroma color at the viewport position */ | 380 /* Draw the new rectangle of the chroma color at the viewport position */ |
383 PgSetFillColor(overlay->hwdata->chromakey); | 381 PgSetFillColor (overlay->hwdata->chromakey); |
384 PgDrawIRect(dst->x, dst->y, dst->x+dst->w-1, dst->y+dst->h-1, Pg_DRAW_FILL); | 382 PgDrawIRect (dst->x, dst->y, dst->x + dst->w - 1, |
385 PgFlush(); | 383 dst->y + dst->h - 1, Pg_DRAW_FILL); |
384 PgFlush (); | |
386 } | 385 } |
387 | 386 |
388 overlay->hwdata->props.flags |= Pg_SCALER_PROP_SCALER_ENABLE; | 387 overlay->hwdata->props.flags |= Pg_SCALER_PROP_SCALER_ENABLE; |
389 overlay->hwdata->scaler_on = 1; | 388 overlay->hwdata->scaler_on = 1; |
390 | 389 |
391 PhWindowQueryVisible(Ph_QUERY_CONSOLE, 0, PtWidgetRid(window), &windowextent); | 390 PhWindowQueryVisible (Ph_QUERY_CONSOLE, 0, PtWidgetRid (window), |
392 overlay->hwdata->CurrentViewPort.pos.x = pos.x-windowextent.ul.x+dst->x; | 391 &windowextent); |
393 overlay->hwdata->CurrentViewPort.pos.y = pos.y-windowextent.ul.y+dst->y; | 392 overlay->hwdata->CurrentViewPort.pos.x = |
393 pos.x - windowextent.ul.x + dst->x; | |
394 overlay->hwdata->CurrentViewPort.pos.y = | |
395 pos.y - windowextent.ul.y + dst->y; | |
394 overlay->hwdata->CurrentViewPort.size.w = dst->w; | 396 overlay->hwdata->CurrentViewPort.size.w = dst->w; |
395 overlay->hwdata->CurrentViewPort.size.h = dst->h; | 397 overlay->hwdata->CurrentViewPort.size.h = dst->h; |
396 PhAreaToRect(&overlay->hwdata->CurrentViewPort, &overlay->hwdata->props.viewport); | 398 PhAreaToRect (&overlay->hwdata->CurrentViewPort, |
399 &overlay->hwdata->props.viewport); | |
397 overlay->hwdata->CurrentViewPort.pos.x = dst->x; | 400 overlay->hwdata->CurrentViewPort.pos.x = dst->x; |
398 overlay->hwdata->CurrentViewPort.pos.y = dst->y; | 401 overlay->hwdata->CurrentViewPort.pos.y = dst->y; |
399 | 402 |
400 rtncode = PgConfigScalerChannel(overlay->hwdata->channel, &(overlay->hwdata->props)); | 403 rtncode = |
401 | 404 PgConfigScalerChannel (overlay->hwdata->channel, |
402 switch(rtncode) | 405 &(overlay->hwdata->props)); |
403 { | 406 |
404 case -1: | 407 switch (rtncode) { |
405 SDL_SetError("PgConfigScalerChannel() function failed\n"); | 408 case -1: |
406 SDL_FreeYUVOverlay(overlay); | 409 SDL_SetError ("PgConfigScalerChannel() function failed\n"); |
407 return -1; | 410 SDL_FreeYUVOverlay (overlay); |
408 case 1: | 411 return -1; |
409 grab_ptrs2(overlay->hwdata->channel, overlay->hwdata->FrameData0, overlay->hwdata->FrameData1); | 412 case 1: |
410 break; | 413 grab_ptrs2 (overlay->hwdata->channel, |
411 case 0: | 414 overlay->hwdata->FrameData0, |
412 default: | 415 overlay->hwdata->FrameData1); |
413 break; | 416 break; |
417 case 0: | |
418 default: | |
419 break; | |
414 } | 420 } |
415 } | 421 } |
416 | 422 |
417 | 423 |
418 /* | 424 /* |
450 overlay->pitches[2] = overlay->hwdata->channel->vplane1->pitch; | 456 overlay->pitches[2] = overlay->hwdata->channel->vplane1->pitch; |
451 overlay->pixels[2] = overlay->hwdata->CurrentFrameData->V; | 457 overlay->pixels[2] = overlay->hwdata->CurrentFrameData->V; |
452 } | 458 } |
453 } | 459 } |
454 */ | 460 */ |
455 | 461 |
456 return 0; | 462 return 0; |
457 } | 463 } |
458 | 464 |
459 void ph_FreeYUVOverlay(_THIS, SDL_Overlay *overlay) | 465 void |
466 ph_FreeYUVOverlay (_THIS, SDL_Overlay * overlay) | |
460 { | 467 { |
461 SDL_Rect backrect; | 468 SDL_Rect backrect; |
462 | 469 |
463 if (overlay == NULL) | 470 if (overlay == NULL) { |
464 { | |
465 return; | 471 return; |
466 } | 472 } |
467 | 473 |
468 if (overlay->hwdata == NULL) | 474 if (overlay->hwdata == NULL) { |
469 { | |
470 return; | 475 return; |
471 } | 476 } |
472 | 477 |
473 current_overlay=NULL; | 478 current_overlay = NULL; |
474 | 479 |
475 /* restore screen behind the overlay/chroma color. */ | 480 /* restore screen behind the overlay/chroma color. */ |
476 backrect.x=overlay->hwdata->CurrentViewPort.pos.x; | 481 backrect.x = overlay->hwdata->CurrentViewPort.pos.x; |
477 backrect.y=overlay->hwdata->CurrentViewPort.pos.y; | 482 backrect.y = overlay->hwdata->CurrentViewPort.pos.y; |
478 backrect.w=overlay->hwdata->CurrentViewPort.size.w; | 483 backrect.w = overlay->hwdata->CurrentViewPort.size.w; |
479 backrect.h=overlay->hwdata->CurrentViewPort.size.h; | 484 backrect.h = overlay->hwdata->CurrentViewPort.size.h; |
480 this->UpdateRects(this, 1, &backrect); | 485 this->UpdateRects (this, 1, &backrect); |
481 | 486 |
482 /* it is need for some buggy drivers, that can't hide overlay before */ | 487 /* it is need for some buggy drivers, that can't hide overlay before */ |
483 /* freeing buffer, so we got trash on the srceen */ | 488 /* freeing buffer, so we got trash on the srceen */ |
484 overlay->hwdata->props.flags &= ~Pg_SCALER_PROP_SCALER_ENABLE; | 489 overlay->hwdata->props.flags &= ~Pg_SCALER_PROP_SCALER_ENABLE; |
485 PgConfigScalerChannel(overlay->hwdata->channel, &(overlay->hwdata->props)); | 490 PgConfigScalerChannel (overlay->hwdata->channel, |
491 &(overlay->hwdata->props)); | |
486 | 492 |
487 overlay->hwdata->scaler_on = 0; | 493 overlay->hwdata->scaler_on = 0; |
488 overlay->hwdata->State = OVERLAY_STATE_UNINIT; | 494 overlay->hwdata->State = OVERLAY_STATE_UNINIT; |
489 | 495 |
490 if (overlay->hwdata->channel != NULL) | 496 if (overlay->hwdata->channel != NULL) { |
491 { | 497 PgDestroyVideoChannel (overlay->hwdata->channel); |
492 PgDestroyVideoChannel(overlay->hwdata->channel); | |
493 overlay->hwdata->channel = NULL; | 498 overlay->hwdata->channel = NULL; |
494 return; | 499 return; |
495 } | 500 } |
496 | 501 |
497 overlay->hwdata->CurrentFrameData = NULL; | 502 overlay->hwdata->CurrentFrameData = NULL; |
498 | 503 |
499 SDL_free(overlay->hwdata->FrameData0); | 504 SDL_free (overlay->hwdata->FrameData0); |
500 SDL_free(overlay->hwdata->FrameData1); | 505 SDL_free (overlay->hwdata->FrameData1); |
501 overlay->hwdata->FrameData0 = NULL; | 506 overlay->hwdata->FrameData0 = NULL; |
502 overlay->hwdata->FrameData1 = NULL; | 507 overlay->hwdata->FrameData1 = NULL; |
503 SDL_free(overlay->hwdata); | 508 SDL_free (overlay->hwdata); |
504 } | 509 } |
510 | |
511 /* vi: set ts=4 sw=4 expandtab: */ |