[matroska] r786 - in trunk/RbMatroska: . ebml

[email protected]
Newsgroups gmane.comp.multimedia.matroska.cvs
Message-ID <[email protected]>
Author: mosu
Date: 2004-09-12 14:07:43 +0400 (Sun, 12 Sep 2004)
New Revision: 786

Modified:
   trunk/RbMatroska/ebml.rb
   trunk/RbMatroska/ebml/binary.rb
   trunk/RbMatroska/ebml/float.rb
   trunk/RbMatroska/ebml/master.rb
   trunk/RbMatroska/ebml/sinteger.rb
   trunk/RbMatroska/ebml/string.rb
   trunk/RbMatroska/ebml/uinteger.rb
   trunk/RbMatroska/ebml/unicodestring.rb
   trunk/RbMatroska/mkvinfo.rb
Log:
Added "update_size" for all classes.

Modified: trunk/RbMatroska/ebml/binary.rb
===================================================================
--- trunk/RbMatroska/ebml/binary.rb	2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/binary.rb	2004-09-12 10:07:43 UTC (rev 786)
@@ -16,6 +16,8 @@
 
 module Ebml
   class Binary < Element
+    attr_accessor :value
+
     def read(ef)
       @value = ef.io.read(@data_size)
       raise EOFError if (@value.size < @data_size)
@@ -27,6 +29,11 @@
       @value ||= Array.new
       return "[Binary size " + @data_size.to_s + "]"
     end
+
+    def update_size
+      @data_size = @value.size
+      return super
+    end
   end                           # class Binary
 
 end                             # module Ebml

Modified: trunk/RbMatroska/ebml/float.rb
===================================================================
--- trunk/RbMatroska/ebml/float.rb	2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/float.rb	2004-09-12 10:07:43 UTC (rev 786)
@@ -16,10 +16,18 @@
 
 module Ebml
   class Float < Element
+    attr_accessor :double_precision
+    attr_accessor :value
+
+    def initialize(id, pos, data_size, size_length)
+      super
+      @double_precision = data_size == 4
+    end
+
     def read(ef)
       ins = ef.io.read(@data_size)
       raise EOFError if (ins.size < @data_size)
-      @value = ins.unpack(@data_size == 4 ? "g" : "G")[0]
+      @value = ins.unpack(double_precision ? "g" : "G")[0]
 
       return self
     end
@@ -32,6 +40,11 @@
     def to_s
       return sprintf("%f", to_f)
     end
+
+    def update_size
+      @data_size = double_precision ? 4 : 8
+      return super
+    end
   end                           # class Float
 
 end                             # module Ebml

Modified: trunk/RbMatroska/ebml/master.rb
===================================================================
--- trunk/RbMatroska/ebml/master.rb	2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/master.rb	2004-09-12 10:07:43 UTC (rev 786)
@@ -19,7 +19,7 @@
     attr_reader :children
 
     def initialize(id, pos, data_size, size_length)
-      super(id, pos, data_size, size_length)
+      super
       @children = Array.new
     end
 
@@ -64,6 +64,26 @@
       @children.each { |c| s += c.to_s + " " }
       return s + "}"
     end
+
+    def update_size
+      @data_size = 0
+      @children.each { |c| @data_size += c.update_size + c.head_size }
+      return super
+    end
+
+    def push(c)
+      @children.push(c)
+      return self
+    end
+
+    def clear
+      @children = Array.new
+      return self
+    end
+
+    def master?
+      return true
+    end
   end                           # class Master
 
 end                             # module Ebml

Modified: trunk/RbMatroska/ebml/sinteger.rb
===================================================================
--- trunk/RbMatroska/ebml/sinteger.rb	2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/sinteger.rb	2004-09-12 10:07:43 UTC (rev 786)
@@ -16,6 +16,8 @@
 
 module Ebml
   class SInteger < Element
+    attr_accessor :value
+
     def read(ef)
       byte = ef.io.readchar
       if ((byte & 0x80) == 0x80)
@@ -40,6 +42,30 @@
     def to_s
       return to_i.to_s
     end
+
+    def update_size
+      @value ||= 0
+      if ((@value <= 0x7f) and (@value >= (-0x80)))
+        @data_size = 1
+      elsif ((@value <= 0x7fff) and (@value >= (-0x8000)))
+        @data_size = 2
+      elsif ((@value <= 0x7fffff) and (@value >= (-0x800000)))
+        @data_size = 3
+      elsif ((@value <= 0x7fffffff) and (@value >= (-0x80000000)))
+        @data_size = 4
+      elsif ((@value <= 0x7fffffffff) and (@value >= -0x8000000000))
+        @data_size = 5
+      elsif ((@value <= 0x7fffffffffff) and (@value >= -0x800000000000))
+        @data_size = 6
+      elsif ((@value <= 0x7fffffffffffff) and (@value >= -0x80000000000000))
+        @data_size = 7
+      else
+        @data_size = 8
+      end
+
+      return super
+    end
+      
   end                           # class SInteger
 end                             # module Ebml
 

Modified: trunk/RbMatroska/ebml/string.rb
===================================================================
--- trunk/RbMatroska/ebml/string.rb	2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/string.rb	2004-09-12 10:07:43 UTC (rev 786)
@@ -16,6 +16,8 @@
 
 module Ebml
   class String < Element
+    attr_accessor :value
+
     def read(ef)
       @value = ef.io.read(@data_size)
       raise DataError if (@value.size < @data_size)
@@ -27,6 +29,12 @@
       @value ||= ""
       return @value
     end
+
+    def update_size
+      @value ||= ""
+      @data_size = @value.size
+      return super
+    end
   end                           # class String
 
 end                             # module Ebml

Modified: trunk/RbMatroska/ebml/uinteger.rb
===================================================================
--- trunk/RbMatroska/ebml/uinteger.rb	2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/uinteger.rb	2004-09-12 10:07:43 UTC (rev 786)
@@ -16,6 +16,8 @@
 
 module Ebml
   class UInteger < Element
+    attr_accessor :value
+
     def read(ef)
       @value = 0
       1.upto(@data_size) do
@@ -34,6 +36,30 @@
     def to_s
       return to_i.to_s
     end
+
+    def update_size
+      @value ||= 0
+
+      if (@value <= 0xff)
+        @data_size = 1
+      elsif (@value <= 0xffff)
+        @data_size = 2
+      elsif (@value <= 0xffffff)
+        @data_size = 3
+      elsif (@value <= 0xffffffff)
+        @data_size = 4
+      elsif (@value <= 0xffffffffff)
+        @data_size = 5
+      elsif (@value <= 0xffffffffffff)
+        @data_size = 6
+      elsif (@value <= 0xffffffffffffff)
+        @data_size = 7
+      else
+        @data_size = 8
+      end
+
+      return super
+    end
   end                           # class UInteger
 
 end                             # module Ebml

Modified: trunk/RbMatroska/ebml/unicodestring.rb
===================================================================
--- trunk/RbMatroska/ebml/unicodestring.rb	2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/unicodestring.rb	2004-09-12 10:07:43 UTC (rev 786)
@@ -16,17 +16,6 @@
 
 module Ebml
   class UnicodeString < String
-    def read(ef)
-      @value = ef.io.read(@data_size)
-      raise DataError if (@value.size < @data_size)
-
-      return self
-    end
-
-    def to_s
-      @value ||= ""
-      return @value
-    end
   end                           # class UnicodeString
 
 end                             # module Ebml

Modified: trunk/RbMatroska/ebml.rb
===================================================================
--- trunk/RbMatroska/ebml.rb	2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml.rb	2004-09-12 10:07:43 UTC (rev 786)
@@ -15,7 +15,7 @@
 #
 
 module Ebml
-  def coded_size(s)
+  def Ebml.coded_size(s)
     if (s <= 0x0000007f)
       return 1
     elsif (s <= 0x00003fff)
@@ -87,12 +87,13 @@
     end
 
     def head_size
-      return @id.size + @size_length
+      return @id.size +
+        (@size_length == -1 ? Ebml.coded_size(@data_size) : @size_length)
+
     end
 
     def element_size
-      return @id.size + @data_size +
-        (@size_length == -1 ? Ebml.coded_size(@data_size) : @size_length)
+      return @data_size + head_size
     end
 
     def force_size_length(size_length)
@@ -113,6 +114,17 @@
       return sprintf("[%s @ 0x%08x size 0x%08x]", id.to_s, @pos,
                       @element_size)
     end
+
+    def update_size
+      return @data_size if (@size_length == -1)
+      coded_size = Ebml.coded_size(@data_size)
+      @size_length = coded_size if (coded_size > @size_length)
+      return @data_size
+    end
+
+    def master?
+      return false
+    end
   end
 
   require "ebml/binary"

Modified: trunk/RbMatroska/mkvinfo.rb
===================================================================
--- trunk/RbMatroska/mkvinfo.rb	2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/mkvinfo.rb	2004-09-12 10:07:43 UTC (rev 786)
@@ -21,11 +21,11 @@
   1.upto(level - 1) { print(" ") }
   print("+ ") if (level > 0)
   print(element.class.name.gsub(/^Ebml::/, "Ebml").gsub(/^Matroska::/, ""))
-  if (element.class.superclass != Ebml::Master)
+  if (!element.master?)
     print(" (" + element.to_s + ")")
   end
   puts(" at " + element.pos.to_s)
-  if (element.class.superclass == Ebml::Master)
+  if (element.master?)
     element.children.each { |c| dump_rec(c, level + 1) }
   end
 end
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.