Subversion Repositories Kolibri OS

Rev

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