diff chapter4.tex @ 3:63ae5aaa2a7a

update
author oc
date Sat, 14 Feb 2015 14:25:36 +0900
parents dc17ac172c7d
children 14e96778c600
line wrap: on
line diff
--- a/chapter4.tex	Sun Feb 08 17:49:22 2015 +0900
+++ b/chapter4.tex	Sat Feb 14 14:25:36 2015 +0900
@@ -1,53 +1,91 @@
 \chapter{TreeVNC の新機能}
 
-\section{画面サイズ調整機能}
+
+\section{表示画面サイズ調整機能}
+TreeVNC は、配信側の解像度を配信するので画質が荒くなることはない。
+しかし、配信側とクライアントで画面サイズに差がある場合、
+画面に入らない、或いは表示画面が小さすぎる等の問題が生じる。
+
+今までは、ユーザが viewer に用意されている拡大・縮小ボタンを使用し調整していた。
+
+今回、ビューワに HD ボタンと fit screen ボタンを追加した。
+HD ボタンを押すと、画面サイズが 1920x1080 サイズに拡大・縮小される。
+fit screen ボタンを押すと、クライアントの画面サイズに合わせてフルサイズで拡大・縮小される。
+
+更に、rootとして起動し viewer も表示される -d オプションを使用した場合は、
+表示される画面が常にフルサイズに調整されるよう実装した。
+
+
+\section{配信画面サイズ指定機能}
 
 配信する画面サイズを指定できるオプションを追加した。
-TreeVNC 起動時にオプション(--fixSize)を追加することによって、
+TreeVNC 起動時にオプション(${\mathchar`-}$${\mathchar`-}$fixSize)を追加することによって、
 指定した幅・高さの画面サイズのみを配信することができる。
+起動方法をソースコード\ref{fixsize}に記述する。
+
+\begin{lstlisting}[caption=オプション--fixSize,label=fixsize]
+  $ java -jar TreeVNC.java -d --fixSize 1920 1080
+\end{lstlisting}
 
 VNCServer からは、配信する側の画面全体のデータが送信される。
-画面データを root が受信し、接続されている node に画面データを送信する。
+root は指定したサイズ領域のデータのみを表示するため、
+領域内の更新のみを node に送信し、領域内のみを描画している。
+そして、VNCServer へ更新データを要求する際は、
+領域内のみの画像データを要求する。
+これにより、node に指定された領域以外は表示されない。
 
-指定した画面サイズのデータのみを表示する方法として、
-画面全体のデータを受信する root 側で指定した画面サイズの領域内の更新のみをフィルタリングする。
-フィルタリングされた画面データを node は受信するので、指定された領域以外は表示されない。
 
 \newpage
 
+
 \section{マルチディスプレイ対応}
 
-画面配信側がマルチディスプレイの場合、
-VNCServer からは全画面データが送信されるので複数の画面が共有される。
-しかし、プレゼンテーションの際にスライドを全画面で表示する等、複数枚の画面表示が要らない場面がある。
-一画面のみをフィルタリングするオプション機能(--filterSingleDisplay)を追加した。
+画面配信側がマルチディスプレイの場合でも、
+VNCServer からは全画面データが送信されるので、
+配信側の保持している画面全てが共有される。
+しかし、プレゼンテーションを行う際、複数枚の画面表示が要らない場合がある。
+
+そこで、一画面のみをフィルタリングし表示するためのオプション機能(${\mathchar`-}$${\mathchar`-}$filterSingleDisplay)を追加した。
 オプションを追加した起動方法をソースコード\ref{filtersingledisplay}に記述する。
 
 \begin{lstlisting}[caption=オプション--filterSingleDisplay,label=filtersingledisplay]
   $ java -jar TreeVNC.java -d --filterSingleDisplay
 \end{lstlisting}
 
+root は全画面データから一画面のみをフィルタリングする必要がある。
+シングルディスプレイサイズは、個々のクライアントでしか取得できない。
+配信側は画面切り替えを行う際に、シングルディスプレイサイズを取得する。
+そして、画面切り替えを行う際に root へ送信する serverChangeRequset message に
+シングルディスプレイサイズを付加する。
+
+root はメッセージを受け取り initData を変更する。
+本来 initData は、RFB プロトコルで行われる通信中に VNCServer から受信する ServerInit message から生成される。
+マルチディスプレイの場合、ServerInit message をそのまま使用すると、複数画面全体を描画してしまう。
+それを避けるため、initData をシングルディスプレイサイズ用に生成し直す(oritinalInitData)。
+そして、接続されている node へも originalInitData を送信する(図\ref{fig:initdata})。
 
 \begin{figure}[htpd]
   \begin{center}
-    \includegraphics[scale=0.4]{./images/chapter4/flameDisplaySizeFilterVer.pdf}
+    \includegraphics[scale=0.8]{./images/chapter4/sendInitData.pdf}
   \end{center}
-  \caption{}
-  \label{fig:}
+  \caption{シングルディスプレイサイズ用の initData}
+  \label{fig:initdata}
 \end{figure}
 
+さらに VNCServer から送信されてきた全画面データをそのまま node に流すのではなく、
+シングルディスプレイサイズの領域の更新部分のみを root 側でフィルタリングし流す。
 
-\begin{figure}[htpd]
-  \begin{center}
-    \includegraphics[scale=0.4]{./images/chapter4/sendInitData.pdf}
-  \end{center}
-  \caption{}
-  \label{fig:}
-\end{figure}
+これにより、一画面のみの表示が可能となる。
 
 
 \newpage
 
+
+\section{Retina のマルチディスプレイ対応}
+
+
+
+
 \section{遠隔地からの接続}
 
 \begin{figure}[htpd]