void ExternalDisplay::setResolution(int ID) { struct fb_var_screeninfo info; int ret = 0; ret = ioctl(mFd, FBIOGET_VSCREENINFO, &mVInfo); if(ret < 0) { ALOGD("In %s: FBIOGET_VSCREENINFO failed Err Str = %s", __FUNCTION__, strerror(errno)); } ALOGD_IF(DEBUG, "%s: GET Info<ID=%d %dx%d (%d,%d,%d)," "(%d,%d,%d) %dMHz>", __FUNCTION__, mVInfo.reserved[3], mVInfo.xres, mVInfo.yres, mVInfo.right_margin, mVInfo.hsync_len, mVInfo.left_margin, mVInfo.lower_margin, mVInfo.vsync_len, mVInfo.upper_margin, mVInfo.pixclock/1000/1000); //If its a new ID - update var_screeninfo if ((isValidMode(ID)) && mCurrentMode != ID) { const struct disp_mode_timing_type *mode = &supported_video_mode_lut[0]; unsigned count = sizeof(supported_video_mode_lut)/sizeof (*supported_video_mode_lut); for (unsigned int i = 0; i < count; ++i) { const struct disp_mode_timing_type *cur = &supported_video_mode_lut[i]; if (cur->video_format == ID) mode = cur; } mode->set_info(mVInfo); ALOGD_IF(DEBUG, "%s: SET Info<ID=%d => Info<ID=%d %dx %d" "(%d,%d,%d), (%d,%d,%d) %dMHz>", __FUNCTION__, ID, mode->video_format, mVInfo.xres, mVInfo.yres, mVInfo.right_margin, mVInfo.hsync_len, mVInfo.left_margin, mVInfo.lower_margin, mVInfo.vsync_len, mVInfo.upper_margin, mVInfo.pixclock/1000/1000); #ifdef FB_METADATA_VIDEO_INFO_CODE_SUPPORT struct msmfb_metadata metadata; memset(&metadata, 0 , sizeof(metadata)); metadata.op = metadata_op_vic; metadata.data.video_info_code = mode->video_format; if (ioctl(mFd, MSMFB_METADATA_SET, &metadata) == -1) { ALOGD("In %s: MSMFB_METADATA_SET failed Err Str = %s", __FUNCTION__, strerror(errno)); } #endif mVInfo.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_ALL | FB_ACTIVATE_FORCE; ret = ioctl(mFd, FBIOPUT_VSCREENINFO, &mVInfo); if(ret < 0) { ALOGD("In %s: FBIOPUT_VSCREENINFO failed Err Str = %s", __FUNCTION__, strerror(errno)); } mCurrentMode = ID; } }
/// Returns the user mode set(if any) using adb shell int ExternalDisplay::getUserMode() { /* Based on the property set the resolution */ char property_value[PROPERTY_VALUE_MAX]; property_get("hw.hdmi.resolution", property_value, "-1"); int mode = atoi(property_value); // We dont support interlaced modes if(isValidMode(mode) && !isInterlacedMode(mode)) { ALOGD_IF(DEBUG, "%s: setting the HDMI mode = %d", __FUNCTION__, mode); return mode; } return -1; }
void ExternalDisplay::setResolution(int ID) { struct fb_var_screeninfo info; int ret = 0; if (!openFramebuffer()) return; ret = ioctl(mFd, FBIOGET_VSCREENINFO, &mVInfo); if(ret < 0) { ALOGD("In %s: FBIOGET_VSCREENINFO failed Err Str = %s", __FUNCTION__, strerror(errno)); } ALOGD_IF(DEBUG, "%s: GET Info<ID=%d %dx%d (%d,%d,%d)," "(%d,%d,%d) %dMHz>", __FUNCTION__, mVInfo.reserved[3], mVInfo.xres, mVInfo.yres, mVInfo.right_margin, mVInfo.hsync_len, mVInfo.left_margin, mVInfo.lower_margin, mVInfo.vsync_len, mVInfo.upper_margin, mVInfo.pixclock/1000/1000); //If its a valid mode and its a new ID - update var_screeninfo if ((isValidMode(ID)) && mCurrentMode != ID) { const struct disp_mode_timing_type *mode = &supported_video_mode_lut[0]; unsigned count = sizeof(supported_video_mode_lut)/sizeof (*supported_video_mode_lut); for (unsigned int i = 0; i < count; ++i) { const struct disp_mode_timing_type *cur = &supported_video_mode_lut[i]; if (cur->video_format == ID) mode = cur; } mode->set_info(mVInfo); ALOGD_IF(DEBUG, "%s: SET Info<ID=%d => Info<ID=%d %dx %d" "(%d,%d,%d), (%d,%d,%d) %dMHz>", __FUNCTION__, ID, mVInfo.reserved[3], mVInfo.xres, mVInfo.yres, mVInfo.right_margin, mVInfo.hsync_len, mVInfo.left_margin, mVInfo.lower_margin, mVInfo.vsync_len, mVInfo.upper_margin, mVInfo.pixclock/1000/1000); mVInfo.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_ALL | FB_ACTIVATE_FORCE; ret = ioctl(mFd, FBIOPUT_VSCREENINFO, &mVInfo); if(ret < 0) { ALOGD("In %s: FBIOPUT_VSCREENINFO failed Err Str = %s", __FUNCTION__, strerror(errno)); } mCurrentMode = ID; } }
void HDMIDaemon::setResolution(int ID) { struct fb_var_screeninfo info; if (!openFramebuffer()) return; #ifdef FORCE_AUTO_RESOLUTION ID = 0; #endif //If its a valid mode and its a new ID - update var_screeninfo if ((isValidMode(ID)) && mCurrentID != ID) { const struct disp_mode_timing_type *mode = &supported_video_mode_lut[0]; for (unsigned int i = 0; i < sizeof(supported_video_mode_lut)/sizeof(*supported_video_mode_lut); ++i) { const struct disp_mode_timing_type *cur = &supported_video_mode_lut[i]; if (cur->video_format == ID) mode = cur; } SurfaceComposerClient::enableHDMIOutput(0); ioctl(fd1, FBIOGET_VSCREENINFO, &info); LOGD("GET Info<ID=%d %dx%d (%d,%d,%d), (%d,%d,%d) %dMHz>", info.reserved[3], info.xres, info.yres, info.right_margin, info.hsync_len, info.left_margin, info.lower_margin, info.vsync_len, info.upper_margin, info.pixclock/1000/1000); mode->set_info(info); LOGD("SET Info<ID=%d => Info<ID=%d %dx%d (%d,%d,%d), (%d,%d,%d) %dMHz>", ID, info.reserved[3], info.xres, info.yres, info.right_margin, info.hsync_len, info.left_margin, info.lower_margin, info.vsync_len, info.upper_margin, info.pixclock/1000/1000); info.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_ALL | FB_ACTIVATE_FORCE; ioctl(fd1, FBIOPUT_VSCREENINFO, &info); mCurrentID = ID; } //Powerup ioctl(fd1, FBIOBLANK, FB_BLANK_UNBLANK); ioctl(fd1, FBIOGET_VSCREENINFO, &info); //Pan_Display ioctl(fd1, FBIOPAN_DISPLAY, &info); property_set("hw.hdmiON", "1"); //Inform SF about HDMI SurfaceComposerClient::enableHDMIOutput(1); }
void ExtDisplayObserver::setResolution(int ID) { struct fb_var_screeninfo info; if (!openFramebuffer()) return; //If its a valid mode and its a new ID - update var_screeninfo if ((isValidMode(ID)) && mCurrentID != ID) { const struct disp_mode_timing_type *mode = &supported_video_mode_lut[0]; unsigned count = sizeof(supported_video_mode_lut)/sizeof (*supported_video_mode_lut); for (unsigned int i = 0; i < count; ++i) { const struct disp_mode_timing_type *cur = &supported_video_mode_lut[i]; if (cur->video_format == ID) mode = cur; } ioctl(fd, FBIOGET_VSCREENINFO, &info); ALOGD_IF(EXT_OBSERVER_DEBUG, "%s: GET Info<ID=%d %dx%d (%d,%d,%d)," "(%d,%d,%d) %dMHz>", __FUNCTION__, info.reserved[3], info.xres, info.yres, info.right_margin, info.hsync_len, info.left_margin, info.lower_margin, info.vsync_len, info.upper_margin, info.pixclock/1000/1000); mode->set_info(info); ALOGD_IF(EXT_OBSERVER_DEBUG, "%s: SET Info<ID=%d => Info<ID=%d %dx%d" "(%d,%d,%d), (%d,%d,%d) %dMHz>", __FUNCTION__, ID, info.reserved[3], info.xres, info.yres, info.right_margin, info.hsync_len, info.left_margin, info.lower_margin, info.vsync_len, info.upper_margin, info.pixclock/1000/1000); info.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_ALL | FB_ACTIVATE_FORCE; ioctl(fd, FBIOPUT_VSCREENINFO, &info); mCurrentID = ID; } //Powerup ioctl(fd, FBIOBLANK, FB_BLANK_UNBLANK); ioctl(fd, FBIOGET_VSCREENINFO, &info); //Pan_Display ioctl(fd, FBIOPAN_DISPLAY, &info); property_set("hw.hdmiON", "1"); }