⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui.c

📁 采集视频信号进行H264压缩并通过UDP传送
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -