Инициализация QuickTime
QuickTime должен быть инициализирован, прежде чем приложения или компоненты могут выполнить вызовы к фильму в формате QuickTime Панель инструментов.
Если Вы пишете потоковое приложение и намереваетесь вызвать функции QuickTime от многократных потоков, необходимо инициализировать QuickTime для каждого рабочего потока явно.
Приложения Windows должны инициализировать Уровень Носителей QuickTime (QTML) до инициализации самого QuickTime. Это также служит, чтобы проверить, что установлен QuickTime для Windows.
Как часть процесса инициализации, обычно желательно проверить установленную версию QuickTime, чтобы гарантировать, что все требуемые функции присутствуют на машине пользователя. Это может также служить методом, чтобы проверить, что QuickTime установлен до инициализации его.
Инициализация уровня носителей QuickTime для Windows
Если Ваше выполнение приложения на операционной системе Windows, необходимо проверить, что QuickTime установлен, и инициализируйте Уровень Носителей QuickTime (QTML). Единственный вызов к InitializeQTML делает обоих. Перечисление 2-1 показывает вызов InitializeQTML.
Вызов перечисления 2-1 InitializeQTML
static void QuickTimeQTML (void) |
{ |
OSErr err; |
err = InitializeQTML(0L); |
CheckError (err, "InitializeQTML error" ); |
} |
Используйте InitializeQTML функция для инициализации QuickTime прежде, чем вызвать любую другую функцию QuickTime. Рекомендуется вызвать InitializeQTML в самом начале Вашей программы, в Вашем WinMain функция, прежде, чем создать Ваше главное окно.
InitializeQTML флаги поддержек, позволяющие Вам указывать, как QuickTime должен вести себя. Например, можно сказать QuickTime работать исключительно в полноэкранном режиме или использовать Windows Graphics Device Interface (GDI) для всего получения, а не службы DirectDraw или DCI.
Если QuickTime не установлен, InitializeQTML функция не доступна, и ошибка возвращается.
Если Ваше приложение распределяется на CD, необходимо включать установщики QuickTime на диске и выполнить установщик Windows, если не присутствует QuickTime. (Включая установщик требует лицензии от Apple, но в настоящее время нет никакого сбора за такую лицензию. Для получения лицензии щелкните по ссылке QuickTime в http://developer .apple.com/softwarelicensing/agreements/quicktime.html и следуйте инструкциям там.) Также можно предложить пользователю загружать QuickTime в http://www .apple.com/quicktime/download/.
Если Вы пишете подпрограмму, не знающую ли InitializeQTML был уже вызван, вызвать InitializeQTML в начале подпрограммы и TerminateQTML в конце.
Это не причиняет вреда для вызова InitializeQTML несколько раз пока каждый вызов вкладывается с соответствующим вызовом к TerminateQTML. Если эта функция была уже вызвана, последующие вызовы не делают ничего кроме инкремента счетчик. Вызовы к TerminateQTML просто постепенно уменьшите счетчик (если это является ненулевым). Только первый вложенный вызов и последний вложенный вызов к TerminateQTML выполните любую фактическую работу, таким образом, нет никакого штрафа за то, что имели многократные вложенные вызовы.
Как только Уровень Носителей QuickTime был инициализирован, программисты Windows должны выполнить те же шаги, за которыми программисты Mac OS следуют, чтобы протестировать версию QuickTime и инициализировать сам QuickTime.
Проверка версии QuickTime
Ваше приложение может хотеть проверить версию QuickTime, установленного в системе пользователя во время выполнения, определить, поддерживаются ли все необходимые функции. Необходимо сделать это прежде, чем инициализировать QuickTime.
Для получения версии QuickTime, установленного на компьютере пользователя, вызовите Gestalt функция (необходимые части которого включены в QuickTime для Windows). Gestalt функционируйте возвращает версию QuickTime, если надлежащие селекторы передаются в, как показано в Перечислении 2-2.
Перечисление 2-2 , Получающее версию QuickTime с Гештальтом
{ |
/* check the version of QuickTime installed */ |
long version; |
OSErr result; |
result = Gestalt(gestaltQuickTime,&version); |
if ((result == noErr) && (version >= 0x05020000)) |
{ |
/* we have version 5.0.2 or later */ |
} |
} |
Инициализация среды QuickTime
Ваше приложение инициализирует рабочую среду QuickTime путем вызова EnterMovies.
EnterMovies(); |
Если Вы пишете подпрограмму, не знающую, был ли QuickTime уже инициализирован, идет вперед и вызывает EnterMovies; повторные вызовы не причиняют вреда.
Вы не должны балансировать вызовы к EnterMovies с вызовами к ExitMovies. Вызвать ExitMovies только если Вы сделаны с помощью QuickTime и хотите освободить ресурсы как можно скорее, не завершая приложение. ExitMovies когда Ваше приложение выходит, вызывается автоматически.
Пользователи Windows должны инициализировать QTML перед вызовом EnterMovies, как показано в Перечислении 2-3.
Перечисление 2-3 , инициализирующее QTML и QuickTime для Windows
static void InitQTMLandQuickTime (void) |
{ |
OSErr err; |
err = InitializeQTML(0L); |
CheckError (err, "InitializeQTML error" ); |
EnterMovies(); |
} |
EnterMovies инициализирует единственную, неповторно используемую среду QuickTime для Вашего приложения.
Если Ваше приложение использует QuickTime на многократных потоках одновременно, вызвать EnterMoviesOnThread от каждого потока, использующего QuickTime для создания локальной среды QuickTime для того потока (требует QuickTime 6 или позже).
Для получения дополнительной информации о потоковом программировании и QuickTime, посмотрите Техническое примечание TN2125, Ориентированное на многопотоковое исполнение программирование в QuickTime.