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

📄 menu.c

📁 codec engine中的视频操作界面的历程
💻 C
字号:
/* * interface.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. * ============================================================================ *//* Standard Linux headers */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>/* Davinci EVM utility libraries */#include <msp430lib.h>#include <simplewidget.h>/* Application header file */#include "interface.h"/* The font size */#define PTSIZE                    16/* Davini logo picture */#define DAVINCI_IMAGE_NTSC        "data/pics/davinci_ntsc.png"#define DAVINCI_IMAGE_PAL         "data/pics/davinci_pal.png"/* Button placements on OSD */#define DAVINCI_X     80#define DAVINCI_Y     YSCALE(30)#define NAV_BUTTON_X        80#define NAV_BUTTON_Y        300#define BUTTON_WIDTH  240#define BUTTON_HEIGHT YSCALE(60)#define BUTTON_RED    0x22#define BUTTON_GREEN  0x22#define BUTTON_BLUE   0x77#define BUTTON_BORDER 5#define ENCDECBTNTEXT "Encode + Decode"#define ENCBTNTEXT    "Encode"#define DECBTNTEXT    "Decode"#define TPARTYBTNTEXT "Third Party Menu"#define BUTTON_X      400#define BUTTON_Y_1    YSCALE(50)#define BUTTON_Y_2    YSCALE(150)#define BUTTON_Y_3    YSCALE(250)#define BUTTON_Y_4    YSCALE(350)enum InitLevels {    CREATEDINTERFACE = 1,    MSP430LIBINITIALIZED,};typedef struct Button {    simplewidget_png *pressedImgPtr;    simplewidget_png *origImgPtr;    int               x;    int               y;} Button; /* OSD widgets */static simplewidget_screen  simpleScreen    = NULL;static simplewidget_png     navImg          = NULL;static simplewidget_png     navLeftImg      = NULL;static simplewidget_png     navRightImg     = NULL;static simplewidget_png     navUpImg        = NULL;static simplewidget_png     navDownImg      = NULL;static simplewidget_png     navOkImg        = NULL;static simplewidget_png     davinciImg      = NULL;#define NUM_BUTTONS 4static simplewidget_button simpleButtons[NUM_BUTTONS] = {    NULL,    NULL,    NULL,    NULL};static int buttonIdx = 0;enum Buttons {    NAVLEFT,    NAVRIGHT,    NAVUP,    NAVDOWN,    NAVOK};static Button buttons[5] = {    {        &navLeftImg,        &navImg,        NAV_BUTTON_X,        NAV_BUTTON_Y    },    {        &navRightImg,        &navImg,        NAV_BUTTON_X,        NAV_BUTTON_Y    },    {        &navUpImg,        &navImg,        NAV_BUTTON_X,        NAV_BUTTON_Y    },    {        &navDownImg,        &navImg,        NAV_BUTTON_X,        NAV_BUTTON_Y    },    {        &navOkImg,        &navImg,        NAV_BUTTON_X,        NAV_BUTTON_Y    }};/****************************************************************************** * uiPressButton ******************************************************************************/static int uiPressButton(enum Buttons btnIdx){    Button *btnPtr = &buttons[btnIdx];    if (simplewidget_png_show(*btnPtr->pressedImgPtr, simpleScreen,                              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, simpleScreen,                              btnPtr->x, YSCALE(btnPtr->y)) == -1) {        ERR("Failed to show original button png image\n");        return FAILURE;    }    return SUCCESS;}  /****************************************************************************** * uiCreate ******************************************************************************/static int uiCreate(void){    /* Initialize the screens on which to draw widgets */    if (simplewidget_screen_init(getDisplay(), SCREEN_WIDTH,                                 SCREEN_HEIGHT, &simpleScreen) == -1) {        ERR("Failed to initialize simplewidget screen\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(NAV_BUTTON_UP_PRESSED, &navUpImg) == -1) {        ERR("Failed to create png image\n");        return FAILURE;    }    if (simplewidget_png_create(NAV_BUTTON_DOWN_PRESSED, &navDownImg) == -1) {        ERR("Failed to create png image\n");        return FAILURE;    }    if (simplewidget_png_create(NAV_BUTTON_OK_PRESSED, &navOkImg) == -1) {        ERR("Failed to create png image\n");        return FAILURE;    }    if (getYFactor() == NTSC) {        if (simplewidget_png_create(DAVINCI_IMAGE_NTSC, &davinciImg) == -1) {            ERR("Failed to create png image\n");            return FAILURE;        }    }    else {        if (simplewidget_png_create(DAVINCI_IMAGE_PAL, &davinciImg) == -1) {            ERR("Failed to create png image\n");            return FAILURE;        }    }    /* Create the selection buttons */    if (simplewidget_button_create(BUTTON_X, BUTTON_Y_1, BUTTON_WIDTH,                                   BUTTON_HEIGHT, BUTTON_RED, BUTTON_GREEN,                                   BUTTON_BLUE, PTSIZE, BUTTON_BORDER,                                   ENCDECBTNTEXT, &simpleButtons[0]) == -1) {        ERR("Failed to create button\n");        return FAILURE;    }    if (simplewidget_button_create(BUTTON_X, BUTTON_Y_2, BUTTON_WIDTH,                                   BUTTON_HEIGHT, BUTTON_RED, BUTTON_GREEN,                                   BUTTON_BLUE, PTSIZE, BUTTON_BORDER,                                   ENCBTNTEXT, &simpleButtons[1]) == -1) {        ERR("Failed to create button\n");        return FAILURE;    }    if (simplewidget_button_create(BUTTON_X, BUTTON_Y_3, BUTTON_WIDTH,                                   BUTTON_HEIGHT, BUTTON_RED, BUTTON_GREEN,                                   BUTTON_BLUE, PTSIZE, BUTTON_BORDER,                                   DECBTNTEXT, &simpleButtons[2]) == -1) {        ERR("Failed to create button\n");        return FAILURE;    }    if (simplewidget_button_create(BUTTON_X, BUTTON_Y_4, BUTTON_WIDTH,                                   BUTTON_HEIGHT, BUTTON_RED, BUTTON_GREEN,                                   BUTTON_BLUE, PTSIZE, BUTTON_BORDER,                                   TPARTYBTNTEXT, &simpleButtons[3]) == -1) {        ERR("Failed to create button\n");        return FAILURE;    }    DBG("Successfully created OSD\n");    return SUCCESS;}/****************************************************************************** * uiDraw ******************************************************************************/static int uiDraw(void){    int i;    /* Clear the OSD window */    simplewidget_screen_clear(simpleScreen, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);    if (simplewidget_png_show(davinciImg, simpleScreen,                              DAVINCI_X, DAVINCI_Y) == -1) {        ERR("Failed to show png image\n");        return FAILURE;    }    if (simplewidget_png_show(navImg, simpleScreen,                              NAV_BUTTON_X, YSCALE(NAV_BUTTON_Y)) == -1) {        ERR("Failed to show png image\n");        return FAILURE;    }    for (i=0; i<NUM_BUTTONS; i++) {        if (simplewidget_button_show(simpleButtons[i],                                     simpleScreen) == FAILURE) {            ERR("Failed to show button\n");            return FAILURE;        }    }    if (simplewidget_button_press(simpleButtons[buttonIdx],                                  simpleScreen) == FAILURE) {        ERR("Failed to press button\n");        return FAILURE;    }    return SUCCESS;}/****************************************************************************** * uiDelete ******************************************************************************/static int uiDelete(void){    int i;    for (i=0; i<NUM_BUTTONS; i++) {        if (simpleButtons[i]) {            simplewidget_button_delete(simpleButtons[i]);        }    }    if (navUpImg) {        simplewidget_png_delete(navUpImg);    }    if (navDownImg) {        simplewidget_png_delete(navDownImg);    }    if (navRightImg) {        simplewidget_png_delete(navRightImg);    }    if (navLeftImg) {        simplewidget_png_delete(navLeftImg);    }    if (navOkImg) {        simplewidget_png_delete(navOkImg);    }    if (navImg) {        simplewidget_png_delete(navImg);    }    if (davinciImg) {        simplewidget_png_delete(davinciImg);    }    if (simpleScreen) {        simplewidget_screen_exit(simpleScreen);    }    return SUCCESS;}/****************************************************************************** * keyAction ******************************************************************************/static int keyAction(enum msp430lib_keycode key, int *quitPtr){    switch(key) {        case MSP430LIB_KEYCODE_STOP:            *quitPtr = NOSELECTION;            break;        case MSP430LIB_KEYCODE_CHANINC:            if (simplewidget_button_show(simpleButtons[buttonIdx],                                         simpleScreen) == FAILURE) {                ERR("Failed to show button\n");                return FAILURE;            }            buttonIdx--;            if (buttonIdx < 0) {                buttonIdx = NUM_BUTTONS - 1;            }            if (simplewidget_button_press(simpleButtons[buttonIdx],                                          simpleScreen) == FAILURE) {                ERR("Failed to press button\n");                return FAILURE;            }            if (uiPressButton(NAVUP) == FAILURE) {                return FAILURE;            }            break;        case MSP430LIB_KEYCODE_CHANDEC:                     if (simplewidget_button_show(simpleButtons[buttonIdx],                                         simpleScreen) == FAILURE) {                ERR("Failed to show button\n");                return FAILURE;            }            buttonIdx = (buttonIdx + 1) % NUM_BUTTONS;            if (simplewidget_button_press(simpleButtons[buttonIdx],                                          simpleScreen) == FAILURE) {                ERR("Failed to press button\n");                return FAILURE;            }            if (uiPressButton(NAVDOWN) == FAILURE) {                return FAILURE;            }            break;        case MSP430LIB_KEYCODE_OK:                          *quitPtr = TRUE;            break;        default:            ERR("Unknown key pressed!\n");    }    return SUCCESS;}/****************************************************************************** * interfaceFxn ******************************************************************************/int menuFxn(DemoEnv *envp){    enum InitLevels        initLevel = 0;    int                    status    = SUCCESS;    int                    quit      = 0;    enum msp430lib_keycode key;    if (uiCreate() == FAILURE) {        CLEANUP(FAILURE);    }    initLevel = CREATEDINTERFACE;    if (uiDraw() == FAILURE) {        CLEANUP(FAILURE);    }    if (msp430lib_init() == MSP430LIB_FAILURE) {        ERR("Failed to initialize msp430lib.\n");        CLEANUP(FAILURE);    }    initLevel = MSP430LIBINITIALIZED;    while (!quit) {        /* See if an IR remote key has been pressed */        if (msp430lib_get_ir_key(&key) == MSP430LIB_FAILURE) {            ERR("Failed to get IR value.\n");        }        DBG("Got IR key %#x from the MSP430\n", key);        /* If an IR key had been pressed, service it */        if (key != 0) {            if (keyAction(key, &quit) == FAILURE) {                BREAK_LOOP(FAILURE);            }        }        usleep(500000);    }    envp->demoSelect = buttonIdx;    if (quit == NOSELECTION) {        status = NOSELECTION;    }cleanup:    if (initLevel >= MSP430LIBINITIALIZED) {        msp430lib_exit();    }    if (initLevel >= CREATEDINTERFACE) {        uiDelete();    }    return status;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -