08/03/28 21:03:36 GH4Zs98Z0
mplayerの負荷についてちょっと調べてみた。ソースの色空間はYV12。
-vo quartzだと
YV12出力: QuickTimeで色空間がYUY2に変換される (1)
YUY2出力: mplayerで色空間がYUY2に変換された後 (2)、QuickTimeでガンマ調整される (3)
-vo macosxだと
YV12出力: 不可
YUY2出力: mplayerで色空間がYUY2に変換される (2)
つまり、デコードの負荷以外に(1),(2),(3)の負荷があり、それがそこそこの割合を占めている。
そこで、それぞれの負荷を減らす方法を考えた。なお、デフォルトで比較すると
負荷は-vo quartz(YV12) < -vo macosx(YUY2) ≦ -vo quartz(YUY2) の順で小さい。
(1)の負荷はQuickTime内の関数によるものなので、ユーザは手を出せない。
つまり減らせない。
(2)の負荷はmplayerの-swsオプションで調整可能。-sws 0にすると
デフォルトより軽くなり、-vo quartz(YV12)と-vo macosx(YUY2)の負荷が
同じ程度になる。x86用のコードでは-sws 0の色空間変換フィルタが
MMXで実装されているが、SSE2の変換フィルタを実装してみたところ、
若干負荷は下がったものの劇的な効果はなかった。
(3)の負荷はvo_quartz.cに1行追加し、ソースのガンマ値を維持するように
指定すれば0にできる。-vo quartz(YUY2)は-sws 0とこれを併用する事で
-vo quartz(YV12)よりも負荷を下げる事ができた。
この結果、最終的な負荷は-vo quartz(YUY2) < -vo quartz(YV12) ≒ -vo macosx(YUY2) となった。