Subversion Repositories Kolibri OS

Rev

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