2012年2月18日土曜日

avs2pipemod その14

更新しました。

avs2pipemod-0.3.0.7z
https://github.com/chikuzen/avs2pipemod

*新機能 "dumpyuv" を追加

これを読んでたら自分も欲しくなったので、機能を追加しました。
RGBデータを扱いたい場合は
ColorBars()
Y=ShowGreen("Y8").ConvertToYV24()
U=ShowBlue("Y8")
V=ShowRed("Y8")
YToUV(U, V, Y)
とでもして下さい。

2012年2月16日木曜日

avs2pipemod その13

更新しました。

avs2pipemod-0.2.2.7z
https://github.com/chikuzen/avs2pipemod

*x264raw/x264bdの出力内容に"--frames"を追加

rawvideo出力等で"-trim=*,*"を使っている場合は、こちらも同様にtrimを追加して下さい。
両方で同じ指定をしないと、フレーム数の整合がとれなくなります。

2012年2月5日日曜日

Pythonで関数の引数の順序を入れ替える

メモ替わり

L-SMASHのコードで使われている関数のいくつかについて、引数の順序を入れ替える必要が発生した。

こういった作業はIDEを使っていれば簡単にできるのかも知れないが、何かしら書くときはいつもテキストエディタを使い、コンパイルはCLI操作で済ませているので、使い方がいまだにさっぱり分からない。
かといっていちいち関数名で検索しては手作業で修正するのも面倒なので、久々にPythonを書いた。

#!/bin/env python
# reorder_args.py for Python 2.x
# written by Chikuzen
import sys
import os
def usage():
print "usage : reorder_args.py <func name> <num of args> <new order> <filename>\n"
print 'example: reorder_args.py "harpderp()" 5 "0,3,2,1,4" "hogehoge.c"\n'
print " before : herpderp( foo, bar, fizz, buzz, bleh )\n"
print " after : herpderp( foo, buzz, fizz, bar, bleh )\n"
sys.exit()
argvs = sys.argv
if len(argvs) != 5:
usage()
funcname = argvs[1].rstrip(')')
num = int(argvs[2])
order = [int(i) for i in argvs[3].split(',') if 0 <= int(i) < num]
if num != len(order):
print "error: '%s' and '%s' didn't suit.\n\n" % (argvs[2], argvs[3])
usage()
after = "%s_tmp" % argvs[4]
file1 = open(argvs[4], 'r')
file2 = open(after, 'w')
count = 0
for line in file1.readlines():
count += 1
try:
if line.find(funcname) != -1:
tmp1 = line.split(funcname)
for i in xrange(len(tmp1) - 1):
tmp2 = tmp1[i + 1].split(')')
tmp3 = [j.strip() for j in tmp2[0].split(',')]
tmp2[0] = ""
for k in xrange(num):
tmp2[0] += " %s," % tmp3[order[k]]
tmp2[0].rstrip(',')
tmp1[i + 1] = ' )'.join(tmp2)
line = funcname.join(tmp1)
except:
print "warning: catch exception line %i in %s\n" % (count, argvs[4])
file2.write(line)
file1.close()
file2.close()
os.remove(argvs[4])
os.rename(after, argvs[4])
view raw reorder_args.py hosted with ❤ by GitHub

制限事項:
一つの関数の記述が複数行にまたがる場合
int var = ItIsNoNeedToCareAboutTheLengthOfFunctionNamesBecauseEverybodyUsesIDE(foo,
                                                                               bar,
                                                                               fizz,
                                                                               buzz,
                                                                               bleh,
                                                                               fuck);
は処理できないので、warningを頼りに手動で修正すること。