ogginfo-rb 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/ogginfo-rb.rb +24 -16
  2. metadata +2 -2
data/lib/ogginfo-rb.rb CHANGED
@@ -56,22 +56,8 @@ module Ogg
56
56
 
57
57
  private
58
58
  def calculate_duration file
59
- if file.stat.size > 5000
60
- # This seek is a dirty performance hack (saves reading whole file)
61
- file.seek(-5000, IO::SEEK_END)
62
- else
63
- file.rewind
64
- end
65
-
66
- # Find last page
67
- pg = page = Page.find_page(file)
68
- while pg
69
- page = pg
70
- pg = pg.next_page
71
- end
72
-
73
59
  # Duration is last granule position divided by sample rate
74
- return page.granule_position.to_f / @sample_rate
60
+ return Page.find_last_page(file).granule_position.to_f / @sample_rate
75
61
  end
76
62
  end
77
63
 
@@ -131,6 +117,28 @@ module Ogg
131
117
  file.pos -= CAPTURE.size
132
118
  return Page.new(file)
133
119
  end
120
+
121
+ def self.find_last_page file
122
+ buffer_size = 1024
123
+ pos = file.stat.size - buffer_size
124
+ while pos > 0
125
+ file.seek pos, IO::SEEK_SET
126
+ sio = StringIO.new file.read(buffer_size)
127
+
128
+ # Find last page in buffer
129
+ pg = page = Page.find_page(sio)
130
+ while pg
131
+ page = pg
132
+ pg = pg.next_page
133
+ end
134
+ return page if page
135
+
136
+ pos -= buffer_size * 2 - (CAPTURE.size - 1)
137
+ end
138
+
139
+ # This means that the Ogg file is not valid
140
+ return nil
141
+ end
134
142
  end
135
143
 
136
144
  class Packet
@@ -205,7 +213,7 @@ module Ogg
205
213
  length = @data.read(4).unpack('L').first
206
214
  comment = @data.read(length)
207
215
  key, value = comment.split('=', 2)
208
- (@comments[key.downcase] ||= []) << value
216
+ (@comments[key.upcase] ||= []) << value
209
217
  end
210
218
  end
211
219
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ogginfo-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aiden Nibali
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-09 00:00:00 +11:00
12
+ date: 2009-10-10 00:00:00 +11:00
13
13
  default_executable:
14
14
  dependencies: []
15
15