Subversion Repositories Kolibri OS

Rev

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