These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

こんにちは♪ 現在は8月9日(日)16時34分。 もうすぐ退社時刻?


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2008年10月 来月
01 02 03 04
05 06 07 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2008年10月01日(水)

GIF89a Overlap for PHP (2)

思ったよりてこずってるので、真面目にマイルストーンを決めました。 ついでに実装しかけのコードを晒してみるテスト。 色 index の変わった pixel に対する処理が出来てないコードの惨状は置くとして、 今の発想のまま進めてもそこそこ重たくなる事に気付きました。

減色処理:

2日程悩んだ所で、(多分新しい)減色アルゴリズムを思いつきました。
  • 色インデックス表に対して
  • 各色から自分に一番近い色とリンクを張る
  • リンク(色距離の逆数で重み付け)が多い色順に無効マークを付ける
  • 無効マークが付いた色はリンク先の色からランダムで選ぶ (ランダムディザ風)
つまり色をノードとしてネットワークを作ってリンクが込み合ってる場所の ノードを間引きする感じ。
ネットワークに新しい色を追加するのも、ノードを辿っていけばコスト低めに 実装できそうな気がする。(多分)
一般的な減色アルゴリズムで重視する(色頻度の)ヒストグラムを全く考慮して いないので全然ダメな可能性もあるけど、それはそれでネタにはなるので、 とりあえず時間を見つけて試してみよ。^^;

2008年10月02日(木)

[swfed] swfed-0.12 release

replacePNGData PALETTE 形式対応として 0.11, 0.12 を release しました。 0.11 で見つかったバグを 0.12 で修正しているので、0.12 を使ってください。

replacePNGData PALETTE 形式対応:

swfed の replacePNGData に PALETTE 形式 PNG を指定したら 差し替え出来なかったとの不具合報告を受けたので調査。
PNG は BITMAP 形式と PALETTE 形式(GIF に似てる)の両方に対応していて、 それらはデータの持ち方が違うのですが、その考慮がごっそり抜けてました。○rz

0.11:

0.11 としてリリースしたら、透明度無しビットマップ形式の PNG 画像を入れると 壊れて表示されるとの報告を受けたので、コードを見直したところ、 switch case で break を忘れるなんて、初歩的すぎるミスを… !||!○| ̄|_
そんな訳で、すぐ 0.12 をリリースしました。

png_dump 改良

swfed-0.12 対応での調査用に、PALETTE フォーマットの時に含まれる 色インデックス(いわゆるカラーマップ)情報の表示を追加しました。
libpng 的には
png_color *palette = NULL;
int palette_num = 0;
png_get_PLTE(png_ptr, png_info, &palette, &palette_num);
こんな感じに取得できて、
for (i = 0 ; i < palette_num ; i+=8 ) {
    printf("[%03d]", i);
    for (j = 0 ; (j < 8) && ((i+j) < palette_num) ; j++) {
        printf(" #%02x%02x%02x",
               palette[i+j].red,
               palette[i+j].green,
               palette[i+j].blue);
    }
    printf("\n");
}
こんな感じで参照できます。

プログラム:

gcc png_dump.c bitstream.c -lpng
以下のページでも動作を確認できます。PNG ファイルを放り込むと 内部で png_dump が動きます。

はてな日記のタイトル

はてなの日記に URL を張るとトラックバックが自動で送られます。 *1
…で、最近、はてな日記のタイトルの付け方を間違えていた事に気づき、 過去分のを書き直しているのですが、とある日記を修正したのが原因で、 見かけが同じトラックバックが同じブログに複数送られてしまいました。 リンクが張ってある日記は慎重に *2 書き換えます。ごめんなさい。> 色んな人
*1: 設定で on/off 出来ますが
*2: 「ちょっとした更新」をチェックすれば OK なのかな?

2008年10月03日(金)

[swfed] 少しイジメテミタ

おっきな SWF ファイル:

% php sample/swfdump.phps "魔理沙は大変なものを盗んでいきました.swf" > /dev/null
malloc: ;_;
えっと… swfed は -DMALLOC_DEBUG を付けてコンパイルすると、 free し忘れを検出する為に、malloc/free の管理テーブルを作ります。 そのサイズが足りませんでした。
とりあえずサイズを倍に拡張して足りたので、それで… (このやり方はかっこ悪いので、もう少し考えます) デバッグ用とはいえ分かりにくいので、 エラーメッセージに table full を追加してます。

bcut:

バイナリを切り出すプログラムを使って苛めてみました。

中途半端な SWF ファイル:

% bcut game.swf 0 900000  >  game-hankake.swf
% php sample/swfdump.phps  game-hankake.swf
swf_object_input: uncompress failed by unknown reason
magic=CWS  version=9  file_length=1063877
rect=(0, 0)-(0, 0) (f_size=0)
frame_rate=0.0  frame_count=0
XXX (3) ptr=0xb79ac008 (/home/yoya/svn/swfed/src/swf_object.c, 61)
メモリリーク発見。(☆▽☆)
zlib 伸張に失敗した時の異常系で、 zlib 用に確保した領域を free し忘れてました。 対処後
% php ~/svn/swfed/sample/swfdump.phps game-hankake.swf
swf_object_input: uncompress failed by unknown reason
magic=CWS  version=9  file_length=1063877
rect=(0, 0)-(0, 0) (f_size=0)
frame_rate=0.0  frame_count=0
よしよし。

中途半端な PNG ファイル:

% bcut kuriboo4.png 0 166300 > kuriboo4-hankake.png
% php sample/swfdump.phps game.swf
	<略>
[38] tag=DefineBitsLossless2(36)  length=110
        image_id=30  format=3  width=62  height=18
        colormap_count=16  rgba colormap exists  indices exists
	<略>
% php sample/swfreplacepngdata.phps game.swf 30 kuriboo4-hankake.png > /dev/null
png_data_read_func: ! png_buff->data_offset(160789) + size(5516) <= png_buff->data_len(166301)
libpng error: png_read_read_func failed
アボートしました
あちゃー… でも、libpng のエラーハンドリングは setjmp 方式なんですよね…
libpng の man(3) の説明
See the discussion  on  libpng error handling in the Customizing
Libpng section below for more information on the  libpng
error   handling.    If  an  error  occurs,  and  libpng
longjmp’s back to your setjmp, you  will  want  to  call
png_destroy_read_struct() to free any memory.

    if (setjmp(png_jmpbuf(png_ptr)))
    {
        png_destroy_read_struct(&png_ptr, &info_ptr,
           &end_info);
        fclose(fp);
        return (ERROR);
    }

でもって、
If  you  read
the  file  from  different  routines,  you  will need to
update the jmpbuf field every time you enter a new  rou-
tine that will call a png_*() function.
スコープがあってればイイじゃない。ってとこかしら。

setjmp:

png_bytepp png_image_data = NULL;
	<略>
if (setjmp(png_jmpbuf(png_ptr))) {
    fprintf(stderr, "pngconv_png2lossless: libpng error jump occured\n");
    png_destroy_read_struct(&png_ptr, &png_info, NULL);
    if (png_image_data) {
        for ( y = 0 ; y < png_height ; y++) {
            free(png_image_data[y]);
        }
        free(png_image_data);
    }
    return NULL;
}
	<略>
png_image_data = (png_bytepp) malloc(png_height * sizeof(png_bytep));
for (y=0; y < png_height; y++) {
    png_image_data[y] = (png_bytep) malloc(png_get_rowbytes(png_ptr, png_info));
}
としてみたら、png_image_data が free 出来ず。 何でだろうと「setjmp ローカル変数」で google 様にお伺いを立てた所、
xにvolatileをつけ忘れると、こういうこと↑になります…
ナルホド。最適化とレジスタの罠か… やっぱり setjmp キライ
abort しちゃった方が全てを忘れられて楽だけど、 そんな訳にもいかないので、頑張って対処します。

discards qualifiers from pointer target type:

/home/yoya/svn/swfed/src/swf_png.c: In function 'pngconv_png2lossless':
/home/yoya/svn/swfed/src/swf_png.c:166: warning: passing argument 1 of
 'png_destroy_read_struct' discards qualifiers from pointer target type
/home/yoya/svn/swfed/src/swf_png.c:166: warning: passing argument 2 of
 'png_destroy_read_struct' discards qualifiers from pointer target type
volatile つけたら怒られちゃった… ><
仕方が無いので cast 付けて黙らせます。
png_destroy_read_struct((png_structpp) &png_ptr,
                        (png_infopp) &png_info, NULL);
何だかなぁ…

might be clobbered by 'longjmp' or 'vfork':

/home/yoya/svn/swfed/src/swf_png.c:234: warning:
argument 'image_data' might be clobbered by 'longjmp' or 'vfork'
image_data は setjmp と関係ない所で使ってるのに… どうしよう…

最後に:

やっぱり setjmp キライ

2008年10月04日(土)

両神山に行ってきました

同僚のお誘いがあって行ってきました。
日帰りは難しいとか元々修験者用の山とか、 難易度高めな印象を持ちつつ出発。

鎖場:


こんなのが、5,6箇所あります。
が、ヤビツ峠<->塔ノ岳の鎖場を経験してる自分には余裕。(*'ω'*)

眺め:

殆どの場所は木で覆われているので、眺め的には人を選びそう。
私は好きです。むしろ高所恐怖症の私にはこの方が(ry

岩岩岩…:

弘法之井戸:


云われが書いてある立て札とか無いので何だか分からないけど 弘法大師伝説の一つでしょうか。

紅葉?:

山頂近くでは赤い葉をちらほら見かけました。

山頂近く:

気をつけてネ
(((゚Д゚;;)) …でも、ほんとに注意した方がよい場所です。

綺麗な石がゴロゴロしてる場所があります。

山頂:



MS ICE でパノラマ作ろうと写真を沢山取ってる最中に メモリカードの容量を使いきってしまいました。
残念。

参考サイト:

地質学的には、両神山の多くの部分はチャート(SiO2 、水晶と同じ)という
成分で形成されている。チャートは数億年前に海底に沈んだプランクトン
(放散虫)の化石から出来たもので、鉄よりも硬い(硬度7)。
4月下旬から5月中旬、山頂一帯にアカヤシオが咲く。自然林が多く残され、
紅葉が美しいことでも知られている。
両神山を形成する主な岩石は、チャートと呼ばれるもので、
角岩とも言い、火打ち石に使われたものも、この仲間だそうだ。
チャートは硬くて風化に強いので、ギザギザした尾根や絶壁を形成しやすい。
まさに、両神山の特徴ある地形は、このチャートの特性を表現しているわけだ。 
なるほど。
イザナギ・イザナミを祀ったのは、両神山と呼ばれるようになってからであって、
それ以前にはこの二神には何の関係もなかった。
八日見という山名の由来は、日本武尊が東夷征伐の時、
この山を8日間見給うたから、八日見山と名づけられたと伝えられる。
しかしそれはヨウカミに八日見と宛字したための伝説で、
ヨウカミという呼称はヤオガミから来たものである。
ヤオガミの「ヤ」は八の意、「オガミ」は大蛇の意で仏教でいう竜王のことである。
つまりヤオガミは8つの頭を持った竜王で、この山の古縁起に
「竜頭大明神を祭神とする」と記されてあるのと一致する。 (後略)
        ※出典:深田久弥『日本百名山』(1964年新潮社刊)の朝日文庫版から再録
なるほど。なるほど。

bs_unescape.php

エラーのログを見てると、 たまに日本語がバックスラッシュでエスケープされてる事があるので、 それを解くだけのページを作ってみました。 例えば、
\xe8\xb5\xa4\xe9\x9d\x92\xe9\xbb\x84\xe8\x89\xb2
のような文字を submit すると、
赤青黄色
が出力されます。
今のところ UTF-8 限定です。content-type 書き換えるの面倒だったので…
もし、ShiftJIS や EUC にも対応して欲しいって人がいたら頑張ってみます。

ツール:

だんだん増えてきました…

2008年10月05日(日)

Skype on Linux がメモリを使いすぎる問題 (3)

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
27944 yoya      15   0 94656  45m  13m S 41.9  4.6  11:01.74 skype
問題なかったので、次はボットをつないで様子を見ます。

2008年10月06日(月)

[swfed] 0.13 release

PNG PALETTE 形式の透明度対応:

PNG の透明度が効かない場合があるとの事で調べたところ、 PALETTE 形式の透明度の考慮が抜けている事が分かりました。 マニュアルを見る感じ、これっぽい。
png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans,
                 &trans_values);
trans          - array of transparent entries for
                 palette (PNG_INFO_tRNS)
trans_values   - graylevel or color sample values of
                 the single transparent color for
                 non-paletted images (PNG_INFO_tRNS)
num_trans      - number of transparent entries
                 (PNG_INFO_tRNS)
    png_get_bKGD(png_ptr, info_ptr, &background);
    background     - background color (PNG_VALID_bKGD)
                     valid 16-bit red, green and blue
                     values, regardless of color_type
とりあえず前者の tRNS を解析する事にしました。 png.h を見ると
extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
   png_infop info_ptr, png_bytep *trans, int *num_trans,
   png_color_16p *trans_values));
となっているので、この型でやり取りすれば OK っぽいです。

実験:

コード
png_color *palette = NULL;
int palette_num = 0;
png_bytep trans;
int num_trans;
png_color_16p trans_values;
png_get_PLTE(png_ptr, png_info_ptr, &palette, &palette_num);
printf(" palette_num=%d", palette_num);
png_get_tRNS(png_ptr, png_info_ptr, &trans, &num_trans,
                                &trans_values);
printf(" num_trans=%d",num_trans);
実験結果
palette_num=127  num_trans=127
あってるっぽい。

png_dump.c:

透明度付き PALETTE 形式 PNG に対応したのでプログラムを晒します。 コンパイル
gcc png_dump.c -lpng bitstream.c
実行結果
(width, height)=(80,80) bpp=8 color_type=3(PALETTE) palette_num=127  num_trans=127

[000] #000000(00) #010101(20) #030202(11) #040404(3e)
[004] #080706(52) #090605(2a) #140c0b(ff) #141111(72)
[008] #350e0f(ff) #1b1b1b(9d) #241f1d(ff) #312020(5f)
実験ページ

swfed への適用:

replace API の戻り値を修正:

成功:false, 失敗:true になっていたので、修正。 C 言語では成功=>0、失敗=>非0 が一般的ですが、そのまま PHP の false, true に bind しちゃってました。○rz

リリース:

ふぅ… 。 色々とバグを治しました。
というか replace API の戻り値の不具合は本当にごめんなさい。 ごめんなさい。(´Д`;)

2008年10月07日(火)

会話が苦手なやつこい @ VIP

なんか、自分がいっぱいいる… (;^ω^)
>>25 
わかる 
自分入れて4人になると、発言ターンを譲りっぱなしで発言できないwwwwww
譲る気はないんだけど邪魔にならないタイミングを 探ってる間に次の話題に移ってる事が多いかな。○rz

2008年10月10日(金)

[swfed] mp3-dev branch 作成

replaceMP3Data のコードが書きかけで止まっているので、 他の修正をする度にコードをどかして commit してます。
そろそろ面倒になって来たので、mp3 対応の branch を切りました。
mkdir trunk
svn add trunk
svn commit
svn rename src trunk/src
svn rename doc trunk/doc
svn rename sample trunk/sample
svn commit
mkdir branches
svn add branches
svn commit
export SREPOS=https://svn.sourceforge.jp/svnroot/swfed
svn copy $SREPOS/trunk $SREPOS/branches/mp3-dev \
	-m "replaceMP3Data development"
svn update
mp3 対応は目処が立っていないのと、 他にやる事沢山あるので実質塩漬けですが…

2008年10月11日(土)

レインウェア購入

長時間の登山だと雨の時に安物の雨合羽でしのぐ訳にもいかないので、 登山用のレインウェアを購入しました。
オレンジ色のを見つけたので即購入。お店は↓ここ 買ったのは↓これ。 って、あれ… 赤? (゜Д゜;)
帰宅してから色が違うのに気づいたけど後の祭り。
写真だとモロに赤だけど実際には朱色に近い赤なので、 お店の照明の具合でオレンジに見えたのかもしれません。
お店では、オレンジ探してたんですよって店員さんに話しながら ウェアを手に取ったので、その時にソレ赤ですよって突っ込んで欲しかったな…
そんな訳で、さかいやスポーツでは 天然ボケに店員が突っ込んでくれないようなので、 買い物する時は要注意です。(´Д`;)
ま、赤も嫌いじゃないので別にいいや *1
*1: とか言いつつ愚痴ってるよね、この文章w

2008年10月12日(日)

大倉尾根往復

一人 *1大倉尾根 をつたって 塔ノ岳 まで登ってきました。
結構楽勝。最終的に 3リットル程水が余りましたし。

熊注意:

入り口:

序盤:

少しずつキツくなります。角度とか。

見晴茶屋:

満席だったので素通り。

坂坂坂:

ずーーーーーっと上り坂が続きます。もう笑うしかないです。

駒止茶屋:

風景:


見晴らし的にはアレですが、これはこれでオツなものです… (強がってみるテスト

堀山の家:

中盤:

ここからが地獄の始まり。(´∀`)

休憩:

後半:

更にペース・アップ

花立山荘:

終盤:

まだまだ続くよ。登り坂。

緑が一杯です。

あと一息:

頂上:


ワーッ。イイナガメダー (棒読み)

… 周りに何も見えません… ・゚・(ノД`)・゚・

帰り:

デジカメ手に持っての降りは結構きついです。
何度かアングルに納得いかなくて登り直したりしてますし。(´Д`;)

紅葉の兆候:

所々、葉が赤くなってます。

さて…:

頂上の眺め。2戦2敗… ○rz
次こそは…

*1: 仲間募集中。(;∇;)
でもバカ尾根に登りたがる人なんて、そういないだろうなぁ…


2008年10月14日(火)

[swfed] 画像フォーマットを気にせず image_id で画像入れ替えできるように

今までは、BitsLossless に対しては png 画像を。BitsJpeg に対しては jpeg 画像しか差し替えられなかったのですが、BitsJpeg に対して png 画像を。また、その逆でも差し替えが出来るようにしました。
あと、BitJpeg(1) にαチャネルを与えてもマスクが効きませんでしたが、 αチャネルがわたった場合に BitJpeg3 にタグを変換する処理も入れたので、 今後はαチャネルによるマスクが有効になります。
つまり、指定した image_id で入っている画像のフォーマットを意識せずに、 png でも jpeg でもαチャネルでも放り込めるようになったという事で… ついでに納得いってなかった箇所を大量に修正して commit。 動作確認が大変そうです。(´Д`;)

追記 (2009年10月7日追記):

「BitsLossless」で検索してこられたかた用のまとめ。

2008年10月15日(水)

[swfed] swfdump のソースコード公開

SWF ファイルの中身を解析するページを用意してますが、
http://awm.jp/~yoya/php/flash/swfdump/
移動しました。↓ これのソースコードを公開してという声は以前からあり、 また、使いたいけど仕事で使う SWF ファイルを awm.jp に POST する訳にも いかないので困ってるといった意見もあり、 ようやくですが、コードを公開しました。 (次回リリースからは tarball に含まれます) POST されたファイルを保存して id でアクセスする方式なので、 容量に余裕のあるディレクトリを define.php で指定して下さい。
何もしないと /tmp/swf-<id>.{swf} や /tmp/swf-<id>-<image_id>.(png|jpg) のファイルが出来ます。
% cd htdocs
% svn co http://svn.sourceforge.jp/svnroot/swfed/trunk/www
% mv www swfed
% cd swfed
% vi define.php
要望は随分前からあったので、対応が遅れたのはホントにごめんなさい。
汚いコードなのと、あと swfed の API で細かい所がなかなか fix 出来なかったので躊躇してました。

2008年10月18日(土)

CentOS で swfdec の install に挑戦 (失敗)

GLIB:

checking for GLIB... no
configure: error: glib-2.0, gobject-2.0 and gthread-2.0 >= 2.16 are required to build swfdec
glib2-devel や gtk2-devel を yum install してもダメ。
とりあえず、 GLIB=2.16 GLIB=2.0 に書き換えて他に問題ないか調べてみる。

PANGO:

checking for PANGO... no
configure: error: pangocairo >= 1.16 is required to build swfdec
CentOS だと 1.14 が入ってますね… これも外してみる… PANGO_VER=1.16 PANGO_VER=1.14

GTK SOUP:

checking for GTK... configure: error: Package requirements (gtk+-2.0 >= 2.8.0 libsoup-2.4) were not met:

No package 'libsoup-2.4' found
libsoup-2.4 を libsoup-2.2 に書き換えてと… φ。。

ALSA:

checking for ALSA... configure: error: Package requirements (alsa >= 1.0) were not met:

No package 'alsa' found
yum install alsa-lib-devel

LIBOIL:

checking for LIBOIL... no
configure: error: liboil-0.3 >= 0.3.1 is required to build swfdec
yum install liboil-devel

CAIRO:

checking for CAIRO... no
configure: error: cairo and cairo-png = 1.6.0 is required to build swfdec
Package cairo-devel - 1.2.4-5.el5.i386 is already installed.
なので、 CAIRO_VER=1.6.0CAIRO_VER=1.2.4

GST:

checking for GST... no
configure: error: Couldn't find GStreamer 0.10.11 and gstreamer-pbutils 0.10.15.
yum install  gstreamer-devel
<略>
Installed: gstreamer-devel.i386 0:0.10.9-3.el5
Complete!
これもバージョンが古いか…
yum install gstreamer-plugins-base-devel
これでもダメなので諦め。
./configure --disable-gstreamer

2008年10月20日(月)

CentOS で swfdec の install に挑戦 (失敗) (2)

glib-2.15:

In file included from jpeg.c:10:
/usr/include/stdlib.h:589: error: conflicting types for 'g_malloc'
/usr/include/glib-2.0/glib/gmem.h:47: error: previous declaration of 'g_malloc' was here
glib-2.15 (2.16 は見つからず、かつ 2.2x はインターフェース変わってるので) を /usr/local に install してチャレンジ。
env \
GLIB_CFLAGS="-pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include" \
./configure --disable-gstreamer --disable-gtk
jpeg.c: In function 'jpeg_decoder_verify_header':
jpeg.c:68: error: 'G_STRFUNC' undeclared (first use in this function)
jpeg.c:68: error: (Each undeclared identifier is reported only once
jpeg.c:68: error: for each function it appears in.)
jpeg.c: In function 'jpeg_decoder_init_decoder':
jpeg.c:168: error: 'G_STRFUNC' undeclared (first use in this function)
G_STRFUNC の定義は 2.12 ではあったけど、2.15 では消えてました。 でもって、2.2 でもないです。最新の 2.9.6 で発見したのでこれで…

swfdec/jpeg.c:

In file included from jpeg.c:10:
/usr/include/stdlib.h:589: error: conflicting types for 'g_malloc'
/usr/local/include/glib-2.0/glib/gmem.h:47: error: previous declaration of 'g_malloc' was here
stdlib.h より先に glib の define 置換を読み込んで malloc の名前が 変わってしまってる不具合発見。

swfdec/jpeg/cogcompat.h:

stdlib.h より前に glib.h を include してる cogcompat.h を修正。
#include <swfdec_debug.h>
#include <stdlib.h> /* append by yoya */
#include <glib.h>

g_ascii_strtoll:

swfdec_as_context.c:1100: warning: implicit declaration of function 'g_ascii_strtoll'
swfdec_as_context.c:1100: warning: nested extern declaration of 'g_ascii_strtoll'
make[2]:
むー… g_ascii_strtoll の定義は 2.12 ではあったけど 2.96 では消えてますね…
glib の定義がふらふらしてるのは何とかならないものか…

2008年10月21日(火)

[swfed] make test に挑戦

折角なのでフレームワークにのっとって。 tests/getjpeg.phpt を作成。
--TEST--
SWF Editor getJpegData: SWF Editor support for DefineBitsJPEG
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
echo "ok\n";
?>
--EXPECT--
ok
とりあえず ok だけ出力させて実行。
% make test
=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
SWF Editor getJpegData: SWF Editor support for DefineBitsJPEG [tests/getjpeg.phpt]
========
ダメらしい
tests/getjpeg.log を読むと、
---- EXPECTED OUTPUT
ok
---- ACTUAL OUTPUT
Warning: Module 'swfed' already loaded in Unknown on line 0
ok
---- FAILED
… install 済みの so と作ったばかりの so がぶつかってるんだろうけど、 一体どうすれば…

2008年10月22日(水)

[swfed] 0.14 release

あと、細々とした修正が沢山入っているので、デグレードが心配です。(ぉぃ
次回までにはユニットテストの自動化が出来ますように… (・人・)

2008年10月23日(木)

CentOS で swfdec の install に挑戦 (多分、成功)

ごり押しだとダメなので、真面目にインストールする事にしました。
方針としては、必要なパッケージを先に /usr/local/ に入れて、 それを参照させる事。当たり前だけど…
問題は configure が /usr/bin/pkg-config を
% pkg-config  --exists --print-errors "glib-2.0 >= 2.17.3 gobject-2.0 gmodule-no-export-2.0"
Requested 'glib-2.0 >= 2.17.3' but version of GLib is 2.12.3
って感じでチェックするので、/usr/local で頑張っても /usr に入ってる パッケージでバージョンチェックして跳ねられるんですよね。

pkg-config:

pkg-config のデータが何処にあるかというと、
% ls /usr/lib/pkgconfig/
ImageMagick.pc            gnome-mime-data-2.0.pc          pango.pc
Wand.pc                   gnome-python-2.0.pc             pangocairo.pc
alsa.pc                   gnome-python-desktop-2.0.pc     pangoft2.pc
	<略>
こんななってて、pc ファイルの中は
% cat /usr/lib/pkgconfig/ImageMagick.pc
prefix=/usr
exec_prefix=/usr
libdir=/usr/lib
includedir=/usr/include

Name: ImageMagick
Description: ImageMagick - Convert, Edit, and Compose Images
Version: 6.2.8
Libs: -L${libdir} -lWand -lMagick
Cflags: -I${includedir}
こんなです。
手動で入れたパッケージに対応するファイルは、 /usr/local/lib/pkgconfig/ にあるので、これを参照する pkg-config を /usr/local/bin に置けば解決っぽい。
0.21 が出てるっぽいけど http://pkg-config.freedesktop.org/releases/ にアクセスできないので、riken から 0.20 をゲットして、普通に configure & make install
% /usr/local/bin/pkg-config --libs glib-2.0
-L/usr/local/lib -lglib-2.0
これで、おk

対象バージョン:

swfdec-0.8.0 でコンパイルする事にします。

必要なパッケージ一覧:

% grep _VER= configure
GLIB_VER=2.16
PANGO_VER=1.16
GTK_VER=2.8.0
LIBOIL_VER=0.3.1
CAIRO_VER=1.6.0
2.19 は開発版らしいので、とりあえず 2.18。 どうでもいいけど、GNOME のトップからダウンロードページを 探すのが大変なのですが… プレイヤーを動かす気はないので GTK は要らないかな。 あと、gstreamer も面倒なので後回し。
env PKG_CONFIG=/usr/local/bin/pkg-config ./configure \
--disable-gtk --disable-gstreamer

cairo-1.8.0:

env PKG_CONFIG=/usr/local/bin/pkg-config ./configure
checking for cairo's image surface backend feature...
checking for pixman... no
no
checking whether cairo's image surface backend feature could be enabled...
no (requires pixman-1 >= 0.12.0 http://cairographics.org/releases/)
configure: error: mandatory image surface backend feature could not be enabled
怒られた…

pixman-0.12.0:

env PKG_CONFIG=/usr/local/bin/pkg-config ./configure
で make install

cairo-1.8.0 再び:

今度は おk

liboil-0.3.15:

env PKG_CONFIG=/usr/local/bin/pkg-config ./configure
問題なし。順調。

cairo-1.8.0:

env PKG_CONFIG=/usr/local/bin/pkg-config ./configure
	<略>
configure: WARNING: Could not find libpng in the pkg-config search path
checking whether cairo's PNG functions feature could be enabled... no
configure: error: recommended PNG functions feature could not be enabled
/usr/local にも入れるか…

libpng-1.2.32:

cairo-1.8.0 再び:

env PKG_CONFIG=/usr/local/bin/pkg-config ./configure
	<略>
configure: error: Cairo requires at least one native font backend.  Please install FreeType and fontconfig and try again.
ふーむw

FreeType-2.3.7:

fontconfig-2.5.93:

env PKG_CONFIG=/usr/local/bin/pkg-config ./configure

cairo-1.8.0 三度:

env PKG_CONFIG=/usr/local/bin/pkg-config ./configure
	<略>
cairo (version 1.8.0 [release]) will be compiled with:

The following surface backends:
  Image:         yes (always builtin)
  Xlib:          yes
  Xlib Xrender:  yes
  Quartz:        no (requires CoreGraphics framework)
  Quartz-image:  no (disabled, use --enable-quartz-image to enable)
  XCB:           no (disabled, use --enable-xcb to enable)
  Win32:         no (requires a Win32 platform)
  OS2:           no (disabled, use --enable-os2 to enable)
  PostScript:    yes
  PDF:           yes
  SVG:           yes
  glitz:         no (disabled, use --enable-glitz to enable)
  BeOS:          no (disabled, use --enable-beos to enable)
  DirectFB:      no (disabled, use --enable-directfb to enable)

The following font backends:
  User:          yes (always builtin)
  FreeType:      yes
  Win32:         no (requires a Win32 platform)
  Quartz:        no (requires CoreGraphics framework)

The following functions:
  PNG functions: yes

And the following internal features:
  gcov support:  no
  test surfaces: no (disabled, use --enable-test-surfaces to enable)
  ps testing:    yes
  pdf testing:   no (requires poppler-glib >= 0.9.2)
  svg testing:   no (requires librsvg-2.0 >= 2.15.0)
ふむ。

pango-1.22.1:

env PKG_CONFIG=/usr/local/bin/pkg-config ./configure

swfdec-0.8.0:

env PKG_CONFIG=/usr/local/bin/pkg-config ./configure \
--disable-gtk --disable-gstreamer
	<略>
checking for ALSA... configure: error: Package requirements (alsa >= 1.0) were not met:

No package 'alsa' found
面倒なので手抜き
# ln -s /usr/lib/pkgconfig/alsa.pc  /usr/local/lib/pkgconfig/.
これ、おk

動作確認:

tools 以下に生成された dump コマンドがそれっぽく動いてるので、成功してるっぽい。
% ./tools/dump  ~/flash/chara.swf
file:
  version: 6
  rate   : 30 fps
  size   : 800x545 pixels
objects:
1: SwfdecImage
  JPEG with global table 800 x 545
2: SwfdecShape
800x545 image 1 (no repeat, bilinear)
3: SwfdecFont
  _????
  11 characters
4: SwfdecTextField

マニュアル:

なるほど、なるほど…
freedesktop.org が不安定なので tar.gz から取り出した ドキュメントを以下の場所に設置。

追記 (2009/04/07):


2008年10月24日(金)

[swfed] make test に挑戦 (2)

Makefile:

$(PHP_EXECUTABLE) -d 'open_basedir=' -d 'safe_mode=0'
-d 'output_buffering=0' -d 'memory_limit=-1'
$(top_srcdir)/run-tests.php
-d 'extension_dir=modules/'
-d `( . $(PHP_MODULES) ; echo extension=$$dlname)` tests/;
なるほど。ここの extension 読み込みを削除しつつ、 so ファイルを install してから make test をすれば、OK と。
$ make test
	<略>
=====================================================================
Running selected tests.
PASS SWF Editor getJpegData: SWF Editor support for DefineBitsJPEG [tests/getjpeg.phpt]
=====================================================================
Number of tests :    1                 1
Tests skipped   :    0 (  0.0%) --------
Tests warned    :    0 (  0.0%) (  0.0%)
Tests failed    :    0 (  0.0%) (  0.0%)
Tests passed    :    1 (100.0%) (100.0%)
---------------------------------------------------------------------
Time taken      :    0 seconds
=====================================================================
おk。テストパターンを書きまくろう。

valgrind:

run-test.php を読むと
    -m          Test for memory leaks with Valgrind.
memory leak も見てくれるらしいので、install
# yum install valgrind
さて…

テストパターン:

とりあえず、以下のパターンを作ってみます。
  • getJpegData (JPEG, JPEG2, JPEG3 形式から抽出)
  • replaceJpegData (JPEG, PNG 形式で入れ替え、各々透明度付きで入れ替え)
  • getPNGData (Lossless, Lossless2 形式から抽出)
  • replacePNGData (PNG, JPEG 形式で入れ替え、各々透明度付きで入れ替え)
  • getEditString
  • replaceEditString
  • set|getHeaderInfo (compress, version)
素材 flash を作らねば…

2008年10月25日(土)

swfdec を使ってみました

CentOS へのインストールメモはこちら

swf movie header:

rate = swfdec_player_get_rate(player);
swfdec_player_get_default_size(player, &width, &height);
printf("rate=%1.1f\n", rate);
printf("width=%d height=%d\n", width, height);
% gcc swfdec_getheader.c `pkg-config --cflags --libs swfdec-0.8` \
                         -Wl,-rpath,/usr/local/lib
% a.out ~/flash/chara.swf
rate=30.0
width=800 height=545
あっさり、frame_rate と rect が取れました。

2008年10月26日(日)

giflib QuantizeBuffer

giflib には QuantizeBuffer という減色ルーチンが含まれています。 試しに使ってみました。


…問題外 (´Д`;)
ここまでひどいと使い方を間違えているような…

giflib/util/rgb2gif:

切り分けの為に、giflib 付属の rgb2gif (内部で QuantizeBuffer を使ってるコマンド)で変換しました。 rgb ファイルの生成プログラムを即興で作成。
% gcc png2rgb.c -lpng bitstream.c
% ./aout test0.png > test0.rgb
% rgb2gif -1 -s 512 382 test_0.rgb > test_0-2.gif
使用前 使用後
かなり良くなりましたが、それでも実用的な品質じゃないですね…
やはり減色ルーチンは探すか作るかしないとダメそう。

QuantizeBuffer 再び:

写真を良く見てたら、rgb の r と b が逆だという事に気づきました。
元データが BGRA だったので対応するようにコードを修正。


どのみち、QuantizeBuffer がダメな事には変わりないですが…

2008年10月29日(水)

Fantasy Earth Zero を試してみた

FFXI の毒がすっかり抜けたので、お次は FEZ かなと。
(オンラインゲームの毒は抜けないらしい) うちのメインマシンは、 Core Duo 2.4G に memory 3G で GeForce 7600GT なので spec 的には大丈夫なはず。

パッチダウンロード:

フレッツ光回線で30分近くかかったけど無事に完了。

遊ぶ以前の問題:

  • 起動はするが、start ボタンを押すと黙って終了する。
  • 2度目は start を押してキャラ選択ボタンを押せたが、押した瞬間終了。
  • 3度目も同じ。
  • 4度目はキャラ選択画面までいけたが、その直後に終了。
  • 5度目も同じ。
  • 6度目はキャラ選択画面でジョブを選択できたら、選択した瞬間終了。
  • フルスクリーンにしても同じ。
沢山、試したからもういいや…(・ω・)
FFXI の重たいコンテンツ *1 でも、さくさく動いてた PC なのに…

追記 (2009/04/07):

何故か swfdec の検索でこのページに辿りつく事があるので誘導。

*1: 裏世界、ビシージ、あとフルアラのプロミヴォン等々

これで、21 日分だよ〜。

タイトル一覧
カテゴリ分類
Database
JXTA
Java
XML
awm
bookmark
keyword
memo
news
research
Powered by hns-2.19.5, HyperNikkiSystem Project