The camera has several modes, but you can only turn on one.
v4l2-ctl --list-formats-ext -d 2 ioctl: VIDIOC_ENUM_FMT Type: Video Capture
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps) # I want this
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.067s (15.000 fps) # But got only this
Piece of python code:
camUrl = 2
camRes = (1280, 720)
camFPS = 30
cap = cv2.VideoCapture(camUrl)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, int(camRes[0]))
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, int(camRes[1]))
cap.set(cv2.CAP_PROP_FPS, camFPS)
fps = cap.get(cv2.CAP_PROP_FPS)
print("fps set: ", fps) # Show me 'fps set: 15'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
cap.set(cv2.CAP_PROP_FOURCC, fourcc)
Then I count fps and it is 15.