def frames(self, most_recent=False):
        """Retrieve a new frame from the PhoXi and convert it to a ColorImage,
        a DepthImage, and an IrImage.

        Parameters
        ----------
        most_recent: bool
            If true, the OpenCV buffer is emptied for the webcam before reading the most recent frame.

        Returns
        -------
        :obj:`tuple` of :obj:`ColorImage`, :obj:`DepthImage`, :obj:`IrImage`, :obj:`numpy.ndarray`
            The ColorImage, DepthImage, and IrImage of the current frame.
        """
        if most_recent:
            for i in xrange(4):
                self._cap.grab()
        for i in range(1):
            if self._adjust_exposure:
                try:
                    command = 'v4l2-ctl -d /dev/video{} -c exposure_auto=1 -c exposure_auto_priority=0 -c exposure_absolute=100 -c saturation=60 -c gain=140'.format(self._device_id)
                    FNULL = open(os.devnull, 'w')
                    subprocess.call(shlex.split(command), stdout=FNULL, stderr=subprocess.STDOUT)
                except:
                    pass
            ret, frame = self._cap.read()
        rgb_data = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

        return ColorImage(rgb_data, frame=self._frame), None, None
Retrieve a new frame from the PhoXi and convert it to a ColorImage,
        a DepthImage, and an IrImage.

        Parameters
        ----------
        most_recent: bool
            If true, the OpenCV buffer is emptied for the webcam before reading the most recent frame.

        Returns
        -------
        :obj:`tuple` of :obj:`ColorImage`, :obj:`DepthImage`, :obj:`IrImage`, :obj:`numpy.ndarray`
            The ColorImage, DepthImage, and IrImage of the current frame.