Class: PureJPEG::Huffman::DecodeTable

Inherits:
Object
  • Object
show all
Defined in:
lib/pure_jpeg/huffman/decoder.rb

Instance Method Summary collapse

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