3 设计与实现
3.1播放器总体结构
本文中的播放器采用MiniGUI作为底层图形库,用于生成用户界面以及读写FrameBuffer。
播放器软件总体结构如图2所示,它主要由三部分组成,分别是图形用户界面模块、系统管理主控模块和音/视频解码器。三部分功能设计如下面所述:
图形用户界面模块通过事件/消息机制和系统管理主控模块交互。
音/视频解码器模块可以看作是系统管理主控模块的插件(plug-in),从系统管理主控模块获得编码的音/视频数据并对其解码后发送己解码的音/视频数据给系统管理主控模块。
系统管理主控模块则负责网络数据的接收和解析、图形用户界面模块和音/视频解码器模块的工作协调和音/视频数据的输出。这个模块是播放器软件中非常重要的一个模块。
3.2 用户图形界面设计
MiniGUI提供了丰富的GUI元素,如常见的控件类、对话框与消息框以及菜单等,此外,MiniGUI支持界面皮肤。因此,利用MiniGUI可以非常方便地设计出漂亮的用户图形界面。
播放器的人机交互界面主要包括播放控制与文件列表管理两大部分。播放控制用来实现对所选择的媒体文件作播放/暂停、停止及进度控制等;文件列表管理则用来实现向播放列表添加、删除媒体文件以及对列表中文件排序等功能。
3.3 主要函数及具体实现
⑴ 播放控制事件回调函数
static int main_event_cb (HWND hwnd, skin_item_t* item, int event, void* data)
{ …
if (event==SIE_BUTTON_CLICKED) {
switch (item->id) {
case SIID_PLAY:
…
case SIID_PAUSE:
…
case SIID_STOP:
…
case SIID_CLOSE:
…
}
}
else if (event==SIE_SLIDER_CHANGED && item->id!=SIID_VOLUME) {
…
}
return 1;
}
⑵ 列表事件处理函数
void playlist_handle_event(PEvent *event, void *data)
{
…
switch(event->type) {
case ButtonPress:
…
case ButtonRelease:
…
case KeyPress:
if(!playlist)
return;
mykeyevent = event->xkey;
LockDisplay(gGui->display);
len=LookupString(&mykeyevent, kbuf, sizeof(kbuf), &mykey, NULL);
UnlockDisplay(gGui->display);
switch (mykey) {
case K_Down:
case K_Next:
browser_step_up(playlist->playlist, NULL);
break;
case K_Up:
case K_Prior:
browser_step_down(playlist->playlist, NULL);
break;
default:
gui_handle_event(event, data);
break;
}
break;
case MappingNotify:
LockDisplay(gGui->display);
RefreshKeyboardMapping((MappingEvent *)event);
UnlockDisplay(gGui->display);
break;
}
}
⑶ 主函数
int MiniGUIMain(int argc, const char* argv[])
{
…
PlayerHandle=PlayerNew();
…
free(buffer);
PlayerGetInfo(PlayerHandle, &fi);
…
InitCreateInfo(&CreateInfo);
hMainWnd=CreateMainWindow(&CreateInfo);
if (hMainWnd==HWND_INVALID)
return -1;
…
while( GetMessage(&Msg, hMainWnd) )
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
…
}
PlayerClose(PlayerHandle);
…
MainWindowThreadCleanup(hMainWnd);
return 0;
}
4 结束语
随着嵌入式系统硬件性能的不断提升,用户对应用程序界面的友好性和功能的完备性提出了更高的要求。本文介绍的基于MiniGUI的嵌入式媒体播放器具有设计简单,占用系统资源少等特点,可作为开发基于嵌入式图形界面系统的应用软件的参考。
3 设计与实现
3.1播放器总体结构
本文中的播放器采用MiniGUI作为底层图形库,用于生成用户界面以及读写FrameBuffer。
播放器软件总体结构如图2所示,它主要由三部分组成,分别是图形用户界面模块、系统管理主控模块和音/视频解码器。三部分功能设计如下面所述:
图形用户界面模块通过事件/消息机制和系统管理主控模块交互。
音/视频解码器模块可以看作是系统管理主控模块的插件(plug-in),从系统管理主控模块获得编码的音/视频数据并对其解码后发送己解码的音/视频数据给系统管理主控模块。
系统管理主控模块则负责网络数据的接收和解析、图形用户界面模块和音/视频解码器模块的工作协调和音/视频数据的输出。这个模块是播放器软件中非常重要的一个模块。
3.2 用户图形界面设计
MiniGUI提供了丰富的GUI元素,如常见的控件类、对话框与消息框以及菜单等,此外,MiniGUI支持界面皮肤。因此,利用MiniGUI可以非常方便地设计出漂亮的用户图形界面。
播放器的人机交互界面主要包括播放控制与文件列表管理两大部分。播放控制用来实现对所选择的媒体文件作播放/暂停、停止及进度控制等;文件列表管理则用来实现向播放列表添加、删除媒体文件以及对列表中文件排序等功能。
3.3 主要函数及具体实现
⑴ 播放控制事件回调函数
static int main_event_cb (HWND hwnd, skin_item_t* item, int event, void* data)
{ …
if (event==SIE_BUTTON_CLICKED) {
switch (item->id) {
case SIID_PLAY:
…
case SIID_PAUSE:
…
case SIID_STOP:
…
case SIID_CLOSE:
…
}
}
else if (event==SIE_SLIDER_CHANGED && item->id!=SIID_VOLUME) {
…
}
return 1;
}
⑵ 列表事件处理函数
void playlist_handle_event(PEvent *event, void *data)
{
…
switch(event->type) {
case ButtonPress:
…
case ButtonRelease:
…
case KeyPress:
if(!playlist)
return;
mykeyevent = event->xkey;
LockDisplay(gGui->display);
len=LookupString(&mykeyevent, kbuf, sizeof(kbuf), &mykey, NULL);
UnlockDisplay(gGui->display);
switch (mykey) {
case K_Down:
case K_Next:
browser_step_up(playlist->playlist, NULL);
break;
case K_Up:
case K_Prior:
browser_step_down(playlist->playlist, NULL);
break;
default:
gui_handle_event(event, data);
break;
}
break;
case MappingNotify:
LockDisplay(gGui->display);
RefreshKeyboardMapping((MappingEvent *)event);
UnlockDisplay(gGui->display);
break;
}
}
⑶ 主函数
int MiniGUIMain(int argc, const char* argv[])
{
…
PlayerHandle=PlayerNew();
…
free(buffer);
PlayerGetInfo(PlayerHandle, &fi);
…
InitCreateInfo(&CreateInfo);
hMainWnd=CreateMainWindow(&CreateInfo);
if (hMainWnd==HWND_INVALID)
return -1;
…
while( GetMessage(&Msg, hMainWnd) )
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
…
}
PlayerClose(PlayerHandle);
…
MainWindowThreadCleanup(hMainWnd);
return 0;
}
4 结束语
随着嵌入式系统硬件性能的不断提升,用户对应用程序界面的友好性和功能的完备性提出了更高的要求。本文介绍的基于MiniGUI的嵌入式媒体播放器具有设计简单,占用系统资源少等特点,可作为开发基于嵌入式图形界面系统的应用软件的参考。
举报