Log::getInstance()->log("OSD", Log::NOTICE, "Displaysize is %d x %d ",display_width, display_height);\r
VC_RECT_T dst_rect ={0,0,display_width,display_height};\r
VC_RECT_T src_rect={0,0,BACKBUFFER_WIDTH <<16,BACKBUFFER_HEIGHT<<16};\r
- VC_RECT_T src_rect_bg={0,0,1<<16,1<<16};\r
- VC_RECT_T src_rect_im={0,0,1,1};\r
+ // VC_RECT_T src_rect_bg={0,0,1<<16,1<<16};\r
+ // VC_RECT_T src_rect_im={0,0,1,1};\r
\r
- uint32_t back_image_ptr;\r
+ /* uint32_t back_image_ptr;\r
bcm_backres=vc_dispmanx_resource_create(VC_IMAGE_RGB888,1,1,&back_image_ptr);\r
unsigned int color=0x00FF0000;\r
- vc_dispmanx_resource_write_data(bcm_backres,VC_IMAGE_RGB888,4,&color,&src_rect_im);\r
+ vc_dispmanx_resource_write_data(bcm_backres,VC_IMAGE_RGB888,4,&color,&src_rect_im);*/\r
\r
DISPMANX_UPDATE_HANDLE_T bcm_update;\r
bcm_display=vc_dispmanx_display_open(0);\r
&src_rect,DISPMANX_PROTECTION_NONE,0, 0, (DISPMANX_TRANSFORM_T) 0);\r
\r
\r
- bcm_background=vc_dispmanx_element_add(bcm_update,bcm_display,\r
+ /* bcm_background=vc_dispmanx_element_add(bcm_update,bcm_display,\r
0,&dst_rect,bcm_backres ,\r
- &src_rect_bg,DISPMANX_PROTECTION_NONE,0, 0, (DISPMANX_TRANSFORM_T) 0);\r
+ &src_rect_bg,DISPMANX_PROTECTION_NONE,0, 0, (DISPMANX_TRANSFORM_T) 0);*/\r
\r
vc_dispmanx_update_submit_sync(bcm_update);\r
\r
bcm_update=vc_dispmanx_update_start(0);\r
\r
vc_dispmanx_element_remove(bcm_update,bcm_element);\r
- vc_dispmanx_element_remove(bcm_update,bcm_background);\r
+// vc_dispmanx_element_remove(bcm_update,bcm_background);\r
vc_dispmanx_update_submit_sync(bcm_update);\r
- vc_dispmanx_resource_delete(bcm_backres);\r
+// vc_dispmanx_resource_delete(bcm_backres);\r
vc_dispmanx_display_close(bcm_display);\r
\r
\r
#include "woptionpane.h"
#include "osdopenvg.h"
+#include <linux/fb.h>
// temp
#include "log.h"
if (!attachFrameBuffer()) { shutdown(); return 0; }
setTVsize(ASPECT4X3);
+ selectVideoMode(0);
{
if (!initted) return 0;
initted = 0;
+ Log::getInstance()->log("Video", Log::NOTICE, "Shutdown video module");
DeAllocateCodecsOMX();
OMX_Deinit();
- vc_tv_show_info(0); // back to console
+ //vc_tv_show_info(0); // back to console
+ // Restore console
+ int fd_fbset=0;
+ struct fb_var_screeninfo screeninfo;
+ fd_fbset=open("/dev/fb0",O_RDONLY);
+ if (fd_fbset<0) {
+ Log::getInstance()->log("Video", Log::CRIT, "Could not open frame buffer device %d", fd_fbset);
+ return 0;
+ }
+ if (ioctl(fd_fbset, FBIOGET_VSCREENINFO, &screeninfo)){
+ close(fd_fbset);
+ Log::getInstance()->log("Video", Log::CRIT, "Could not FBIOGET_VSCREENINFO frame buffer device");
+ return 0;
+ }
+ screeninfo.bits_per_pixel=8;
+ if (ioctl(fd_fbset, FBIOPUT_VSCREENINFO, &screeninfo)){
+ Log::getInstance()->log("Video", Log::CRIT, "Could not FBIOPUT_VSCREENINFO frame buffer device");
+ }
+ screeninfo.bits_per_pixel=16;
+ if (ioctl(fd_fbset, FBIOPUT_VSCREENINFO, &screeninfo)){
+ Log::getInstance()->log("Video", Log::CRIT, "Could not FBIOPUT_VSCREENINFO frame buffer device");
+ }
+ close(fd_fbset);
return 1;
}
return 1;
}
-//void VideoOMX::selectVideoMode(int interlaced)
-//{
-// if (/*hdmi*/ true) {
-// TV_SUPPORTED_MODE_T all_supp_modes[TV_MAX_SUPPORTED_MODES];
-// HDMI_RES_GROUP_T pref_group;
-// TV_SUPPORTED_MODE_T *mymode=NULL;
-// TV_SUPPORTED_MODE_T *mymode_second_best=NULL;
-// bool got_optimum=false;
-// uint32_t pref_mode;
-// int all_my_modes=vc_tv_hdmi_get_supported_modes(HDMI_RES_GROUP_CEA,
-// all_supp_modes,TV_MAX_SUPPORTED_MODES,
-// &pref_group,&pref_mode);
-// int target_fps=50;
-// if (format==PAL)target_fps=50;
-// else if (format==NTSC) target_fps=60;
-// if (all_my_modes<=0) {
-// Log::getInstance()->log("Video", Log::NOTICE, "No CEA modes found abort");
-// return;
-// }
-//
-// //Now first determine native resolution
-// int native_width=1920;
-// int native_height=1080;
-// for (int i=0;i<all_my_modes;i++) {
-// if (all_supp_modes[i].native) {
-// mymode=all_supp_modes+i;
-// Log::getInstance()->log("Video", Log::NOTICE, "Found native mode %dx%d %d Hz i: %d",
-// mymode->width,mymode->height,mymode->frame_rate,mymode->scan_mode);
-// }
-//
-// }
-// //Now find the mode which matches best
-// for (int i=0;i<all_my_modes;i++) {
-// TV_SUPPORTED_MODE_T *curmode=all_supp_modes+i;
-// if (curmode->width==native_width &&
-// curmode->height==native_height &&
-// curmode->frame_rate==target_fps) {
-// if(curmode->scan_mode==interlaced) {
-// got_optimum=true;
-// mymode=curmode;
-// Log::getInstance()->log("Video", Log::NOTICE, "Found optimum mode %dx%d %d Hz i: %d",
-// mymode->width,mymode->height,mymode->frame_rate,mymode->scan_mode);
-// } else {
-// mymode_second_best=curmode;
-// Log::getInstance()->log("Video", Log::NOTICE, "Found close to optimum mode %dx%d %d Hz i: %d",
-// mymode_second_best->width,mymode_second_best->height,
-// mymode_second_best->frame_rate,mymode_second_best->scan_mode);
-// }
-//
-// }
-// }
-// if (mymode) {
-// Log::getInstance()->log("Video", Log::NOTICE, "Switch to optimum mode");
-// vc_tv_hdmi_power_on_explicit(HDMI_MODE_HDMI,HDMI_RES_GROUP_CEA,mymode->code);
-// } else if (mymode_second_best) {
-// Log::getInstance()->log("Video", Log::NOTICE, "Switch to close to optimum mode");
-// vc_tv_hdmi_power_on_explicit(HDMI_MODE_HDMI,HDMI_RES_GROUP_CEA,mymode_second_best->code);
-// } else {
-// Log::getInstance()->log("Video", Log::NOTICE, "Switch to prefered mode");
-// vc_tv_hdmi_power_on_best(1920,1080,target_fps,interlaced?HDMI_INTERLACED:HDMI_NONINTERLACED,
-// (EDID_MODE_MATCH_FLAG_T)(HDMI_MODE_MATCH_FRAMERATE|HDMI_MODE_MATCH_RESOLUTION|HDMI_MODE_MATCH_SCANMODE));
-// }
-//
-// }
-//
-//
-//
-//}
+void VideoOMX::selectVideoMode(int interlaced)
+{
+ if (/*hdmi*/ true) {
+ TV_SUPPORTED_MODE_T all_supp_modes[TV_MAX_SUPPORTED_MODES];
+ HDMI_RES_GROUP_T pref_group;
+ TV_SUPPORTED_MODE_T *mymode=NULL;
+ TV_SUPPORTED_MODE_T *mymode_second_best=NULL;
+ bool got_optimum=false;
+ uint32_t pref_mode;
+ int all_my_modes=vc_tv_hdmi_get_supported_modes(HDMI_RES_GROUP_CEA,
+ all_supp_modes,TV_MAX_SUPPORTED_MODES,
+ &pref_group,&pref_mode);
+ int target_fps=50;
+ if (format==PAL)target_fps=50;
+ else if (format==NTSC) target_fps=60;
+ if (all_my_modes<=0) {
+ Log::getInstance()->log("Video", Log::NOTICE, "No CEA modes found abort");
+ return;
+ }
+
+ //Now first determine native resolution
+ int native_width=1920;
+ int native_height=1080;
+ for (int i=0;i<all_my_modes;i++) {
+ if (all_supp_modes[i].native) {
+ mymode=all_supp_modes+i;
+ Log::getInstance()->log("Video", Log::NOTICE, "Found native mode %dx%d %d Hz i: %d",
+ mymode->width,mymode->height,mymode->frame_rate,mymode->scan_mode);
+ }
+
+ }
+ //Now find the mode which matches best
+ for (int i=0;i<all_my_modes;i++) {
+ TV_SUPPORTED_MODE_T *curmode=all_supp_modes+i;
+ if (curmode->width==native_width &&
+ curmode->height==native_height &&
+ curmode->frame_rate==target_fps) {
+ if(curmode->scan_mode==interlaced) {
+ got_optimum=true;
+ mymode=curmode;
+ Log::getInstance()->log("Video", Log::NOTICE, "Found optimum mode %dx%d %d Hz i: %d",
+ mymode->width,mymode->height,mymode->frame_rate,mymode->scan_mode);
+ } else {
+ mymode_second_best=curmode;
+ Log::getInstance()->log("Video", Log::NOTICE, "Found close to optimum mode %dx%d %d Hz i: %d",
+ mymode_second_best->width,mymode_second_best->height,
+ mymode_second_best->frame_rate,mymode_second_best->scan_mode);
+ }
+
+ }
+ }
+ vc_tv_power_off();
+ if (mymode) {
+ Log::getInstance()->log("Video", Log::NOTICE, "Switch to optimum mode");
+ vc_tv_hdmi_power_on_explicit(HDMI_MODE_HDMI,HDMI_RES_GROUP_CEA,mymode->code);
+ } else if (mymode_second_best) {
+ Log::getInstance()->log("Video", Log::NOTICE, "Switch to close to optimum mode");
+ vc_tv_hdmi_power_on_explicit(HDMI_MODE_HDMI,HDMI_RES_GROUP_CEA,mymode_second_best->code);
+ } else {
+ Log::getInstance()->log("Video", Log::NOTICE, "Switch to prefered mode");
+ vc_tv_hdmi_power_on_best(1920,1080,target_fps,interlaced?HDMI_INTERLACED:HDMI_NONINTERLACED,
+ (EDID_MODE_MATCH_FLAG_T)(HDMI_MODE_MATCH_FRAMERATE|HDMI_MODE_MATCH_RESOLUTION|HDMI_MODE_MATCH_SCANMODE));
+ }
+
+ }
+
+
+
+}
int VideoOMX::setConnection(UCHAR tconnection)