public CameraInfo GetCameraInfo(int cameraNum)
        {
            if (this.m_infoCache.ContainsKey(cameraNum))
            {
                return(this.m_infoCache[cameraNum]);
            }

            CameraInfo info = new CameraInfo();

            using (MMAL_PARAMETER_CAMERA_INFO_T_Wrapper param = new MMAL_PARAMETER_CAMERA_INFO_T_Wrapper())
            {
                //param.hdr.DumpOffsets();

                //MMAL_PARAMETER_CAMERA_INFO_T param = new MMAL_PARAMETER_CAMERA_INFO_T();
                //param.hdr = new MMAL_PARAMETER_HEADER_T();
                param.hdr.id = MMALParameterId.MMAL_PARAMETER_CAMERA_INFO;
                uint size = param.hdr.size;
                param.hdr.size = size - 4u;  // Deliberately undersize to check firmware veresion
                //param.hdr.size = (uint)(MMAL_PARAMETER_CAMERA_INFO_T.Size - 4);

                MMAL_STATUS_T status = MMALNativeMethods.PortParameterGet(this.HandleWrapper.control, param);
                if (status != MMAL_STATUS_T.MMAL_SUCCESS)
                {
                    // Running on newer firmware
                    param.hdr.size = size;
                    //param.hdr.size = (uint)(MMAL_PARAMETER_CAMERA_INFO_T.Size);
                    status = MMALNativeMethods.PortParameterGet(this.HandleWrapper.control, param);
                    if (status == MMAL_STATUS_T.MMAL_SUCCESS && param.num_cameras > cameraNum)
                    {
                        info.Width  = param.cameras[cameraNum].max_width;
                        info.Height = param.cameras[cameraNum].max_height;
                        info.Name   = param.cameras[cameraNum].camera_name;

                        //info.DumpProperties();
                    }
                    else
                    {
                        Console.WriteLine($"Cannot read camera info, keeping the defaults for OV5647. status={status} param.num_cameras={param.num_cameras}");
                        //vcos_log_error("Cannot read camera info, keeping the defaults for OV5647");
                    }
                }
                else
                {
                    // Older firmware
                    // Nothing to do here, keep the defaults for OV5647
                    Console.WriteLine("Older firmware, keeping the defaults for OV5647");
                }
            }


            //Assume defaults
            if (string.IsNullOrEmpty(info.Name))
            {
                info.Name = "OV5647";
            }
            if (info.Width == 0)
            {
                info.Width = 2592;
            }
            if (info.Height == 0)
            {
                info.Height = 1944;
            }

            this.m_infoCache.Add(cameraNum, info);

            return(info);
        }