From: Constantin Kaplinsky Date: Fri, 20 Jun 2008 06:44:03 +0000 (+0000) Subject: [Development] Loading index data from the .fbi file. X-Git-Tag: v0.0.90~432 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ade425aed45451eaec73c13f0d001c3014e3b253;p=tigervnc.git [Development] Loading index data from the .fbi file. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2599 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- diff --git a/java/src/com/tightvnc/rfbplayer/FbsConnection.java b/java/src/com/tightvnc/rfbplayer/FbsConnection.java index 66e12c75..96b3c44a 100644 --- a/java/src/com/tightvnc/rfbplayer/FbsConnection.java +++ b/java/src/com/tightvnc/rfbplayer/FbsConnection.java @@ -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 index 00000000..9b497584 --- /dev/null +++ b/java/src/com/tightvnc/rfbplayer/FbsEntryPoint.java @@ -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; + +}