Subversion Repositories Kolibri OS

Rev

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