GUNの備忘録

なんでも忘れないように書いておくよ

*

QuickTime for Windows

注:この文章はApple社より提供されている「QuickTime Guide for Windows」をあくまでも自分用に和訳したものです。英語が得意ではないのでかなりの確率で間違っている可能性がありますので理解できない場合は原文を読むことをお勧めします。

もしあなたがWindowsの開発者なら、QuikeTimeソフトウェア開発キット(SDK) for Windowsはあなたのアプリケーションに直接QuickTimeの機能を組み込むことができます。もしあなたがMacintoshの開発者なら、SDKはQuickTimeベースの機能をWindowsへ移植するのに必要なツールを提供します。このチャプターでは、QuickTimeとWindowsの両方が働くために理解する必要のある基本的なコンセプトのいくつかを論じます。

背景

QuickTime SDK for Windowsの中核は、Windowsプラットフォーム上でQuickTimeと幾つかのMacintoshのツールボックスルーチンの振る舞いを搭載したWindowsのダイナミックリンクライブラリ(DLL)です。

なぜなら、QuickTimeのルーチン郡はそもそもMacOS向けにデザインがされており、それらはMacOSのデータ構造を操作し、MacOSオペレーティング環境のフィーチャーを想定されています。例えば、QuickTimeのルーチン郡はWindowsスタイルのメッセージよりむしろMacOSスタイルのイベントにより駆動されます。そして、Windowsデバイスコンテキストのの代わりにMacOSグラフィックスポートへそれらの描画を行います。それらをWindows環境で使うため、それら2つのプラットフォーム間を仲介するいくつかの特別な作業をする必要があります。

表1-1は基本的なQuickTime Media Layer(QTML)のコンセプトとそれらとWindowsとの対応です。

Table 1-1 WindowsとQTMLコンセプトとの比較

Windowsコンセプト

QTML での相当物

メッセージ(MSG)

イベント(EventRecord)

 グラフィックスデバイスインターフェース(GDI)

クイックドロー

 デバイスコンテキスト(DC)

グラフィックスポート(CGrafPort)

ウィンドウハンドル(HWND)

ウィンドウポインタ(CWindowPtr)

コモンダイアログボックスライブラリ

スタンダードファイルパッケージ

ここに標準のWindowsアプリケーションの構造の中にどうやってQuickTimeをフィットさせるのか、そして現在あるQuickTimeのドキュメントを理解し、読むために必要な最小限の概念基盤をWindows開発者にお見せするための簡単な答えがあります。
思考の中のそれらの目標とともに、このドキュメント中のプログラミング例は意図的にシンプルに、そして直接的なものとしています。コードサンプルは最も基本的なQuickTimeの機能性:ムービーのプレゼンテーション、ユーザーが操作し、コントロールするその標準的なQuickTimeムービーコントローラーを通してそれらを見せます。

MacOSとWindowsの相違点
Windowsプログラミングのイベントループ構造は、Macintoshのそれに非常に似ています。
相違点は実装方法の詳細にあり、基本的なアプローチにはない。QuickTimeに影響するメジャーな相違点は次の点になります:

・グラフィック環境。QuickTimeはMacOSのQuickDrawを使ってユーザーのスクリーンに描画する、そしてQuickDrawはペンの太さや、背景色、クリップ境界や現在のテキストフォントのような特徴を定義したグラフィックポートと呼ばれるデータ構造に依存します。Windowsは同じような用途でデバイスコンテキスト(DC)を使用する。しかし、デバイスコンテキストは個々のデバイスを特定する(Windowやプリンターのように)。対してMacOSのグラフィックポートは一時にすべての描画操作を包括します。

・データコンテナ。MacOSのリソースはファイルの中に格納された構造化されたデータの項目と、プログラムの振る舞いを決定するのを助ける要求を読み込めます。アプリケーションファイル中のリソースは通常、メニューやダイアログボックスのようなユーザーインターフェース項目の記述を含みます。しかし、むしろアプリケーションの実行可能コードはアプリケーションのファイル中リソースとして格納されます。しかし、Windowsはリソースのコンセプトを使用する上、システムのソフトウェアアーキテクチャにとって重要は重要ではない。

・データタイプコード。QuickTimeはトラックタイプ、メディアタイプ、コンポーネントタイプといった項目を識別するために4つのキャラクタコードを使用します。内部的にはそのコードはシンプルな32bitのInteger型コードです。ソースコード内では’abcd’のようにシングルクォーテーションで囲んだ4つのキャラクタ文字列で表されます。

・ファイルフォーク。Macintoshでのファイルはすべて2つの分割したセクションで構成されており、1つのファイル名で論理的に接続されています。データフォークはシーケンシャルリードを対象とする1つのデータバイトストリームから構成されています。それはDOSやWindowsが一つのファイルとして扱うものに対応します。

・メッセージング。MacOSのイベントは、Windowsのメッセージとコンセプトはにたようなもので、本質的に同じ情報を運びます。しかし、Windowsのメッセージは特定のウィンドウに指図されます。一方MacOSのイベントは現在実行中のプログラムへ全体的に発せられます。

・Windowsレジストレーション。QuickTimeはその自分自身のグラフィックポートのMacOSウィンドウレコードへ1つのポインタによって1つのウィンドウを指示します。Windowsプラットフォームでは、通常はHWNDハンドルによって指定される1つのウィンドウとなります。QuickTime for Windowsはウィンドウへ描画する前に、CreatePortAssociationを呼び出し、あなたのコードからQuickTimeとともにウィンドウを登録しなければならない。この関数はグラフィックポートを作成し、QuickTimeの内部データ構造とウィンドウを関連付けます。

・ファイルタイプ。すべてのMacintoshファイルは4文字のファイルタイプとアプリケーションプログラムを識別する4文字の作成者署名をそのファイルの属性情報にスタンプされています。このテクニックは3文字のDos/Windowsのファイル名拡張子と目標を同じとするものです。

・Stringフォーマット。DOS/WindowsはCスタイル文字列(nullキャラクタで終わるもの)を使用しています。一方、QuickTimeルーチンはPascalフォーム(先頭の1バイトに文字列の長さが入るもの)を使用します。QuickTimeユーティリティ関数c2pstrやp2cstrはこれらのフォーマットを相互に変換します。

・ファイル構造。DOS/WindowsのファイルはMacintoshのリソースフォークに対応するものを持たず、データフォークに相当するもののみを持ちます。これは、あなたがWindowsのファイルシステムにQuickTimeムービーを格納またはアプリケーションを使用しようとした時に問題が生じます。

・ムービーファイル。WindowsのファイルへQuickTimeムービーを格納するために、あなたはムービー構造から分けて提供されるメディアを格納するいくつかの方法が必要となります。

・アプリケーションファイル。既存のQuickTimeアプリケーションをMacintoshからWindowsへ移植する際、アプリケーションプログラム自身に属するリソースをどのように持っていくかという問題が発生します。そのようなリソースは通常Machintosh環境で開発している間は’qtr’ファイルに分けて格納されます。それらは最終的にMacアプリケーションの(‘APPL’)ファイルのリソースフォークとなります。

RezWackと名づけられたユーティリティー(http://developer.apple.com/sdk/index.htmlのQuickTimeWindows SDKで使用可能)は、Windoes環境では、実行可能ファイル(.exe)やダイナミックリンクライブラリ(DLL)ファイルのなかにこれらのリソースを移動します。

公開日:
最終更新日:2014/05/30