📄 enc.c
字号:
/* * enc.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>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <sys/mman.h>#include <fcntl.h>#include <errno.h>/* Davinci EVM utility libraries */#include <msp430lib.h>#include <simplewidget.h>/* Application header file */#include "interface.h"/* The font size */#define PTSIZE 20/* The 0-7 transparency value to use for the OSD */#define OSD_TRANSPARENCY 0x66/* The demo diagrams to show on the video window */#define DEMO_DIAGRAM_NTSC "data/pics/encode_ntsc.uyvy"#define DEMO_DIAGRAM_PAL "data/pics/encode_pal.uyvy"#define NAV_BUTTON_X 290#define NAV_BUTTON_Y 310#define WRONG_BUTTON_X 325#define WRONG_BUTTON_Y 205/* The strings to draw on the screen */#define DEMONAMESTRING "Encode"#define H264CODECSTRING "H.264 BP Video"#define MPEG4CODECSTRING "MPEG4 Video"#define G711CODECSTRING "G.711 Speech"#define RESOLUTIONSTRING "D1 (720x480)"#define DISPLAYSTRING "NTSC display"#define SAMPLEFREQSTRING "8KHz samp rate"#define VIDEOLOWBPSSTRING "1.5 Mbps Video"#define VIDEOHIGHBPSSTRING "4 Mbps Video"/* Selector color */#define SELECTOR_R 0xff#define SELECTOR_G 0#define SELECTOR_B 0/* Location of video algorithm selector */#define VIDEOALGSELECTOR_X 420#define VIDEOALGSELECTOR_Y YSCALE(55)#define VIDEOALGSELECTOR_W 250#define VIDEOALGSELECTOR_H YSCALE(30)/* Location of video bps selector */#define VIDEOBPSSELECTOR_X 420#define VIDEOBPSSELECTOR_Y YSCALE(205)#define VIDEOBPSSELECTOR_W 250#define VIDEOBPSSELECTOR_H YSCALE(30)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 infoImg = 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 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 h264VideoCodecText = NULL;static simplewidget_text mpeg4VideoCodecText = NULL;static simplewidget_text soundCodecText = NULL;static simplewidget_text resolutionText = NULL;static simplewidget_text displayText = NULL;static simplewidget_text sampleFreqText = NULL;static simplewidget_text videoLowBpsText = NULL;static simplewidget_text videoHighBpsText = NULL;static int osdTransparency = OSD_TRANSPARENCY;static int osdVisible = 1;enum Buttons { CTRLPLAY, CTRLPAUSE, CTRLSTOP, CTRLREC, NAVPLUS, NAVMINUS, NAVUP, NAVDOWN, WRONG};static Button buttons[9] = { { &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 }, { &navUpImg, &navImg, NAV_BUTTON_X, NAV_BUTTON_Y }, { &navDownImg, &navImg, NAV_BUTTON_X, NAV_BUTTON_Y }, { &wrongImg, &noWrongImg, WRONG_BUTTON_X, WRONG_BUTTON_Y }};enum Choice { VIDEOALG, VIDEOBPS};enum Choice choice = VIDEOALG;enum VideoBpsSelection videoBpsSelection = HIGH;enum VideoAlgSelection videoAlgSelection = H264;/****************************************************************************** * drawSelection ******************************************************************************/static void drawSelection(enum Choice ch){ if (ch == VIDEOALG) { if (videoAlgSelection == H264) { if (simplewidget_text_show(h264VideoCodecText, simpleScreen) == -1) { ERR("Failed to show video codec text\n"); return; } } else { if (simplewidget_text_show(mpeg4VideoCodecText, simpleScreen) == -1) { ERR("Failed to show video codec text\n"); return; } } } else { if (videoBpsSelection == LOW) { if (simplewidget_text_show(videoLowBpsText, simpleScreen) == -1) { ERR("Failed to show capture resolution text\n"); return; } } else { if (simplewidget_text_show(videoHighBpsText, simpleScreen) == -1) { ERR("Failed to show capture resolution text\n"); return; } } }}/****************************************************************************** * changeSelection ******************************************************************************/static void changeSelection(void){ if (choice == VIDEOALG) { videoAlgSelection = (videoAlgSelection + 1) % 2; if (simplewidget_screen_draw_rectangle(simpleScreen, VIDEOALGSELECTOR_X, VIDEOALGSELECTOR_Y, VIDEOALGSELECTOR_W, VIDEOALGSELECTOR_H, SELECTOR_R, SELECTOR_G, SELECTOR_B) == FAILURE) { ERR("Failed to draw rectangle\n"); return; } drawSelection(VIDEOALG); } else { videoBpsSelection = (videoBpsSelection + 1) % 2; if (simplewidget_screen_draw_rectangle(simpleScreen, VIDEOBPSSELECTOR_X, VIDEOBPSSELECTOR_Y, VIDEOBPSSELECTOR_W, VIDEOBPSSELECTOR_H, SELECTOR_R, SELECTOR_G, SELECTOR_B) == FAILURE) { ERR("Failed to draw rectangle\n"); return; } drawSelection(VIDEOBPS); }}/****************************************************************************** * changeChoice ******************************************************************************/static void changeChoice(void){ choice = (choice + 1) % 2; if (choice == VIDEOALG) { if (simplewidget_screen_draw_rectangle(simpleScreen, VIDEOALGSELECTOR_X, VIDEOALGSELECTOR_Y, VIDEOALGSELECTOR_W, VIDEOALGSELECTOR_H, SELECTOR_R, SELECTOR_G, SELECTOR_B) == FAILURE) { ERR("Failed to draw rectangle\n"); return; } drawSelection(VIDEOALG); if (simplewidget_screen_draw_rectangle(simpleScreen, VIDEOBPSSELECTOR_X, VIDEOBPSSELECTOR_Y, VIDEOBPSSELECTOR_W, VIDEOBPSSELECTOR_H, 0, 0, 0) == FAILURE) { ERR("Failed to draw rectangle\n"); return; } drawSelection(VIDEOBPS); } else { if (simplewidget_screen_draw_rectangle(simpleScreen, VIDEOBPSSELECTOR_X, VIDEOBPSSELECTOR_Y, VIDEOBPSSELECTOR_W, VIDEOBPSSELECTOR_H, SELECTOR_R, SELECTOR_G, SELECTOR_B) == FAILURE) { ERR("Failed to draw rectangle\n"); return; } drawSelection(VIDEOBPS); if (simplewidget_screen_draw_rectangle(simpleScreen, VIDEOALGSELECTOR_X, VIDEOALGSELECTOR_Y, VIDEOALGSELECTOR_W, VIDEOALGSELECTOR_H, 0, 0, 0) == FAILURE) { ERR("Failed to draw rectangle\n"); return; } drawSelection(VIDEOALG); }}/****************************************************************************** * 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 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; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -