Subversion Repositories Kolibri OS

Rev

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