Переглянути джерело

DisplayManagerRPI: signal NTSC refresh rates

Signed-off-by: Vincent Lang <vincent@plexapp.com>
Rodger Combs 9 роки тому
батько
коміт
cb1e65e43a
1 змінених файлів з 16 додано та 0 видалено
  1. 16 0
      src/display/rpi/DisplayManagerRPI.cpp

+ 16 - 0
src/display/rpi/DisplayManagerRPI.cpp

@@ -8,6 +8,8 @@
 #include "DisplayManagerRPI.h"
 #include "display/DisplayComponent.h"
 
+#define NTSC_MASK (1 << 8)
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 void DisplayManagerRPI::tv_callback(void *callback_data, uint32_t reason, uint32_t param1, uint32_t param2)
 {
@@ -99,6 +101,11 @@ bool DisplayManagerRPI::initialize()
     mode->refreshRate = tvmode->frame_rate;
     mode->interlaced = (tvmode->scan_mode == 1);
     mode->bitsPerPixel = 32;
+
+    mode = DMVideoModePtr(new DMVideoMode(*mode));
+    mode->id |= NTSC_MASK;
+    display->videoModes[mode->id] = mode;
+    mode->refreshRate /= 1.001;
   }
 
   if (m_modes.size() == 0)
@@ -110,9 +117,18 @@ bool DisplayManagerRPI::initialize()
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 bool DisplayManagerRPI::setDisplayMode(int display, int mode)
 {
+  bool ntsc = (mode & NTSC_MASK);
+  mode &= ~NTSC_MASK;
+
   if (!isValidDisplayMode(display, mode))
     return false;
 
+  HDMI_PROPERTY_PARAM_T property;
+  property.property = HDMI_PROPERTY_PIXEL_CLOCK_TYPE;
+  property.param1 = ntsc ? HDMI_PIXEL_CLOCK_TYPE_NTSC : HDMI_PIXEL_CLOCK_TYPE_PAL;
+  property.param2 = 0;
+  vc_tv_hdmi_set_property(&property);
+
   TV_SUPPORTED_MODE_NEW_T* tvmode = &m_modes[mode];
   bool ret = vc_tv_hdmi_power_on_explicit_new(HDMI_MODE_HDMI, (HDMI_RES_GROUP_T)tvmode->group, tvmode->code) == 0;
   if (!ret)