Flash Player 9 Update 3の新しいフルスクリーンモードを試してみる

Flash Player 9.0.115からハードウェアアクセレーションが実装されましたが、未だにその描画処理の向上が分からずにいます。そこでFPSチェッカーを付けてH.264ビデオの再生パフォーマンスを比べてみました。



(960x540の画面、音声なし、ビデオは自作ものを使用、ビットレート10Mbps)


結果は続きにまとめています。



描画パフォーマンスの差

結果として残念なことにIntel Macがパフォーマンスが良かったのか、フレームレートの差はでませんでした。現在もいろいろなマシンで確認していますので追記予定ということでご了承ください。


Intel Mac, Core Duo 2GHz, メモリ 2GB, Safari 3.1, Flash Player 9.0.124, スクリーンサイズ1680x1050にて実験

  • Normal(通常のサイズで再生) : 20〜25fps
  • Standard Full Screen(fullScreenSourceRectを使わないフルスクリーン) : 30〜31fps
  • New Full Screen(fullScreenSourceRectを使うフルスクリーン) : 30〜31fps


ただし一つ分かったのが、ブラウザ通常画面で再生するよりフルスクリーンモードにしたほうがフレームレートが高く出ている点です。スタンドアロンで試したときはこんなに低い数字はでなかったので、プラグインとして動作するときは低くなる典型的な結果がでたということでしょうか。

画質の差

見比べてみると、ディザの処理に影響がでているのがわかります。


 
左は通常のフルスクリーン、右が新しいフルスクリーン。


特に注目したいのが斜め線の処理です。通常のフルスクリーンはビデオディスプレイのwidth/heightを画面サイズに合わしているので単純な拡大処理(ニアレストネイバー法に近い?)印象で、新しいフルスクリーンはバイキュービック的(?)な拡大をしている印象です。

新しいフルスクリーンではコンポーネントも拡大

新しいフルスクリーンの方が、滑らかに見える点でアドバンテージがあると思いますが、一緒にコンポーネントも拡大されてしまうのが難点です。


 
左は通常のフルスクリーン、右が新しいフルスクリーン。(同拡大率のキャプチャです)


コンポーネントのスケールを拡大率の逆数を適用すれば同率サイズで見える気もしますが、それはそれで微妙な気もします。何か良い解決方法を探っていきたいです。

最後にソースコードです。

FPSチェッカーはhttp://level0.cuppy.co.jp/2008/04/displacementmapfilter_3.phpから拝借させて頂きました。ありがとうございます。


Flex 3 SDKを使ってパブリッシュしています。


     
     
          import flash.display.Stage;
          import flash.display.StageDisplayState;
          
          private const MOVIE_PATH   :String = "my_movie.mp4";
          private const MOVIE_WIDTH  :int    = 960;
          private const MOVIE_HEIGHT :int    = 540;
          
          // Normal Play Mode
          private function playNormalScreen():void
          {
               vd.play();
               vs.selectedIndex = 1;
          }
          
          // Standard Full Screen Play Mode
          private function playDefaultFullScreen():void
          {
               vd.play();
               vs.selectedIndex = 1;
               
               stage.fullScreenSourceRect = null;
               stage.displayState = StageDisplayState.FULL_SCREEN;
               
               vd.width = stage.stageWidth;
               vd.height = stage.stageHeight;
          }
          
          // New Full Screen Play Mode
          private function playNewFullScreen():void
          {
               vd.play();
               vs.selectedIndex = 1;
               
               stage.fullScreenSourceRect = new Rectangle(0, 0, MOVIE_WIDTH, MOVIE_HEIGHT);
               stage.displayState = StageDisplayState.FULL_SCREEN;
          }
          
          // Pause
          private function pause():void
          {
               vd.pause();
               vs.selectedIndex = 0;
               
               vd.width = MOVIE_WIDTH;
               vd.height = MOVIE_HEIGHT;
               
               stage.displayState = StageDisplayState.NORMAL;
          }
     
     
     
     
     
          
          
               
               
               
          
          
          
               
          
          
     
     
     
     
     

※フレームレートは30でコンパイルしています。
はてなダイアリーの仕様でXML宣言とCDATAセクションを省略しています。