-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDecoder.cs
More file actions
123 lines (115 loc) · 3.83 KB
/
Decoder.cs
File metadata and controls
123 lines (115 loc) · 3.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System;
using System.IO;
using jpeg2000_decoder.CodeStream;
using jpeg2000_decoder.CodeStream.Reader;
using jpeg2000_decoder.Exceptions;
using jpeg2000_decoder.FileFormat.Reader;
using jpeg2000_decoder.IO;
using jpeg2000_decoder;
using System.Collections.Generic;
using System.Collections;
using jpeg2000_decoder.Util;
public class Decoder
{
public ParameterList ParameterList { get; private set; }
public Decoder(ParameterList pl)
{
this.ParameterList = pl;
}
public void Decode(IRandomAccessIO input)
{
var fileFormatReader = new FileFormatReader(input);
if (fileFormatReader.JP2FFUsed)
{
input.Seek(fileFormatReader.FirstCodeStreamPosition);
}
bool verbose = true;
// **** Header decoder ****
// Instantiate header decoder and read main header
var headerInfo = new HeaderInfo();
HeaderDecoder headerDecoder = null;
try
{
headerDecoder = new HeaderDecoder(input, ParameterList, headerInfo);
}
catch (EndOfFileException e)
{
Logger.Error("Codestream too short or bad header, unable to decode.");
if (ParameterList.getParameter("debug") == "on")
{
Logger.Warning(e.StackTrace);
}
else
{
Logger.Error("Use '-debug' option for more details");
}
return;
}
int nCompCod = headerDecoder.getNumComps();
int nTiles = headerInfo.siz.getNumTiles();
var decSpec = headerDecoder.getDecoderSpecs();
// Report information
if (verbose)
{
String info = nCompCod + " component(s) in codestream, " + nTiles +
" tile(s)\n";
info += "Image dimension: ";
for (int c = 0; c < nCompCod; c++)
{
info += headerInfo.siz.getCompImgWidth(c) + "x" +
headerInfo.siz.getCompImgHeight(c) + " ";
}
if (nTiles != 1)
{
info += "\nNom. Tile dim. (in canvas): " +
headerInfo.siz.xtsiz + "x" + headerInfo.siz.ytsiz;
}
Logger.Debug(info);
}
//if (pl.getBooleanParameter("cdstr_info"))
{
Logger.Debug("Main header:\n" + headerInfo.toStringMainHeader());
}
// Get demixed bitdepths
var depth = new int[nCompCod];
for (var i = 0; i < nCompCod; i++) { depth[i] = headerDecoder.getOriginalBitDepth(i); }
// **** Bit stream reader ****
// try
// {
// breader = BitstreamReaderAgent.
// createInstance(in, hd, pl, decSpec,
// pl.getBooleanParameter("cdstr_info"), hi);
// }
// catch (IOException e)
// {
// error("Error while reading bit stream header or parsing " +
// "packets" + ((e.getMessage() != null) ?
// (":\n" + e.getMessage()) : ""), 4);
// if (pl.getParameter("debug").equals("on"))
// {
// e.printStackTrace();
// }
// else
// {
// error("Use '-debug' option for more details", 2);
// }
// return;
// }
// catch (IllegalArgumentException e)
// {
// error("Cannot instantiate bit stream reader" +
// ((e.getMessage() != null) ?
// (":\n" + e.getMessage()) : ""), 2);
// if (pl.getParameter("debug").equals("on"))
// {
// e.printStackTrace();
// }
// else
// {
// error("Use '-debug' option for more details", 2);
// }
// return;
// }
//return null;
}
}