def _load_frame_list()

in ez_wsi_dicomweb/local_dicom_slide_cache.py [0:0]


def _load_frame_list(buffer: BinaryIO) -> List[bytes]:
  """Loads DICOM instance frames into memory as a list of frames(bytes).

  Args:
    buffer: Buffer containing binary DICOM instance data.

  Returns:
    List of bytes encoded in DICOM instance frames.
  """
  with pydicom.dcmread(buffer) as ds:
    if 'PixelData' not in ds or not ds.PixelData:
      return []
    try:
      number_of_frames = int(ds.NumberOfFrames)
    except (ValueError, AttributeError) as _:
      return []
    if number_of_frames < 1:
      return []
    if _is_unencapsulated_image_transfer_syntax(ds.file_meta.TransferSyntaxUID):
      step = int(len(ds.PixelData) / number_of_frames)
      return [
          ds.PixelData[fnum * step : (fnum + 1) * step]
          for fnum in range(number_of_frames)
      ]
    if _PYDICOM_MAJOR_VERSION <= 2:
      # pytype: disable=module-attr
      frame_bytes_generator = pydicom.encaps.generate_pixel_data_frame(
          ds.PixelData, number_of_frames
      )
      # pytype: enable=module-attr
    else:
      # pytype: disable=module-attr
      frame_bytes_generator = pydicom.encaps.generate_frames(
          ds.PixelData, number_of_frames=number_of_frames
      )
      # pytype: enable=module-attr
    return [frame_bytes for frame_bytes in frame_bytes_generator]