まどかの 日記

[2004/11/08〜2004/11/14の日記]
[2004/11/15〜2004/11/21の日記]
[2004/11/22〜2004/11/28の日記]
[2004/11/29〜2004/12/05の日記]
[2004/12/06〜2004/12/12の日記]
[2004/12/13〜2004/12/19の日記]
[2004/12/20〜2004/12/26の日記]
[2004/12/27〜2005/01/02の日記]
[2005/01/03〜2005/01/09の日記]
[2005/01/10〜2005/01/16の日記]
[2005/01/17〜2005/01/23の日記]
[2005/01/24〜2005/01/30の日記]
[2005/01/31〜2005/02/06の日記]
[2005/02/07〜2005/02/13の日記]
[2005/02/14〜2005/02/20の日記]
↑過去3ヶ月くらいの日記はこちら↑

まどかは「P/ECE Hand Book」を応援しています



1232
2005/02/27()
 休日出勤
 今日は午前中から休日出勤。
 ちょっと遅れ気味のスケジュールを今のうちから休日出勤で挽回(^^;
 結局1日会社に居ました。

 昨日公開したP/ECEで動画プレイヤーですが、早速ヅラChuさんとnsawaさんからメールが(^^
 ありがとうございます。
 
 というわけで、今日はここまで。
 それでは、おやすみなさーい。

2005/02/26()
 P/ECEで動画プレイヤー公開しましたー!!(^o^)/
 今日は朝早くから、嫁さんと船乗ってカニ食べて、いちご狩りしてSLに乗るという、つながりのよくわからないバスツアーに参加して来ました(笑)

 まぁ、お目当てはイチゴ狩りだったので、お昼のカニやSLはどうでも良くて、おなかいっぱい美味しいイチゴが食べられたので楽しかったです。

 SLはまぁ珍しいのでそれなりに面白いのですが、お昼のカニが全然ダメでした。特に美味しそうに見えたので一番最後に取っておいたカニが一番美味しくなかったのがとても残念でした。
 で、帰りに今度は高いカニを食べに行こうと、札幌かに本家の値段を見に行ったら、とても気軽に入れる値段じゃなかったので、逆に凹みました(- -;


 そして、家に帰ってからは、最後の仕上げの修正を施してマニュアルを書き、今まで暖めてきた(?)今回のP/ECEネタ、「P/ECEで動画プレイヤー」を専用ページを作って公開しました(^^

 これは、簡単に言うと、Windowsで再生可能な動画を専用ツールでP/ECE用の専用動画ファイル(PMF)にドラッグ&ドロップで一発変換し、それをMMC/SDカードに入れて、P/ECEで再生するというものです。

 せっかく大容量のメモリカードが使えるようになったので、nsawaさんのMP3プレイヤーだけではなく、本家からも何かMMCを有効活用できるものはないかと考えて、作ったのが今回の動画プレイヤーです。
 
 公開時期は負けてしまいましたが、Nintendo DSでも同じ様にSDカード上の動画を再生する「プレイやん」が発表されてちょっとびっくりしましたが、考えることはみんな同じなのでしょうかね(笑)

 専用フォーマットのPMFとは、ほんとに安直に「P/ECE Movie File format」の略です(^^;

 一応ファイルサイズが出来るだけ小さくなるように、MPEGのような(MPEGよりずっと簡易的なものですが)フレーム間圧縮をかけてデータ構造を工夫し、最長で約30分の再生時間を実現できました。CM無しのアニメなら1話分がまるまる再生できます(^^
扱える1つのファイルの最大サイズは約115MBです。

 動画ファイルの圧縮では、他のフォーマットの動画の様に、すごいアルゴリズムで小さく圧縮できても、P/ECEで展開した時に時間がかかったのでは元も子もないので、なるべく単純でそこそこ圧縮できる方法を考えるのに苦労しました。

 私はランレングスでの圧縮はおろか、圧縮と名のつくことはほとんど経験したことが無かったので、今回のネタは本当に勉強になりました。
 結局独自の簡易版フレーム間圧縮になったので、lzhやzipはほとんど試さずに終りましたが(^^; 


 今回の圧縮方法では、めちゃめちゃ圧縮が効いた場合は約3msで1画面(多階調の高速表示なので4フレーム)分のデコードが終わり、平均43msくらいで、遅くてもだいたい60ms前後で展開できます。

 これを、リングバッファに先読みで展開しながらストリーミング再生することで、P/ECEのメモリ量を遥かに凌駕する大容量データの動画を再生できます。

 約15FPSで再生するので、1画面分のデータのデコードには最低でも66ms未満で展開できることが必須条件で、最初は1画面展開するのに140msとかかかって、途方に暮れたりもしましたが、高速RAMの活用と神懸り的なひらめきを何度も経験しながらの高速化により、ようやくここまでこれました。我ながらよく頑張ったと思います。

 約5分のPVならばだいたい12〜15MBくらいです。やはりアニメ系の動画の方が圧縮は効き易いみたいですね。特にほとんど動かない動画は結構小さくなります(^^;

 画面は残像を利用した13階調と誤差拡散処理を施してあるので、多少ざらつき感はありますが、P/ECEの画面とはとても思えない画像が15FPSで、しかも音付きで表示されます。
 ああ、もうなんていうか、ちゃんと完成させられたのが嬉しくて、是非一度体験してくださいとしかこの気持ちを言い表せません(T^T
 
 今回はPMFの一発変換ツールを公開するに当たって、サンプルの非常に少ないDirectShowのプログラムにも有用と思われるMuxフィルタのソースも一緒に公開していますので、DirectShowに興味のある方はソースも見てみてください。
 私も手探り状態で作ったので、もしかしたら正攻法ではないやり方をしているかも知れませんが、何かのお役に立てれば光栄です。

 いつもながらの牛歩作業で、日記によると今回のネタを思い付いたのが2004/09/30みたいなので、構想開始から完成までに約5ヶ月くらいかかっているんですね。
 私もnsawaさんみたいにあんな速度で作品をリリースできたらもっと楽しいのでしょうけど、今の私にはまだあの速度は出せません(^^;

 なにはともあれ、今回も無事に公開できたので、感慨もひとしおです。
 
 というわけで、ちょっとしたサンプルも一緒に公開しましたので、興味がある方はどうぞご覧になってください。

 話が長くなってしまったので、もう一度公開ページのお知らせです。
 http://www2.plala.or.jp/madoka/Piece_ele/pmf/pmf.htm

 ちなみに、この動画プレイヤーはMMC改造されている方が対象ですが、この動画プレイヤーを機に、P/ECEに覚醒のメスを入れてみるのもいかがでしょうか。あくまでも自己責任ですが(- -;
 
 一応Windows上でPMFを再生する、確認用のプレビューアプリをおまけで付けているので、MMC改造していない方も、雰囲気くらいは分かっていただけると思います。
 ただし、プレビューツールはあくまで「おまけ」なので、終了時に止まったりしますが(汗

 最後に、今回の作品もnsawaさんのMMCライブラリの5倍高速化が無ければとても実現不可能でした。
 いつもながら、素晴らしい技術を披露して下さったnsawaさんには心から感謝致します。
 ありがとうございました。

 というわけで、今日はここまで。
 明日はちょっと仕事のスケジュールも厳しくなってきたので休日出勤です(^^;
 それでは、おやすみなさーい。

1230
2005/02/25()
 今日もぎりぎり
 今日は、明日の朝早くからバスツアーに出かける予定なので、詰まっているスケジュールをなんとかこなして家に帰り、何もせずにすぐに寝ました。

 明日は5時半起きです。

 というわけで、今日はおしまい。
 それでは、おやすみなさーい。

1229
2005/02/24()
 今日は半徹
 実は明後日に予定しているバスツアーの旅行に気持ちよく行けるように、今日・明日と頑張って仕事を先に終らせようと、今日は半徹(半分徹夜)です。

 というわけで、案の定P/ECEネタは進まず。
 っていうか、もうほとんど出来ているので、予定通り週末に仕上げて公開かな。

 それでは、おやすみなさーい。

1228
2005/02/23()
 公開までのラストスパート
 先月の終わりごろにMMC改造されているユーザさんに強制的にデモ版を見て頂いたときに、2月中には公開したいと公言したので、もう後残りわずかな2月の間にがんばって仕上げたいと思います。

 と、言いつつも、仕上げにかけられる時間は今日くらいしかないのですが、今日も仕事の帰りが遅くて何も出来ず。

 もうこうなったら週末に期待。
 それでは、おやすみなさーい。

1227
2005/02/22()
 登録問題一応解決
 今日もインストーラと格闘です。

 昨日の段階で、DLLをregsvr32.exeで登録する時に必要らしいMFC71.dllをマージモジュールを指定してインストーラのプロジェクトに追加するところまでは分かったのですが、インストール対象のプログラムがMFCを使っていないので、結局MFC71.dllは必要ないと見なされてインストールされないという問題が分かりました。

 さて、今日はこの問題を解決すべく色々と頑張るのですが、やっぱりインストーラのプロジェクトのプロパティを色々いぢっても無理なようなので、不本意ですが、Windows側の一発変換ツールで共有MFCライブラリを使うように設定して、無理やりMFC71.dllが必要な環境にしてしまいました(^^;

 こうしておけば、一発変換ツールの依存関係としてMFC71.dllを含むマージモジュールが勝手にプロジェクトに追加されて、インストールしたアプリケーションフォルダに一緒に入ります。

 ちなみに、MFC71.dllとかのDLLはパスの通ったSystem32フォルダなどにインストールされるのが普通だと思っていたのですが、どうもWindows2000になった頃から、SFP(System File Protection)といって、むやみにシステムフォルダのファイルを上書きしないように、OSのアップデートとかの特別なことがない限り、DLLをSystem32フォルダなどにインストールさせないお約束が出来たようです。

 というわけで、今回のインストーラでも例に漏れず、必要なDLLは全てアプリケーションをインストールしたフォルダに配置されます。
 MFCのDLLが一緒のフォルダにあるのってなんか違和感がありますが、お約束なので仕方がないですね(- -;


これで、無事にインストーラからのDLLのレジストリ登録も正常に行われるようになったので、インストーラ製作もこれにて完成。
 ちゃんとアンインストールする時はDLLの登録もレジストリから削除されるので安心してください。

 というところで、今日はおしまい。
 明日は、一発変換ツールとかその他もろもろの最後の見直しをかけて、公開の準備をします。

 それでは、お休みなさーい。

1226
2005/02/21()
 レジストリ登録問題一歩前進
 今日も家に帰ってから昨日の問題を解決すべくインストーラプロジェクトと格闘。

 いろいろ調べてみた結果、どうもLoadLibraryに失敗するのは、MFC71.dllがインストールされていない(または、パスの通ったところにない)のが原因のようだ。

 VisualStudio.Net2003の開発環境が入っていない嫁さんのPCで試したところ、登録対象のDLLとMFC71.dllを一緒に置いて、コマンドプロンプトからregsvr32.exeで登録すると成功するので、ほぼ間違いないみたい。

 ということで、インストーラで他のファイルと一緒にMFC71.dllをインストールするようにすれば解決するのかと思って、MFC71.dllが含まれるマージモジュールをプロジェクトに追加したのですが、インストール対象のアプリやDLLがMFCを使っていないので、依存関係としてMFC71.dllが検出されず、マージモジュールがプロジェクトに追加されているのに、MFC71.dllはインストールしてくれません(j−j

 っていうか、DLLは使って無くても、そのDLLをレジストリ登録する際に必要なのになぜ依存関係として検出してくれないんだよぅ!
 DLLのプロパティにもレジストリに登録するように指定してあるんだから、それくらい気を使ってくれても良いのになぁ。

 というわけで、一応先に進んだようなものの、解決はせず明日に持ち越しです。

 それでは、お休みなさーい。