スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« MP4 to AGMも可能に | トップページ | MP4変換も高速化されたが »

Windows版よりも速い

今は、Mac用AGMPlayerの開発フェーズで、今週は、AVFoundationを使ったmp4/agm変換ツールを作っていたのだが、今日は、AVFoundationからYUV形式で画像データを取得してAGMエンコーダーを動作させる格好にしてみた。その結果、少し高速化されたのだが。

YUV形式と一言で言っても、実は、色々なモノがあって、ネットを見ていても、YUV444だとか、YUV422だとか、YUV420なんかの呼び名が出てくる筈だ。

で、この444/422/420というのは、色情報をどれだけ省いているかを示しているのだが、作者的に良く書いているYV12という形式は、色情報的には、YUV420と同じ感じになっている。

具体的には、444というのは、各ピクセルに対して色情報を持つのだが、422というのは、横方向に対しては2ピクセルに一つしか持たず、420に至っては、横方向にも縦方向にも2ピクセルに一つしか色情報を持たない。

つまり、YV12形式というのは、4ピクセルに一つしか色情報を持たないので、RGB形式と比べると画質が劣化するのだが、世の中的に広く受け入れられているMPEG2だとかH.264でも、色情報は同じだけしか持たされていない。

なので、mp4ファイルをデコードさせた場合、AVFoundationからYUV形式で画像を出力させるとYUV420形式のデータが出力されるのだが、再度書くと、YUV形式には色々なモノがある訳だ。

何故、再度書くのか、というと、同じYUV420形式でも、AVFoundationが出力して来るデータフォーマットとAGMエンコーダーが受け入れるデータフォーマットは異なるからだ。

AGMエンコーダーが使っているYUV420データは、輝度情報と二つの色情報は全て独立メモリ領域に置かれている必要があるのだが、AVFoundationから出力されるデータは、輝度情報は独立しているのだが、二つの色情報はセットになっている。

つまり、AGMエンコーダーでは、YYYY・・UU・・VVみたいな並びになっている必要があるのだが、AVFoundationでは、YYYY・・・UVUV・・・みたいな並びになっている訳だ。

AGMエンコーダーの並びが前述の様になっているのは、その方がエンコードがやり易いからなのだが、WindowsのMedia Foundationでは、同様な感じの並びが選択できたのでデータの並べ替えは不要だった。

これに対して、AVFoundationの出力は上記の通りなので、AGMエンコーダーに入力するためには、データの並べ替えが必要になる分、不利な感じではある。

それでも、現時点ではSSE命令を使わずに、単純に並べ替えを行うルーチンを使ってみているのだが、RGBA出力させる場合よりも、高速にエンコード出来ている。

具体的には、昨日書いた15分のmp4フルHD動画をAGM3-DCT+にエンコードするのに、RGBA出力時には8分30秒かかっていたのだが、現時点では7分30秒になっていて、前述の通りなので、並び替え処理を最適化すれば、更にもう少しは高速化される筈だ。

と、いう事で、やはり、AVFoundationからはYUV出力させた方が高速化できるのだが、これは相対値なので、現行のWindows版AGMPlayerでは、どの程度の速度が出るのかも見てみた。

その結果、同じmp4ファイルを同じAGM3-DCT+にエンコードさせてみたのだが、同じMac mini Late2014上で、10分30秒かかった。

つまり、Windows版AGMPlayerでのエンコードはOSX上でのエンコードと比べて3割程度遅いのだが、その理由を調べてみた所、恐らく、Media Foundationからのデータ出力が遅いのが原因だと思われた。

何故なら、昨日書いた様に、AVFoundation版では、15分のmp4フルHD動画を全てデコードさせるのに2分しかかからなかったのだが、Windows版でも開発環境で同様の処理を行わせてみた所、5分くらいかかったからだ。

つまり、Windows版では、再生時にはGPU支援が働くのだが、ファイルからの読出し時には、純粋なソフト処理になっている感じなので、mp4のデコードが重く、その分、Windows版でのmp4→agmのエンコードは遅くなっている感じな訳だ。

逆に言うと、AVFoundationでは、ファイルからの読出し時にも、mp4デコード時には、何等かのGPU支援が行われているのかもしれない。

ちなみに、AGM形式にはAGM-YV12形式もあるのだが、ファイル内のデータの並びは上記の何れとも異なっている。

具体的には、YYYYUVYYYYUV・・・みたいに、色情報が同じ4ピクセル分のデータを1セットとして全画像分を順番に並べている。

色情報的には同じYV12形式を内部的に利用しているAGM-DCT/DCT+では、前述の様な並びを採用しているにも関わらず、何故、AGM-YV12形式では、前述の様な並びになっているのか、というと、YV12形式ではDCT変換が不要だからだ。

つまり、DCT変換では、UとVは独立して変換されるので、別メモリにあった方が扱いやすいのだが、単純にYUV⇔RGB変換するのなら、同じ変換を行うデータは近所にあった方が扱いやすいので、AGM-YV12では、前述の様な並びになっている訳だ。

と、いう事で、YUV形式には、色々なモノがあるので、RGBA形式と比べると、扱う時には苦労させられる事も多いかもしれない。

なお、AGM形式では、前述の様に、YUV形式としては色情報が劣化するYUV420しか選択できないのだが、その代わり、劣化のないRGB形式もサポートしている。

で、作者製ソフトでは、YUV形式としてはYUV420だけしか使っていないのか、というと、Mirror-DTCの映像/ストリーミング圧縮では、高画質では、やはりYUV420を使っているのだが、最高画質では、YUV444を使っている。

なので、YUV420がYUV444と比べてどの程度の画質劣化があるのかを知りたい人は、Mirror-DTCを使ってみると良いかもしれない。

« MP4 to AGMも可能に | トップページ | MP4変換も高速化されたが »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/64451573

この記事へのトラックバック一覧です: Windows版よりも速い:

« MP4 to AGMも可能に | トップページ | MP4変換も高速化されたが »

2017年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google