The method “NvVideoEncoder::setFrameRate” is described as “Sets the encode framerate. Calls the VIDIOC_S_PARM IOCTL on the encoder capture plane. Can be called any time after setFormat on both the planes.” in the API doc.

But in NvVideoEncoder.cpp line 166 "CHECK_V4L2_RETURN(output_plane.setStreamParms(parms),
"Setting framerate to " << framerate_num << “/” << framerate_den); "
It sets the output_plane.

What does this method really do for the encoder? Controls the output_plane or capture_plane frame rate?

It is also weird of the statements in the function:
“parms.parm.output.timeperframe.numerator = framerate_den;
parms.parm.output.timeperframe.denominator = framerate_num;”

The fps information is put in VUI, so you need to enable VUI along with setting framerate. You may take a look at

Please note the reported issue is in r32.1 and fixed in later releases.