Scenarist Pro: часть 6

4.6. Программирование в Scenarist Pro

     DVD стандарт, кроме возможностей по установке примитивных связей между объектами DVD проекта, разрешает также и программирование действий DVD плеера по воспроизведению DVD-Video диска. Возможности по программированию управления воспроизведением довольно обширны и мы постараемся рассказать о них, пояснив их конкретными примерами. Прежде чем приступить к описанию способов программирования, мы познакомимся с теми объектами, которые используются при программировании.

4.6.1. Системные параметры (регистры)

     Задача системных параметров сохранить и сообщить автору состояние DVD плеера в текущий момент времени. Часть системных параметров определяются и устанавливаются DVD плеером, часть просто индикативных и могут быть только прочитаны. Системные параметры обозначаются как SPRM, всего их 24 (три не используются и зарезервированы для возможных будущих применений) и проще и понятнее считать их системными регистрами. Разрядность SPRM регистра 16 бит и, соответственно, максимальное значение регистра может быть 65535 в десятичной системе или FFFFh в шестнадцатиричной. Значения в регистрах SPRM можно просматривать и изменять (конечно, только разрешенные для изменения) во время воспроизведения во вкладке System Params Simulation window. Таблица ниже описывает SPRM регистры: 

 

Номер регистра Название  регистра в Simulation window Scenarist Наименование Описание Доступность по чтению (R) или записи (W) Значение по умолчанию*
0 Menu Disk Lang Код языка меню Определяет код языка, используемого в меню R Не определено
1 Audio Номер текущего аудио потока Содержит номер текущего проигрываемого аудио потока R/W

000Fh
15d
1111b

2 Subpicture Номер текущего потока subpicture Содержит номер текущего проигрываемого потока subpicture R/W

62d
111110b

3 Angle Номер камеры (Angle number) Содержит номер текущего проигрываемого потока angle (камеры) R/W 1
4 Title # Номер тайтла Содержит номер текущего проигрываемого тайтла R/W 1
5 VTS Title # Номер VTS Содержит номер текущего проигрываемого VTS R/W Равно SPRM 4
6 Title PGC # Номер PGC с текущим тайтлом Содержит номер PGC с текущим проигрываемым тайтлом. Если тайтл включает в себя несколько PGC, то содержимое регистра будет меняться во время воспроизведения. R/W Не определено
7 PTTN Номер главы или сцены (chapter, Part of Title) Содержит номер текущей проигрываемой сцены. Номер, естественно, по мере изменения текущей сцены будет также меняться. R/W 1
8 Highlight Btn Номер последней выбранной кнопки меню Содержит номер последней выбранной кнопки меню R/W 1
 9 Nav Tmr Таймер для навигации Параметр определяет время перехода к проигрыванию PGC, номер которой задается значением в SPRM10. Значение SPRM9 определяется автором и уменьшается каждую секунду текущего воспроизведения на единицу. При переходе к меню или выборе зрителем паузы значение SPRM 9 остается неизменным. SPRM 9 и SPRM 10 могут изменяться только в пределах домена VTS командами навигации. R/W 1
10 Nav Tmr PGC # Номер PGC для перехода по таймеру навигации R/W

 

Не определено
11 Audio Mix Mode Режим караоке DVD плеера Определяет возможности DVD плеера по микшированию аудио каналов для караоке. Если плеер караоке не поддерживает, то параметр игнорируется. R/W 0
12 Country Code  Код страны для управления правами родителей Указывает код страны для возможности запрета родителями просмотра нежелательного видео детьми. R Не определено
13 Parental Level Уровень запрета родителями Определяет уровень запрета, устанавливаемый в соответствии с кодом страны, заданным в SPRM 12 R/W Не определено
14 Player Config Конфигурация плеера для просмотра видео Определяет соотношение сторон кадра и текущий режим показа R Не определено
15 P-CFG for Audio Поддержка воспроизведения звука Определяет возможности плеера по поддержке различных форматов звука, таких как Dolby Digital, MPEG, DTS и т.д.  R Не определено
16 Initial Lang Code Стартовый код языка для звука Определяет код языка и его расширение для текущего проигрываемого аудио потока. R FFFFh
17 Initial Lang Code Ext Стартовое расширение кода языка для звука R 00h
18 INI_LCD for SPST Стартовый код языка для subpicture Определяет код языка и его расширение для текущей проигрываемой subpicture. R FFFFh
19 INI_LCD_EXT for SPST Стартовое расширение кода языка для subpicture R 00h

 

20 Player Region Code Код региона плеера Сообщает установленный в плеере код региона. R Не определено
21, 22, 23   Резерв      

*Примечание: если число в этом столбце заканчивается буквой h, то оно приводится в шестнадцатиричной системе счисления, если буквой d - десятичной, буквой b - двоичной. 

4.6.2. Общие параметры (регистры общего назначения)

      Регистры общего назначения (GPRM) отличаются от системных (SPRM) тем, что они находятся в полной власти автора диска и он волен проделывать с ними любые допустимые операции. Разрядность GPRM регистра 16 бит и, соответственно, максимальное значение регистра может быть 65535 в десятичной системе или FFFFh в шестнадцатиричной. Значения в регистрах GPRM можно просматривать и изменять во время воспроизведения во вкладке General Params Simulation window. Всего этих регистров 16 и над ними допускаются следующие операции (выполняются по команде Set):

  • Assign (Присвоение) - присвоение регистру любого числового значения в диапазоне от 0 до 65535, а также значения, находящегося в любом другом GPRM или SPRM регистре.

  • Exchange (Обмен) - обмен содержимого одного GPRM регистра с другим GPRM регистром.

  • Add (Сложить) - прибавление к  содержимому GPRM регистра числа или содержимого другого регистра или сложение значений в двух GPRM регистрах.

  • Subtract (Вычитание) - вычитание числа из содержимого GPRM регистра, вычитание из содержимого одного регистра содержимого другого.

  • Multiplay (Умножение) - умножение числа на содержимое GPRM регистра или умножение содержимого двух GPRM регистров. 

  • Divide (Деление) - деление содержимого GPRM регистра на число или деление содержимого одного GPRM регистра на другой и запись частного от деления, которое не может быть равно нулю. 

  • Remainder (Остаток) -  запись остатка от деления числа на значение GPRM регистра или остатка от деления одного регистра GPRM на другой.

  • Random Value (Случайное значение) - присвоение GPRM регистру случайно выбранного числа, которое не может быть равно нулю.

  • Bitwise Product (Побитовое умножение) - присвоение GPRM регистру результата побитовой операции AND (И) одного GPRM регистра с другим, числа с GPRM регистром, регистра GPRM с SPRM и т.д.

  • Bitwise Sum (Побитовое сложение) - присвоение GPRM регистру результата побитовой операции OR (ИЛИ) одного GPRM регистра с другим, числа с GPRM регистром, регистра GPRM с SPRM и т.д.

  • Exclusive OR (Исключающее ИЛИ) - присвоение GPRM регистру результата побитовой операции Exclusive OR (Исключающее ИЛИ) одного GPRM регистра с другим, числа с GPRM регистром, регистра GPRM с SPRM и т.д.

4.6.3. Команды в Scenarist

     Собственно говоря, все действия автора по соединению между собой объектов DVD проекта преобразуются программой Scenarist в различные команды. Но кроме автоматически формируемых команд, существует множество команд, которые автор может добавить только вручную. "Прикрепить" команды можно только к таким объектам в PGC:

  • Pre - команды будут выполняться ДО воспроизведения PGC. На один Pre можно "повесить" до 128 команд.

  • Post - команды будут выполняться ПОСЛЕ воспроизведения PGC. На один Post можно "повесить" до 128 команд.

  • Cell - команда будет выполняться после воспроизведения ячейки (Cell) PGC. На одну Cell можно формально "повесить" до 128 команд, но выполнится только первая из них. Если в PGC только одна Cell, то команда в Cell будет выполнена раньше команды (команд) в Post. Команды на Cell рекомендуется назначать только в случае невозможности какого-либо иного пути, поскольку это приведет в большинстве случаев к заметной на глаз задержке при воспроизведении фильма и флаг SM Cell с командой автоматически изменится на NSM.

  • Btns - в этом месте изначально можно "повесить" только команды перехода, которые потом, впрочем, можно изменить. Но добавить какие-либо команды в Simulation Window или еще каким-либо способом нельзя. 

4.6.3.1. Команды безусловного перехода (Jump)

    Команды перехода (Jump) применяются автором чаще других и чаще всего сам автор об этом и не подозревает, поскольку именно в команды Jump преобразуются большинство действия автора по соединению объектов фильма связями. Команды Jump могут быть такими:

  • Jump to PGC (Переход к PGC) - соединяет меню или тайтл с другим меню или тайтлом внутри одного VTS.

  • Jump to Program (Переход к Program в PGC) - соединяет меню или тайтл с chapter (сценой, главой) внутри одной PGC.

  • Jump to Cell (Переход к ячейке) - соединяет меню или тайтл с ячейкой (Cell) внутри одной PGC.

  • Jump by Sub-Instructions (Переход с выполнением дополнительной операции) - с помощью этой команды можно решить много задач, но самым популярным применением команды является возврат из меню в то же место фильма, откуда выполнялся переход в меню - Jump by Sub-Instructions/Resume. Также может использоваться для изменения содержимого регистра SPRM 8 изменением номера текущей выделяемой кнопки.

  • Jump to Title (Переход к тайтлу) - соединяет меню или тайтл с любым тайтлом внутри одного VTS.

  • Jump to Part of Title (Переход к главе(сцене) - соединяет тайтл с главой (сценой) внутри того же тайтла. Не может быть использована в Pre.

  • Jump to Part of Title in VTS (Переход к главе(сцене) внутри VTS) - соединяет тайтл с любой главой (сценой) в любом тайтле внутри VTS. Может быть использована в Pre.

  • Jump to PGC in System Space (Переход к PGC в проекте) - соединяет тайтл или меню с другим тайтлом или меню в проекте. Необходима для соединения компонентов проекта из разных VTS или, например, для соединений из Video Manager в VTS.

4.6.3.2. Группы и типы команд
4.6.3.2.1. Группы команд

Группа Какие основные задачи решают команды группы Могут быть объединены с командами из групп
Link (Соединить) Старт видео в текущем домене Set, Compare и SetSystem
Jump Старт видео в указанном домене Compare
GoTo Переход к другой команде навигации Compare
Compare Сравнивает указанные параметры Jump, GoTo, Set, Link и SetSystem
SetSystem Устанавливает навигационные параметры Link и Compare
Set Задает значения GPRM  Link и Compare

4.6.3.2.2. Типы команд

     Всего существуют три типа команд согласно DVD стандарту. Это:

  • Первый тип (Type 1) - команды этого типа всегда состоят только из одной инструкции.

  • Второй тип (Type 2) - команды этого типа состоят из 2-х инструкций.

  • Третий тип (Type 3) - команды этого типа включают в себя команды из групп Compare, Set и Link to SubInstruction и тем самым состоят из трех инструкций.

Правила использования команд различных типов сведены в таблицу:

 

Команда Тип Описание Количество инструкций в команде
GoTo 1 Меняет порядок выполнения инструкций 1
Link 1 Начинает выполнение указанного действия внутри домена (включая выделение кнопки) 1
Jump 1 То же самое, что и Link, но в другом домене 1
Compare GoTo 1 Если результат сравнения истина (true), то выполнение команды GoTo 1
Compare Link 1 Если результат сравнения истина (true), то выполнение команды Link 1
Compare Jump 1 Если результат сравнения истина (true), то выполнение команды Jump 1
SetSystem 2 Установка навигационных параметров (регистров) GPRM и SPRM 2
Set 2 Установка GPRM 2
Compare SetSystem 2 Если результат сравнения истина (true), то выполнение команды SetSystem 2
Compare Set   Если результат сравнения истина (true), то выполнение команды Set 2
SetSystem Link 2 Сначала выполнение команды SetSystem, затем Link 2
Set Link 2 Сначала выполнение команды Set, затем Link 2
Set Compare LinkSIns 3 Сначала выполняется команда Set, затем, если результат сравнения по команде Compare истина (true), то переход к выполнению команды LinkSIns 3
Compare & Set - LinkSIns 3 Сначала выполняется команда сравнения Compare и, если результат сравнения истина (true), то затем последовательно выполняются команды Set и LinkSIns 3
Compare - Set & LinkSIns 3 Сначала выполняется команда сравнения Compare и, если результат сравнения истина (true), то затем последовательно выполняются команды Set и LinkSIns, причем LinkSIbs в этом случае игнорирует результат сравнения 3

Для того, чтобы дальнейшая работа с командами в Scenarist была более понятной, позволим себе напомнить некоторые азы булевой алгебры, без которых освоение программирования в Scenarist будет затруднено. Итак, для начала рассмотрим операцию AND (И), которая в Scenarist (и не только в нем, конечно) также обозначается символом &. Эта операция также может называться логическим умножением. Scenarist всегда подразумевает, что данные в регистрах будут сравниваться побитово. Операция AND для каждого бита выполняется следующим образом:

  • 0 & 0 = 0 (False - ложь)

  • 0 & 1 = 0 (False - ложь)

  • 1 & 0 = 0 (False - ложь)

  • 1 & 1 = 1 (True - истина)

Поясним это на примере. Допустим, вы хотите сравнить значения по AND в двух регистрах. В одном из них десятичное число 25 (оно же двоичное 00011010, оно же шестнадцатиричное 1A) с другим, в котором содержится десятичное число 9 (оно же двоичное 00001001, оно же шестнадцатиричное 09). Результат будет таким:

     00011010
     00001001
     -------------
     00001000 = True (Истина) Результат оказался true, поскольку одна единица появилась в результате. В противном случае результат был бы False (Ложь).  Расшифровка обозначений операций сравнения в Scenarist приведена в таблице ниже:

& Логическое AND (И). Результат будет true (истина), если в нем есть хотя бы одна единица. В противном случае он будет равен false (ложь). Если результат true, то будет выполнена следующая команда.
== Если сравниваемые значения РАВНЫ, то команда будет выполнена.
!= Если сравниваемые значения НЕ РАВНЫ, то команда будет выполнена.
>= Если результат РАВЕН или БОЛЬШЕ, то команда будет выполнена.
> Если результат БОЛЬШЕ, то команда будет выполнена.
<= td=""> Если результат РАВЕН или МЕНЬШЕ, то команда будет выполнена.
< Если результат БОЛЬШЕ, то команда будет выполнена.

Теперь настало время перейти к практическим примерам, поясняющим программирование в Scenarist.