テレビのテストにバグがあってWindows8では映像をデコード出来なかった件。
-----
とある人がTVTest0.8.0のメディアタイプ設定にバグが潜んでいることを発見した。
これを治すにはソースファイルを修正して自分でビルド(コンパイル)しなければならない。
修正が必要な箇所は以下の通り
TVTest0.8.0付属のソースファイル:../BonTsEngine/MediaViewer.cpp
(オリジナル)
// ビデオヘッダ設定
VIDEOINFOHEADER2 &VideoHeader = pVideoInfo->hdr;
//::SetRect(&VideoHeader.rcSource, 0, 0, Width, Height);
VideoHeader.bmiHeader.biWidth = Width;
VideoHeader.bmiHeader.biHeight = Height;
これの42行目、43行目の間に新たな1行目を追加
追加分
VideoHeader.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
(修正後)
// ビデオヘッダ設定
VIDEOINFOHEADER2 &VideoHeader = pVideoInfo->hdr;
//::SetRect(&VideoHeader.rcSource, 0, 0, Width, Height);
VideoHeader.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
VideoHeader.bmiHeader.biWidth = Width;
VideoHeader.bmiHeader.biHeight = Height;
この修正を加えた上でビルドするとWindows7の時と同じようにMS純正DTV-DVDデコーダが利用できるようになる。しかしビルドなどしたことない!自分には出来ない!
そのように思う方でもTVTestで視聴できる環境を整えた方なら出来るよ。
特にKEIANチューナーROMを自力で書き換えた人なら絶対に出来ますし、
仮に失敗してもTVTestが動かないだけですから再度チャレンジすればOK!
書かれた手順を焦らずゆっくり確かめながら、1つ1つ進めれば1時間もあれば出来ますよ。
私は書き間違いのある手順を進めていたので何度も失敗しましたが
正しい手順で行えば内容を理解してなくても確実にビルド出来ます!
また私の環境では何を行ってもWindows7SDKが正常にインストール出来ませんでした。
もちろん x86 VC++2010 Runtime を削除してもダメだったので仮想PCのXPで実行しました。
ようは SDK V7.1 の中にあるサンプルが取り出せれば事は足りるので
何らかの方法でこれを入手すれば正常にビルドが可能のようですよ。
さて以下には実際のビルド手順です。
引用の元になった2ch書き込み
http://toro.2ch.net/test/read.cgi/avi/1348843415/554-556
http://toro.2ch.net/test/read.cgi/avi/1348843415/676
実際に作業を始める前にTeraPadなどで記事冒頭に書いた修正を施してください
-----
入手するファイル
・TVTest_0.8.0.7z *自力で探してください*
・tvcas_attachment_20120915.7z *自力で探してください*
・dtvengine.diff.txt(http://pastebin.com/Jw5FJrLE)
・patc254w.zip(http://cetus.sakura.ne.jp/softlab/toolbox1/index.html)
・TVTestModBuild2.zip(http://www1.axfc.net/uploader/Sc/so/381174)
・Visual C++ 2010 Express(http://www.microsoft.com/ja-jp/dev/express/default.aspx)
・Windows SDK for Windows 7(http://www.microsoft.com/downloads/dlx/en-us/listdetailsview.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b)
・faad2-2.7.zip(http://www.audiocoding.com)
・TeraPad(http://www5f.biglobe.ne.jp/~t-susumu/library/tpad.html)
・winscard_wrapper.zip(http://www1.axfc.net/uploader/Sc/so/381289)*無くとも良い*
1.Visual C++ 2010 Expressをインストール(TVTestをビルドする分にはSP1は不要)
2.Windows SDK for Windows 7をインストール
(Microsoft Visual C++ 2010 x86 Redistributable - 10.0.40219がインストールされていた場合、インストール失敗するのでアンインストールしておく)
3.patc254w.zipを解凍。Cドライブ直下に配置(C:¥patc254w¥patch.exe)
4.Cドライブ直下にsrcフォルダを作る(C:¥src)
5.dtvengine.diff.txtを『download』からダウンロード
dtvengine.diff.txtをTeraPad等のテキストエディタで開き、文字コード:SHIFT-JIS、改行コード:LFにして上書き保存。
C:¥srcにコピー(C:¥src¥dtvengine.diff.txt)
6.TVTest_0.8.0.7zを解凍。さらにTVTest_0.8.0_Src.7zを解凍。でてきたTVTest_0.8.0_SrcフォルダをC:¥srcフォルダにコピー(C:¥src¥TVTest_0.8.0_Src)
7.tvcas_attachment_20120915.7zを解凍
..¥tvcas_attachment_20120915¥TVCAS¥TVCAS.hをC:¥src¥TVTest_0.8.0_Src¥BonTsEngineにコピー
8.TVTestModBuild2.zipを解凍。さらにdiff_src.zipを解凍。
..¥TVTestModBuild2¥diff_src¥DirectShowFilter¥VMR9Renderless.cppをC:¥src¥TVTest_0.8.0_Src¥DirectShowFilter¥VMR9Renderless.cppに上書き
(diff_src以下を丸ごと上書きしてもおk)(もしTVTestModBuild2.zipを入手できなくなっていたら>>470を手作業でする)(proの場合この作業は不要?)
9.コマンドフロンプトを管理者として実行、以下を一行ずつ入力
cd C:¥src
C:¥patc254w¥patch.exe -p0 < dtvengine.diff.txt
10.『..¥src¥TVTest_0.8.0_Src¥DtvEngine¥DtvEngine.cpp』のmd5ハッシュが『bae37019f5bb357981198b31c16caad1』になってたら成功
11.faad2-2.7.zipを解凍し、適当な場所に配置(C:¥faad2-2.7)
12.Microsoft Visual Studio 2010を起動
13.『プロジェクトを開く』からC:¥faad2-2.7¥frontend¥faad.slnを開く
変換ウィザードがでてくるけどダイアログに従ってそのまま変換
14.ツールバーにある緑色の横向き三角ボタンの右側にあるプルダウンメニューが『Debug』になっているのを確認し、『Release』に変更
ソリューションエクスプローラー上(左側にあるやつ)の『libfaad』を右クリックして『ビルド』
『C:¥faad2-2.7¥libfaad¥Release¥libfaad.lib』ができていたら成功
15.C:¥Program Files¥Microsoft SDKs¥Windows¥v7.1¥Samples¥multimedia¥directshow¥baseclasses¥baseclasses.slnを開く
(環境によってパスが微妙に変わる)
16.ソリューションエクスプローラー上の『BaseClasses』を右クリックして『ビルド』
この時、ツールバーにある緑色の横向き三角ボタンの右側にあるプルダウンメニューが『Debug』になっているのを確認する
17.上のプルダウンメニューを『Release』にしてもう一度、『BaseClasses』を右クリックして『ビルド』
C:¥Program Files¥Microsoft SDKs¥Windows¥v7.1¥Samples¥multimedia¥directshow¥baseclasses¥Debug¥strmbasd.lib
C:¥Program Files¥Microsoft SDKs¥Windows¥v7.1¥Samples¥multimedia¥directshow¥baseclasses¥Release¥strmbase.lib
が作成されているのを確認
現在のファイル構成
C:¥src¥TVTest_0.8.0_Src
C:¥src¥TVTest_0.8.0_Src¥BonTsEngine¥TVCAS.h(tvcas_attachment_20120915.7zからコピーしたもの)
C:¥src¥TVTest_0.8.0_Src¥DirectShowFilter¥VMR9Renderless.cpp(TVTestModBuild2.zipから上書きしたもの)
C:¥faad2-2.7¥libfaad¥Debug¥libfaad.lib
C:¥Program Files¥Microsoft SDKs¥Windows¥v7.1¥Samples¥multimedia¥directshow¥baseclasses¥Debug¥strmbasd.lib
C:¥Program Files¥Microsoft SDKs¥Windows¥v7.1¥Samples¥multimedia¥directshow¥baseclasses¥Release¥strmbase.lib
18.C:¥src¥TVTest_0.8.0_Src¥TVTest.slnを開く。16.のプルダウンメニューを『Release』にする
19.ソリューションエクスプローラー上の『TVTest』を右クリックして『プロパティ』
20.『構成プロパティ>C/C++>全般>追加のインクルードディレクトリ』の先頭に以下を追記
『C:¥Program Files¥Microsoft SDKs¥Windows¥v7.1¥Samples¥multimedia¥directshow¥baseclasses;』
21.『構成プロパティ>C/C++>コード生成』
ランタイムライブラリ:マルチスレッド DLL (/MD)
22.『構成プロパティ>リンカー>追加のライブラリディレクトリの先頭に以下を追記』
『C:¥faad2-2.7¥libfaad¥Release;C:¥Program Files¥Microsoft SDKs¥Windows¥v7.1¥Samples¥multimedia¥directshow¥baseclasses¥Debug;C:¥Program Files¥Microsoft SDKs¥Windows
¥v7.1¥Samples¥multimedia¥directshow¥baseclasses¥Release;』
23.ソリューションエクスプローラー上)の『TVTest』を右クリックして『ビルド』
これでC:¥src¥TVTest_0.8.0_Src¥Win32¥Release¥TVTest.exeができる筈
XP環境なんでWin7とかだとC:¥Program Files¥Microsoft SDKs〜とかのパスが変わると思う
この方法でビルドしたTVTest.exeは1.51MB
コンパイルオプションが変わったりするとサイズも微妙に変わると思う
24.TVTestフォルダにビルドしたTVTest.exeを上書き
25...¥tvcas_attachment_20120915¥TVCAS¥Win32¥Release¥TVCAS_B25.tvcasをTVTest.exeと同じフォルダに配置
26.以前使っていたTVTestフォルダのwinscard.dll(BonDriver_FSUSB2N 0.3.10 2011-05-08等)をwinscard.dl_にリネーム
27.winscard_wrapper.zipを解凍。TVTestフォルダにwinscard.dllをコピー
ファイル構成
C:¥DTV¥TVTest
C:¥DTV¥TVTest¥TVTest.exe(ビルドした物)
C:¥DTV¥TVTest¥TVCAS_B25.tvcas
C:¥DTV¥TVTest¥winscard.dl_(BonDriver_FSUSB2N 0.3.10 2011-05-08等)
C:¥DTV¥TVTest¥winscard.dll(winscard_wrapper.zip)
とりあえず自分はdiff_src以下を丸ごと上書きしてビルドしたTVTest.exeで視聴、録画、再生してる