Module: MP4::Metadata::Memoize::Stbl::Chunks

Defined in:
lib/mp4/metadata/memoize/stbl/chunks.rb

Class Method Summary collapse

Class Method Details

.call(track_id, cache, stco, stsc) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/mp4/metadata/memoize/stbl/chunks.rb', line 7

def call(track_id, cache, stco, stsc)
  each_chunk(stsc, stco) do |chunk_index, samples_per_chunk, offset, description_index, sample_counter|
    cache.add_chunk(
      track_id: track_id,
      chunk_index: chunk_index,
      samples_per_chunk: samples_per_chunk,
      sample_counter: sample_counter,
      description_index: description_index,
      offset: offset,
    )
  end
end

.each_chunk(stsc, stco) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/mp4/metadata/memoize/stbl/chunks.rb', line 20

def each_chunk(stsc, stco)
  sample_counter = 0

  stsc.chunk_count.times do |i|
    first_chunk = stsc.table[i].first_chunk.to_i
    samples_per_chunk =  stsc.table[i].samples_per_chunk.to_i
    description_index =  stsc.table[i].sample_description_index.to_i

    last_chunk = i.next < stsc.chunk_count ? stsc.table[i.next].first_chunk - 1 : stco.chunks_count

    (first_chunk..last_chunk).each do |chunk_index|
      sample_counter += samples_per_chunk

      yield(
        chunk_index,
        samples_per_chunk,
        stco.offsets[chunk_index.pred].to_i,
        description_index,
        sample_counter
      )
    end
  end
end