clvLabs / PyATEMMax

A Python library to monitor and control Blackmagic Design ATEM video switchers.
https://clvlabs.github.io/PyATEMMax/
GNU General Public License v3.0
79 stars 20 forks source link

Camera Settings Setup #30

Open JamSponge opened 1 year ago

JamSponge commented 1 year ago

Hello! This definitely isn't the way you're supposed to use github, but I'm an idiot. I tweaked this function a bunch to get it working neatly with my studio micro 4ks:

def setCameraControlVideomode(self, camera: Union[ATEMConstant, str, int], video_mode: str) -> None: """Set Camera Control Video Mode fps: int, resolution: int, pal_or_ntsc: str, interlaced: int Args: camera: see ATEMCameras fps (int): ? resolution (int): ? interlaced (int): ? """

0= resolution // 1= framerate (approx!) // 2= interlaced ("i" or "p") // 3= NTSC or PAL

    video_mode_dict = {
        #"f1080i50": (1,3,1,1), #Not supported by camera
        #"f525i59_94_ntsc" : 
        #"f625i_50_pal"
        #"f525i59_94_ntsc_16_9" 
        #"f625i_50_pal_16_9"
        #"f1080i23_98": (0,3,1,1),
        #"f1080i24": (0,3,1,0),
        "f720p50": (3,2,0,0),
        "f720p59_94":(4,2,0,1),
        "f720p60": (4,2,0,0),
        "f1080i25": (1,3,1,0),
        "f1080i29_97": (2,3,0,1),
        "f1080i30": (2,3,1,0),
        "f1080i59_94": (2,3,1,1),
        "f1080i60": (2,3,1,0),
        "f1080p23_98": (0,3,0,1),
        "f1080p24": (0,3,0,0),
        "f1080p25": (1,3,0,0),
        "f1080p29_97": (2,3,0,1),
        "f1080p30": (2,3,0,0),
        "f1080p50": (3,3,0,0),
        "f1080p59_94": (4,3,0,1),
        "f1080p60": (4,3,0,0),
        "f2160p23_98": (0,6,0,1),
        "f2160p24": (0,6,0,0),
        "f2160p25": (1,6,0,0),
        "f2160p29_97": (2,6,0,1),
        "f2160p30": (2,6,0,0)
    }

    camera_val = self.atem.cameras[camera].value

    self.switcher._prepareCommandPacket("CCmd", 24)
    self.switcher._outBuf.setU8(0, camera_val)
    self.switcher._outBuf.setU8(1, 1)
    self.switcher._outBuf.setU8(2, 0)
    self.switcher._outBuf.setU8(4, 0x01)   # Data type: int8
    self.switcher._outBuf.setU8(7, 0x05)   # 5 Byte array
    #self.switcher._outBuf.setU8(9, 0x05)   # 5 byte array
    self.switcher._outBuf.setU8(16, video_mode_dict[video_mode][0])
    self.switcher._outBuf.setU8(17, video_mode_dict[video_mode][3])   # Regular M-rate
    self.switcher._outBuf.setU8(18, video_mode_dict[video_mode][1])
    self.switcher._outBuf.setU8(19, video_mode_dict[video_mode][2])
    self.switcher._outBuf.setU8(20, 0x00)   # YUV
    self.switcher._finishCommandPacket()