安卓11中从设置-显示设置hdmi分辨率流程:framework层通过jni控制底层驱动实现,标准驱动模型
packages\apps\Settings\src\com\android\settings\display\HdmiSettings.java
private void updateResolution(final ITEM_CONTROL control, final int index) {
showWaitingDialog(R.string.dialog_update_resolution);
mEnableDisplayListener = false;
new Thread() {
@Override
public void run() {
if (ITEM_CONTROL.CHANGE_RESOLUTION == control) {
synchronized (mLock) {
int display = mSelectDisplayInfo.getDisplayNo();
DrmDisplaySetting.updateDisplayInfos();
DrmDisplaySetting.updateDisplayModesInfo(mSelectDisplayInfo);
int status = DrmDisplaySetting.getCurrentDpyConnState(display);
mSelectDisplayInfo.setStatus(status);
String[] modes = mSelectDisplayInfo.getOrginModes();
Log.v(TAG, "display " + display + ", status=" + status + ", modes=" + modes);
if (DPY_STATUS_CONNECTED == status && null != modes && modes.length > 0) {
DrmDisplaySetting.setDisplayModeTemp(mSelectDisplayInfo, index);
// String mode = Arrays.asList(modes).get(index);
// DrmDisplaySetting.setMode(display, mode);
if (USED_OFFON_RESOLUTION) {
sendSwitchDeviceOffOnMsg(control, SWITCH_STATUS_OFF_ON);
} else {
Message message = new Message();
message.what = MSG_SHOW_CONFIRM_DIALOG;
message.obj = control;
mHandler.sendMessageDelayed(message, 300);
}
} else {
Message message = new Message();
message.what = MSG_UPDATE_STATUS_UI;
message.obj = ITEM_CONTROL.REFRESH_DISPLAY_STATUS_INFO;
mHandler.sendMessage(message);
}
}
}
}
}.start();
}
packages/apps/Settings/src/com/android/settings/display/DrmDisplaySetting.java
public static void setDisplayModeTemp(DisplayInfo di, int index) {
String mode = Arrays.asList(di.getOrginModes()).get(index);
setMode(di.getDisplayNo(), mode);
tmpSetMode = mode;
}
public static void setDisplayModeTemp(DisplayInfo di, int index) {
String mode = Arrays.asList(di.getOrginModes()).get(index);
setMode(di.getDisplayNo(), mode);
tmpSetMode = mode