Subversion Repositories Kolibri OS

Rev

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