NTSC IS NOT EXPLICITLY SUPPORTED IN ALL OF ITS SUBTLE NUANCES, BUT: The NTSC variations (~23.976, ~29.97, etc) are approximately defined as 24 * 1000/1001 and 30 * 1000/1001, etc. These can be represented exactly in flicks, but 1/1000 divisions are not available.
It is not clear what does this paragraph mean or refers to. NTSC frame rates are exactly defined as 24000/1001 Hz, 30000/1001 Hz and multiples of those - not approximately (but 23.976 and 29.97 are decimal approximations of those obviously).
Many folks online have pointed out that NTSC technically has a variable frame rate, and that this is handled correctly in other media playback libraries such as QuickTime. The goal of flicks is to provide a simple, convenient std::chrono::duration to work with when writing code that works with simulation and time in media, but not explicitly to handle complex variable-rate playback scenarios. So we'll stick with the 1000/1001 approximations, and leave it at that!
It would be best to ask those folks for a reference to the standard where it is defined as variable frame rate.
NOTE that variable frame rate is not the same thing as non-integer (in Hz) frame rate - like e.g. NTSC. Variable frame rate means by definition that distance between consecutive frames may vary.
To the best of my knowledge NTSC frame rates has always been defined in each standard as constant frame rates (exactly 30000/1001 Hz, 24000/1001 Hz and multiples of those) - so it would be great to stop propagating this misleading idea that there is something variable or approximate about them. It is not more variable or approximate than 30 Hz or 25 Hz. For example distance between consecutive frames in NTSC 29.97 FPS stream are exactly 1001/30000 seconds - according to the standard (in ideal model obviously - in physical world it is always approximate and with small random deviations - just like anything else).
NTSC IS NOT EXPLICITLY SUPPORTED IN ALL OF ITS SUBTLE NUANCES, BUT: The NTSC variations (~23.976, ~29.97, etc) are approximately defined as 24 * 1000/1001 and 30 * 1000/1001, etc. These can be represented exactly in flicks, but 1/1000 divisions are not available.It is not clear what does this paragraph mean or refers to. NTSC frame rates are exactly defined as 24000/1001 Hz, 30000/1001 Hz and multiples of those - not approximately (but 23.976 and 29.97 are decimal approximations of those obviously).
Many folks online have pointed out that NTSC technically has a variable frame rate, and that this is handled correctly in other media playback libraries such as QuickTime. The goal of flicks is to provide a simple, convenient std::chrono::duration to work with when writing code that works with simulation and time in media, but not explicitly to handle complex variable-rate playback scenarios. So we'll stick with the 1000/1001 approximations, and leave it at that!It would be best to ask those folks for a reference to the standard where it is defined as variable frame rate.
NOTE that variable frame rate is not the same thing as non-integer (in Hz) frame rate - like e.g. NTSC. Variable frame rate means by definition that distance between consecutive frames may vary.
To the best of my knowledge NTSC frame rates has always been defined in each standard as constant frame rates (exactly 30000/1001 Hz, 24000/1001 Hz and multiples of those) - so it would be great to stop propagating this misleading idea that there is something variable or approximate about them. It is not more variable or approximate than 30 Hz or 25 Hz. For example distance between consecutive frames in NTSC 29.97 FPS stream are exactly 1001/30000 seconds - according to the standard (in ideal model obviously - in physical world it is always approximate and with small random deviations - just like anything else).