Subversion Repositories Kolibri OS

Rev

Rev 5603 | Rev 6117 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4438 Serge 1
 
2
#include 
3
#include 
4
#include 
5
#include 
6
#include 
6106 serge 7
#include 
4438 Serge 8
#include 
6106 serge 9
10
 
5021 Serge 11
#include "fplay.h"
4438 Serge 12
13
 
14
void draw_va_picture(render_t *render, AVPicture *picture);
5592 serge 15
4438 Serge 16
 
17
extern int res_pause_btn_pressed[];
18
19
 
20
extern int res_play_btn_pressed[];
21
22
 
23
extern volatile int sound_level_0;
24
extern volatile int sound_level_1;
25
26
 
27
{
28
    AVPicture      picture;
29
    double         pts;
30
    volatile int   ready;
31
}vframe_t;
32
33
 
34
volatile int      frames_count = 0;
35
36
 
37
38
 
39
int dfx    = 0;
40
41
 
42
43
 
44
int height;
45
46
 
47
AVFrame  *Frame;
48
49
 
5603 serge 50
4438 Serge 51
 
52
53
 
54
{
55
    int i;
56
57
 
58
    {
59
        frames[i].pts    = 0;
60
        frames[i].ready  = 0;
61
    };
62
    frames_count = 0;
63
    vfx    = 0;
64
    dfx    = 0;
65
};
66
67
 
68
{
69
    int        i;
70
71
 
72
    height = ctx->height;
73
74
 
75
    if ( Frame == NULL )
76
    {
77
        printf("Cannot alloc video frame\n\r");
78
        return 0;
79
    };
80
81
 
82
    {
83
        int ret;
84
85
 
86
                               ctx->width, ctx->height);
87
        if ( ret != 0 )
88
        {
89
            printf("Cannot alloc video buffer\n\r");
90
            return 0;
91
        };
92
93
 
94
        frames[i].ready  = 0;
95
    };
96
97
 
98
99
 
100
    return 1;
101
};
102
103
 
104
{
105
    AVPacket   pkt;
106
    double     pts;
107
    int frameFinished;
108
    double current_clock;
109
110
 
111
        return -1;
112
113
 
114
        return 0;
115
116
 
117
    current_clock = -90.0 + get_master_clock();
118
119
 
120
        Frame->reordered_opaque != AV_NOPTS_VALUE)
121
        pts = Frame->reordered_opaque;
122
    else if(pkt.dts != AV_NOPTS_VALUE)
123
        pts= pkt.dts;
124
    else
125
        pts= 0;
126
127
 
128
 
129
*/
130
    if( 1 /*pts > current_clock*/)
131
    {
132
        frameFinished = 0;
133
134
 
135
136
 
137
            printf("video decoder error\n");
138
139
 
140
        {
141
            AVPicture *dst_pic;
142
143
 
144
                Frame->reordered_opaque != AV_NOPTS_VALUE)
145
                pts = Frame->reordered_opaque;
146
            else if(pkt.dts != AV_NOPTS_VALUE)
147
                pts= pkt.dts;
148
            else
149
                pts= 0;
150
151
 
152
153
 
154
155
 
156
                      (const uint8_t**)Frame->data,
157
                      Frame->linesize, ctx->pix_fmt, ctx->width, ctx->height);
158
159
 
160
161
 
162
163
 
164
            dfx&= 3;
165
            frames_count++;
166
        };
167
    };
168
    av_free_packet(&pkt);
169
170
 
171
}
172
173
 
174
extern volatile enum player_state decoder_state;
175
extern volatile enum player_state sound_state;
176
177
 
178
179
 
180
{
181
    window_t  *win;
182
183
 
184
185
 
186
187
 
188
    win->panel.play_btn->img_hilite     = res_play_btn;
189
    win->panel.play_btn->img_pressed    = res_play_btn_pressed;
190
    win->panel.prg->current             = rewind_pos;
191
192
 
193
    player_state = STOP;
194
    decoder_state = PLAY_2_STOP;
195
    sound_state = PLAY_2_STOP;
196
    render_draw_client(main_render);
197
};
198
199
 
200
{
201
    window_t  *win = (window_t*)ctrl;
202
    static int spc_down = 0;
203
    static int ent_down = 0;
204
205
 
206
    {
207
        case MSG_SIZE:
208
            if(main_render)
209
            {
210
                render_adjust_size(main_render, win);
211
                render_draw_client(main_render);
212
            };
213
            break;
214
215
 
216
            switch((short)arg2)
217
            {
218
                case 0x39:
219
                    if(spc_down == 0)
220
                    {
221
                        spc_down = 1;
222
                        send_message(win, MSG_LBTNDOWN, 0, 0);
223
                    }
224
                    break;
225
226
 
227
                    spc_down = 0;
228
                    break;
229
230
 
231
                    if(ent_down == 0)
232
                    {
233
                        int screensize;
234
                        if(win->win_state == NORMAL)
235
                        {
236
                            win->saved = win->rc;
237
                            win->saved_state = win->win_state;
238
239
 
240
                            __asm__ __volatile__(
241
                            "int $0x40"
242
                            ::"a"(67), "b"(0), "c"(0),
243
                            "d"((screensize >> 16)-1),"S"((screensize & 0xFFFF)-1) );
244
                            win->win_state = FULLSCREEN;
245
                            window_update_layout(win);
246
                        }
247
                        else if(win->win_state == FULLSCREEN)
248
                        {
249
                            __asm__ __volatile__(
250
                            "int $0x40"
251
                            ::"a"(67), "b"(win->saved.l), "c"(win->saved.t),
252
                            "d"(win->saved.r-win->saved.l-1),"S"(win->saved.b-win->saved.t-1));
253
                            win->win_state = win->saved_state;
254
                            window_update_layout(win);
255
//                            if(win->saved_state == MAXIMIZED)
256
//                            {
5372 serge 257
//                                blit_caption(&win->caption);
258
//                                blit_panel(&win->panel);
259
//                            }
260
                        }
4438 Serge 261
                        ent_down = 1;
262
                    };
263
                    break;
264
265
 
266
                    ent_down = 0;
267
                    break;
268
            };
269
270
 
271
            if(main_render)
272
            {
273
                render_draw_client(main_render);
274
            };
275
            break;
276
277
 
278
279
 
280
            {
281
                win->panel.play_btn->img_default = res_pause_btn;
282
                win->panel.play_btn->img_hilite  = res_pause_btn;
283
                win->panel.play_btn->img_pressed = res_pause_btn_pressed;
284
                send_message(&win->panel.play_btn->ctrl, MSG_PAINT, 0, 0);
285
                player_state = PLAY;
286
                sound_state  = PAUSE_2_PLAY;
287
288
 
289
            else if(player_state == PLAY)
290
            {
291
                win->panel.play_btn->img_default = res_play_btn;
292
                win->panel.play_btn->img_hilite  = res_play_btn;
293
                win->panel.play_btn->img_pressed = res_play_btn_pressed;
294
                send_message(&win->panel.play_btn->ctrl, MSG_PAINT, 0, 0);
295
                player_state = PAUSE;
296
                sound_state  = PLAY_2_PAUSE;
297
            }
298
            break;
299
300
 
301
            switch((short)arg1)
302
            {
303
                case ID_PLAY:
304
                    if(player_state == PAUSE)
305
                    {
306
                        win->panel.play_btn->img_default  = res_pause_btn;
307
                        win->panel.play_btn->img_hilite   = res_pause_btn;
308
                        win->panel.play_btn->img_pressed = res_pause_btn_pressed;
309
                        player_state = PLAY;
310
                        sound_state = PAUSE_2_PLAY;
311
                    }
312
                    else if(player_state == PLAY)
313
                    {
314
                        win->panel.play_btn->img_default = res_play_btn;
315
                        win->panel.play_btn->img_hilite  = res_play_btn;
316
                        win->panel.play_btn->img_pressed  = res_play_btn_pressed;
317
                        player_state = PAUSE;
318
                        sound_state  = PLAY_2_PAUSE;
319
                    }
320
                    else if(player_state == STOP)
321
                    {
322
                        win->panel.play_btn->img_default  = res_pause_btn;
323
                        win->panel.play_btn->img_hilite   = res_pause_btn;
324
                        win->panel.play_btn->img_pressed = res_pause_btn_pressed;
325
                        rewind_pos = 0;
326
                        send_message(&win->panel.ctrl, MSG_PAINT, 0, 0);
327
                        player_state = PLAY;
328
                        decoder_state = PREPARE;
329
                    }
330
                    break;
331
332
 
333
                    player_stop();
334
                    break;
335
336
 
337
                    if(player_state != REWIND)
338
                    {
339
                        progress_t *prg = (progress_t*)arg2;
340
341
 
342
343
 
344
                        decoder_state = REWIND;
345
                        sound_state   = PLAY_2_STOP;
346
                        if(rewind_pos < prg->current)
347
                        {
348
                            prg->current  = rewind_pos;
349
                            rewind_pos = -rewind_pos;
350
                        }
351
                        else
352
                            prg->current  = rewind_pos;
353
354
 
355
                        win->panel.play_btn->img_hilite   = res_pause_btn;
356
                        win->panel.play_btn->img_pressed  = res_pause_btn_pressed;
357
                        send_message(&prg->ctrl, MSG_PAINT, 0, 0);
358
                    };
359
                    break;
360
361
 
362
                {
363
                    slider_t *sld = (slider_t*)arg2;
364
                    int      peak;
365
                    int      level;
366
367
 
368
                    level =  peak;
369
370
 
371
                    send_message(&sld->ctrl, MSG_PAINT, 0, 0);
372
                    win->panel.lvl->vol = level;
373
                }
374
375
 
376
                    break;
377
            }
378
            break;
379
380
 
381
            def_window_proc(ctrl,msg,arg1,arg2);
382
    };
383
    return 0;
384
};
385
386
 
387
388
 
389
extern queue_t  q_audio;
390
391
 
392
{
393
    progress_t  *prg = main_render->win->panel.prg;
394
    level_t     *lvl = main_render->win->panel.lvl;
395
396
 
397
    double      fdelay;           /*    milliseconds    */
398
399
 
400
401
 
402
    {
403
        render->win->win_command = WIN_CLOSED;
404
        return;
405
    }
406
    else if((player_state == PAUSE) || (player_state == REWIND))
407
    {
408
        delay(1);
409
        return;
410
    }
411
    else if (decoder_state == STOP && frames_count  == 0 &&
412
              player_state  != STOP)
413
    {
414
        player_stop();
415
    }
416
    else if(player_state != PLAY)
417
    {
418
        delay(1);
419
        return;
420
    };
421
422
 
423
 
424
    if(frames[vfx].ready == 1 )
425
    {
426
        int sys_time;
427
428
 
429
        fdelay = (frames[vfx].pts - ctime);
430
431
 
432
//                frames[vfx].pts, ctime, fdelay);
433
434
 
435
        {
436
            delay((int)fdelay/10);
437
        //    return;
438
        };
439
#if 0
440
        ctime = get_master_clock();
441
        fdelay = (frames[vfx].pts - ctime);
442
443
 
444
//        {
445
//            yield();
446
//            ctime = get_master_clock();
447
//            fdelay = (frames[vfx].pts - ctime);
448
//        }
449
450
 
451
452
 
453
//            printf("systime %d pts %f time %f delay %f\n",
454
//                    sys_time*10, frames[vfx].pts, ctime, fdelay);
455
456
 
457
                frames[vfx].pts, ctime, fdelay);
458
        printf("video cache %d audio cache %d\n", q_video.size/1024, q_audio.size/1024);
459
#endif
460
461
 
462
        if(main_render->win->win_state != FULLSCREEN)
463
        {
464
            prg->current = frames[vfx].pts*1000;
465
//        printf("current %f\n", prg->current);
466
            lvl->current = vfx & 1 ? sound_level_1 : sound_level_0;
467
468
 
469
470
 
471
                send_message(&lvl->ctrl, MSG_PAINT, 0, 0);
472
        }
473
474
 
475
        frames[vfx].ready = 0;
476
        vfx++;
477
        vfx&= 3;
478
    }
479
    else delay(1);
480
481
 
482
483
 
484
    {
485
        ctime = get_master_clock();
486
        fdelay = (frames[vfx].pts - ctime);
487
488
 
489
//                    frames[vfx].pts, ctime, fdelay);
490
491
 
492
        {
493
            int  next_vfx;
494
            fdelay = 0;
495
            next_vfx = (vfx+1) & 3;
496
            if( frames[next_vfx].ready == 1 )
497
            {
498
                if(frames[next_vfx].pts <= ctime)
499
                {
500
                    frames[vfx].ready = 0;                  // skip this frame
501
                    vfx++;
502
                    vfx&= 3;
503
                }
504
                else
505
                {
506
                    if( (frames[next_vfx].pts - ctime) <
507
                        ( ctime - frames[vfx].pts) )
508
                    {
509
                        frames[vfx].ready = 0;                  // skip this frame
510
                        vfx++;
511
                        vfx&= 3;
512
                        fdelay = (frames[next_vfx].pts - ctime);
513
                    }
514
                }
515
            };
516
        };
517
518
 
519
        {
520
           int val = fdelay;
521
           printf("pts %f time %f delay %d\n",
522
                   frames[vfx].pts, ctime, val);
523
           delay(val/10);
524
        };
525
526
 
527
        fdelay = (frames[vfx].pts - ctime);
528
529
 
530
                frames[vfx].pts, ctime, fdelay);
531
532
 
533
        main_render->win->panel.prg->current = frames[vfx].pts;
534
//        send_message(&render->win->panel.prg->ctrl, MSG_PAINT, 0, 0);
535
        frames[vfx].ready = 0;
536
        vfx++;
537
        vfx&= 3;
538
    }
539
    else yield();
540
#endif
541
542
 
543
544
 
545
 
546
547
 
548
{
549
    AVCodecContext *ctx = param;
550
    window_t  *MainWindow;
551
552
 
553
554
 
555
                               10,10,width,height+CAPTION_HEIGHT+PANEL_HEIGHT,MainWindowProc);
556
557
 
558
559
 
560
561
 
562
563
 
564
    if( main_render == NULL)
565
    {
566
        printf("Cannot create render\n\r");
567
        return 0;
568
    };
569
570
 
5603 serge 571
572
 
4438 Serge 573
    player_state = PLAY;
574
575
 
576
577
 
5603 serge 578
579
 
4438 Serge 580
    fini_winlib();
581
    player_state = CLOSED;
582
    return 0;
583
};
584
585
 
586
 
587
void draw_sw_picture(render_t *render, AVPicture *picture);
588
589
 
590
{
591
    render_t *render;
592
593
 
594
    uint32_t s, sw, sh;
595
    uint8_t  state;
596
597
 
598
599
 
600
    memset(render, 0, sizeof(render_t));
601
602
 
603
604
 
605
    render->ctx_height = ctx->height;
606
    render->ctx_format = ctx->pix_fmt;
607
608
 
5372 serge 609
4438 Serge 610
 
611
    bottom = win->h-CAPTION_HEIGHT-PANEL_HEIGHT;
612
613
 
5372 serge 614
                    right, bottom);
615
4438 Serge 616
 
617
618
 
619
    draw_h = right*render->ctx_height/render->ctx_width;
620
621
 
622
    {
623
        draw_w = right;
624
        draw_h = right*render->ctx_height/render->ctx_width;
625
    };
626
627
 
628
    {
629
        draw_h = bottom;
630
        draw_w = bottom*render->ctx_width/render->ctx_height;
631
    };
632
633
 
634
    render->win_height = win->h-CAPTION_HEIGHT-PANEL_HEIGHT;
635
636
 
637
638
 
5372 serge 639
4438 Serge 640
 
641
    {
642
        render->bitmap[0] = pxCreateBitmap(draw_w, draw_h);
5372 serge 643
        if(render->bitmap[0] == NULL)
644
        {
4438 Serge 645
            free(render);
646
            return NULL;
647
        }
648
        render->draw = draw_sw_picture;
649
    }
650
    else
651
    {
652
        int width, height;
5372 serge 653
        int i;
4438 Serge 654
655
 
656
        {
657
            width  = render->ctx_width;
658
            height = render->ctx_height;
659
        }
660
        else
661
        {
662
            width  = draw_w;
663
            height = draw_h;;
664
        }
665
666
 
667
        {
668
            render->bitmap[i] = pxCreateBitmap(width, height);
5372 serge 669
            if( render->bitmap[i] == NULL )
670
            {
4438 Serge 671
                player_state = CLOSED;
672
                free(render);
673
                return NULL;
674
            };
675
        }
676
677
 
678
        render->target = 0;
679
        render->draw   = draw_hw_picture;
680
    };
681
682
 
683
           render->caps & HW_TEX_BLIT ? "hw_tex_blit":
684
           render->caps & HW_BIT_BLIT ? "hw_bit_blit":"software",
685
           render->ctx_width, render->ctx_height,
686
           draw_w, draw_h);
687
688
 
689
};
690
691
 
692
{
693
694
 
5372 serge 695
4438 Serge 696
 
697
        pxDestroyBitmap(render->bitmap[1]);
5372 serge 698
4438 Serge 699
 
5372 serge 700
};
4438 Serge 701
702
 
703
{
704
    int i;
705
706
 
707
    render->rcvideo.l = 0;
708
    render->rcvideo.t = 0;
709
    render->rcvideo.r = width;
710
    render->rcvideo.b = height;
711
712
 
713
714
 
715
    {
716
        int yoffs;
717
        yoffs = (render->win_height-height)/2;
718
        if(yoffs)
719
        {
720
            render->rctop.t = 0;
721
            render->rctop.b = yoffs;
722
            render->rcvideo.t  = yoffs;
723
            render->layout |= HAS_TOP;
724
        }
725
726
 
727
        if(yoffs)
728
        {
729
            render->rcbottom.t = render->rcvideo.t+render->rcvideo.b;
730
            render->rcbottom.b = yoffs;
731
            render->layout |= HAS_BOTTOM;
732
        }
733
    }
734
735
 
736
    {
737
        int xoffs;
738
        xoffs = (render->win_width-width)/2;
739
        if(xoffs)
740
        {
741
            render->rcleft.r  = xoffs;
742
            render->rcvideo.l = xoffs;
743
            render->layout |= HAS_LEFT;
744
        }
745
        xoffs = render->win_width-(render->rcvideo.l+render->rcvideo.r);
746
        if(xoffs)
747
        {
748
            render->rcright.l = render->rcvideo.l+render->rcvideo.r;
749
            render->rcright.r = xoffs;
750
            render->layout |= HAS_RIGHT;
751
        }
752
    };
753
};
754
755
 
756
{
757
    uint32_t right, bottom, new_w, new_h;
758
    uint32_t s, sw, sh;
759
    uint8_t  state;
760
761
 
762
    bottom = win->h;
763
764
 
765
        bottom-= CAPTION_HEIGHT+PANEL_HEIGHT;
766
767
 
768
 //                   right, bottom);
769
770
 
771
772
 
773
        return;
774
775
 
776
        return;
777
778
 
779
        bottom == render->win_height)
780
        return;
781
782
 
783
784
 
785
    new_h = right*render->ctx_height/render->ctx_width;
786
787
 
788
    {
789
        new_w = right;
790
        new_h = right*render->ctx_height/render->ctx_width;
791
    };
792
    if(new_h > bottom)
793
    {
794
        new_h = bottom;
795
        new_w = bottom*render->ctx_width/render->ctx_height;
796
    };
797
798
 
799
    render->win_height = bottom;
800
    render_set_size(render, new_w, new_h);
801
802
 
803
    {
5372 serge 804
        if(render->win->win_state == FULLSCREEN)
805
            pxResizeClient(render->rcvideo.l, render->rcvideo.t, new_w, new_h);
806
        else
807
            pxResizeClient(render->rcvideo.l, render->rcvideo.t+CAPTION_HEIGHT, new_w, new_h);
808
809
 
4438 Serge 810
    };
5372 serge 811
4438 Serge 812
 
5372 serge 813
4438 Serge 814
 
815
        pxResizeBitmap(render->bitmap[1], new_w, new_h);
5372 serge 816
817
 
4438 Serge 818
};
819
820
 
821
{
822
    int       dst_width;
5372 serge 823
    int       dst_height;
824
    bitmap_t *bitmap;
825
    uint8_t  *bitmap_data;
826
    uint32_t  bitmap_pitch;
827
    uint8_t  *data[4];
828
    int       linesize[4];
829
4438 Serge 830
 
831
       render->win->win_state == ROLLED)
832
        return;
833
834
 
835
    {
836
        dst_width  = render->ctx_width;
837
        dst_height = render->ctx_height;
838
    }
839
    else
840
    {
841
        dst_width  = render->rcvideo.r;
842
        dst_height = render->rcvideo.b;
843
    };
844
845
 
846
              render->ctx_width, render->ctx_height, render->ctx_format,
847
              dst_width, dst_height, PIX_FMT_BGRA,
848
              SWS_FAST_BILINEAR, NULL, NULL, NULL);
849
    if(cvt_ctx == NULL)
850
    {
851
        printf("Cannot initialize the conversion context!\n");
852
        return ;
853
    };
854
855
 
5372 serge 856
4438 Serge 857
 
5372 serge 858
    if( bitmap_data == NULL)
859
    {
4438 Serge 860
        printf("Cannot lock bitmap!\n");
861
        return ;
862
    }
863
864
 
865
    data[0] = bitmap_data;
5372 serge 866
    data[1] = bitmap_data+1;
867
    data[2] = bitmap_data+2;
868
    data[3] = bitmap_data+3;
869
4438 Serge 870
 
5372 serge 871
    linesize[1] = bitmap_pitch;
872
    linesize[2] = bitmap_pitch;
873
    linesize[3] = bitmap_pitch;
874
4438 Serge 875
 
876
              picture->linesize, 0, render->ctx_height, data, linesize);
877
//    printf("sws_scale\n");
878
879
 
880
 
881
    {
882
883
 
884
            pxBlitBitmap(bitmap,render->rcvideo.l,render->rcvideo.t,
5372 serge 885
                 render->rcvideo.r, render->rcvideo.b,0,0);
886
        else
4438 Serge 887
            pxBlitBitmap(bitmap, render->rcvideo.l,
5372 serge 888
                    CAPTION_HEIGHT+render->rcvideo.t,
4438 Serge 889
                    render->rcvideo.r, render->rcvideo.b,0,0);
5372 serge 890
    }
4438 Serge 891
    else
892
    {
893
        if(render->win->win_state == FULLSCREEN)
894
            pxBlitBitmap(bitmap,render->rcvideo.l,render->rcvideo.t,
5372 serge 895
                    render->rcvideo.r, render->rcvideo.b, 0,0);
4438 Serge 896
        else
897
            pxBlitBitmap(bitmap, render->rcvideo.l,
5372 serge 898
                    CAPTION_HEIGHT+render->rcvideo.t,
4438 Serge 899
                    render->rcvideo.r, render->rcvideo.b, 0, 0);
900
    };
901
902
 
903
    render->target++;
904
    render->target&= 1;
905
}
906
907
 
908
{
909
    uint8_t  *bitmap_data;
5372 serge 910
    uint32_t  bitmap_pitch;
911
    uint8_t     *data[4];
4438 Serge 912
    int      linesize[4];
913
914
 
915
       render->win->win_state == ROLLED)
916
        return;
917
918
 
919
              render->ctx_width, render->ctx_height,
920
              render->ctx_format,
921
              render->rcvideo.r, render->rcvideo.b,
922
              PIX_FMT_BGRA, SWS_FAST_BILINEAR, NULL, NULL, NULL);
923
    if(cvt_ctx == NULL)
924
    {
925
        printf("Cannot initialize the conversion context!\n");
926
        return ;
927
    }
928
929
 
5372 serge 930
4438 Serge 931
 
5372 serge 932
    data[1] = bitmap_data+1;
933
    data[2] = bitmap_data+2;
934
    data[3] = bitmap_data+3;
935
4438 Serge 936
 
5372 serge 937
    linesize[1] = bitmap_pitch;
938
    linesize[2] = bitmap_pitch;
939
    linesize[3] = bitmap_pitch;
940
4438 Serge 941
 
942
              picture->linesize, 0, render->ctx_height, data, linesize);
943
944
 
945
        pxBlitBitmap(render->bitmap[0],render->rcvideo.l,render->rcvideo.t,
5372 serge 946
                 render->rcvideo.r, render->rcvideo.b,0,0);
947
    else
4438 Serge 948
        pxBlitBitmap(render->bitmap[0], render->rcvideo.l,
5372 serge 949
                 CAPTION_HEIGHT+render->rcvideo.t,
4438 Serge 950
                 render->rcvideo.r, render->rcvideo.b,0,0);
5372 serge 951
4438 Serge 952
 
5372 serge 953
}
4438 Serge 954
955
 
956
{
957
    int y;
958
959
 
960
       render->win_state == ROLLED )
961
        return;
962
    if(render->win_state == FULLSCREEN)
963
        y = 0;
964
    else
965
        y = CAPTION_HEIGHT;
966
967
 
968
    {
969
         if(frames[vfx].ready == 1 )
970
            main_render->draw(main_render, &frames[vfx].picture);
971
         else
972
            draw_bar(0, y, render->win_width,
973
                 render->rcvideo.b, 0);
974
    }
975
    else if( player_state == STOP )
976
    {
977
        draw_bar(0,y, render->win_width,
978
                 render->rcvideo.b, 0);
979
    };
980
981
 
982
        draw_bar(0, y, render->win_width,
983
                 render->rctop.b, 0);
984
    if(render->layout & HAS_LEFT)
985
        draw_bar(0, render->rcvideo.t+y, render->rcleft.r,
986
                 render->rcvideo.b, 0);
987
    if(render->layout & HAS_RIGHT)
988
        draw_bar(render->rcright.l, render->rcvideo.t+y,
989
                 render->rcright.r, render->rcvideo.b, 0);
990
    if(render->layout & HAS_BOTTOM)
991
        draw_bar(0, render->rcbottom.t+y,
992
                 render->win_width, render->rcbottom.b, 0);
993
}
994
>
995