 
         case Pressed::cd: {
           CurrentMode = Mode::COLOR_FLOOR;
+        } break;
+
+        case Pressed::ad: {
+          CurrentMode = Mode::VIDEO_PLAYBACK;
         } break;
 
         case Pressed::bc: {

struct PendingOperations
{
  uint8_t cycle_brightness;
  uint8_t skip_video;

  uint8_t cycle_ceiling_red;
  uint8_t cycle_ceiling_green;

  }
}

bool previousFile() {
  if (infile.isOpen()) {
    infile.close();
  }

  // dir size is 32.
  uint16_t index = sd.vwd()->curPosition()/32;
  if (index < 2) return false;
  // position to possible previous file location.
  index -= 2;

  do {
    infile.open(sd.vwd(), index, O_READ);

    if (infile.isOpen()) {
      if (!infile.isHidden() && !infile.isSystem()) {
#ifdef DEBUG
        char buf[13];
        infile.getName(buf, sizeof(buf));
        cout << F("\nOpened prev file: ") << buf;
#endif
        return true;
      }
      infile.close();
    } else {
      return false;
    }
  } while (index-- > 0);

  return false;
}

bool readFrame()
{
  int32_t seek_offset = (int32_t)speed * sizeof(frame);
  if (speed < 0 && infile.curPosition() < -seek_offset) {
    // Going backwards, and reached the start of this file.
    if (!previousFile()) {
      // No more files.  Restart from the first at normal speed.
      speed = 0;
      return false;
    }
    // Successfully opened previous file - start from the end.
    infile.seekEnd();
  }
  if (!infile.seekCur(seek_offset)) {
    return false;
  }
  return infile.read(frame, sizeof(frame)) == sizeof(frame);
}

