readInfo method

JpegInfo? readInfo(
  1. List<int> bytes
)

Implementation

JpegInfo? readInfo(List<int> bytes) {
  input = InputBuffer(bytes, bigEndian: true);

  var marker = _nextMarker();
  if (marker != JpegMarker.soi) {
    return null;
  }

  final info = JpegInfo();

  var hasSOF = false;
  var hasSOS = false;

  marker = _nextMarker();
  while (marker != JpegMarker.eoi && !input.isEOS) {
    // EOI (End of image)
    switch (marker) {
      case JpegMarker.sof0: // SOF0 (Start of Frame, Baseline DCT)
      case JpegMarker.sof1: // SOF1 (Start of Frame, Extended DCT)
      case JpegMarker.sof2: // SOF2 (Start of Frame, Progressive DCT)
        hasSOF = true;
        _readFrame(marker, _readBlock());
        break;
      case JpegMarker.sos: // SOS (Start of Scan)
        hasSOS = true;
        _skipBlock();
        break;
      default:
        _skipBlock();
        break;
    }

    marker = _nextMarker();
  }

  if (frame != null) {
    info
      ..width = frame!.samplesPerLine!
      ..height = frame!.scanLines!;
  }
  frame = null;
  frames.clear();

  return (hasSOF && hasSOS) ? info : null;
}