2011年8月8日月曜日

MediaPlayerClassic + AviSynth で 1.5 倍再生

PS3 には 1.5倍再生機能があって便利なので,PC でもやってみた.

でも x倍再生機能がある動画プレイヤーは他の機能がしょぼかったりしたので,普段使っている MediaPlayerClassic (MPC) + AviSynth でやってみた.MPC には最初から avs スクリプト再生機能があるので,1.5倍再生スクリプトを書いて MPC に読ませるだけで ok.スクリプトはこんな感じ.
Scale1 = 3
Scale2 = 2
DirectShowSource( "hoge.ts", pixel_type="YUY2", convertfps=true )
AssumeScaledFPS( Scale1, Scale2 )
TimeStretch( tempo = Scale1 * 100.0 / Scale2 )
convertfps=true は VFR を CFR に変換するために必須.
AssumeScaledFPS で映像の再生速度を 1.5倍にして,TimeStretch で (音程は変えずに) 音声の再生速度を変える.

これで完璧ヘ(^∇^ヘ)ヘ(^∇^ヘ) ウヒョヒョ と思っていたら,なんか映像と音声がずれる.どうも convertfps=true をつけると映像の冒頭がなぜか切り捨てられることがあって,その分の音声がずれるらしい.DirectShowSource はいろんなフォーマットの動画が読み込めて便利なんだけど,ちょっと変わったことをしようとするととたんに音声がずれて使い勝手が悪い.

というわけで他の方法を模索.FFmpegSource というプラグインがあったので,それを使ってみた.
Scale1 = 3
Scale2 = 2
FFmpegSource2( "hoge.ts", atrack=-1, cachefile="hoge.ts.ffindex", fpsnum=30000, fpsden=1001 ).ConvertToYUY2
AssumeScaledFPS( Scale1, Scale2 )
TimeStretch( tempo = Scale1 * 100.0 / Scale2 )
FFmpegSource は ffmpeg という知ってる人は知ってる有名な動画エンコーダの動画リード部分を流用しているだけあって,安定性は抜群.これで音ズレなくまともに 1.5倍再生ができるようになった.
ただし問題がひとつあって,FFmpegSource は動画ファイル毎にインデックスファイルを作成してからでないと再生が始まらない.1時間の番組で 30秒ほどかかることもあるので,この間待ちぼうけを食らうのも辛い.

なので,まず通常速度で再生する MPC を起動しつつ裏でインデックスを作成して,作成が終わったら改めて 1.5倍再生する MPC を起動するバッチファイルを組んだ.FFmpegSource のパッケージにインデックスを作成するコマンドラインプログラムが付属しているので,それを使う.
バッチファイル (正確には WinBatchEh のスクリプトだけど) はこんな感じ.
: 変数セット
set TmpDir=%temp%\mpc_playlist
set Player="C:\Program Files\MediaPlayerClassic\mplayerc.exe" /fixedsize 860,550
set FileName=%1

: tmp ファイルフォルダ作成
if Exist %TmpDir%\ del /y %TmpDir%\*
mkdir %TmpDir%

: .avs 作成
set FileNameOrg=%FileName%
StrTokFile=STF_NAME FileName "%FileName%"
set FileName=%TmpDir%\%FileName%.avs

echo Scale1 = 3> "%FileName%"
echo Scale2 = 2>> "%FileName%"
echo FFmpegSource2( "%FileNameOrg%", atrack=-1, cachefile="%FileName%.ffindex", fpsnum=30000, fpsden=1001 ).ConvertToYUY2>> "%FileName%"
echo AssumeScaledFPS( Scale1, Scale2 )>> "%FileName%"
echo TimeStretch( tempo = Scale1 * 100.0 / Scale2 )>> "%FileName%"

: とりあえず普通再生の画面を起動
start %Player% "%FileNameOrg%"

: index を作成,1個出来たら mpc 起動
exec=SW_HIDE "C:\Program Files\AviSynth 2.5\plugins\ffmsindex.exe" -p "%%a" "%FileName%.ffindex"
start %Player% "%FileName%"
途中まで再生された後,また MPC が立ち上がって最初から再生されちゃうけど,まぁ手でシークすればいいし許容範囲内かな.
-----
WSH の javascript で書いたものを置いときます
SFC mini も入れといてください.

2011年8月4日木曜日

PhenomII X6 ゲット

AMD PhenomII X6 1065T を購入.

そろそろ AMD のソケットが変更されて,今の AM3 ソケット CPU は生産中止になるらしいので.いま買い換えとけば後 3年は持つかなぁ? というわけで 6コア CPU ゲット.

今のマシンは 3年前に組んだものだけど,最新の CPU がマザボの変更無しでそのまま使えるって凄いことだなあ.しかもメモリの主流が DDR2→DDR3 に変わってるにもかかわらず.AMD はこういうところでもコストパフォーマンスが高いからインテルより気に入っている.

というわけで恒例のクロック & 電圧いじり.1065T は倍率変更でのオーバークロックはできない (倍率を下げる事しかできない) ので,やっぱ時代はエコだよねー,というわけでひたすら省電力方向に振ってみた.

で K10Stat の設定はこんな感じ.
Athlon64 の時は 1GHz/0.800V が下限だったけど,今度のは 100MHz まで下げられるwww 流石にそこまで下げちゃうとモッサリ感が半端ないので,下限は 400MHz にした.あと,各 PState 毎のクロック割り振りを低めにして,なるべく低い周波数で動くようにしてみた.

で,6コアをしばらく使ってみたけど,今までの 2コアと体感は全く変わらねー(笑) 今までですでにオーバースペックだったってことね.唯一実感できたのは動画のエンコが 3倍速くなったことだけだな.

2011年7月16日土曜日

WiMAX (・∀・)デムパ!! 強化実験

こことかここらへんの記事を見て,自分も WiMAX アンテナ (というかリフレクタ) を試してみようと思った.
無線 LAN で電波波長とか? を考慮した本気のアンテナ自作は見たことあるけど,上記サイトのような割といい加減な (ほとんど鉄板でも) 効果はあるっぽい.

というわけで,家に転がっていたアルミ鍋の蓋を三脚に付けてトライ.

金色の見た目といい,どっからどう見ても別の意味で (・∀・)デムパ!! を受信しているようにしか見えないが,やってる本人は割と真剣なのですよ.

で,結果は…

ジャマになるというデメリット以上の効果は認められなかった(汗 いろいろ方角とか蓋⇔WiMax ルータの距離とか変えてみたけど,やっぱり効果なかった.方角を変えるとある方角から外れたときにガクッと速度が落ちるので,電波遮断の効果はあるらしい(汗

というわけで,今回のネタは失敗┐('~`;)┌

いろいろ試しているときに,いつもの置き場所,写真のように障子の桟に乗っけているのだが,この位置から升目 1個分上下・左右にずれただけで速度が半分に落ちることがわかった.なんかここにピンポイントに電波が来てるらしい(笑)

2011年6月29日水曜日

Conditional execution 再び

ノッポさんに「やるんだよ」と言われてはや半年.
ふと思い立って,frv なる CPU の conditional execution をまねて *.md 書いてみた.
まずは,条件実行つき mov 命令.
(define_insn "*cond_exec_mov"
  [(cond_exec
    (match_operator 0 "comparison_operator"
			[(match_operand 1 "int_mode_flags" "")
			 (const_int 0)])        ←ここら辺までが条件実行
    (set (match_operand:INT 2 "register_operand" "=r") ←ここら辺が mov 命令
	 (match_operand:INT 3 "liw_signed"       "")))]
  "TARGET_COND_EXEC"
  "mov_%b0 %3,%2"
  [(set_attr "timings" "11")]
)

でコンパイル結果は,
int hoge( int a, int b, int c, int d ){
    if( a > b ) a = c;
    else        a = d;
    return a;
}
  ↓↓↓↓↓↓
_hoge:
	cmp d1,d0
	mov_gt a0,d0
	mov_le a1,d0
	retf [],0
うっしゃあ.意外とあっさりと成功 ヘ(^∇^ヘ)ヘ(^∇^ヘ) ウヒョヒョ

よーし,パパ全命令に条件実行つけちゃうぞー.
てな訳でまずは add に足してみた.
(define_insn "*cond_exec_addsi"
  [(cond_exec
    (match_operator 0 "comparison_operator"
			[(match_operand 1 "int_mode_flags" "")
			 (const_int 0)])
      (set (match_operand:SI          2 "register_operand"  "=r") ←add命令
	   (plus:SI (match_operand:SI 3 "register_operand"  "%r")
		    (match_operand:SI 4 "nonmemory_operand" "")))
  )]
  "TARGET_COND_EXEC"
  "add_%b0 %4,%3,%2"
  [(set_attr "timings" "11")]
)

そのコンパイル結果は,
int hoge( int a, int b, int c, int d ){
    if( a > b ) a = b + c;
    else        a = c + d;
    return a;
}
  ↓↓↓↓↓↓
_hoge:
	cmp d1,d0
	bgt .L5
	add a1,a0,d0
	retf [],0
.L5:
	add a0,d1,d0
	retf [],0

ぐはぁっ
全然効いてないよ~(゜ーÅ)ほろり

理由がよくわからなかったので,gcc に -fdump-rtl-all オプションをつけて,最適化過程の全 RTL をダンプさせてみた.
if-then-else のブランチ命令から conditional-execution への変換は,ce3 なるステージで行われているらしいので,その直前の peephole2 ステージの RTL の,当該 add 命令の RTL を見てみる.
(insn 11 10 41 3 (parallel [
            (set (reg/v:SI 0 d0 [orig:58 a ] [58])
                (plus:SI (reg/v:SI 1 d1 [orig:61 b ] [61])
                    (reg/v:SI 4 a0 [orig:62 c ] [62])))
            (clobber (reg:CC 51 EPSW))
        ]) z.c:11 11 {addsi3}
大雑把に言って,(define_insn "*cond_exec_addsi"... のところに書いた (set ...) のパターンがここの (set ...) のパターンにマッチすれば,条件実行つき add に変換されるはずなんだけど,(clobber (reg:CC 51 EPSW)) ってのがあるせいでマッチできない.
(clobber (reg:CC 51 EPSW)) ってのは「add 命令実行したらフラグレジスタが更新されるよ」って意味なのであって当たり前なのだが,一方条件実行つき add にはフラグ更新機能はつけてはいけない.
しかし,パターンをマッチさせるには,通常 add 命令のフラグ更新をやめるか,条件付実行の add にフラグ更新をさせるか,のどちらかしかない (実際にはどっちも実 CPU の動作からウソを付くことになるので,おかしなコードを吐く可能性がある)

ARM とかどうやってんのかと思って見たら,元々通常 add 命令でフラグ更新する・しないが選択できるので,何の問題もないのね.

んー,困った.

2011年6月13日月曜日

gcc クロスコンパイラ ビルドコマンド

gcc のクロスコンパイル環境構築の一連のコマンド,何度メモをとってもどっかいってしまうので blog に貼り付けてしまう(笑)
# binutils
./configure --target=mn10300-unknown-elf \
--prefix=/home/yoshi/mcu/amgcc; \
make; make install

# gmp
./configure --prefix=/home/yoshi/mcu/amgcc ; make ; make install
# mpfr
./configure --prefix=/home/yoshi/mcu/amgcc \
--with-gmp=/home/yoshi/mcu/amgcc; \
make ; make install
# mpc
./configure --prefix=/home/yoshi/mcu/amgcc \
--with-gmp=/home/yoshi/mcu/amgcc \
--with-mpfr=/home/yoshi/mcu/amgcc; \
make ; make install

# newlib
cd gcc-4.6.0
ln -s ../newlib-1.19.0/newlib .
ln -s ../newlib-1.19.0/libgloss .

# gcc
set path = ( $path /home/yoshi/mcu/amgcc/bin )
setenv LD_LIBRARY_PATH /home/yoshi/mcu/amgcc/lib:$LD_LIBRARY_PATH

mkdir build
cd build
../configure --target=mn10300-unknown-elf \
--disable-libssp \
--prefix=/home/yoshi/mcu/amgcc \
--with-gmp=/home/yoshi/mcu/amgcc \
--with-mpfr=/home/yoshi/mcu/amgcc \
--with-mpc=/home/yoshi/mcu/amgcc; \
make
make install
以下ハマりポイント
・newlib 使わないとなんか失敗する
・--disable-libssp 指定しないと libssp のビルドに失敗する
・gcc で build とか適当に dir 掘って configure 等を実行しないとダメ

# gcc 4.5.3 あたりから gmp だの mpfr だの mpc だの,lib が要るようになってめんどくさい…

2011年6月4日土曜日

テンソン ワイマックス!

b-mobileSIM の有効期限が切れそうだったので,端末 0円キャンペーンをやっていた WiMAX に加入してみた.
# 5/31 まで! という言葉につられて入ったら,6月もしれっとキャンペーン続いてたけど

しばらくは b-mobile 買わずに WiMAX で運用してみるつもり.あわよくば eo 光をやめて WiMAX に統一するかもしれない (まぁ無理だろうけど).

というわけで今日届いたので,Desire とか IS01 とかつないでテンソン上がってきたwww
実質 100kbps 位しか出ていない b-mobile とはスピードが全然違うし,IS01 も外でも使えるようになった.さすが 40Mbps は伊達じゃないぜ!

で,最後にデスクトップ PC に USB 無線 LAN アダプタ挿してスピードテストしてみたら,

ゼロが2個くらい足りないような… (´・ω・`) ショボーン
一気にテンソンが下がった.

いや,38度くらい熱出してる状態で遊んでたから,単にナチュラルハイ状態だったのか?

----
1週間使ってみた感想.

○アンテナ1本でも,5Mbps でた.
×かさばる(笑) 会社の休憩時間に Desire で遊ぼうと思っても WM3500R も持って行かないといけない.
Desire と IS01 と WM3500R と 3台かばんに入れていくとかもう意味わかんない.
×WM3500R の電源 ON してから通信可能になるまで 1分近くかかるので,ぱっとメールチェックしたくてもできない.
△通信エリアの狭さが災いして,主な使用時間である電車通勤中は (自宅に近づくにつれw) けっこう通信が切れる.
△自分の使い方だと,モバイル端末では Web とかメールとか,テキストデータ中心の通信なので WiMAX の通信速度はオーバースペック.

と,自分の使い方においては,モバイル通信環境としてはメリットよりデメリットのほうが目立った.

では自宅の固定回線の置き換えは可能か? と言われると,速度は全然光より遅いけど,GB 単位のファイル転送とかしない限り速度は 5Mbps も出りゃ十分なので,コスト優先なら自宅の固定回線 + モバイル通信回線を WiMAX に置き換えるのは非常にありだと思う.

でもウチの場合固定電話回線も eo に乗り換えちゃったらから,eo 止めようがないんだよね.
というわけで,3ヶ月経ったら WiMAX 解約するつもり.まぁ端末代もタダだったしいいや.

2011年5月21日土曜日

ありのまま 今 起こった事を話すぜ!

         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『クラッシュ後必死こいて4位までリカバーしたと
        i|:!ヾ、_ノ/ u {:}//ヘ        思ったらいつのまにか全員から周回遅れにされていた』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった…
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    計測ミスだとかコース破壊だとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…


まぁそんなことはどうでもよくて.

カートのタイムシートからラップチャートとギャップチャートを起こしてみた.
これは各周毎の順位をグラフにしたもの.前半は順位の入れ代わりが激しい.リバースグリッドだから当たり前っちゃ当たり前だけど.

こっちは 1位の OGA の平均ラップタイムで周回する仮想的な選手から各人が何秒遅れで走っていたかをグラフにしたもの.こっちのほうは状況がよくわかって面白い.

例えば 1周目で何かが起こって大幅に遅れたやつがいるとかw,
YAG は KAT に抜かれてからタイムが上がってしばらくついていけてたとか,

2011年5月6日金曜日

美浜修行

5/6の美浜の「みんなの走行会」に ozzinger さんと参加してきました.

世間一般は平日なのか,募集 60台に対して集まった車は 22台.主催者様にはお気の毒だけど,参加者にとってはまるで天国(笑) クラス分けも何もなくほぼ丸一日フリー走行可能なので,体力 or ガソリンが尽きるまで走りまくりヽ(´ー`)ノ

で,メインの目的であった New タイヤ投入の効果はというと,あっさりと 1秒近くタイム更新して 47秒台突入.前のウンコネオバだとカウンターあてまくりでストレスがたまったけど,今回はガンガンアクセルが踏めて楽しめたので,タイヤにかける金をケチるのはやめようと思った(笑)

=== おもむろに「やってみよう」のコーナー! ===
■やってみよう①
ozzinger さんのカメラを借りて,流し撮りに挑戦!
カメラがよいと,ド素人でも 50枚に 1枚くらいは使える写真が撮れるw

■やってみよう②
ozzinger さんの車を借りて,S1 のインプレッションに挑戦!
「サスの感じとか,乗って確かめてみる?」とありがたい申し出を受けたので,かる~く乗せてもらったのですが,鈍感なワタクシにはサスの効果はわからず.ただし,エンジンのレスポンスの良さとか,ハンドリングの軽快感とか全然ウチのと違ってメッチャ楽しい(笑).うーん,うらやましい.
せっかくなんで今回の動画は ozzinger 号の運転動画でも.

(本人が乗るとこれより10秒速いです)
=======================================

てなわけで,120周ほど走りまくれて,(金の力で) ベストタイムも更新できて満足ヽ(´ー`)ノ

ozzinger さん,ご一緒していただきありがとうございました!

2011年5月5日木曜日

無計画の旅 (本州脱出)

九州まで吹っ飛んできたよ!

大きな地図で見る

ちなみに本州最西端は東経130度51分31秒だそうだが,

そのときの GPS ログは
$GPRMC,003129.000,A,3406.606960,N,13051.742459,E,2.919,,040511,,,A*4A
                                  ~~~~~~~~~~~~
東経130度51.742459分 = 東経130度51分45秒
もうちょっと端に寄り足らんかった(´・ω・`)

2011年5月1日日曜日

AM32_kart_club VS 知らない会社の知らないおぢさん


舞洲に「レースができる 10周タダ券」を使いに行ってきた.
予選も何も無くいきなりレースなんだけど (グリッドはくじ引き),普通のレースパックと違って知らない人と一緒にレースを走らされた.まぁ内輪だけで走ってるとまわりとのレベル差がわかんないし,いい機会でしょう.胸を借りるつもりで,たまには知らない方とのレースを楽しもうと思った.
ただし彼女連れで来てるヤツは全力で叩き潰す!!! Ψ(`∀´)Ψケケケ

で,結果は,レース順位もラップタイム順位も AM32 チームが 1-2 (3位は知らないひとの Bライ保持者) ということで,とりあえず AM32_kart_club の面目は保てたというところか.

で,よく考えたらワイコンつけて以来動画 up してないやということで久々に up.


んー,取り立てておもろいことも無かったので淡々としたブログになっちゃったけど,
一番おもろかったのは↓かな
------
今日の一言「お前らと一緒に来てるから,輪ゴムなんやで」