Author: mosu
Date: 2004-09-12 13:09:20 +0400 (Sun, 12 Sep 2004)
New Revision: 783
Modified:
trunk/RbMatroska/ebml.rb
trunk/RbMatroska/ebml/file.rb
trunk/RbMatroska/ebml/master.rb
trunk/RbMatroska/matroska/utils.rb
Log:
The EbmlIds for Void and CRC32 had the wrong size. Got rid of the instance variable "id" for each element. Use the class method "global_id" instead.
Modified: trunk/RbMatroska/ebml/file.rb
===================================================================
--- trunk/RbMatroska/ebml/file.rb 2004-09-11 18:13:43 UTC (rev 782)
+++ trunk/RbMatroska/ebml/file.rb 2004-09-12 09:09:20 UTC (rev 783)
@@ -93,7 +93,7 @@
return nil if (id.class == NilClass)
size = read_size
return nil if (size.class == NilClass)
- return find_class_for_id(id).new(id, pos, size[0], size[1])
+ return find_class_for_id(id).new(pos, size[0], size[1])
end
def map_ids(namespace = nil)
Modified: trunk/RbMatroska/ebml/master.rb
===================================================================
--- trunk/RbMatroska/ebml/master.rb 2004-09-11 18:13:43 UTC (rev 782)
+++ trunk/RbMatroska/ebml/master.rb 2004-09-12 09:09:20 UTC (rev 783)
@@ -18,8 +18,8 @@
class Master < Element
attr_reader :children
- def initialize(id, pos, data_size, size_length)
- super(id, pos, data_size, size_length)
+ def initialize(pos, data_size, size_length)
+ super(pos, data_size, size_length)
@children = Array.new
end
@@ -44,7 +44,7 @@
def each(filter = Id.none)
@children.each do |c|
- yield(c) if ((filter == Id.none) or (filter == c.id))
+ yield(c) if ((filter == Id.none) or (filter == c.class.global_id))
end
end
@@ -55,7 +55,7 @@
else
id = filter
end
- @children.each { |c| return c if (c.id == id) }
+ @children.each { |c| return c if (c.class.global_id == id) }
return nil
end
Modified: trunk/RbMatroska/ebml.rb
===================================================================
--- trunk/RbMatroska/ebml.rb 2004-09-11 18:13:43 UTC (rev 782)
+++ trunk/RbMatroska/ebml.rb 2004-09-12 09:09:20 UTC (rev 783)
@@ -70,18 +70,14 @@
end # class Id
class Element
- attr_reader :id
attr_reader :pos
attr_reader :data_size
- attr_reader :element_size
attr_reader :size_length
- def initialize(id, pos, data_size, size_length)
- @id = id
+ def initialize(pos, data_size, size_length)
@pos = pos
@data_size = data_size
@size_length = size_length
- @element_size = @id.size + @size_length + @data_size
end
def Element.global_id
@@ -89,11 +85,20 @@
end
def head_size
- return @id.size + @size_length
+ return self.class.global_id.size + @size_length
end
+ def element_size
+ return self.class.global_id.size + @data_size +
+ (@size_length == -1 ? Ebml.coded_size(@data_size) : @size_length)
+ end
+
+ def force_size_length(size_length)
+ @size_length = size_length
+ end
+
def skip(ef)
- ef.io.seek(@pos + @element_size, IO::SEEK_SET)
+ ef.io.seek(@pos + element_size, IO::SEEK_SET)
end
def read(ef)
@@ -103,8 +108,8 @@
end
def to_s
- return sprintf("[%s @ 0x%08x size 0x%08x]", id.to_s, @pos,
- @element_size)
+ return sprintf("[%s @ 0x%08x size 0x%08x]", self.class.global_id.to_s,
+ @pos, element_size)
end
end
@@ -177,14 +182,14 @@
class CRC32 < Binary
def CRC32.global_id
- @@id ||= Id.new(0xbf, 2)
+ @@id ||= Id.new(0xbf, 1)
return @@id
end # class CRC32
end
class Void < Binary
def Void.global_id
- @@id ||= Id.new(0xec, 2)
+ @@id ||= Id.new(0xec, 1)
return @@id
end
end # class Void
Modified: trunk/RbMatroska/matroska/utils.rb
===================================================================
--- trunk/RbMatroska/matroska/utils.rb 2004-09-11 18:13:43 UTC (rev 782)
+++ trunk/RbMatroska/matroska/utils.rb 2004-09-12 09:09:20 UTC (rev 783)
@@ -60,8 +60,9 @@
segelement = f.read_element_head
while ((segelement != nil) and
- (fully or (segelement.id != Matroska::Cluster.global_id)))
- add_element(segelement.id, segelement.pos)
+ (fully or (segelement.class.global_id !=
+ Matroska::Cluster.global_id)))
+ add_element(segelement.class.global_id, segelement.pos)
segelement.skip(f)
segelement = f.read_element_head
end # while (segelement...
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.