code: def sample_frames_uniform(
      frame_rate,
      total_frame_count=None,
      support=None,
      fps=None,
      max_fps=None,
      always_sample_last=False,
  ):
      """Returns a list of frame numbers sampled uniformly according to the
      provided parameters.
  
      Args:
          frame_rate: the video frame rate
          total_frame_count (None): the total number of frames in the video
          support (None): a ``[first, last]`` frame range from which to sample
          fps (None): a frame rate at which to sample frames
          max_fps (None): a maximum frame rate at which to sample frames
          always_sample_last (False): whether to always sample the last frame
  
      Returns:
          a list of frame numbers, or None if all frames should be sampled
      """
      if support is not None:
          first, last = support
      elif total_frame_count is None:
          return None
      else:
          first = 1
          last = total_frame_count
  
      if frame_rate is None:
          if support is None:
              return None
  
          return list(range(first, last + 1))
  
      if last < first:
          return []
  
      ifps = frame_rate
  
      if fps is not None:
          ofps = fps
      else:
          ofps = ifps
  
      if max_fps is not None:
          ofps = min(ofps, max_fps)
  
      if ofps >= ifps:
          if support is None:
              return None
  
          return list(range(first, last + 1))
  
      x = first
      fn_last = first
      beta = ifps / ofps
      sample_frames = [x]
      while x <= last:
          x += beta
          fn = int(round(x))
          if fn_last < fn <= last:
              sample_frames.append(fn)
              fn_last = fn
  
      if always_sample_last and fn_last < last:
          sample_frames.append(last)
  
      return sample_frames
  
imports: import itertools
  import json
  import logging
  import os
  import eta.core.frameutils
  import eta.core.image
  import eta.core.numutils
  import eta.core.utils
  import eta.core.video
  import fiftyone
  import fiftyone.core.metadata
  import fiftyone.core.storage
  import fiftyone.core.utils
  import fiftyone.core.validation
label_desc: Use image node_id 8 for calling a global function with example usage: sample_frames_uniform(frame_rate, total_frame_count, support, fps, max_fps, always_sample_last) and returns: sample_frames, list, list, list, None, None, None