[matroska] r864 - in trunk/JEBML/src/org/ebml: . matroska sample

[email protected]
Newsgroups gmane.comp.multimedia.matroska.cvs
Message-ID <[email protected]>
Author: jcsston
Date: 2004-10-05 06:46:31 +0400 (Tue, 05 Oct 2004)
New Revision: 864

Modified:
   trunk/JEBML/src/org/ebml/BinaryElement.java
   trunk/JEBML/src/org/ebml/Element.java
   trunk/JEBML/src/org/ebml/matroska/MatroskaBlock.java
   trunk/JEBML/src/org/ebml/matroska/MatroskaFileWriter.java
   trunk/JEBML/src/org/ebml/sample/CommandLineSample.java
Log:
Removed some duplicate code.
Fixed unsigned ebml int size calculation.

Modified: trunk/JEBML/src/org/ebml/BinaryElement.java
===================================================================
--- trunk/JEBML/src/org/ebml/BinaryElement.java	2004-10-04 08:49:47 UTC (rev 863)
+++ trunk/JEBML/src/org/ebml/BinaryElement.java	2004-10-05 02:46:31 UTC (rev 864)
@@ -90,137 +90,4 @@
   public static int getMinSizeLength() {
     return MIN_SIZE_LENGTH;
   }
-
-  public static byte[] makeEbmlCode(byte[] typeID, long size) {
-    int codedLen = codedSizeLength(size);
-    byte[] ret = new byte[typeID.length + codedLen];
-    org.ebml.util.ArrayCopy.arraycopy(typeID, 0, ret, 0, typeID.length);
-    byte[] codedSize = makeEbmlCodedSize(size);
-    org.ebml.util.ArrayCopy.arraycopy(codedSize, 0, ret, typeID.length, codedSize.length);
-    return ret;
-  }
-
-  public static byte[] makeEbmlCodedSize(long size) {
-    int len = codedSizeLength(size);
-    byte[] ret = new byte[len];
-    System.out.println("Coding " + size + " in " + len + "bytes...");
-    //byte[] packedSize = packIntUnsigned(size);
-    long mask = 0x00000000000000FFL;
-    for (int i = 0; i < len; i++) {
-      ret[len - 1 - i] = (byte)((size & mask) >>> (i * 8));
-      System.out.print(" " + Integer.toHexString(ret[len - 1 - i]) + " ");
-      mask <<= 8;
-    }
-    System.out.print("\n");
-    //The first size bits should be clear, otherwise we have an error in the size determination.
-    ret[0] |= (0x80 >> (len - 1));
-    return ret;
-  }
-
-  public static int getMinByteSize(long value) {
-    if (value <= 127 && value >= (0 - 0x0080)) {
-      return 1;
-    }
-    else if (value <= 0x007FFF && value >= (0 - 0x008000)) {
-      return 2;
-    }
-    else if (value <= 0x007FFFFF && value >= (0 - 0x00800000L)) {
-      return 3;
-    }
-    else if (value <= 0x007FFFFFFF && value >= (0 - 0x0080000000L)) {
-      return 4;
-    }
-    else if (value <= 0x007FFFFFFFFFL && value >= (0 - 0x008000000000L)) {
-      return 5;
-    }
-    else if (value <= 0x007FFFFFFFFFFFL && value >= (0 - 0x00800000000000L)) {
-      return 6;
-    }
-    else if (value <= 0x007FFFFFFFFFFFFFL && value >= (0 - 0x80000000000000L)) {
-      return 7;
-    }
-    else {
-      return 8;
-    }
-    /* long mask = 0xFF00000000000000L;
-             for(int i = 0; i < 8; i++){
-        if((value & mask) == mask){
-            //Skip
-        }else if((value & mask) == 0x0000000000000000L){
-            //Skip
-        }else{
-         if((i == 0) && ((value & 0x8000000000000000L) == 0x8000000000000000L)){
-                //Skip
-            }else{
-                return (8-i);
-            }
-        }
-        mask >>>= 8;
-             }
-             return 8;*/
-  }
-
-  public static int getMinByteSizeUnsigned(long value) {
-    int size = 8;
-    long mask = 0xFF00000000000000L;
-    for (int i = 0; i < 7; i++) {
-      if ((value & mask) == 0) {
-        mask >>>= 8;
-        size--;
-      }
-      else {
-        return size;
-      }
-    }
-    return 8;
-  }
-
-  public static int codedSizeLength(long value) {
-    int codedSize = 0;
-    if (value < 127) {
-      codedSize = 1;
-    }
-    else if (value < 16383) {
-      codedSize = 2;
-    }
-    else if (value < 2097151) {
-      codedSize = 3;
-    }
-    else if (value < 268435455) {
-      codedSize = 4;
-    }
-    if ((MIN_SIZE_LENGTH > 0) && (codedSize <= MIN_SIZE_LENGTH)) {
-      codedSize = MIN_SIZE_LENGTH;
-    }
-    else {
-      codedSize = 8;
-    }
-    return codedSize;
-  }
-
-  public static byte[] packIntUnsigned(long value) {
-    int size = getMinByteSizeUnsigned(value);
-    byte[] ret = new byte[size];
-    long mask = 0x00000000000000FFL;
-    for (int i = 0; i < size; i++) {
-      ret[size - 1 - i] = (byte)((value & mask) >>> (8 * i));
-      mask <<= 8;
-    }
-    return ret;
-  }
-
-  public static byte[] packInt(long value) {
-    int size = getMinByteSize(value);
-    byte[] ret = new byte[size];
-    long mask = 0x00000000000000FFL;
-    for (int i = 0; i < size; i++) {
-      ret[size - 1 - i] = (byte)((value & mask) >>> (8 * i));
-      mask <<= 8;
-    }
-
-    /*if(value < 0){
-        ret[0] |= 0x80; //Preserve Sign bit
-             }*/
-    return ret;
-  }
 }

Modified: trunk/JEBML/src/org/ebml/Element.java
===================================================================
--- trunk/JEBML/src/org/ebml/Element.java	2004-10-04 08:49:47 UTC (rev 863)
+++ trunk/JEBML/src/org/ebml/Element.java	2004-10-05 02:46:31 UTC (rev 864)
@@ -126,7 +126,7 @@
   {
     long totalSize = 0;
     totalSize += getType().length;
-    totalSize += Element.EBMLCodedSizeLength(getSize());
+    totalSize += Element.codedSizeLength(getSize());
     totalSize += getSize();    
     return totalSize;
   }
@@ -248,9 +248,9 @@
   public static int getMinByteSizeUnsigned(long value) {
     int size = 8;
     long mask = 0xFF00000000000000L;
-    for (int i = 0; i < 7; i++) {
+    for (int i = 0; i < 8; i++) {
       if ((value & mask) == 0) {
-        mask >>>= 8;
+        mask = mask >>> 8;
         size--;
       }
       else {
@@ -283,57 +283,22 @@
     return codedSize;
   }
 
-  public static int EBMLCodedSizeLength(long value) {
-    int codedSize = 0;
-    if (value < 127) {
-      codedSize = 1;
-    }
-    else if (value < 16383) {
-      codedSize = 2;
-    }
-    else if (value < 2097151) {
-      codedSize = 3;
-    }
-    else if (value < 268435455) {
-      codedSize = 4;
-    }
-
-    return codedSize;
-  }
-
-  public static int EBMLSignedCodedSizeLength(long value) {
-    int codedSize = 0;
-    if (value < 127) {
-      codedSize = 1;
-    }
-    else if (value < 16383) {
-      codedSize = 2;
-    }
-    else if (value < 2097151) {
-      codedSize = 3;
-    }
-    else if (value < 268435455) {
-      codedSize = 4;
-    }
-
-    return codedSize;
-  }
-
   public static byte[] packIntUnsigned(long value) {
     int size = getMinByteSizeUnsigned(value);
-    byte[] ret = new byte[size];
-    long mask = 0x00000000000000FFL;
-    for (int i = 0; i < size; i++) {
-      ret[i] = (byte)((value & mask) >>> (8 * i));
-    }
-    return ret;
+    return packInt(value, size);
   }
 
   public static byte[] packInt(long value) {
     int size = getMinByteSize(value);
+    return packInt(value, size);
+  }
+
+  public static byte[] packInt(long value, int size) 
+  {    
     byte[] ret = new byte[size];
     long mask = 0x00000000000000FFL;
-    for (int i = 0; i < size; i++) {
+    for (int i = 0; i < size; i++) 
+    {
       ret[i] = (byte)((value & mask) >>> (8 * i));
     }
     return ret;

Modified: trunk/JEBML/src/org/ebml/matroska/MatroskaBlock.java
===================================================================
--- trunk/JEBML/src/org/ebml/matroska/MatroskaBlock.java	2004-10-04 08:49:47 UTC (rev 863)
+++ trunk/JEBML/src/org/ebml/matroska/MatroskaBlock.java	2004-10-05 02:46:31 UTC (rev 864)
@@ -29,7 +29,7 @@
   public void parseBlock(DataSource source) {
 
     TrackNo = (int)EBMLReader.readEBMLCode(source);
-    HeaderSize += Element.EBMLCodedSizeLength(TrackNo);
+    HeaderSize += Element.codedSizeLength(TrackNo);
 
     short BlockTimecode1 = (short)(source.readByte() & 0xFF);
     short BlockTimecode2 = (short)(source.readByte() & 0xFF);

Modified: trunk/JEBML/src/org/ebml/matroska/MatroskaFileWriter.java
===================================================================
--- trunk/JEBML/src/org/ebml/matroska/MatroskaFileWriter.java	2004-10-04 08:49:47 UTC (rev 863)
+++ trunk/JEBML/src/org/ebml/matroska/MatroskaFileWriter.java	2004-10-05 02:46:31 UTC (rev 864)
@@ -10,6 +10,7 @@
  */
 public class MatroskaFileWriter
 {
+  static public long TIMECODE_SCALE = 1000000;
   protected DataWriter ioDW;
   protected MatroskaDocType doc = new MatroskaDocType();
 
@@ -43,4 +44,33 @@
     segementElem.setSize(-1);
     segementElem.writeHeaderData(ioDW);
   }
+
+  public void writeSegementInfo()
+  {
+    MasterElement segementInfoElem = (MasterElement)doc.createElement(doc.SegmentInfo_Id);
+    
+    StringElement writingAppElem = (StringElement)doc.createElement(doc.WritingApp_Id);
+    writingAppElem.setValue("MatroskaFileWriter v1.0");
+
+    StringElement muxingAppElem = (StringElement)doc.createElement(doc.MuxingApp_Id);
+    muxingAppElem.setValue("JEBML v1.0");
+
+    DateElement dateElem = (DateElement)doc.createElement(doc.DateUTC_Id);
+    dateElem.setDate(new Date());
+		
+    //Add timecode scale
+    UnsignedIntegerElement timecodescaleElem = (UnsignedIntegerElement)doc.createElement(doc.TimecodeScale_Id);
+    timecodescaleElem.setValue(TIMECODE_SCALE);
+										
+    FloatElement durationElem = (FloatElement)doc.createElement(doc.Duration_Id);
+    durationElem.setValue(-1);
+	 
+    segementInfoElem.addChildElement(dateElem);
+    segementInfoElem.addChildElement(timecodescaleElem);
+    segementInfoElem.addChildElement(durationElem);
+    segementInfoElem.addChildElement(writingAppElem);
+    segementInfoElem.addChildElement(muxingAppElem);
+
+    segementInfoElem.writeElement(ioDW);
+  }
 }

Modified: trunk/JEBML/src/org/ebml/sample/CommandLineSample.java
===================================================================
--- trunk/JEBML/src/org/ebml/sample/CommandLineSample.java	2004-10-04 08:49:47 UTC (rev 863)
+++ trunk/JEBML/src/org/ebml/sample/CommandLineSample.java	2004-10-05 02:46:31 UTC (rev 864)
@@ -99,6 +99,7 @@
     MatroskaFileWriter mFW = new MatroskaFileWriter(iFW);
     mFW.writeEBMLHeader();
     mFW.writeSegementHeader();
+    mFW.writeSegementInfo();
 
     System.out.println("Write complete");
   }
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.