📄 parse_display_cmdline.c
字号:
/* * * Copyright (c) Sigma Designs, Inc. 2005. All rights reserved. * *//** @file parse_display_cmdline.c @brief sample application to access the 86xx chip family @author Christian Wolff*/#include "sample_os.h"#define ALLOW_OS_CODE 1#include "../rua/include/rua.h"#include "../dcc/include/dcc.h"#include "../dcc/include/dcc_macros.h"#include "../rmcore/include/rmstatustostring.h"#include "common.h"#include "outports_options.h"#include "../emhwlib/include/emhwlib_videoformatnames.h"#include "sigma_logo.h"// to enable or disable the debug messages of this source file, put 1 or 0 below#if 0#define LOCALDBG ENABLE#else#define LOCALDBG DISABLE#endif#define SCART_ENABLE_GPIO 13#define SCART_WIDESCREEN_GPIO 14#define NUM_DBC 4 // how many DBCs to allocate// CEA 861-C video mode bitmasks matching certain mode criteria// by frame rate#define CEA861_MASK_24HZ 0x0000000100000000LL#define CEA861_MASK_25HZ 0x0000000200000000LL#define CEA861_MASK_30HZ 0x0000000400000000LL#define CEA861_MASK_50HZ 0x000000E0FFFE0000LL#define CEA861_MASK_60HZ 0x000000180001FFFELL#define CEA861_MASK_100HZ 0x00003F0000000000LL#define CEA861_MASK_120HZ 0x000FC00000000000LL#define CEA861_MASK_200HZ 0x00F0000000000000LL#define CEA861_MASK_240HZ 0x0F00000000000000LL// by nominal resolution#define CEA861_MASK_BASIC 0x0000000087FF00FELL#define CEA861_MASK_VGA 0x0000000000000002LL#define CEA861_MASK_480I 0x0C0C000000003FC0LL#define CEA861_MASK_576I 0x00C030001FE00000LL#define CEA861_MASK_480P 0x030300180000C00CLL#define CEA861_MASK_576P 0x00300C6060060000LL#define CEA861_MASK_720P 0x0000820000080010LL#define CEA861_MASK_1080I 0x0000418000100020LL#define CEA861_MASK_1080P 0x0000000780010000LL#define CEA861_MASK_SD (CEA861_MASK_480I | CEA861_MASK_576I) // 0x0CCC30001FE03FC0LL#define CEA861_MASK_ED (CEA861_MASK_480P | CEA861_MASK_576P) // 0x03330C786006C00CLL#define CEA861_MASK_HD (CEA861_MASK_720P | CEA861_MASK_1080I | CEA861_MASK_1080P)// by aspect ratio#define CEA861_MASK_4x3 0x055514282AA25546LL#define CEA861_MASK_16x9 0x0AAAEBD7D55DAAB8LL// zoom helper defines and functions#undef ZOOM_0#undef ZOOM_1#define ZOOM_0 4096 // 0% zoom position#define ZOOM_1 8192 // 100% zoom positionextern RMbool manutest;static RMstatus apply_outports_videomode(struct dcc_context *dcc_info, struct display_cmdline *options, RMbool hdmi_active);static RMint32 get_window_value(RMuint32 max_val, RMint32 val, enum EMhwlibDisplayWindowValueMode mode){ RMint32 rc = 0; switch (mode) { case EMhwlibDisplayWindowValueMode_Fixed: rc = val; break; case EMhwlibDisplayWindowValueMode_Relative: rc = (RMint32)(val * max_val) / ZOOM_0; break; } return rc;}/*static RMint32 get_window_position(RMuint32 total_size, RMuint32 size, RMint32 pos, enum EMhwlibDisplayWindowPositionMode mode){ RMint32 val = 0; switch (mode) { case EMhwlibDisplayWindowPositionMode_FrontEdgeToBorder: val = pos; break; case EMhwlibDisplayWindowPositionMode_RearEdgeToBorder: val = total_size - pos - size; break; case EMhwlibDisplayWindowPositionMode_FrontEdgeToCenter: val = pos - size / 2; break; case EMhwlibDisplayWindowPositionMode_RearEdgeToCenter: val = total_size - pos - size / 2; break; } return val;}*/static enum EMhwlibTVStandard GetTVStandardFromName(RMascii *TVStandardName){ // This include compares a 'RMascii *TVStandardName' with the known TVStandards and returns the respective enum. #include "../emhwlib/include/emhwlib_videoformatnameparse.inc" return -1;}RMstatus GetTVStandard(RMascii *StandardName, enum EMhwlibTVStandard *Standard){ if (StandardName == NULL) return RM_ERROR; *Standard = GetTVStandardFromName(StandardName); if ((*Standard < 0) || (*Standard == EMhwlibTVStandard_Custom)) { return RM_ERROR; } return RM_OK;}static RMascii *TVStandardName(enum EMhwlibTVStandard TVStandard){ switch (TVStandard) { // This include contains a 'case' for each 'enum EMhwlibTVStandard' member and returns its name as 'RMascii *' #include "../emhwlib/include/emhwlib_videoformatnames.inc" default: return "Unknown"; }}RMstatus GetTVStandardName(enum EMhwlibTVStandard Standard, RMascii **StandardName){ if (StandardName == NULL) return RM_ERROR; *StandardName = TVStandardName(Standard); return RM_OK;}static RMascii *ColorSpaceNames[] = { "Invalid", "None", "RGB 16..235", "RGB 0..255", "YCbCr 601", "YCbCr 709", "YCbCr 601 0..255", "YCbCr 709 0..255", "xvYCC 601", "xvYCC 709", "xvYCC 601 0..255", "xvYCC 709 0..255", "Unknown"};const RMascii *GetColorSpaceName(enum EMhwlibColorSpace ColorSpace){ switch (ColorSpace) { case 0: return ColorSpaceNames[0]; case EMhwlibColorSpace_None: return ColorSpaceNames[1]; case EMhwlibColorSpace_RGB_16_235: return ColorSpaceNames[2]; case EMhwlibColorSpace_RGB_0_255: return ColorSpaceNames[3]; case EMhwlibColorSpace_YUV_601: return ColorSpaceNames[4]; case EMhwlibColorSpace_YUV_709: return ColorSpaceNames[5]; case EMhwlibColorSpace_YUV_601_0_255: return ColorSpaceNames[6]; case EMhwlibColorSpace_YUV_709_0_255: return ColorSpaceNames[7]; case EMhwlibColorSpace_xvYCC_601: return ColorSpaceNames[8]; case EMhwlibColorSpace_xvYCC_709: return ColorSpaceNames[9]; case EMhwlibColorSpace_xvYCC_601_0_255: return ColorSpaceNames[10]; case EMhwlibColorSpace_xvYCC_709_0_255: return ColorSpaceNames[11]; default: return ColorSpaceNames[12]; }}#define DISP_OPT_MAX_LINE_LENGTH 64RMstatus PrintTVStandardNames(void){ RMuint32 video_format_num; RMuint32 line_length = DISP_OPT_MAX_LINE_LENGTH; for (video_format_num = 0; video_format_num < (sizeof TVFormatString / sizeof TVFormatString[0]); video_format_num++) { RMuint32 next_length = RMasciiLength(TVFormatString[video_format_num]); if (((line_length + next_length) > DISP_OPT_MAX_LINE_LENGTH) && (line_length != 0)) { fprintf(stderr, "\n\t\t"); line_length = 0; } fprintf(stderr, "%s ", TVFormatString[video_format_num]); line_length += (next_length + 1); } return RM_OK;}RMstatus init_display_options(struct display_cmdline *options){ RMuint32 i; RMMemset(options, 0, sizeof(struct display_cmdline)); options->configure_outports = TRUE; options->standard = EMhwlibTVStandard_Custom; options->sd_standard = EMhwlibTVStandard_Custom; options->sd_standard_50Hz = EMhwlibTVStandard_PAL_BG; // PAL_N? options->sd_standard_60Hz = EMhwlibTVStandard_NTSC_M; // NTSC_M_Japan? PAL_M? options->use_hdsd_conversion = FALSE; options->sd_component = FALSE; options->sd_cav_1080p = FALSE; options->allow_otf = TRUE; options->allow_buf = TRUE; options->sd_autodetect = FALSE; options->vidmode_filename[0] = '\0'; options->vga_standard = EMhwlibTVStandard_Custom; options->connector = DCCVideoConnector_SVIDEO; options->component = EMhwlibComponentMode_YUV_SMPTE; options->color_space = EMhwlibColorSpace_YUV_601; options->mixer_color_space = EMhwlibColorSpace_None; options->bus_size = 24; options->component_size = 8; options->ar_x = 4; options->ar_y = 3; options->active_format_valid = FALSE; options->active_format = EMhwlibAF_same_as_picture; options->sd_ar_x = 4; options->sd_ar_y = 3; options->sd_active_format_valid = FALSE; options->sd_active_format = EMhwlibAF_same_as_picture; options->target_ar_x = 0; options->target_ar_y = 0; options->brightness = 0; options->hue = 0; options->contrast = 128; options->saturation_blue = 128; options->saturation_red = 128; options->force_route = FALSE; options->route = DCCRoute_Main; set_default_out_window(&(options->source_window)); set_default_out_window(&(options->output_window)); options->dump_osd_dir = NULL; options->show_hwc = FALSE; options->nonlinearmode.Width = 0; options->nonlinearmode.Level = 0; options->blackstrip.Horizontal = 4096; options->blackstrip.Vertical = 4096; options->cutstrip.Horizontal = 4096; options->cutstrip.Vertical = 4096; options->strip_color.ColorSpace = EMhwlibColorSpace_YUV_601; options->strip_color.Color.ComponentBitDepth = 8; options->strip_color.Color.R_Cr = 0x80; options->strip_color.Color.G_Y = 0x10; options->strip_color.Color.B_Cb = 0x80; options->scalingmode = EMhwlibScalingMode_LetterBox; options->deinterlacingmode = EMhwlibDeinterlacingMode_Discard_Bob; options->luma_key.LumaMin = 0xff; options->luma_key.LumaMax = 0x00; options->do_pulldown = FALSE; options->lock_scaler = 0; options->deinterlacing_motion_config.Value0 = 0x00; options->deinterlacing_motion_config.Value8 = 0x04; options->deinterlacing_motion_config.Value16 = 0x40; options->deinterlacing_motion_config.Value32 = 0xC0; options->deinterlacing_proportion.ExistingLineProportion = 4; options->deinterlacing_proportion.NewLineProportion = 12; options->color_degradation_boundary = 0; options->agc_level = 0; options->agc_version = (RMuint32)EMhwlibAGCVersion_ConstantBPP; options->aps_level = 0; options->rcd = 0; options->asb = 0; options->cgmsa = 0; options->component_order = EMhwlibComponentOrder_RGB; options->field_selection = EMhwlibScalerFieldSelection_BestFieldType; options->dh_info = NULL; options->dh_first_run = FALSE; options->dvi_hdmi_part = DH_auto_detect; options->dvi_hdmi_state = DH_uninitialized; options->dvi_hdmi_int = GPIOId_Sys_14; options->hdmi_cec_part_request = DH_CEC_auto_detect; options->hdmi_cec_part_found = DH_CEC_no_chip; options->hdmi_cec_int = GPIOId_Sys_15; options->hdmi_cec_d = GPIOId_Eth_35; options->dvi_hdmi_hdcp = FALSE; options->dvi_hdmi_display_edid = FALSE; options->edid_sel = DH_EDID_none; options->vga_edid_sel = DH_EDID_none; options->dvi_hdmi_edid_descriptor = 0; options->dvi_hdmi_edid_vfreq = 59; options->dvi_hdmi_edid_hsize = 1920; options->dvi_hdmi_edid_vsize = 1080; options->dvi_hdmi_edid_intl = TRUE; options->hdmi_monitor = FALSE; options->hdmi_force = FALSE; options->hdmi_de = FALSE; options->edid_exclude_mask = 0; options->edid_exclude_mask_vfreq = 0; options->edid_exclude_mask_asp = 0; options->edid_force_mask = 0; options->edid_force_mask_vfreq = 0; options->edid_force_mask_asp = 0; options->edid_max_pixclk = 0; options->edid_min_pixclk = 0; options->edid_max_hfreq = 0; options->edid_min_hfreq = 0; options->edid_max_vfreq = 0; options->edid_min_vfreq = 0; options->dvi_hdmi_edid_write = FALSE; options->dvi_hdmi_edid_read = FALSE; options->dvi_hdmi_edid_override = FALSE; options->dvi_hdmi_edid_file = NULL; options->init_mode = DCCInitMode_LeaveDisplay; options->dig_protocol = EMhwlibDigitalTimingSignal_601; options->dig_force_doublerate = FALSE; options->dig_doublerate = FALSE; options->dig_clk_normal = FALSE; options->dig_ddr = FALSE; options->dig_inv_cap_clk = FALSE; options->dig_delay = 2300; options->dig_force_delay = FALSE; options->dig_vsync_delay = FALSE; options->dig_trailing_edge = FALSE; options->dig_clip_enable = TRUE; options->dig_clip_range = DispDigitalOut_ClippingLevel_Clip_1_254; options->dig_color_order = EMhwlibColorOrder_RGB; options->chroma_sync = FALSE; options->scart_enable = FALSE; options->scart_en_pio = 0; options->scart_widescreen = FALSE; options->scart_ws_pio = 0; options->i2c_module = 1; options->i2c_speed = 0; // don't force options->i2c_ddc_on_tx = FALSE; options->dvi_reset_gpio = 0; // no GPIO used to reset DVI chip options->video_scaler = 0; options->video_alpha = 0x80;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -