PictureFan の ver.0.35.0 を公開しました。
ダウンロードはいつもの場所からどうぞ。
今回もサムネイルを中心に多くの機能追加と不具合修正を行いました。
詳しい更新内容は更新履歴をご覧ください。
DirectShow を利用したプログラムの開発に有用なツールとして GraphEdit があります。
GraphEdit は Windows 7 までの Windows SDK に含まれていたのですが、Windows 8 以降の SDK からは削除されてしまいました。
Microsoft 的には「DirectShow なんか止めて Media Foundation を使え」ということなのでしょうが、未だに多くのプレイヤーやフィルタが DirectShow 向けに開発されているのが現状です。
GraphEdit は Windows 7 の SDK をインストールすれば手に入る訳ですが、GraphEdit のためだけに大きい SDK をインストールしたくはないし、Windows 10 では素直にインストールできなかったりします。
そこで、SDK をインストールせずに必要なファイルだけを取り出す方法をメモとして残します。
PictureFan の ver.0.34.1 を公開しました。
ver.0.34.0 公開以降に見付かった不具合を修正しています。
PictureFan の ver.0.33.1 を公開しました。
ダウンロードはこちらから。
更新内容は以下の通りです。
いつのバージョンからかは分かりませんが(0.32.0?)、TIFF などの Deflate 圧縮が扱えなくなっていました。
原因は zlib のビルドに libpng に付属しているプロジェクトを使ったら、そちらで Z_SOLO というオプションが指定されていて、zlib の一部機能が省かれていたことです。
これでビルドされる zlib は、他でも使うというのは考慮されていなかったようです。
realloc は動的に割り当てたメモリ領域のサイズを変更したい時に使いますが、地味に C99 で仕様が変わっていたことを今更知りました。
C89 では、realloc に関して以下の規定がありました。
If size is zero and ptr is not a null pointer, the object it points to is freed.
つまり、realloc(ptr, 0)
のようにサイズに0を指定すると free(ptr)
と同じになるということですが、C99 ではこの一文が削除されていました。
C99 以降では、realloc(ptr, 0)
の呼び出しで、メモリが開放されて NULL が返るのか、NULL 以外のポインタが返されるのか、処理系定義となりました。
C89 でも malloc(0)
で NULL が返るか、NULL 以外のポインタが返るかは処理系定義だったので、それに準じる仕様にされたということでしょうか。
実際のところ、realloc を free の代わりに使うようなコードはそう無いとは思いますが、メモリ領域を徐々に小さくしていって最後は開放するというような実装をすることはありえなくは無いかな。
追記:
C++11 でも C99 と同様の仕様に改められています。