スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 再生デバイス変更も可能 | トップページ | サーバーが勝手にスリープ? »

エンコード時の色問題も解決

今は、macOS用ネイティブ版AGMPlayerの開発フェーズで、Windows版のストリーム録画機能を除いた機能は実装できたので、このレベルでリリースする事にして使い込みを行いつつ、最終調整中なのだが、今回、エンコード時の色問題も解決した。

エンコード時の色問題というのは何なのか、というと、例えば、QuickTime Playerで画面収録したmovファイルをAGMPlayerを使ってmp4に再エンコードすると、出力されるmp4ファイルの映像が、全体的に、赤みがかった感じになってしまう、というモノだ。

もっとも、上記の問題は、mp4に再エンコードする場合に顕著なのだが、movファイルをAGM形式に再エンコードする場合にも、赤みは少ないものの、傾向的には同様になる。

また、AGM形式動画をmp4形式に再エンコードする場合にも、赤みは少ないものの、同様の傾向は現れるのだが、AGM形式動画をAGM形式動画に再エンコードする場合には、そういう傾向は現れない。

と、言う事で、今日は、上記の様な現象が発生する原因を調査してみたのだが、AGMPlayerでは、動画のエンコード時にAGM-DCT+へのエンコードを最高速に行える様に、内部的にはソース動画の映像形式を変換しているのだが、原因は、この変換ルーチンにある事が判った。

具体的には、このルーチンでは、処理を高速化するためにSSE2の整数演算を多用しているのだが、各データを16Bit幅で単純処理していたので演算精度が低くなっていたのが原因だった訳だ。

つまり、この処理ルーチン内ではYUV↔︎RGB変換なんかも行うのだが、その時には、通常の計算式では少数点を持つ数値との掛け算も必要になるので、SSE2の整数演算時には、値に一定値を掛けてから掛け算を行ったりしている。

しかし、この時に掛ける値を一定にしていたため、結果的に、小さい少数値を掛け算する場合に、その掛け算値の有効数字が低くなったので、総合的な演算精度が出なくなっていた訳だ。

と、言う事なので、対策としては、整数演算は継続しつつ、計算式によって、上記の掛け算値を変更する事で、小さい値の少数値を掛ける必要がある式でも、その有効数字が極端に低下するのを防ぐ格好にした。

上記の変更により、内部的にAVFoundationの映像情報と内部的な映像情報を相互変換する時に赤みがかった色になってしまう、という問題は、実際問題としては、解決した。

実際問題として、というのはどういう事なのか、というと、色変換を16Bitの整数演算で行なっているのは変わらないので、浮動小数点演算を行う場合と比べれば、改良後でも、それなりの演算誤差は出ている筈だからだ。

にも関わらず、問題が解決した、と、書いているのは、普通に浮動小数点演算を行う処理ルーチンを別途作成し、その処理ルーチンを使ってエンコードした場合と、改良ルーチンを使ってエンコードした場合の出力映像を見比べてみて、少なくとも作者的には、その違いが判らない、という事が判ったからだ。

当然のことながら、コンピュータに数値分析させれば、違いはある筈なのだが、映像を再エンコードする場合には、その他の箇所でも、オリジナル映像との違いを発生させる。

なので、人間的に、見比べて違いが判らないのであればOk、という事にした訳だ。

ちなみに、この問題についても、ある意味、AVFoundationの扱い方の問題になるので、既にリリース済みのAGMConv/AG-ムービーカッターでも同様の問題が発生する。

なので、これらについても、修正する予定なのだが、何故、これらのリリース時には問題に気がつかず、今回、気がついているのか、というと、MacBook Pro 15インチ 2016モデルを使って評価を行なっている、というのが大きいかもしれない。

つまり、MacBook Pro 15インチ 2016モデルの液晶は発色が良いので、エンコード後の色の違いなんかも、はっきりと認識できた訳だ。

« 再生デバイス変更も可能 | トップページ | サーバーが勝手にスリープ? »

トラックバック

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

この記事へのトラックバック一覧です: エンコード時の色問題も解決:

« 再生デバイス変更も可能 | トップページ | サーバーが勝手にスリープ? »

2017年10月
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 31        

広告

プライバシーポリシー

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

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

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

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