📄 ui.c
字号:
/*
* ui.c
*
* ============================================================================
* Copyright (c) Texas Instruments Inc 2005
*
* Use of this software is controlled by the terms and conditions found in the
* license agreement under which this software has been supplied or provided.
* ============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <errno.h>
#include <simplewidget.h>
#include "encodedecode.h"
#include "ui.h"
/* The font size */
#define PTSIZE 20
/* Button pictures in different states */
#define CTRL_BUTTON "data/pics/Buttons_SQ.png"
#define CTRL_BUTTON_PAUSE_PRESSED "data/pics/Pause_SQ_SEL.png"
#define CTRL_BUTTON_PLAY_PRESSED "data/pics/Play_SQ_SEL.png"
#define CTRL_BUTTON_REC_PRESSED "data/pics/Rec_SQ_SEL.png"
#define CTRL_BUTTON_STOP_PRESSED "data/pics/Stop_SQ_SEL.png"
#define NAV_BUTTON "data/pics/Button_DIAG.png"
#define NAV_BUTTON_OK_PRESSED "data/pics/Center_Diag_SEL.png"
#define NAV_BUTTON_LEFT_PRESSED "data/pics/Left_Diag_SEL.png"
#define NAV_BUTTON_RIGHT_PRESSED "data/pics/Right_Diag_SEL.png"
#define NAV_BUTTON_UP_PRESSED "data/pics/Top_Diag_SEL.png"
#define NAV_BUTTON_DOWN_PRESSED "data/pics/Bottom_Diag_SEL.png"
#define INFO_BUTTON "data/pics/INFO_RND.png"
#define INFO_BUTTON_PRESSED "data/pics/Info_RND_SEL.png"
#define WRONG_BUTTON "data/pics/nowrongbutton.png"
#define WRONG_BUTTON_PRESSED "data/pics/wrongbutton.png"
/* The strings to draw on the screen */
#define ARMLOADSTRING "ARM CPU load:"
#define DSPLOADSTRING "DSP CPU load:"
#define FPSSTRING "Video frame rate:"
#define VIDEOBPSSTRING "Video bit rate:"
#define TIMESTRING "Time elapsed:"
#define DEMONAMESTRING "Encode + Decode"
#define H264CODECSTRING "H.264 BP Video"
#define D1RESOLUTIONSTRING "D1 (720x480)"
#define CIFNTSCRESOLUTIONSTRING "CIF (352x240)"
#define CIFPALRESOLUTIONSTRING "CIF (352x288)"
#define ZOOMNTSCRESOLUTIONSTRING "ZOOM (720x480)"
#define ZOOMPALRESOLUTIONSTRING "ZOOM (720x576)"
#define NTSCDISPLAYSTRING "NTSC display"
#define PALDISPLAYSTRING "PAL display"
/* Button placements on OSD */
#define CTRL_BUTTON_X 50
#define CTRL_BUTTON_Y 330
#define NAV_BUTTON_X 290
#define NAV_BUTTON_Y 310
#define INFO_BUTTON_X 570
#define INFO_BUTTON_Y 330
#define WRONG_BUTTON_X 325
#define WRONG_BUTTON_Y 205
typedef struct Button {
simplewidget_png *pressedImgPtr;
simplewidget_png *origImgPtr;
int x;
int y;
} Button;
/* OSD widgets */
static simplewidget_screen simpleScreens[NUM_BUFS] = { NULL, NULL };
static simplewidget_png infoImg = NULL;
static simplewidget_png navImg = NULL;
static simplewidget_png navLeftImg = NULL;
static simplewidget_png navRightImg = NULL;
static simplewidget_png ctrlImg = NULL;
static simplewidget_png ctrlPlayImg = NULL;
static simplewidget_png ctrlPauseImg = NULL;
static simplewidget_png ctrlStopImg = NULL;
static simplewidget_png ctrlRecImg = NULL;
static simplewidget_png wrongImg = NULL;
static simplewidget_png noWrongImg = NULL;
static simplewidget_text demoNameText = NULL;
static simplewidget_text videoCodecText = NULL;
static simplewidget_text resolutionText = NULL;
static simplewidget_text displayText = NULL;
static simplewidget_text armLoadText = NULL;
static simplewidget_text dspLoadText = NULL;
static simplewidget_text fpsText = NULL;
static simplewidget_text videoBpsText = NULL;
static simplewidget_text timeText = NULL;
/* buttons corresponds to the enum Buttons in ui.h */
static Button buttons[7] = {
{
&ctrlPlayImg,
&ctrlImg,
CTRL_BUTTON_X,
CTRL_BUTTON_Y
},
{
&ctrlPauseImg,
&ctrlImg,
CTRL_BUTTON_X,
CTRL_BUTTON_Y
},
{
&ctrlStopImg,
&ctrlImg,
CTRL_BUTTON_X,
CTRL_BUTTON_Y
},
{
&ctrlRecImg,
&ctrlImg,
CTRL_BUTTON_X,
CTRL_BUTTON_Y
},
{
&navRightImg,
&navImg,
NAV_BUTTON_X,
NAV_BUTTON_Y
},
{
&navLeftImg,
&navImg,
NAV_BUTTON_X,
NAV_BUTTON_Y
},
{
&wrongImg,
&noWrongImg,
WRONG_BUTTON_X,
WRONG_BUTTON_Y
}
};
/******************************************************************************
* uiClearScreen
******************************************************************************/
void uiClearScreen(int x, int y, int w, int h, int screenIdx)
{
simplewidget_screen_clear(simpleScreens[screenIdx], x, y, w, h);
}
/******************************************************************************
* uiDrawText
******************************************************************************/
int uiDrawText(char *string, int x, int y, int screenIdx)
{
simplewidget_text simpleText;
if (simplewidget_text_create(x, y, PTSIZE, string, &simpleText) == -1) {
ERR("Failed to create dynamic text\n");
return FAILURE;
}
if (simplewidget_text_show(simpleText, simpleScreens[screenIdx]) == -1) {
ERR("Failed to draw dynamic text\n");
return FAILURE;
}
simplewidget_text_delete(simpleText);
return SUCCESS;
}
/******************************************************************************
* uiPressButton
******************************************************************************/
int uiPressButton(enum Buttons btnIdx, int screenIdx)
{
Button *btnPtr = &buttons[btnIdx];
if (simplewidget_png_show(*btnPtr->pressedImgPtr, simpleScreens[screenIdx],
btnPtr->x, YSCALE(btnPtr->y)) == -1) {
ERR("Failed to show pressed button png image\n");
return FAILURE;
}
usleep(500000);
if (simplewidget_png_show(*btnPtr->origImgPtr, simpleScreens[screenIdx],
btnPtr->x, YSCALE(btnPtr->y)) == -1) {
ERR("Failed to show original button png image\n");
return FAILURE;
}
return SUCCESS;
}
/******************************************************************************
* uiCreate
******************************************************************************/
int uiCreate(DemoEnv *envp, char *osdDisplays[])
{
/* Initialize the screens on which to draw widgets */
if (simplewidget_screen_init(osdDisplays[0], OSD_WIDTH, OSD_HEIGHT,
&simpleScreens[0]) == -1) {
ERR("Failed to initialize simplewidget screen\n");
return FAILURE;
}
if (simplewidget_screen_init(osdDisplays[1], OSD_WIDTH, OSD_HEIGHT,
&simpleScreens[1]) == -1) {
ERR("Failed to initialize simplewidget screen\n");
return FAILURE;
}
/* Create the images for the buttons at the bottom of the screen */
if (simplewidget_png_create(CTRL_BUTTON, &ctrlImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
if (simplewidget_png_create(CTRL_BUTTON_PLAY_PRESSED, &ctrlPlayImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
if (simplewidget_png_create(CTRL_BUTTON_REC_PRESSED, &ctrlRecImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
if (simplewidget_png_create(CTRL_BUTTON_STOP_PRESSED, &ctrlStopImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
if (simplewidget_png_create(CTRL_BUTTON_PAUSE_PRESSED,
&ctrlPauseImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
/* Create the navigation button in all permutations */
if (simplewidget_png_create(NAV_BUTTON, &navImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
if (simplewidget_png_create(NAV_BUTTON_LEFT_PRESSED, &navLeftImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
if (simplewidget_png_create(NAV_BUTTON_RIGHT_PRESSED, &navRightImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
if (simplewidget_png_create(INFO_BUTTON, &infoImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
if (simplewidget_png_create(WRONG_BUTTON, &noWrongImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
if (simplewidget_png_create(WRONG_BUTTON_PRESSED, &wrongImg) == -1) {
ERR("Failed to create png image\n");
return FAILURE;
}
/* Create the text strings to be displayed at the top of the screen */
if (simplewidget_text_create(COLUMN_1, ROW_1, PTSIZE,
ARMLOADSTRING, &armLoadText) == -1) {
ERR("Failed to create cpu load text\n");
return FAILURE;
}
if (simplewidget_text_create(COLUMN_1, ROW_2, PTSIZE,
DSPLOADSTRING, &dspLoadText) == -1) {
ERR("Failed to create cpu load text\n");
return FAILURE;
}
if (simplewidget_text_create(COLUMN_1, ROW_3, PTSIZE,
FPSSTRING, &fpsText) == -1) {
ERR("Failed to create fps text\n");
return FAILURE;
}
if (simplewidget_text_create(COLUMN_1, ROW_4, PTSIZE,
VIDEOBPSSTRING, &videoBpsText) == -1) {
ERR("Failed to create kbps text\n");
return FAILURE;
}
if (simplewidget_text_create(COLUMN_1, ROW_5, PTSIZE,
TIMESTRING, &timeText) == -1) {
ERR("Failed to create kbps text\n");
return FAILURE;
}
if (simplewidget_text_create(COLUMN_3, ROW_1, PTSIZE,
DEMONAMESTRING, &demoNameText) == -1) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -