プログラミング
Apple IIにおけるSierra製デジタルカメラ
Sierra digital cameras on the Apple II (colino.net)
要約
Apple II用のQuicktakeプロジェクトで、新たにSierraクラスのデジタルカメラ(約80モデル)への対応が進められています。Sanyo VPC-G1やVPC-G200などのカメラに対応するドライバーが開発され、モジュール化により拡張性が向上しました。ただし、JPEGデコーダーの解像度制限や、シリアル通信速度の制約といった課題も存在します。
全文翻訳
約5分で読めます
Kodak DC-50カメラのQuicktake for Apple IIへの対応を成功させた後、私は「システム要件」を大幅に誇張した他のカメラについて調査しました。
libgphoto2のソースコードに基づき、Epson PhotoPCユーザーマニュアルのシステム要件ページを見て、私が(そして彼らが)「Sierraクラス」と呼ぶカメラ群を詳しく調べることにしました。そこには80以上のモデルが参照されており、同じクラスのプロトコルを共有するカメラがたくさんあります。
Apple IIで全てが使用できるわけではありません。私のJPEGデコーダーは640×480ピクセルの画像にハードコードされているからです(これを解除することは可能ですが、メモリとCPUを大量に消費し、すでに十分遅いため、800×600や1024×768のデコードとスケーリングを試す気にはなれません)。640×480ピクセルのカメラに限定されたとしても、多くの選択肢が開かれます。
私はeBayで非常に安価なSanyo製カメラを2台購入しました(1995年製のVPC-G1、Epson PhotoPC PCDC001およびSierra Imaging SD640としても販売されていました。そして1997年製のVPC-G200)。そして2026年の夏のステイケーション中に、私のドライバーを実装し始めました。前回のリリースサイクルでKodak DC50のサポートに至る過程で、カメラドライバーが定義されたインターフェースを持つモジュールになったようにコードを改修しました。これにより、私のプログラムは関連するドライバーのみをメモリにロードできるようになり、フロッピーディスクに収まる限り、Quicktake for Apple IIは任意の数のドライバーで拡張可能になります。
Sanyo VPC-G1 (1995)
Sanyo VPC-G200 (1997)
これは、ボイラープレート以上の何もしない私の「スケルトン」ドライバーです。基本的に、サポートされている機能のビットフィールドと16個の「APIメソッド」を定義します。ほとんどのメソッドはオプションです。唯一必須のエンドポイントは_wakeup、_set_speed、_get_information、_get_pictureです。
#define sierra_features 0b0000000011011111 // ||||||||_ SET_CAMERA_NAME // |||||||__ SET_CAMERA_TIME // ||||||___ SET_QUALITY, // |||||____ SET_FLASH, // ||||_____ TAKE_PICTURE, // |||______ GET_THUMBNAIL, // ||_______ DELETE_PICTURES, // |________ RESERVED, /* Camera callbacks */ void *sierra_callbacks[] = { /* FEATURES */ (void *)sierra_features, /* WAKEUP */ sierra_wakeup, /* SET_SPEED */ sierra_set_speed, /* SET_CAMERA_NAME */ sierra_set_camera_name, /* SET_CAMERA_TIME */ sierra_set_camera_time, /* GET_INFORMATION */ sierra_get_information, /* SET_QUALITY */ sierra_set_quality, /* SET_FLASH */ sierra_set_flash, /* TAKE_PICTURE */ sierra_take_picture, /* GET_PICTURE */ sierra_get_picture, /* GET_THUMBNAIL */ NULL, /* DELETE_PICTURES */ sierra_delete_pictures, /* GET_FILENAME */ sierra_get_filename, /* THUMB_HISTOGRAM */ NULL, /* THUMB_LOAD_DATA */ NULL, /* GET_QUALITY_STR */ sierra_get_quality_str, /* GET_FLASH_STR */ sierra_get_flash_str, };
最終的に、私のSierraドライバーはプログラムがサポートするほぼ全ての機能を実装しています。情報フィールド(カメラ名、カメラ時刻、品質モード、フラッシュモード、撮影済み枚数、残り枚数、バッテリー残量)はすべて読み取り可能で、フラッシュと品質モードは設定可能、写真をスナップすることもできます。
libgphoto2のSierraドライバーは、機能的で理解しやすいため、物事を非常に簡単にしてくれました。あちこちにいくつかのマジックナンバーが散りばめられていますが、それらは理解して#defineにするのが簡単でした。
利用できない唯一の機能はsierra_get_thumbnailです。実際には実装されています。なぜなら、カメラからサムネイルを取得するのは簡単だからです。それは、2つの異なるカメラレジスタを使用して、画像を取得するのと同じ手順です。しかし、サムネイルはJPEGであるため、UIには組み込まれていません。サムネイルが表示されるUIプログラムにJPEGデコーダーをロードする余地は全くないため、除外しました。
Sierraカメラ(少なくとも私が持っている2台のSanyo)のもう一つの小さな煩わしさは、シリアルチップを安価なものにしたように見えることです。PCでは115200bpsで通信できますが、Apple IIではできません。Sigrokの信号キャプチャを見ると、ストップビットの後にスタートビットが早すぎるため、Apple IIのACIA 6551がフレームエラーを発生させます。そのため、IIgsでさえ速度は19200bpsに制限されます。
ストップビットが早期に始まるストップビットで始まるスタートビットが表示された、Pulseviewで見たSigrokキャプチャ。
Sanyo VPC-G200から直接撮影された、木々のある建物の写真
サポートされているカメラ
私がテストしたカメラのみを記載すると、以下がサポートされます。
Sanyo VPC-G1
Epson PhotoPC PCDC001
Sierra Imaging SD640
Sanyo VPC-G200
以下のカメラは、テストはしていませんが、そのまま動作する可能性が高いと強く疑っています。
Agfa ePhoto 307
Agfa ePhoto 780
Epson PhotoPC 500
Epson PhotoPC 550
Olympus C-400
Olympus C-400L / D-200L
Olympus C-410L
Olympus C-420L / D-220L
Polaroid PDC-640
Sanyo VPC-G210
Sanyo VPC-G250
リファクタリングと次のステップ
Sierraドライバーが書かれ、カメラドライバー自体がフロッピーディスク上で(zx02を使用して)圧縮されているにもかかわらず、プログラムのフロッピーディスクには6kBしか残っていませんでした。重要なものを追加するには全く十分ではありません…そして、さらに多くのカメラドライバーを追加する予定です!
そのため、UIと画像デコーダーのバイナリ自体も圧縮し続けました。自己解凍型にすることもできましたが、それはバイナリごとにデコンプレッサーのコピーが複数必要になることを意味します。そこで、Oliver SchmidtのLOADE.SYSTEMを拡張して、zx02圧縮バイナリを扱えるようにしました。
次のステップは、新しいカメラドライバーを見つけて実装することです。それはCanon PowerShot 350、1998年のカメラで、Apple IIより18歳若く、明らかにすごいプロトコルを持っています。
Quicktake for Apple IIプロジェクトの名前を、ますます多くのカメラをサポートしていることを反映するように変更すべきでしょうか?しかし、現在の名前は気に入っていますし、他に良いアイデアもありません。
あなたも好きかもしれません...
WordPress: Mastodonのプレビューカードのサムネイルを修正する方法
SPIISDプロジェクトをフォークした理由
どのように愚か者らしく振る舞い、フリーソフトウェアプロジェクトにお金を失わせるか
記事
前へ
自動レベリングかヒストグラム均等化か?
コメントを残す
あなたのメールアドレスは公開されません。必須項目は*で示されています。
コメント *
名前 *
メール *
ウェブサイト
Δ
このサイトはスパムを減らすためにAkismetを使用しています。コメントデータの処理方法を学ぶ。
WordPress: Mastodonのプレビューカードのサムネイルを修正する方法
SPIISDプロジェクトをフォークした理由
どのように愚か者らしく振る舞い、フリーソフトウェアプロジェクトにお金を失わせるか