Rev 2693 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1696 | serge | 1 | |
2 | #include |
||
3 | #include |
||
4 | #include |
||
5 | #include |
||
2415 | Serge | 6 | #include "system.h" |
7 | #include "../winlib/winlib.h" |
||
2427 | Serge | 8 | #include "sound.h" |
2349 | Serge | 9 | #include "fplay.h" |
1696 | serge | 10 | #include |
3068 | serge | 11 | |
1696 | serge | 12 | |
2427 | Serge | 13 | extern int res_pause_btn_pressed[]; |
14 | |||
15 | |||
16 | extern int res_play_btn_pressed[]; |
||
17 | |||
18 | |||
2693 | Serge | 19 | extern volatile int sound_level_0; |
3068 | serge | 20 | extern volatile int sound_level_1; |
21 | |||
2427 | Serge | 22 | |
1696 | serge | 23 | { |
24 | AVPicture picture; |
||
2349 | Serge | 25 | double pts; |
1696 | serge | 26 | volatile int ready; |
27 | }vframe_t; |
||
28 | |||
29 | |||
2349 | Serge | 30 | volatile int frames_count = 0; |
3068 | serge | 31 | |
1696 | serge | 32 | |
2349 | Serge | 33 | |
1696 | serge | 34 | |
35 | int dfx = 0; |
||
36 | |||
37 | |||
2415 | Serge | 38 | |
2349 | Serge | 39 | |
1696 | serge | 40 | int height; |
41 | |||
42 | |||
43 | AVFrame *Frame; |
||
44 | |||
45 | |||
2349 | Serge | 46 | |
47 | |||
48 | |||
49 | |||
2693 | Serge | 50 | { |
51 | int i; |
||
52 | |||
2349 | Serge | 53 | |
2693 | Serge | 54 | { |
3068 | serge | 55 | frames[i].pts = 0; |
2693 | Serge | 56 | frames[i].ready = 0; |
57 | }; |
||
58 | frames_count = 0; |
||
3068 | serge | 59 | vfx = 0; |
2693 | Serge | 60 | dfx = 0; |
61 | }; |
||
62 | |||
63 | |||
1696 | serge | 64 | { |
65 | int i; |
||
66 | |||
67 | |||
68 | height = ctx->height; |
||
69 | |||
70 | |||
3068 | serge | 71 | |
2421 | Serge | 72 | |
2415 | Serge | 73 | |
2349 | Serge | 74 | |
2415 | Serge | 75 | ctx->pix_fmt, HW_BIT_BLIT|HW_TEX_BLIT); |
2349 | Serge | 76 | if( main_render == NULL) |
2415 | Serge | 77 | { |
2349 | Serge | 78 | printf("Cannot create render\n\r"); |
79 | return 0; |
||
80 | }; |
||
81 | |||
82 | |||
1696 | serge | 83 | if ( Frame == NULL ) |
84 | { |
||
85 | printf("Cannot alloc video frame\n\r"); |
||
2349 | Serge | 86 | return 0; |
1696 | serge | 87 | }; |
88 | |||
89 | |||
2349 | Serge | 90 | { |
1696 | serge | 91 | int ret; |
2349 | Serge | 92 | |
1696 | serge | 93 | |
2349 | Serge | 94 | // ctx->width, ctx->height, ctx->pix_fmt ); |
95 | |||
1696 | serge | 96 | |
2349 | Serge | 97 | ctx->width, ctx->height); |
98 | if ( ret != 0 ) |
||
99 | { |
||
1696 | serge | 100 | printf("Cannot alloc video buffer\n\r"); |
2349 | Serge | 101 | return 0; |
102 | }; |
||
103 | |||
1696 | serge | 104 | |
2349 | Serge | 105 | frames[i].ready = 0; |
106 | }; |
||
1696 | serge | 107 | |
108 | |||
2349 | Serge | 109 | |
1696 | serge | 110 | |
2349 | Serge | 111 | return 1; |
1696 | serge | 112 | }; |
113 | |||
114 | |||
2349 | Serge | 115 | { |
1696 | serge | 116 | AVPacket pkt; |
2349 | Serge | 117 | double pts; |
1696 | serge | 118 | int frameFinished; |
2415 | Serge | 119 | double current_clock; |
2427 | Serge | 120 | |
1696 | serge | 121 | |
2349 | Serge | 122 | return -1; |
3068 | serge | 123 | |
1696 | serge | 124 | |
2349 | Serge | 125 | return 0; |
126 | |||
1696 | serge | 127 | |
3068 | serge | 128 | current_clock = -90.0 + get_master_clock(); |
2693 | Serge | 129 | |
1696 | serge | 130 | |
2427 | Serge | 131 | Frame->reordered_opaque != AV_NOPTS_VALUE) |
132 | pts = Frame->reordered_opaque; |
||
2693 | Serge | 133 | else if(pkt.dts != AV_NOPTS_VALUE) |
134 | pts= pkt.dts; |
||
2427 | Serge | 135 | else |
136 | pts= 0; |
||
137 | |||
3068 | serge | 138 | |
139 | |||
2427 | Serge | 140 | */ |
3068 | serge | 141 | if( 1 /*pts > current_clock*/) |
2693 | Serge | 142 | { |
1696 | serge | 143 | frameFinished = 0; |
2427 | Serge | 144 | |
1696 | serge | 145 | |
2427 | Serge | 146 | |
1696 | serge | 147 | |
2427 | Serge | 148 | printf("video decoder error\n"); |
149 | |||
1696 | serge | 150 | |
2427 | Serge | 151 | { |
152 | AVPicture *dst_pic; |
||
153 | |||
154 | |||
155 | Frame->reordered_opaque != AV_NOPTS_VALUE) |
||
156 | pts = Frame->reordered_opaque; |
||
2693 | Serge | 157 | else if(pkt.dts != AV_NOPTS_VALUE) |
2427 | Serge | 158 | pts= pkt.dts; |
159 | else |
||
160 | pts= 0; |
||
161 | |||
162 | |||
2349 | Serge | 163 | // Frame, "best_effort_timestamp"); |
164 | |||
1696 | serge | 165 | |
2349 | Serge | 166 | // pts = 0; |
167 | |||
1696 | serge | 168 | |
2427 | Serge | 169 | |
2349 | Serge | 170 | |
2427 | Serge | 171 | |
2349 | Serge | 172 | |
2427 | Serge | 173 | (const uint8_t**)Frame->data, |
2415 | Serge | 174 | Frame->linesize, ctx->pix_fmt, ctx->width, ctx->height); |
2349 | Serge | 175 | |
176 | |||
2427 | Serge | 177 | // printf("pts %f\n", frames[dfx].pts); |
2693 | Serge | 178 | |
179 | |||
2427 | Serge | 180 | |
1696 | serge | 181 | |
2427 | Serge | 182 | dfx&= 3; |
183 | frames_count++; |
||
3068 | serge | 184 | }; |
2427 | Serge | 185 | }; |
1696 | serge | 186 | av_free_packet(&pkt); |
2349 | Serge | 187 | |
1696 | serge | 188 | |
2349 | Serge | 189 | } |
1696 | serge | 190 | |
191 | |||
2427 | Serge | 192 | extern volatile enum player_state decoder_state; |
3068 | serge | 193 | extern volatile enum player_state sound_state; |
194 | |||
195 | |||
2427 | Serge | 196 | |
1696 | serge | 197 | |
2693 | Serge | 198 | |
2415 | Serge | 199 | |
3068 | serge | 200 | { |
201 | window_t *win; |
||
202 | |||
203 | |||
204 | |||
205 | |||
206 | |||
207 | |||
208 | win->panel.play_btn->img_hilite = res_play_btn; |
||
209 | win->panel.play_btn->img_pressed = res_play_btn_pressed; |
||
210 | win->panel.prg->current = rewind_pos; |
||
211 | |||
212 | |||
213 | player_state = STOP; |
||
214 | decoder_state = PLAY_2_STOP; |
||
215 | sound_state = PLAY_2_STOP; |
||
216 | render_draw_client(main_render); |
||
217 | // printf("stop player\n"); |
||
218 | |||
219 | |||
220 | |||
221 | |||
2415 | Serge | 222 | { |
1696 | serge | 223 | window_t *win; |
2415 | Serge | 224 | |
1696 | serge | 225 | |
2415 | Serge | 226 | |
1696 | serge | 227 | |
2415 | Serge | 228 | { |
1696 | serge | 229 | case MSG_SIZE: |
2415 | Serge | 230 | //printf("MSG_SIZE\n"); |
231 | render_adjust_size(main_render, win); |
||
232 | break; |
||
1696 | serge | 233 | |
234 | |||
2415 | Serge | 235 | render_draw_client(main_render); |
236 | break; |
||
1696 | serge | 237 | |
238 | |||
2427 | Serge | 239 | |
3068 | serge | 240 | |
2427 | Serge | 241 | { |
242 | win->panel.play_btn->img_default = res_pause_btn; |
||
2693 | Serge | 243 | win->panel.play_btn->img_hilite = res_pause_btn; |
244 | win->panel.play_btn->img_pressed = res_pause_btn_pressed; |
||
245 | send_message(&win->panel.play_btn->ctrl, MSG_PAINT, 0, 0); |
||
3068 | serge | 246 | player_state = PLAY; |
247 | sound_state = PAUSE_2_PLAY; |
||
248 | |||
2427 | Serge | 249 | |
250 | else if(player_state == PLAY) |
||
251 | { |
||
252 | win->panel.play_btn->img_default = res_play_btn; |
||
2693 | Serge | 253 | win->panel.play_btn->img_hilite = res_play_btn; |
254 | win->panel.play_btn->img_pressed = res_play_btn_pressed; |
||
255 | send_message(&win->panel.play_btn->ctrl, MSG_PAINT, 0, 0); |
||
3068 | serge | 256 | player_state = PAUSE; |
2427 | Serge | 257 | sound_state = PLAY_2_PAUSE; |
3068 | serge | 258 | } |
2427 | Serge | 259 | break; |
260 | |||
261 | |||
2415 | Serge | 262 | switch((short)arg1) |
263 | { |
||
264 | case ID_PLAY: |
||
2427 | Serge | 265 | if(player_state == PAUSE) |
266 | { |
||
267 | win->panel.play_btn->img_default = res_pause_btn; |
||
2693 | Serge | 268 | win->panel.play_btn->img_hilite = res_pause_btn; |
269 | win->panel.play_btn->img_pressed = res_pause_btn_pressed; |
||
270 | player_state = PLAY; |
||
3068 | serge | 271 | sound_state = PAUSE_2_PLAY; |
272 | } |
||
2693 | Serge | 273 | else if(player_state == PLAY) |
274 | { |
||
275 | win->panel.play_btn->img_default = res_play_btn; |
||
2427 | Serge | 276 | win->panel.play_btn->img_hilite = res_play_btn; |
277 | win->panel.play_btn->img_pressed = res_play_btn_pressed; |
||
278 | player_state = PAUSE; |
||
279 | sound_state = PLAY_2_PAUSE; |
||
3068 | serge | 280 | } |
2427 | Serge | 281 | else if(player_state == STOP) |
3068 | serge | 282 | { |
283 | win->panel.play_btn->img_default = res_pause_btn; |
||
284 | win->panel.play_btn->img_hilite = res_pause_btn; |
||
285 | win->panel.play_btn->img_pressed = res_pause_btn_pressed; |
||
286 | rewind_pos = 0; |
||
287 | send_message(&win->panel.ctrl, MSG_PAINT, 0, 0); |
||
288 | player_state = PLAY; |
||
289 | decoder_state = PREPARE; |
||
290 | } |
||
291 | break; |
||
2427 | Serge | 292 | |
2693 | Serge | 293 | |
3068 | serge | 294 | player_stop(); |
295 | break; |
||
296 | |||
297 | |||
298 | if(player_state != REWIND) |
||
2693 | Serge | 299 | { |
300 | progress_t *prg = (progress_t*)arg2; |
||
301 | |||
3068 | serge | 302 | |
303 | |||
304 | |||
305 | player_state = REWIND; |
||
306 | decoder_state = REWIND; |
||
307 | sound_state = PLAY_2_STOP; |
||
308 | if(rewind_pos < prg->current) |
||
309 | { |
||
310 | prg->current = rewind_pos; |
||
311 | rewind_pos = -rewind_pos; |
||
312 | } |
||
313 | else |
||
314 | prg->current = rewind_pos; |
||
315 | |||
316 | |||
317 | win->panel.play_btn->img_hilite = res_pause_btn; |
||
318 | win->panel.play_btn->img_pressed = res_pause_btn_pressed; |
||
319 | send_message(&prg->ctrl, MSG_PAINT, 0, 0); |
||
320 | }; |
||
2693 | Serge | 321 | break; |
322 | |||
3068 | serge | 323 | |
324 | { |
||
325 | slider_t *sld = (slider_t*)arg2; |
||
326 | int peak; |
||
327 | int level; |
||
328 | |||
329 | |||
330 | // level = (log2(peak+16384)*10000.0)/15 - 10000; |
||
331 | level = peak; |
||
332 | |||
333 | |||
334 | set_audio_volume(level, level); |
||
335 | send_message(&sld->ctrl, MSG_PAINT, 0, 0); |
||
336 | win->panel.lvl->vol = level; |
||
337 | } |
||
338 | |||
339 | |||
2427 | Serge | 340 | break; |
341 | } |
||
342 | break; |
||
2415 | Serge | 343 | |
1696 | serge | 344 | |
2415 | Serge | 345 | def_window_proc(ctrl,msg,arg1,arg2); |
346 | }; |
||
347 | return 0; |
||
348 | }; |
||
349 | |||
1696 | serge | 350 | |
2693 | Serge | 351 | |
352 | |||
2415 | Serge | 353 | { |
1696 | serge | 354 | progress_t *prg = main_render->win->panel.prg; |
3068 | serge | 355 | level_t *lvl = main_render->win->panel.lvl; |
356 | |||
1696 | serge | 357 | |
3068 | serge | 358 | double fdelay; /* milliseconds */ |
359 | |||
360 | |||
2427 | Serge | 361 | |
362 | |||
363 | { |
||
2415 | Serge | 364 | render->win->win_command = WIN_CLOSED; |
365 | return; |
||
366 | } |
||
2427 | Serge | 367 | else if(player_state == REWIND) |
3068 | serge | 368 | { |
369 | yield(); |
||
370 | return; |
||
371 | } |
||
372 | else if (decoder_state == STOP && frames_count == 0 && |
||
373 | player_state != STOP) |
||
374 | { |
||
375 | player_stop(); |
||
376 | } |
||
377 | else if(player_state != PLAY) |
||
2427 | Serge | 378 | { |
379 | yield(); |
||
380 | return; |
||
381 | }; |
||
2415 | Serge | 382 | |
1696 | serge | 383 | |
3068 | serge | 384 | |
2693 | Serge | 385 | if(frames[vfx].ready == 1 ) |
2415 | Serge | 386 | { |
1696 | serge | 387 | int sys_time; |
2693 | Serge | 388 | |
389 | |||
2415 | Serge | 390 | fdelay = (frames[vfx].pts - ctime); |
391 | |||
1696 | serge | 392 | |
2427 | Serge | 393 | // frames[vfx].pts, ctime, fdelay); |
2693 | Serge | 394 | |
2349 | Serge | 395 | |
2693 | Serge | 396 | { |
2415 | Serge | 397 | delay(1); |
2693 | Serge | 398 | // yield(); |
2427 | Serge | 399 | return; |
2421 | Serge | 400 | }; |
1696 | serge | 401 | |
2415 | Serge | 402 | |
2693 | Serge | 403 | fdelay = (frames[vfx].pts - ctime); |
404 | |||
405 | |||
406 | |||
407 | |||
408 | // printf("systime %d pts %f time %f delay %f\n", |
||
409 | // sys_time*10, frames[vfx].pts, ctime, fdelay); |
||
410 | |||
411 | |||
2415 | Serge | 412 | prg->current = frames[vfx].pts*1000; |
3068 | serge | 413 | // printf("current %f\n", prg->current); |
414 | lvl->current = vfx & 1 ? sound_level_1 : sound_level_0; |
||
415 | |||
416 | |||
417 | |||
418 | |||
419 | send_message(&lvl->ctrl, MSG_PAINT, 0, 0); |
||
420 | |||
421 | |||
422 | frames[vfx].ready = 0; |
||
2415 | Serge | 423 | vfx++; |
424 | vfx&= 3; |
||
425 | } |
||
2427 | Serge | 426 | else yield(); |
427 | |||
428 | |||
2693 | Serge | 429 | |
430 | |||
431 | { |
||
432 | ctime = get_master_clock(); |
||
433 | fdelay = (frames[vfx].pts - ctime); |
||
434 | |||
435 | |||
436 | // frames[vfx].pts, ctime, fdelay); |
||
437 | |||
438 | |||
439 | { |
||
440 | int next_vfx; |
||
441 | fdelay = 0; |
||
442 | next_vfx = (vfx+1) & 3; |
||
443 | if( frames[next_vfx].ready == 1 ) |
||
444 | { |
||
445 | if(frames[next_vfx].pts <= ctime) |
||
446 | { |
||
447 | frames[vfx].ready = 0; // skip this frame |
||
448 | vfx++; |
||
449 | vfx&= 3; |
||
450 | } |
||
451 | else |
||
452 | { |
||
453 | if( (frames[next_vfx].pts - ctime) < |
||
454 | ( ctime - frames[vfx].pts) ) |
||
455 | { |
||
456 | frames[vfx].ready = 0; // skip this frame |
||
457 | vfx++; |
||
458 | vfx&= 3; |
||
459 | fdelay = (frames[next_vfx].pts - ctime); |
||
460 | } |
||
461 | } |
||
462 | }; |
||
463 | }; |
||
464 | |||
465 | |||
466 | { |
||
467 | int val = fdelay; |
||
468 | printf("pts %f time %f delay %d\n", |
||
469 | frames[vfx].pts, ctime, val); |
||
470 | delay(val/10); |
||
471 | }; |
||
472 | |||
473 | |||
474 | fdelay = (frames[vfx].pts - ctime); |
||
475 | |||
476 | |||
477 | frames[vfx].pts, ctime, fdelay); |
||
478 | |||
479 | |||
480 | main_render->win->panel.prg->current = frames[vfx].pts; |
||
481 | // send_message(&render->win->panel.prg->ctrl, MSG_PAINT, 0, 0); |
||
482 | frames[vfx].ready = 0; |
||
483 | vfx++; |
||
484 | vfx&= 3; |
||
485 | } |
||
486 | else yield(); |
||
487 | #endif |
||
488 | |||
489 | |||
2415 | Serge | 490 | |
491 | |||
2427 | Serge | 492 | |
2415 | Serge | 493 | |
494 | |||
495 | { |
||
496 | window_t *MainWindow; |
||
497 | |||
498 | |||
499 | |||
500 | |||
501 | 10,10,width,height+CAPTION_HEIGHT+PANEL_HEIGHT,MainWindowProc); |
||
3068 | serge | 502 | |
2415 | Serge | 503 | |
2693 | Serge | 504 | // printf("MainWindow %x\n", MainWindow); |
2415 | Serge | 505 | |
506 | |||
507 | |||
508 | |||
509 | |||
2693 | Serge | 510 | |
511 | player_state = PLAY; |
||
3068 | serge | 512 | |
2693 | Serge | 513 | |
2415 | Serge | 514 | |
515 | |||
3068 | serge | 516 | |
517 | |||
2427 | Serge | 518 | return 0; |
2349 | Serge | 519 | }; |
1696 | serge | 520 | |
521 | |||
2349 | Serge | 522 | |
523 | void draw_sw_picture(render_t *render, AVPicture *picture); |
||
524 | |||
525 | |||
526 | uint32_t ctx_format, uint32_t flags) |
||
527 | { |
||
528 | render_t *render; |
||
2415 | Serge | 529 | |
2349 | Serge | 530 | |
2415 | Serge | 531 | |
2349 | Serge | 532 | |
2415 | Serge | 533 | memset(render, 0, sizeof(render_t)); |
534 | |||
535 | |||
2349 | Serge | 536 | render->ctx_height = height; |
537 | render->ctx_format = ctx_format; |
||
538 | |||
539 | |||
540 | render->caps = InitPixlib(flags); |
||
541 | mutex_unlock(&driver_lock); |
||
542 | |||
543 | |||
544 | { |
||
545 | printf("FPlay render engine: Hardware acceleration disabled\n"); |
||
546 | render->draw = draw_sw_picture; |
||
547 | } |
||
548 | else |
||
549 | { |
||
550 | render->target = 0; |
||
551 | render->draw = draw_hw_picture; |
||
552 | }; |
||
553 | |||
554 | |||
555 | return render; |
||
556 | }; |
||
557 | |||
558 | |||
559 | { |
||
560 | int i; |
||
561 | |||
562 | |||
2415 | Serge | 563 | render->rcvideo.l = 0; |
564 | render->rcvideo.t = 0; |
||
565 | render->rcvideo.r = width; |
||
566 | render->rcvideo.b = height; |
||
567 | |||
2349 | Serge | 568 | |
3068 | serge | 569 | |
570 | |||
2415 | Serge | 571 | { |
572 | int yoffs; |
||
573 | yoffs = (render->win_height-height)/2; |
||
574 | if(yoffs) |
||
575 | { |
||
576 | render->rctop.t = 0; |
||
577 | render->rctop.b = yoffs; |
||
578 | render->rcvideo.t = yoffs; |
||
579 | render->layout |= HAS_TOP; |
||
580 | } |
||
581 | |||
2349 | Serge | 582 | |
2415 | Serge | 583 | if(yoffs) |
584 | { |
||
585 | render->rcbottom.t = render->rcvideo.t+render->rcvideo.b; |
||
586 | render->rcbottom.b = yoffs; |
||
587 | render->layout |= HAS_BOTTOM; |
||
588 | } |
||
589 | } |
||
590 | |||
591 | |||
592 | { |
||
593 | int xoffs; |
||
594 | xoffs = (render->win_width-width)/2; |
||
595 | if(xoffs) |
||
596 | { |
||
597 | render->rcleft.r = xoffs; |
||
598 | render->rcvideo.l = xoffs; |
||
599 | render->layout |= HAS_LEFT; |
||
600 | } |
||
601 | xoffs = render->win_width-(render->rcvideo.l+render->rcvideo.r); |
||
602 | if(xoffs) |
||
603 | { |
||
604 | render->rcright.l = render->rcvideo.l+render->rcvideo.r; |
||
605 | render->rcright.r = xoffs; |
||
606 | render->layout |= HAS_RIGHT; |
||
607 | } |
||
608 | }; |
||
609 | |||
610 | |||
2349 | Serge | 611 | { |
612 | if(render->caps & HW_TEX_BLIT) |
||
613 | { |
||
614 | for( i=0; i < 4; i++) |
||
615 | { |
||
616 | render->bitmap[i].width = render->ctx_width; |
||
617 | render->bitmap[i].height = render->ctx_height; |
||
618 | |||
619 | |||
620 | { |
||
621 | player_state = CLOSED; |
||
2427 | Serge | 622 | /* |
2349 | Serge | 623 | * Epic fail. Need exit_thread() here |
624 | * |
||
625 | */ |
||
626 | return 0; |
||
627 | }; |
||
628 | } |
||
629 | } |
||
630 | else |
||
631 | { |
||
632 | render->bitmap[0].width = width; |
||
633 | render->bitmap[0].height = height; |
||
634 | |||
635 | |||
636 | return 0; |
||
637 | }; |
||
638 | render->state = INIT; |
||
639 | return 0; |
||
640 | }; |
||
641 | |||
642 | |||
643 | return 0; |
||
644 | |||
645 | |||
646 | render->bitmap[0].height = height; |
||
647 | resize_bitmap(&render->bitmap[0]); |
||
648 | |||
649 | |||
650 | }; |
||
651 | |||
652 | |||
2415 | Serge | 653 | { |
2349 | Serge | 654 | uint32_t right, bottom, new_w, new_h; |
655 | uint32_t s, sw, sh; |
||
656 | uint8_t state; |
||
657 | |||
658 | |||
3068 | serge | 659 | bottom = win->h-CAPTION_HEIGHT-PANEL_HEIGHT; |
660 | |||
2349 | Serge | 661 | |
3068 | serge | 662 | // right, bottom); |
663 | |||
664 | |||
2415 | Serge | 665 | |
2349 | Serge | 666 | |
2415 | Serge | 667 | return; |
2349 | Serge | 668 | |
2415 | Serge | 669 | |
670 | return; |
||
2349 | Serge | 671 | |
672 | |||
673 | bottom == render->win_height) |
||
674 | return; |
||
675 | |||
676 | |||
677 | new_h = right*render->ctx_height/render->ctx_width; |
||
678 | |||
679 | |||
3068 | serge | 680 | { |
681 | new_w = right; |
||
2349 | Serge | 682 | new_h = right*render->ctx_height/render->ctx_width; |
3068 | serge | 683 | }; |
684 | if(new_h > bottom) |
||
685 | { |
||
2349 | Serge | 686 | new_h = bottom; |
3068 | serge | 687 | new_w = bottom*render->ctx_width/render->ctx_height; |
688 | }; |
||
2349 | Serge | 689 | |
2415 | Serge | 690 | |
691 | render->win_height = win->h-CAPTION_HEIGHT-PANEL_HEIGHT; |
||
3068 | serge | 692 | render_set_size(render, new_w, new_h); |
2349 | Serge | 693 | }; |
694 | |||
695 | |||
696 | { |
||
697 | int dst_width, dst_height; |
||
698 | bitmap_t *bitmap; |
||
2415 | Serge | 699 | uint8_t *data[4]; |
700 | int linesize[4]; |
||
2349 | Serge | 701 | int ret; |
2415 | Serge | 702 | |
2349 | Serge | 703 | |
2427 | Serge | 704 | render->win_state == ROLLED) |
705 | return; |
||
2349 | Serge | 706 | |
707 | |||
708 | { |
||
709 | dst_width = render->ctx_width; |
||
710 | dst_height = render->ctx_height; |
||
711 | } |
||
712 | else |
||
713 | { |
||
714 | dst_width = render->rcvideo.r; |
||
3068 | serge | 715 | dst_height = render->rcvideo.b; |
716 | }; |
||
2349 | Serge | 717 | |
718 | |||
719 | render->ctx_width, render->ctx_height, render->ctx_format, |
||
720 | dst_width, dst_height, PIX_FMT_BGRA, |
||
721 | SWS_FAST_BILINEAR, NULL, NULL, NULL); |
||
722 | if(cvt_ctx == NULL) |
||
723 | { |
||
724 | printf("Cannot initialize the conversion context!\n"); |
||
725 | return ; |
||
726 | }; |
||
727 | |||
2415 | Serge | 728 | |
729 | |||
730 | |||
731 | if( ret != 0) |
||
732 | { |
||
733 | printf("Cannot lock bitmap!\n"); |
||
3068 | serge | 734 | return ; |
2415 | Serge | 735 | } |
736 | |||
737 | |||
2349 | Serge | 738 | data[0] = bitmap->data; |
2415 | Serge | 739 | data[1] = bitmap->data+1; |
740 | data[2] = bitmap->data+2; |
||
741 | data[3] = bitmap->data+3; |
||
742 | |||
2349 | Serge | 743 | |
2415 | Serge | 744 | linesize[1] = bitmap->pitch; |
745 | linesize[2] = bitmap->pitch; |
||
746 | linesize[3] = bitmap->pitch; |
||
747 | |||
2349 | Serge | 748 | |
749 | picture->linesize, 0, render->ctx_height, data, linesize); |
||
750 | // printf("sws_scale\n"); |
||
751 | |||
752 | |||
2415 | Serge | 753 | CAPTION_HEIGHT+render->rcvideo.t, |
2421 | Serge | 754 | render->rcvideo.r, render->rcvideo.b); |
2415 | Serge | 755 | |
3068 | serge | 756 | |
2427 | Serge | 757 | // printf("blit_bitmap\n"); |
2349 | Serge | 758 | |
759 | |||
2415 | Serge | 760 | |
3068 | serge | 761 | // render->target&= 3; |
762 | } |
||
2349 | Serge | 763 | |
764 | |||
765 | { |
||
766 | uint8_t *data[4]; |
||
767 | int linesize[4]; |
||
768 | |||
769 | |||
2415 | Serge | 770 | render->win_state == ROLLED) |
771 | return; |
||
2349 | Serge | 772 | |
773 | |||
774 | render->ctx_width, render->ctx_height, |
||
775 | render->ctx_format, |
||
776 | render->rcvideo.r, render->rcvideo.b, |
||
2415 | Serge | 777 | PIX_FMT_BGRA, SWS_FAST_BILINEAR, NULL, NULL, NULL); |
2349 | Serge | 778 | if(cvt_ctx == NULL) |
779 | { |
||
780 | printf("Cannot initialize the conversion context!\n"); |
||
781 | return ; |
||
782 | } |
||
783 | |||
784 | |||
785 | data[1] = render->bitmap[0].data+1; |
||
786 | data[2] = render->bitmap[0].data+2; |
||
787 | data[3] = render->bitmap[0].data+3; |
||
788 | |||
789 | |||
790 | |||
791 | linesize[1] = render->bitmap[0].pitch; |
||
792 | linesize[2] = render->bitmap[0].pitch; |
||
793 | linesize[3] = render->bitmap[0].pitch; |
||
794 | |||
795 | |||
796 | picture->linesize, 0, render->ctx_height, data, linesize); |
||
797 | |||
798 | |||
2415 | Serge | 799 | render->rcvideo.t+CAPTION_HEIGHT, |
2421 | Serge | 800 | render->rcvideo.r, render->rcvideo.b); |
2415 | Serge | 801 | render->last_bitmap = &render->bitmap[0]; |
2427 | Serge | 802 | } |
2349 | Serge | 803 | |
804 | |||
2415 | Serge | 805 | { |
806 | if(render->win_state == MINIMIZED || |
||
807 | render->win_state == ROLLED) |
||
808 | return; |
||
809 | |||
2349 | Serge | 810 | |
3068 | serge | 811 | { |
2427 | Serge | 812 | if(frames[vfx].ready == 1 ) |
2693 | Serge | 813 | main_render->draw(main_render, &frames[vfx].picture); |
814 | else |
||
815 | draw_bar(0, CAPTION_HEIGHT, render->win_width, |
||
816 | render->rcvideo.b, 0); |
||
817 | } |
||
3068 | serge | 818 | else if( player_state == STOP ) |
819 | { |
||
820 | draw_bar(0, CAPTION_HEIGHT, render->win_width, |
||
821 | render->rcvideo.b, 0); |
||
822 | }; |
||
2427 | Serge | 823 | |
824 | |||
2415 | Serge | 825 | draw_bar(0, CAPTION_HEIGHT, render->win_width, |
2421 | Serge | 826 | render->rctop.b, 0); |
2415 | Serge | 827 | if(render->layout & HAS_LEFT) |
828 | draw_bar(0, render->rcvideo.t+CAPTION_HEIGHT, render->rcleft.r, |
||
2421 | Serge | 829 | render->rcvideo.b, 0); |
2415 | Serge | 830 | if(render->layout & HAS_RIGHT) |
831 | draw_bar(render->rcright.l, render->rcvideo.t+CAPTION_HEIGHT, |
||
2421 | Serge | 832 | render->rcright.r, render->rcvideo.b, 0); |
2415 | Serge | 833 | if(render->layout & HAS_BOTTOM) |
834 | draw_bar(0, render->rcbottom.t+CAPTION_HEIGHT, |
||
2421 | Serge | 835 | render->win_width, render->rcbottom.b, 0); |
2415 | Serge | 836 | }> |
837 | >=>>>>=>>> |
||
2349 | Serge | 838 |