]> source.dussan.org Git - tigervnc.git/commitdiff
[Development] Loading index data from the .fbi file.
authorConstantin Kaplinsky <const@tightvnc.com>
Fri, 20 Jun 2008 06:44:03 +0000 (06:44 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Fri, 20 Jun 2008 06:44:03 +0000 (06:44 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2599 3789f03b-4d11-0410-bbf8-ca57d06f2519

java/src/com/tightvnc/rfbplayer/FbsConnection.java
java/src/com/tightvnc/rfbplayer/FbsEntryPoint.java [new file with mode: 0644]

index 66e12c75cda5a583f5d5a735f6058478f56e8ab5..96b3c44a57ef4c45614ae70e2eba97e097e59545 100644 (file)
@@ -25,6 +25,7 @@ package com.tightvnc.rfbplayer;
 
 import java.io.*;
 import java.net.*;
+import java.util.Vector;
 import java.applet.Applet;
 
 public class FbsConnection {
@@ -33,6 +34,9 @@ public class FbsConnection {
   URL fbiURL;
   URL fbkURL;
 
+  /** Index data read from the .fbi file. */
+  Vector idx;
+
   FbsConnection(String fbsLocation, String indexLocationPrefix, Applet applet)
       throws MalformedURLException {
 
@@ -53,6 +57,7 @@ public class FbsConnection {
     }
 
     // Try to load the .fbi index file.
+    idx = null;
     loadIndex();
   }
 
@@ -85,22 +90,23 @@ public class FbsConnection {
         }
 
         // Load index from the .fbi file.
-        // FIXME: Real loading is not implemented yet.
-        int numRecords = 0;
+        Vector newIndex = new Vector();
+        FbsEntryPoint record = new FbsEntryPoint();
         try {
           while (true) {
-            is.readInt();
-            is.readInt();
-            is.readInt();
-            is.readInt();
-            is.readInt();
-            numRecords++;
+            record.timestamp = is.readInt();
+            record.key_fpos = is.readInt();
+            record.key_size = is.readInt();
+            record.fbs_fpos = is.readInt();
+            record.fbs_skip = is.readInt();
+            newIndex.add(record);
           }
         } catch (EOFException e) {
         } catch (IOException e) {
           System.err.println("Warning: Index data may be incomplete");
         }
-        System.err.println("Loaded index data, " + numRecords + " records");
+        idx = newIndex;
+        System.err.println("Loaded index data, " + idx.size() + " records");
       } catch (IOException e) {
         System.err.println("Warning: I/O exception while loading index: " + e);
         System.err.println("Warning: failed to load .fbi, not using index");
diff --git a/java/src/com/tightvnc/rfbplayer/FbsEntryPoint.java b/java/src/com/tightvnc/rfbplayer/FbsEntryPoint.java
new file mode 100644 (file)
index 0000000..9b49758
--- /dev/null
@@ -0,0 +1,68 @@
+//
+//  Copyright (C) 2008 Wimba, Inc.  All Rights Reserved.
+//
+//  This is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation; either version 2 of the License, or
+//  (at your option) any later version.
+//
+//  This software is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this software; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+//  USA.
+//
+
+//
+// FbsEntryPoint.java
+//
+
+package com.tightvnc.rfbplayer;
+
+/**
+ * Representation of an individual record of the .fbi (FrameBuffer Index) file.
+ * It includes data that constitutes an entry point to indexed framebuffer
+ * stream at a particular time offset.
+ *
+ * @author Constantin Kaplinsky
+ */
+public class FbsEntryPoint {
+
+  /**
+   * Timestamp in milliseconds corresponding to the keyframe data.
+   * 32-bit unsigned integer.
+   */
+  public long timestamp;
+
+  /**
+   * Keyframe position in the respective .fbk file, offset in bytes from the
+   * very beginning of the file. It should point to the byte counter of an FBS
+   * data block. 32-bit unsigned integer.
+   */
+  public long key_fpos;
+
+  /**
+   * Keyframe data size in the respective .fbk file, in bytes. 32-bit unsigned
+   * integer.
+   */
+  public long key_size;
+
+  /**
+   * Position of the next update in the .fbs file, offset in bytes from the
+   * very beginning of the file. It should point to the byte counter of an FBS
+   * data block. 32-bit unsigned integer.
+   */
+  public long fbs_fpos;
+
+  /**
+   * Offset in the FBS data block referenced by fbs_fpos. It allows addressing
+   * those updates that begin not on the data block boundary. 32-bit unsigned
+   * integer.
+   */
+  public long fbs_skip;
+
+}