static int get_modes( HDMI_RES_GROUP_T group) { static TV_SUPPORTED_MODE_T supported_modes[MAX_MODE_ID] = {{0}}; HDMI_RES_GROUP_T preferred_group; uint32_t preferred_mode; int num_modes; int i; vcos_assert(( group == HDMI_RES_GROUP_CEA ) || ( group == HDMI_RES_GROUP_DMT )); num_modes = vc_tv_hdmi_get_supported_modes( group, supported_modes, vcos_countof(supported_modes), &preferred_group, &preferred_mode ); if ( num_modes < 0 ) { LOG_ERR( "Failed to get modes" ); return -1; } LOG_STD( "Group %s has %u modes:", HDMI_RES_GROUP_NAME(group), num_modes ); for ( i = 0; i < num_modes; i++ ) { char p[8] = {0}; if( supported_modes[i].pixel_rep ) snprintf(p, sizeof(p)-1, "x%d ", supported_modes[i].pixel_rep); else snprintf(p, sizeof(p)-1, " "); LOG_STD( "%s mode %u: %ux%u @ %uHz %s, clock:%luMHz %s%s %s", supported_modes[i].native ? " (native)" : " ", supported_modes[i].code, supported_modes[i].width, supported_modes[i].height, supported_modes[i].frame_rate, aspect_ratio_str(supported_modes[i].aspect_ratio), supported_modes[i].pixel_freq / 1000000UL, p, supported_modes[i].scan_mode ? "interlaced" : "progressive", supported_modes[i].struct_3d_mask ? threed_str(supported_modes[i].struct_3d_mask) : ""); } return 0; }
static int get_modes( HDMI_RES_GROUP_T group, int json_output) { static TV_SUPPORTED_MODE_T supported_modes[MAX_MODE_ID]; HDMI_RES_GROUP_T preferred_group; uint32_t preferred_mode; int num_modes; int i; vcos_assert(( group == HDMI_RES_GROUP_CEA ) || ( group == HDMI_RES_GROUP_DMT )); memset(supported_modes, 0, sizeof(supported_modes)); num_modes = vc_tv_hdmi_get_supported_modes( group, supported_modes, vcos_countof(supported_modes), &preferred_group, &preferred_mode ); if ( num_modes < 0 ) { LOG_ERR( "Failed to get modes" ); return -1; } if (json_output) { LOG_STD( "[" ); } else { LOG_STD( "Group %s has %u modes:", HDMI_RES_GROUP_NAME(group), num_modes ); } for ( i = 0; i < num_modes; i++ ) { char p[8] = {0}; if( supported_modes[i].pixel_rep ) vcos_safe_sprintf(p, sizeof(p)-1, 0, "x%d ", supported_modes[i].pixel_rep); if (json_output) { LOG_STD( "{ \"code\":%u, \"width\":%u, \"height\":%u, \"rate\":%u, \"aspect_ratio\":\"%s\", \"scan\":\"%s\", \"3d_modes\":[%s] }%s", supported_modes[i].code, supported_modes[i].width, supported_modes[i].height, supported_modes[i].frame_rate, aspect_ratio_str(supported_modes[i].aspect_ratio), supported_modes[i].scan_mode ? "i" : "p", supported_modes[i].struct_3d_mask ? threed_str(supported_modes[i].struct_3d_mask, 1) : "", (i+1 < num_modes) ? "," : ""); } else { int preferred = supported_modes[i].group == preferred_group && supported_modes[i].code == preferred_mode; LOG_STD( "%s mode %u: %ux%u @ %uHz %s, clock:%uMHz %s%s %s", preferred ? " (prefer)" : supported_modes[i].native ? " (native)" : " ", supported_modes[i].code, supported_modes[i].width, supported_modes[i].height, supported_modes[i].frame_rate, aspect_ratio_str(supported_modes[i].aspect_ratio), supported_modes[i].pixel_freq / 1000000U, p, supported_modes[i].scan_mode ? "interlaced" : "progressive", supported_modes[i].struct_3d_mask ? threed_str(supported_modes[i].struct_3d_mask, 0) : ""); } } if (json_output) { LOG_STD( "]" ); } return 0; }