视频播放器
typedef struct {
video_pos_struct
bg;
video_pos_struct
speed;
video_pos_struct
speed_inc;
video_pos_struct
speed_dec;
video_pos_struct volume;
video_pos_struct
volume_inc;
video_pos_struct
volume_dec;
#ifdef __VDOPLY_VIDEO_NEW_SKINS__
video_pos_struct
volume_progress_bar;
video_pos_struct
stop_play;
#endif
video_pos_struct
timer;
video_pos_struct
timer_bg;
video_pos_struct
progress_fill;
video_pos_struct
progress_empty;
video_pos_struct
progress_inc;
video_pos_struct
progress_dec;
} video_osd_vodply_full_panel_struct;
1、mmi_vdoply_entry_player_screen() ——>进入播放器函数
2、mmi_vdoply_entry_player_screen_from_file() ———>从文件进入
3、mmi_vdoply_entry_player_screen_internal() ———>
4、mmi_vdoply_init_ui() ———>初始化工作
5、mmi_vdoply_enter_state() ———>状态
6、mmi_vdoply_fullscr_reset_osd_fade() ——>视频播放器边框渐变
7、static void mmi_vdoply_draw_fullscr_osd() ——>画界面上效果函数
{
mmi_vdoply_draw_fullscr_softkey(); ——————> 软键(左、中、右)
mmi_vdoply_draw_fullscr_panel_volume(); ——————> 音量
#ifdef __VDOPLY_VIDEO_NEW_SKINS__
mmi_vdoply_draw_fullscr_panel_stop(); ——————> 停止键
#endif
mmi_vdoply_draw_fullscr_panel_speed(); ——————> 播放速率
mmi_vdoply_draw_fullscr_panel_timer(); ——————> 时间
mmi_vdoply_draw_fullscr_panel_progress(); ——————> 进度条
}
INIT_TOUCH_FULL_OBJ(volume_progress_bar, VOLUME_PROGRESS_BAR); ——————> 触屏
mmi_vdoply_touch_scr_pen_down_hdlr(mmi_pen_point_struct pos)
mmi_vdoply_touch_scr_pen_up_hdlr(mmi_pen_point_struct pos)
mmi_vdoply_touch_scr_hit_test(S32 pos_x, S32 pos_y, vdoply_ui_touch_struct *touch_obj)
音量调节:
触摸点击或滑动音量条可以调节音量;在视频界面,当一个pen down 事件发生,mmi_vdoply_touch_scr_hit_test()函数会去
,如果该点在音量条所在范围内,则会去做相应的响应。
音量级数逻辑上是有16级,我在这里是选择一个160个像素点长度做为音量的触屏区域,刚好10个像素点长度为一个音量级数,假设该区域的起始位置为x1,当一个触屏事件发生在该区域内,取其触屏点位置x2,用x2-x1,得到的值再除以10就得到音量的逻辑级数。(此处省略,见代码口述)
播放器界面背景以及按键浮动渐变过程:
背景图以及按键图都画在OSD层上,函数:
gdi_layer_set_opacity(TRUE, (U8) g_vdoply_cntx.fullscr_osd_opacity);就是来设置该层的通透值,如果改变全局变量g_vdoply_cntx.fullscr_osd_opacity的值,这些图片在界面上看到效果不一样。
当在视频播放界面,一个触屏或者按键事件发生,则会唤醒OSD层,调用
mmi_vdoply_fullscr_reset_osd_fade()函数,此函数里面有个定时器,每隔一定时间调用mmi_vdoply_fullscr_osd_fade_cyclic()函数,在此函数里每隔一定时间会对全局变量g_vdoply_cntx.fullscr_osd_opacity的值进行改变,从而改变OSD的通透值,OSD层就会出现渐变效果。(此处省略,见代码口述)
/* create full screen osd layer */
g_vdoply_cntx.osd_layer_buf_ptr=
mmi_frm_scrmem_alloc_framebuffer(VDOPLY_OSD_BUFFER_SIZE);
gdi_layer_create_double_using_outside_memory(
0,
0,
UI_device_height,
UI_device_width,
&g_vdoply_cntx.osd_layer_handle,
(PU8) g_vdoply_cntx.osd_layer_buf_ptr,
(S32) (VDOPLY_OSD_BUFFER_SIZE));
gdi_layer_push_and_set_active(g_vdoply_cntx.osd_layer_handle);
gdi_layer_set_opacity(TRUE, (U8) g_vdoply_cntx.fullscr_osd_opacity);
——————>设置该层的通透值
gdi_layer_set_source_key(TRUE, GDI_COLOR_TRANSPARENT);
——————> MTK图形系统中实现通透功能的函数,TRUE,
示打开通透,第二个参数表示需要通透的颜色值。
gdi_layer_pop_and_restore_active();