DVD-lab PRO
.pdf
Команды на DVD диске могут быть во многих местах, но в большинстве случаев Вы будете искать команды PRE и POST. Команда PRE - перед объектом (Кино, Меню), ПОСТ - только после того, как объект отработал.
DVD lab Pro введет команды PRE/POST по умолчанию, чтобы создать все связи, и Вы можете добавить ваши собственные команды перед ними. Это имеет преимущество, так если Вы не хотите, чтобы команды DVD-lab Pro были выполнены, просто помещаете команду Break .
Структура любого объекта похожа на эту это:
PRE |
|
Object |
|
POST |
|
|
|
|
|
Your Custom Commands |
|
MOVIE |
|
Your Custom Commands |
|
MENU |
|
||
|
|
|
|
|
|
|
SLIDESHOW |
|
|
DVD-lab added commands |
|
|
DVD-lab added commands |
|
|
etc. |
|
||
|
|
|
|
|
|
|
|
|
|
Окно VM Command, которое появляется, когда Вы выбираете "Edit VM Commands", отражает эту ситуацию
Обратите внимание: о меню. Меню всегда выполняют команду PRE, когда Вы идете в меню, но если Вы выходите из меню с кнопкой, команда POST меню не выполнена, вместо этого выполнится Button VM Command (одна строка) назначенная на кнопку. Команда POST меню выполнится только если длительность меню окончилась (или при отсутствии цикла для motion или audio меню).
Chapter Commands
Кино может иметь команду VM на каждой главе. Их также называют cell commands(командами ячейки). Когда Вы находитесь в окне Movie, правый щелчок на
указателе главы и в выпавшем меню выберите Chapter VM Command...
Команда главы может быть только одностроковой.
Техническое примечание: Если глава имеет VM команду, возможно возникновение короткой паузы в этом месте при воспроизведении.
DVD Domains
Объекты и команды на DVD могут быть в нескольких различных местах названных доменами. Мы имеем:
●First-play (FP)
●Video Manager (VMG)
●Video Title Set (VTS)
●Video Title Set Menu (VTSM)
Если Вы хотите знать больше о структуре, см. приложение.
Variables (registers, GPRM, SPRM)
Как и любой язык, команды VM имеют несколько регистров (или переменные) которые могут использоваться для чтения или сохранения временных значений.
Есть 16 регистраторов GPRM (General Parameter), которые могут свободно использоваться программистом DVD и 24 регистра SPRM (System Parameters), которые используются для обращения к информации плеера (например регион). Вы не можете записывать в регистры SPRM.
Есть 16 регистров GPRM0 - GPRM15, но как описано выше, DVD-lab Pro заносит в них собственный код VM для выполнения тех команд, которые Вы создаете визуально при проектировании диска. В DVD-lab Pro мы попытались использовать минимальное количество регистров для наших внутренних целей. Это GPRM11...
GPRM15 включительно. Запись в эти регистры производится при использовании DVD-lab Pro-abstraction layer. Не изменяйте их!
Мы постарались использовать как можно меньше регистров, так что Вы можете использовать остальные для ваших собственных потребностей.
DVD-lab Pro reserved GPRM registers
GPRM11 |
Используется, чтобы связать Movie со определенным меню VTS и для подсвечивания кнопки в Menu |
|
|
GPRM12 |
Используется для временного хранения данных |
|
Используется для идентифицикации текущего play-lists* |
GPRM13 |
|
|
Используется как счетчик в списках Counter и Random |
GPRM14 |
|
|
Используется для объекта Return to last menu |
GPRM15 |
|
|
|
* GPRM13 также используется как одноразовый флажок, чтобы удостовериться, что плеер стартует с subtitles OFF.
Вы можете свободно использовать регистры GPRM0... GPRM10 для ваших собственнх VM команд.
PGC Numbers
Мы также упомянем об этом на следующих страницах, но важно помнить:
Для Команд VM добавляется 1 к номеру PGC для всех меню (VTS and VMG)
Первое меню VTS, которое показано в Connections как ROOT, находится в PGCN 2.
Всегда есть скрытое меню для каждого VTS (PGCN 1), которое имеет специальное назначение*. Чтобы посмотреть его VM команды, правый щелчок в окне Project и выбрать VTS Root VM...
Первое меню VMG, которое показано в Connections как TITLE, находится в PGCN 2
Всегда есть скрытое меню (PGCN 1) перед другими видимыми меню VMG, которое имеет специальное назначение*. Чтобы посмотреть его VM команды, правый щелчок в окне Connections на Title Button и выбрать Edit VM Commands...
Вы можете в окне Connection, отобразить истинный номер PGC, выбрав Show PGC. Вы можете использовать этот номер непосредственно в командах VM как номер PGC
* Это не применяется, если Вы планируете Компилировать без Abstraction Layer. Без AL не будет никакого скрытого меню, и поэтому первое видимое меню в DVD-lab Pro также станет PGC 1 как и ожидается
Advanced Authoring - VM Editor
Редактирование VM Commands
Когда Вы нажимаете кнопку Edit, чтобы добавить новую VM Command будет открыт редактор VM Command - VM Editor. VM Editor имеет некоторые особенности, которые помогут Вам записывать синтаксически правильный сценарий. Это проявляется как: подсветка команды, авто завершение и проверка сценария в реальном времени. Вы не сможете записать команду, которая имеет неправильный синтаксис.
1 - Окно редактирования
Здесь Вы набираете команды. Редактор подсвечивает синтаксис и автозавершение команды .
Автозавершение:
Поскольку Вы набираете команду, обратите внимание, что команда также выбирается в списке VM Command (4). Нажимая клавишу TAB выбранная команда в списке будет автоматически написана в том месте, где вы пишите команду.
Например мы начинаем набирать:
Link
LinkPGCN выбирается в списке (4), так как мы набрали Link. Нажмите TAB текст будет автоматически закончен:
LinkPGCN
Мы можем также выбрать другие команды, например LinkPTT, и или нажать TAB, или сделать двойной щелчок на элементе в списке (4)
2 - Окно контроля
Это - очень важное окно для автоматического контроля синтаксиса команды. По мере того как Вы набираете команду, это окно будет показывать Вам подсказки и если синтаксис в порядке, оно покажет Вам полный синтаксис команды.
Auto-guidance
Авторуководство дает подсказки, когда Вы набираете команду, и он будет показан, по мере того как редактор читает вашу строку.
Например мы хотели бы добавить строку if (GPRM1 ==2 ) LinkPGCN 4 на строке 3. Мы начинаем набирать:
Мы набираем |
|
Что показывает Control window |
|
Детали |
if |
|
Expecting 'if (...' |
|
OK, мы должны напечатать скобку "(" |
if ( |
Expecting: if (GPRMx... |
Следующим должен быть параметр GPRM |
if (GPRM1 |
Expecting operand: if (GPRMx ==, !=, >=, >, <=, < |
и оператор |
if (GPRM1 == |
Expecting: if (GPRMx op 'GPRM/SPRM or constant' |
затем ожидается второй параметр |
if (GPRM1 ==2 |
Expecting: if (...')' |
и закрывающая скобка ")" |
if (GPRM1 ==2 ) |
if (GPRM0 == 0) Nop |
Синтаксис в порядке, но мы хотим напечатать еще |
if (GPRM1 ==2 ) LinkPGCN |
if (GPRM1 == 2) LinkPGCN 0 |
мы пропускаем параметр, который интерпретируется как 0 |
if (GPRM1 ==2 ) LinkPGCN 4 |
if (GPRM1 == 2) LinkPGCN 4 |
теперь синтаксис команды введен |
Кнопка завершения строки |
|
|
Всякий раз, когда мы видим в окне управления
, и командную строку, мы можем передать ее к нашей строке в редакторе. Например мы напечатали:
JumpSS VTSM
и окно управления показывает:
JumpSS VTSM (vts 0, tt 0, menu 0)
Так интерпретируется наша команда , но очевидно мы нуждаемся в большем количестве параметров. Вместо того, чтобы печатать это в нашем редакторе (1) мы можем просто нажать кнопку завершения строки около окна управления:
Появится целая строка в редакторе. Теперь мы можем заменить нули на необходимые числа:
JumpSS VTSM (vts 1, tt 1, menu 3)
Quick Link (Быстрая Связь)
Это поможет Вам найти верную связь к другим объектам в проекте DVD-lab Pro. Скажем, мы редактируем VM command кино, и мы хотели бы связаться отсюда с меню VMG. Quick Link предложит:
CallSS VMGM (pgc 2, rsm_cell 1) * см. ниже примечание о номерах PGC
3 - Hex Preview
Hex Preview показывает, как команда VM будет записана на DVD. Это удобно для расширенной отладки.
4 - Список команд
Мы уже знаем, что выбирая команды и нажимая TAB или делая двойной щелчок мы производим подстановку в редактируемую в настоящее время команду в редакторе. Ниже списка - короткое описание команды и домене ее использования.
Например для JumpSS VTSM мы видим это:
Это говорит нам, что мы можем использовать эту команду в First Play, VMG menu или VTS menu. Мы не можем использовать эту команду из кино.
5 - Reverse VM code
Иногда мы имеем код VM в шестнадцатеричном формате, например при просмотре предварительно откомпилированного ifo файла. Поскольку Вы напечатали ШЕСТНАДЦАТЕРИЧНЫЕ ЧИСЛА, Окно контроля (2) показывает соответствие коду дезассемблированную команду.
Free syntax (Свободный синтаксис)
Нет единого пути, чтобы записать VM command. VM Editor понимает много различных способов, которыми строка может быть написана.
Например строка
GPRM1 = 15
может быть также написана как:
●MOV(GPRM1,15)
●MOV(GPRM1 15)
●MOV GPRM1 15
●GPRM1 mov 15
●mov GPRM1 0x0F
●....
Вы будете видеть, которая показывает что синтаксис команды правильный, но окно Control будет всегда показывать только один синтаксис, тот который использует DVD-lab PRO. Также, когда Вы
закрываете и открываете окно редактирования независимо от того, какой синтаксис Вы набирали до этого, будет изменен на тот, что использует DVD-lab PRO. Это называется Нормализацией Синтаксиса (Syntax Normalization), и без этого мы не способны понять друг друга.
Syntax normalization
Когда мы закроем VM Editor и затем снова его откроем весь синтаксис будет нормализован (приведен к тому что использует DVD Lab PRO)
Например мы набрали
LinkPGN (2,3)
и закрыли редактор, наша строка будет автоматически приведена в вид:
LinkPGN 2 (button 3)
Если мы наберем
MOV(GPRM1,0x0F)
строка будет автоматически приведена в вид:
GPRM1 = 15
PGC Numbers
Поскольку Вы знакомитесь с VM command и когда попробуете Quick Link, Вы поймете, что означает номер PGC, который означает больше чем, то что видно в Connections.
Например мы хотим сделать связь из Menu 2 в Menu 1 (ROOT), и Quick Link предложит LinkPGCN 2 и это правильная команда, хотя по идее должно быть LinkPGCN 1. Почему так? Потому что:
При использовании VM Command, добавьте 1 к номеру PGC для всех меню (VTS и VMG)
Первое VTS меню, которое будет показано в connections как ROOT, в DVD-lab PRO - PGCN 2.
Всегда есть скрытое меню для каждого VTS (PGCN 1), которое имеет специальную цель*. Чтобы увидеть его VM command, правый щелчок в окне Project и из меню выбираем VTS Root VM...
Первое VMG меню, которое будет показано в connections как TITLE, в DVD-lab PRO - PGCN 2
Есть всегда скрытое меню (PGCN 1) перед другими видимыми меню VMG, которое также имеет специальную цель*. Чтобы увидеть его VM command, правый щелчок в окне Connections на Title Button и из меню выбираем Edit VM Commands
Вы можете указать, чтобы в окне Connection отображался истинный номер PGC вместо порядка элемента, нажав на кнопку Show PGC Number. Номер PGC появляется в верхнем левом углу объекта (отображается красным цветом).
Вы можете тогда использовать этот номер непосредственно в VM Commands как номер PGC
*Это не применяется, если Вы планируете компилировать без Abstraction Layer. Без AL не будет создано скрытого меню, и поэтому первое видимое меню в DVD Lab PRO также станет PGC 1, как ожидается
Вы должны помнить об этом, иначе Вы будете удивлены, почему ваши команды не работают должным образом.
Advanced Authoring - Visual Block Editor (Визуальный Редактор Блоков)
Редактирование VM Command, используя Visual Block Editor
В зависимости от ваших параметров настройки, кнопка Edit в Customize VM commands, запустит Visual block Editor
или Script Editor.
Вы можете переключаться между этими редакторами непосредственно в Customize VM commands. По умолчанию выбран Block editor, но Вы можете изменить настройки по умолчанию в свойствах проекта - позиции Advanced:
Вы можете переключаться между этими редакторами, даже если уже у Вас запущен VM Script или VM blocks. Программное обеспечение сообщит Вам это
●Blocks to Script, блоки будут приведены к коду VM Command
●Script to Blocks, расширить сценарий до блоков, или создать отдельный Script Block.
Visual Block Editor
Редактор VM Block - специальная помощь при написании VM command. Это преодолевает старую проблему программирования со статическим кодом сценария, где например имея Goto 15 или Link PGC 10 мы не увидим результата сразу и возможно, что Goto может перейти на неправильную строку, или команда Link может указать объект не тот, что мы хотели.
VM Block упростит запись команд VM, создавая динамический код. Команды Goto привяжутся к блоку и сохранят взаимосвязь, даже если мы переупорядочиваем, добавляем, или удаляем блоки. Команды Link укажут на названный объект подобно Меню 2 или Кино 10, и мы не должны волноваться, что это изменится, если мы переупорядочиваем наши объекты. Также мы не должны помнить, какая команда необходима, чтобы выполнить такую связь, это может
быть JumpSS, LinkPGC, CallSS и т.д, блочный редактор будет заботиться о корректности использования команд.
Block Editor - уникальный инструмент в DVD-lab PRO, который является визуальным и очень функциональным.
Существует пять основных блоков:
●Operator
●Link
●Script
●if-Goto
●if-Link
Вы добавляете блок, нажимая на кнопки сверху с этими основными названиями. Окно свойств откроется с вариантами, как установить блок. Например Operator откроет свойства:
Script Block откроет известный VM Script Editor
Редактирование блоков
Если Вы хотите отредактировать блоки, просто дважды щелкают на них.
Перестроение блоков
Вы можете просто перетащить любой блок и поместить его выше или ниже.
Registers Alias (Псевдоним Регистров)
Регистры GPRM могут иметь псевдоним в Block editor. Так например вместо GPRM0 = 4 мы можем использовать Counter = 100, если мы изменяем псевдоним GPRM0 на Counter. Просто дважды щелкните на зеленой области псевдонима регистра и напечатайте новое имя.
Он является динамическим, как только мы изменяем имя, все регистры в VM Block отразят изменения:
Светка и разворачивание блоков
Блоки могут быть свернуты до одного блока Script, или блок Script распаковаться в обычные блоки (если это возможно)
Например мы можем упростить большую блок-схему выше к одному Script Block:
Затем мы можем сделать двойной щелчок и редактировать его в VM Script editor.
Или наоборот мы можем выбрать Script Block и развернуть его назад до диаграммы. Конечно некоторые VM block не могут быть расширены вне VM Script и останутся как Script Block.
Сохранение графического изображения
Вы можете сохранить блоки в изображение и затем использовать его, например в сети, в документации или на форумах для объяснения. Просто нажмите кнопку Save to Image.
Небольшие примечания
Когда Вы пишете Script Block и используете команду Goto в нем, Вы должны корректно указать переход только локально, и не заботиться, где этот блок сценария фактически - между другими блоками.
Например в нашем Script Block мы записываем в строке 4 перейти на строку 6. Не имеет значения, если этот Script Block будет выше или ниже других блоков.
Фактически строка с Goto будет откорректирована соответственно, на конечной стадии в отношении полной позиции. Конечно команд ifgoto, как мы использовали выше, может быть фактически расширена до блока If-Goto так что нет действительно никакой потребности записывать goto в Script Block.
Advanced Authoring - GPRM Operators
Мы уже показали некоторые примеры операторов, которые могут использоваться с регистраторами GPRM. Наиболее показателен
GPRM1 = 15
Это - один из многих операторов, и просто называется оператором Assign. На предыдущей странице Вы, возможно, также читали о нормализации Синтаксиса, и то, что VM редактор в DVD Lab Pro весьма открыт к различным синтаксисам, однако он всегда будет заменять команду в ее родной синтаксис
Оператор
Assign
Назначить
Swap
Перестановка
Addition
Добавление
Subtraction
Вычитание
Multiply
Умножение
Divide
Деление
Remainder
Остаток
Random
Случайный
AND
И
OR
ИЛИ
XOR
Пример оператора
GPRM1 = 15 GPRM1 = GPRM2 GPRM1 = SPRM1
GPRM1 <-> GPRM2
GPRM1 += 15 GPRM1 += GPRM2
GPRM1 -= 15 GPRM1 -= GPRM2
GPRM1 *= 15 GPRM1 *= GPRM2
GPRM1 /= 15 GPRM1 /= GPRM2
GPRM1 %= 15 GPRM1 %= GPRM2
GPRM1 rnd 15 GPRM1 rnd GPRM2
GPRM1 &= 15 GPRM1 &= GPRM2
GPRM1 |= 15 GPRM1 |= GPRM2
GPRM1 ^= 15 GPRM1 ^= GPRM2
Альтернативный синтаксис
mov GPRM1, 15 GPRM1 mov 15 MOV(GPRM1, 15)
swp GPRM1, GPRM2 GPRM1 swp GPRM2 SWP(GPRM1,15)
add GPRM1, 15 GPRM1 add 15 ADD(GPRM1,15)
sub GPRM1, 15 GPRM1 sub 15 SUB(GPRM1,15)
mul GPRM1, 15 GPRM1 mul 15 MUL(GPRM1,15)
div GPRM1, 15 GPRM1 div 15 DIV(GPRM1,15)
mod GPRM1, 15 GPRM1 mod 15 MOD(GPRM1,15)
rnd GPRM1, 15 RND(GPRM1,15)
and GPRM1, 15
GPRM1 and 15
AND(GPRM1,15)
or GPRM1, 15 GPRM1 or 15 OR(GPRM1,15)
xor GPRM1, 15 GPRM1 xor 15 XOR(GPRM1,15)
Пояснение
Назначить значение или взять значение из другого регистра
Взаимозаменить значения двух регистров
GPRM1 = GPRM1 + 15
GPRM1 = GPRM1 - 15
GPRM1 = GPRM1 * 15
GPRM1 = GPRM1 / 15
GPRM1 = GPRM1 % 15
Остаток или модуль после деления
Случайное значение между 0-15
Логическое И
Логическое ИЛИ
Логическая неэквивалентность
Из приведенной таблицы ясно, что левой стороной оператора может только быть регистр GPRM. Правой стороной оператора может быть другой регистр GPRM, SPRM регистр или константа.
If Condition
Для проверки состояния регистров GPRM есть команда if (.....).....
Пример предварительной проверки:
if (GPRM1 ==2 ) LinkPGCN 4
Кроме == используется большое количество других операторов:
Оператор |
Пример оператора |
Пояснение |
|
|
|
