Subversion Repositories Kolibri OS

Rev

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