トップページ > 記事閲覧
ogv 動画再生について
名前:wstn 日時: 2016/02/05 21:31

DXLIB 3.16 でmp4をogv変換( ffmpeg2theora -v 10 *.mp4 )して再生しているのですが ブロックノイズ?や一部色相違いのような映像が出てしまいます。 chromeブラウザで再生すると元のmp4に近い再生ができるので ソースを見てみたいのですが DxLibMake には含まれてないようでした。 動画周辺 libのソース自体は公開可能でしょうか。 よろしくお願いします。
メンテ

Page: 1 |

Re: ogv 動画再生について ( No.1 )
名前:管理人 日時:2016/02/06 21:21

ogvファイルの読み込みには libtheora を使用していますので、ogvファイルを実際に処理している ソースをご所望でしたら libtheora のソースをご覧になってください libtheora のソースファイルはsvnのリポジトリ http://svn.xiph.org/trunk/theora から取得することができます ところで私も原因を調べてみたいと思うのですが、どのくらい違和感のある状態なのでしょうか? 注意深く見比べないと気付かない程度なのでしょうか、それとも誰もがすぐ気付くくらいの違いなのでしょうか?
メンテ
Re: ogv 動画再生について ( No.2 )
名前:wstn (解決) 日時:2016/02/07 15:14

返信ありがとうございます。 ソース公開されているDxLibMakeの範囲で調査対策できました。 容量削減でピクセル数小さめの動画を拡大して再生してたのですが、 dxlibのtheoraラッパー内部で生成しているdirectxのsurfaceがyuvになっていて yuvからrgbにstretchrectで変換しているときにノイズが入っていたようです。
メンテ
Re: ogv 動画再生について ( No.3 )
名前:管理人 日時:2016/02/08 03:56

(解決)とされていますが、原因が判明しただけではなく、解決もされたのでしょうか? もしDXライブラリのコードにバグがあり、それをwstnさんの方で修正され、 解決されたということでしたら、よろしければどのように修正されたのか教えて頂けないでしょうか? m(_ _;m 因みに拡大描画を行う場合も yuvサーフェスのまま拡大するのではなく、事前に等倍の rgbサーフェスに 転送( 変換 )してから拡大するので、拡大 + yuvサーフェスによってノイズが入ったとは考え難いです…
メンテ
Re: ogv 動画再生について ( No.4 )
名前:wstn (解決) 日時:2016/02/10 19:47

とりあえずdxlib側を以下の通り修正して解決しました。 DXLIB 3.16a : DxMovie.cpp:226 // Movie->NotUseYUVFormatSurfaceFlag = GParam->NotUseYUVFormatSurfaceFlag ; Movie->NotUseYUVFormatSurfaceFlag = true; よろしくお願いします。
メンテ
Re: ogv 動画再生について ( No.5 )
名前:管理人 日時:2016/02/11 14:04

ご返答ありがとうございます、Movie->NotUseYUVFormatSurfaceFlag = true; の変更をするとCPUによる yuv -> rgb 変換が行われるのですが、やはり GPU で yuv -> rgb 変換を行ったほうが CPU 負荷が 低く抑えられますので、ノイズの原因となっている箇所を修正したバージョンをこちらにアップしました https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) よろしければお試しください m(_ _;m No.3の書き込みの後、改めてソースを調べたところ y画像に対して解像度が半分( 又は 4 分の 1 )の u,v画像にアクセスする際にバイリニア補間を行ってしまっていて、u,v値について隣接するピクセルの値が 影響してしまっている状態だったので、バイリニア補間を行わないように修正しました 手元で実際にogvファイルを再生した限りではCPUによる yuv -> rgb 変換を行った際と同じ結果が得られたので、 恐らく wstnさんの環境でも Movie->NotUseYUVFormatSurfaceFlag = true; の変更を加えなくても ノイズが無い状態で再生できるようになったと思います
メンテ
Re: ogv 動画再生について ( No.6 )
名前:wstn (解決) 日時:2016/02/21 01:01

有難う御座います。 色々手が入ってるので躊躇してましたが最新テストバージョンにて Movie->NotUseYUVFormatSurfaceFlag = true; の変更を加えなくても 問題解消している事を確認しました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存