Subversion Repositories Kolibri OS

Rev

Rev 3292 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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