MCPcopy Create free account
hub / github.com/davidgiven/fluxengine / readImage

Method readImage

lib/imagereader/fdiimagereader.cc:22–123  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20 FdiImageReader(const ImageReaderProto& config): ImageReader(config) {}
21
22 std::unique_ptr<Image> readImage() override
23 {
24 std::ifstream inputFile(
25 _config.filename(), std::ios::in | std::ios::binary);
26 if (!inputFile.is_open())
27 error("cannot open input file");
28
29 Bytes header(32);
30 inputFile.read((char*)header.begin(), header.size());
31 ByteReader headerReader(header);
32 if (headerReader.seek(0).read_le32() != 0)
33 error("FDI: could not find FDI header, is this a FDI file?");
34
35 // we currently don't use fddType but it could be used to automatically
36 // select profile parameters in the future
37 //
38 int fddType = headerReader.seek(4).read_le32();
39 int headerSize = headerReader.seek(0x08).read_le32();
40 int sectorSize = headerReader.seek(0x10).read_le32();
41 int sectorsPerTrack = headerReader.seek(0x14).read_le32();
42 int sides = headerReader.seek(0x18).read_le32();
43 int tracks = headerReader.seek(0x1c).read_le32();
44
45 inputFile.seekg(headerSize);
46
47 std::unique_ptr<Image> image(new Image);
48 int trackCount = 0;
49 for (int track = 0; track < tracks; track++)
50 {
51 if (inputFile.eof())
52 break;
53
54 for (int side = 0; side < sides; side++)
55 {
56 std::vector<unsigned> sectors;
57 for (int i = 0; i < sectorsPerTrack; i++)
58 sectors.push_back(i + 1);
59
60 for (int sectorId : sectors)
61 {
62 Bytes data(sectorSize);
63 inputFile.read((char*)data.begin(), data.size());
64
65 const auto& sector = image->put(track, side, sectorId);
66 sector->status = Sector::OK;
67 sector->data = data;
68 }
69 }
70
71 trackCount++;
72 }
73
74 auto layout = _extraConfig.mutable_layout();
75 if (globalConfig()->encoder().format_case() ==
76 EncoderProto::FormatCase::FORMAT_NOT_SET)
77 {
78 auto ibm = _extraConfig.mutable_encoder()->mutable_ibm();
79 auto trackdata = ibm->add_trackdata();

Callers

nothing calls this directly

Calls 11

errorFunction · 0.85
read_le32Method · 0.80
calculateSizeMethod · 0.80
logFunction · 0.50
readMethod · 0.45
beginMethod · 0.45
sizeMethod · 0.45
seekMethod · 0.45
eofMethod · 0.45
push_backMethod · 0.45
putMethod · 0.45

Tested by

no test coverage detected