Class: PureJPEG::Huffman::DecodeTable
- Inherits:
-
Object
- Object
- PureJPEG::Huffman::DecodeTable
- Defined in:
- lib/pure_jpeg/huffman/decoder.rb
Instance Method Summary collapse
-
#decode(reader) ⇒ Object
Decode one Huffman symbol from the bit reader.
-
#initialize(bits, values) ⇒ DecodeTable
constructor
A new instance of DecodeTable.
Constructor Details
#initialize(bits, values) ⇒ DecodeTable
Returns a new instance of DecodeTable.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/pure_jpeg/huffman/decoder.rb', line 6 def initialize(bits, values) @min_code = Array.new(17, 0) @max_code = Array.new(17, -1) @val_ptr = Array.new(17, 0) @values = values code = 0 k = 0 16.times do |i| len = i + 1 @val_ptr[len] = k if bits[i] > 0 @min_code[len] = code code += bits[i] @max_code[len] = code - 1 k += bits[i] end code <<= 1 end end |
Instance Method Details
#decode(reader) ⇒ Object
Decode one Huffman symbol from the bit reader.
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/pure_jpeg/huffman/decoder.rb', line 28 def decode(reader) code = 0 1.upto(16) do |len| code = (code << 1) | reader.read_bit if @max_code[len] >= 0 && code <= @max_code[len] return @values[@val_ptr[len] + code - @min_code[len]] end end raise PureJPEG::DecodeError, "Invalid Huffman code" end |