Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 2692 → Rev 2693

/programs/media/Fplay/video.c
17,6 → 17,7
extern int res_play_btn[];
extern int res_play_btn_pressed[];
 
extern int64_t stream_duration;
 
typedef struct
{
44,7 → 45,19
 
void get_client_rect(rect_t *rc);
 
void flush_video()
{
int i;
 
for(i = 0; i < 4; i++)
{
frames[i].pts = 0;
frames[i].ready = 0;
};
vfx = 0;
dfx = 0;
};
 
int init_video(AVCodecContext *ctx)
{
int i;
113,7 → 126,7
if( get_packet(qv, &pkt) == 0 )
return 0;
 
current_clock = -80.0 + get_master_clock();
current_clock = -90.0 + get_master_clock();
 
if( pkt.dts == AV_NOPTS_VALUE &&
Frame->reordered_opaque != AV_NOPTS_VALUE)
123,9 → 136,10
else
pts= 0;
 
pts *= av_q2d(video_time_base)*1000.0;
 
if( pts > current_clock)
if( 1 /*pts > current_clock*/)
{
frameFinished = 0;
 
161,6 → 175,8
Frame->linesize, ctx->pix_fmt, ctx->width, ctx->height);
 
frames[dfx].pts = pts*1000.0;
// printf("pts %f\n", frames[dfx].pts);
 
frames[dfx].ready = 1;
 
dfx++;
175,6 → 191,7
extern volatile enum player_state player_state;
//rect_t win_rect;
 
extern int64_t rewind_pos;
 
int MainWindowProc(ctrl_t *ctrl, uint32_t msg, uint32_t arg1, uint32_t arg2)
{
196,18 → 213,18
case MSG_LBTNDOWN:
if(player_state == PAUSE)
{
win->panel.play_btn->img_default = res_play_btn;
win->panel.play_btn->img_hilite = res_play_btn;
win->panel.play_btn->img_pressed = res_play_btn_pressed;
win->panel.play_btn->img_default = res_pause_btn;
win->panel.play_btn->img_hilite = res_pause_btn;
win->panel.play_btn->img_pressed = res_pause_btn_pressed;
send_message(win->panel.play_btn, MSG_PAINT, 0, 0);
player_state = PLAY_RESTART;
player_state = PAUSE_2_PLAY;
 
}
else if(player_state == PLAY)
{
win->panel.play_btn->img_default = res_pause_btn;
win->panel.play_btn->img_hilite = res_pause_btn;
win->panel.play_btn->img_pressed = res_pause_btn_pressed;
win->panel.play_btn->img_default = res_play_btn;
win->panel.play_btn->img_hilite = res_play_btn;
win->panel.play_btn->img_pressed = res_play_btn_pressed;
send_message(win->panel.play_btn, MSG_PAINT, 0, 0);
player_state = PAUSE;
}
219,19 → 236,35
case ID_PLAY:
if(player_state == PAUSE)
{
win->panel.play_btn->img_default = res_pause_btn;
win->panel.play_btn->img_hilite = res_pause_btn;
win->panel.play_btn->img_pressed = res_pause_btn_pressed;
player_state = PAUSE_2_PLAY;
}
else if(player_state == PLAY)
{
win->panel.play_btn->img_default = res_play_btn;
win->panel.play_btn->img_hilite = res_play_btn;
win->panel.play_btn->img_pressed = res_play_btn_pressed;
player_state = PLAY_RESTART;
}
else if(player_state == PLAY)
{
win->panel.play_btn->img_default = res_pause_btn;
win->panel.play_btn->img_hilite = res_pause_btn;
win->panel.play_btn->img_pressed = res_pause_btn_pressed;
player_state = PAUSE;
}
break;
 
case 101: //ID_PROGRESS:
if(player_state != REWIND)
{
progress_t *prg = (progress_t*)arg2;
rewind_pos = (int64_t)prg->pos *
(prg->max - prg->min)/prg->ctrl.w;
// printf("progress action %f\n", (double)rewind_pos);
player_state = REWIND;
main_render->win->panel.prg->current = rewind_pos;
send_message(&main_render->win->panel.ctrl, MSG_PAINT, 0, 0);
};
break;
default:
break;
}
243,6 → 276,8
return 0;
};
 
#define VERSION_A 1
 
void render_time(render_t *render)
{
double ctime; /* milliseconds */
261,8 → 296,11
return;
};
 
#ifdef VERSION_A
if(frames[vfx].ready == 1 )
{
int sys_time;
 
ctime = get_master_clock();
fdelay = (frames[vfx].pts - ctime);
 
269,14 → 307,25
// printf("pts %f time %f delay %f\n",
// frames[vfx].pts, ctime, fdelay);
 
if(fdelay > 20.0)
if(fdelay > 15.0)
{
delay(2);
delay(1);
// yield();
return;
};
 
ctime = get_master_clock();
fdelay = (frames[vfx].pts - ctime);
 
sys_time = get_tick_count();
 
// if(fdelay < 0)
// printf("systime %d pts %f time %f delay %f\n",
// sys_time*10, frames[vfx].pts, ctime, fdelay);
 
main_render->draw(main_render, &frames[vfx].picture);
main_render->win->panel.prg->current = frames[vfx].pts*1000;
send_message(&render->win->panel.prg->ctrl, MSG_PAINT, 0, 0);
frames[vfx].ready = 0;
vfx++;
vfx&= 3;
283,11 → 332,72
}
else yield();
 
#else
 
if(frames[vfx].ready == 1 )
{
ctime = get_master_clock();
fdelay = (frames[vfx].pts - ctime);
 
// printf("pts %f time %f delay %f\n",
// frames[vfx].pts, ctime, fdelay);
 
if(fdelay < 0.0 )
{
int next_vfx;
fdelay = 0;
next_vfx = (vfx+1) & 3;
if( frames[next_vfx].ready == 1 )
{
if(frames[next_vfx].pts <= ctime)
{
frames[vfx].ready = 0; // skip this frame
vfx++;
vfx&= 3;
}
else
{
if( (frames[next_vfx].pts - ctime) <
( ctime - frames[vfx].pts) )
{
frames[vfx].ready = 0; // skip this frame
vfx++;
vfx&= 3;
fdelay = (frames[next_vfx].pts - ctime);
}
}
};
};
 
if(fdelay > 10.0)
{
int val = fdelay;
printf("pts %f time %f delay %d\n",
frames[vfx].pts, ctime, val);
delay(val/10);
};
 
ctime = get_master_clock();
fdelay = (frames[vfx].pts - ctime);
 
printf("pts %f time %f delay %f\n",
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[vfx].ready = 0;
vfx++;
vfx&= 3;
}
else yield();
#endif
 
}
 
 
 
 
extern char *movie_file;
 
int video_thread(void *param)
297,13 → 407,18
init_winlib();
 
MainWindow = create_window(movie_file,0,
10,10,width,height+29+75,MainWindowProc);
10,10,width,height+29+55,MainWindowProc);
 
MainWindow->panel.prg->max = stream_duration;
// printf("MainWindow %x\n", MainWindow);
 
main_render->win = MainWindow;
 
show_window(MainWindow, NORMAL);
 
render_draw_client(main_render);
player_state = PAUSE_2_PLAY;
 
run_render(MainWindow, main_render);
 
// printf("exit thread\n");
448,7 → 563,7
 
 
right = win->w;
bottom = win->h-CAPTION_HEIGHT-75;
bottom = win->h-CAPTION_HEIGHT-55;
render->win_state = win->win_state;
 
if(render->win_state == MINIMIZED)
482,7 → 597,7
};
 
render->win_width = win->w;
render->win_height = win->h-CAPTION_HEIGHT-75;
render->win_height = win->h-CAPTION_HEIGHT-55;
render_set_size(render, new_w, new_h);
};
 
600,9 → 715,14
render->win_state == ROLLED)
return;
 
if(player_state == PAUSE)
if((player_state == PAUSE) ||
(player_state == PLAY_INIT) )
{
if(frames[vfx].ready == 1 )
main_render->draw(main_render, &frames[vfx].picture);
else
draw_bar(0, CAPTION_HEIGHT, render->win_width,
render->rcvideo.b, 0);
};
 
if(render->layout & HAS_TOP)