12,6 → 12,7 |
#include "fplay.h" |
|
int fplay_blit_bitmap(bitmap_t *bitmap, int dst_x, int dst_y,int w, int h); |
void draw_va_picture(render_t *render, AVPicture *picture); |
|
extern int res_pause_btn[]; |
extern int res_pause_btn_pressed[]; |
35,6 → 36,8 |
|
struct SwsContext *cvt_ctx = NULL; |
|
int vfx = 0; |
int dfx = 0; |
|
render_t *main_render; |
|
46,7 → 49,7 |
|
void get_client_rect(rect_t *rc); |
|
void flush_video(vst_t *vst) |
void flush_video() |
{ |
int i; |
|
55,9 → 58,9 |
frames[i].pts = 0; |
frames[i].ready = 0; |
}; |
vst->vfx = 0; |
vst->dfx = 0; |
frames_count = 0; |
vfx = 0; |
dfx = 0; |
}; |
|
int init_video(vst_t *vst) |
103,7 → 106,7 |
int frameFinished; |
double current_clock; |
|
if(frames[vst->dfx].ready != 0 ) |
if(frames[dfx].ready != 0 ) |
return -1; |
|
if( get_packet(&vst->q_video, &pkt) == 0 ) |
148,17 → 151,18 |
|
pts *= av_q2d(video_time_base); |
|
dst_pic = &frames[vst->dfx].picture; |
dst_pic = &frames[dfx].picture; |
|
av_image_copy(dst_pic->data, dst_pic->linesize, |
(const uint8_t**)Frame->data, |
Frame->linesize, vst->vCtx->pix_fmt, vst->vCtx->width, vst->vCtx->height); |
|
frames[vst->dfx].pts = pts*1000.0; |
frames[dfx].pts = pts*1000.0; |
|
frames[vst->dfx].ready = 1; |
frames[dfx].ready = 1; |
|
vst->dfx = (vst->dfx + 1) & 3; |
dfx++; |
dfx&= 3; |
frames_count++; |
}; |
mutex_unlock(&vst->gpu_lock); |
388,7 → 392,7 |
{ |
progress_t *prg = main_render->win->panel.prg; |
level_t *lvl = main_render->win->panel.lvl; |
vst_t *vst = main_render->vst; |
|
double ctime; /* milliseconds */ |
double fdelay; /* milliseconds */ |
|
417,12 → 421,12 |
|
|
#ifdef VERSION_A |
if(frames[vst->vfx].ready == 1 ) |
if(frames[vfx].ready == 1 ) |
{ |
int sys_time; |
|
ctime = get_master_clock(); |
fdelay = (frames[vst->vfx].pts - ctime); |
fdelay = (frames[vfx].pts - ctime); |
|
// printf("pts %f time %f delay %f\n", |
// frames[vfx].pts, ctime, fdelay); |
434,7 → 438,7 |
}; |
#if 0 |
ctime = get_master_clock(); |
fdelay = (frames[vst->vfx].pts - ctime); |
fdelay = (frames[vfx].pts - ctime); |
|
// while(fdelay > 0) |
// { |
454,12 → 458,12 |
printf("video cache %d audio cache %d\n", q_video.size/1024, q_audio.size/1024); |
#endif |
|
main_render->draw(main_render, &frames[vst->vfx].picture); |
main_render->draw(main_render, &frames[vfx].picture); |
if(main_render->win->win_state != FULLSCREEN) |
{ |
prg->current = frames[vst->vfx].pts*1000; |
prg->current = frames[vfx].pts*1000; |
// printf("current %f\n", prg->current); |
lvl->current = vst->vfx & 1 ? sound_level_1 : sound_level_0; |
lvl->current = vfx & 1 ? sound_level_1 : sound_level_0; |
|
send_message(&prg->ctrl, PRG_PROGRESS, 0, 0); |
|
468,8 → 472,9 |
} |
|
frames_count--; |
frames[vst->vfx].ready = 0; |
vst->vfx = (vst->vfx + 1) & 3; |
frames[vfx].ready = 0; |
vfx++; |
vfx&= 3; |
} |
else delay(1); |
|
478,7 → 483,7 |
if(frames[vfx].ready == 1 ) |
{ |
ctime = get_master_clock(); |
fdelay = (frames[vst->vfx].pts - ctime); |
fdelay = (frames[vfx].pts - ctime); |
|
// printf("pts %f time %f delay %f\n", |
// frames[vfx].pts, ctime, fdelay); |
487,21 → 492,23 |
{ |
int next_vfx; |
fdelay = 0; |
next_vfx = (vst->vfx+1) & 3; |
next_vfx = (vfx+1) & 3; |
if( frames[next_vfx].ready == 1 ) |
{ |
if(frames[next_vfx].pts <= ctime) |
{ |
frames[vst->vfx].ready = 0; // skip this frame |
vst->vfx = (vst->vfx + 1) & 3; |
frames[vfx].ready = 0; // skip this frame |
vfx++; |
vfx&= 3; |
} |
else |
{ |
if( (frames[next_vfx].pts - ctime) < |
( ctime - frames[vst->vfx].pts) ) |
( ctime - frames[vfx].pts) ) |
{ |
frames[vst->vfx].ready = 0; // skip this frame |
vst->vfx = (vst->vfx + 1) & 3; |
frames[vfx].ready = 0; // skip this frame |
vfx++; |
vfx&= 3; |
fdelay = (frames[next_vfx].pts - ctime); |
} |
} |
512,21 → 519,22 |
{ |
int val = fdelay; |
printf("pts %f time %f delay %d\n", |
frames[vst->vfx].pts, ctime, val); |
frames[vfx].pts, ctime, val); |
delay(val/10); |
}; |
|
ctime = get_master_clock(); |
fdelay = (frames[vst->vfx].pts - ctime); |
fdelay = (frames[vfx].pts - ctime); |
|
printf("pts %f time %f delay %f\n", |
frames[vst->vfx].pts, ctime, fdelay); |
frames[vfx].pts, ctime, fdelay); |
|
main_render->draw(main_render, &frames[vfx].picture); |
main_render->win->panel.prg->current = frames[vfx].pts; |
// send_message(&render->win->panel.prg->ctrl, MSG_PAINT, 0, 0); |
frames[vst->vfx].ready = 0; |
vst->vfx = (vst->vfx + 1) & 3; |
frames[vfx].ready = 0; |
vfx++; |
vfx&= 3; |
} |
else yield(); |
#endif |
947,7 → 955,6 |
|
void render_draw_client(render_t *render) |
{ |
vst_t *vst = render->vst; |
int y; |
|
if(render->win_state == MINIMIZED || |
960,8 → 967,8 |
|
if(player_state == PAUSE) |
{ |
if(frames[vst->vfx].ready == 1 ) |
main_render->draw(main_render, &frames[vst->vfx].picture); |
if(frames[vfx].ready == 1 ) |
main_render->draw(main_render, &frames[vfx].picture); |
else |
draw_bar(0, y, render->win_width, |
render->rcvideo.b, 0); |