VTS IFO PROCESSING

 

General

Processing the VTS IFO is done in the following steps:

 

    A) Loop in Menu PGCs

        A.1) Loop in Cells of each PGC

            A.1.1) Clear ILV flags

            A.1.2) Fix Cell pointers in Playback table

            A.1.3) Cumulate Cell durations

        A.2) Modify PGC duration

        A.3) Change post into precommands

    B) Build of VTSM_C_ADT table

    C) Fill VTSM_VOBU_ADMAP table   

    D) Loop in Title PGCs

        D.1) Loop in Cells of each PGC

            D.1.1) Clear ILV flags

            D.1.2) Fix Cell pointers in Playback table

            D.1.3) Cumulate Cell durations

        D.2) Modify PGC duration

        D.3) Clear audio status if stripped audios

        D.4) Change post into precommands

    E) Recalculate VTS_TMAPTI

    F) Build of VTS_C_ADT table

    G) Fill VTS_VOBU_ADMAP table

    H) Recalculate VTS sectors

    I) Clear PUOPs in Title PGCs

    J) Clear PUOPs in Menu PGCs

    K) Write IFO & BUP

 

Change post into precommands

A 2COOL’s idea a little more elaborated.

If Cell Commands exist, Always checkbox should be checked to change post into pre.

Postcommands are explored to avoid possible never ending loops.

Precommands are explored looking for solid and conditional breaks/jumps/links, changing them into goto commands.

 

Below is the code flowchart:

 

A) If (cell commands AND always is not checked) Explore cell commands:

    {

        Look for cell commands different of Solid Lnk Group and Solid LnkPGN/PTTN/CN

        If (found) exit without changing

    }

B) Explore postcommands:

    For (i=0; i<nPost ;i++)

    {

        Look for Solid/Conditional LinkPGCN (to this PGC).

        Look for JumpVTS_TT/PTT (to this Title).

        Look for Solid/Conditional Lnk Group and Solid/Conditional LnkPGN/PTTN/CN

    }

    If (found) exit without changing;

C) Process precommands:

    For (i=0; i<nPre ;i++)

    {

        Look for Solid/Conditional Break.If (found) Change by Solid/Cond Goto.

        Look for Solid/Conditional Lnk Subset If (found) Change by Solid/Cond Goto.

        Look for Solid/Conditional LnkPTTN LinkPGN LinkCN

        If (found) Change by Solid/Cond Goto

    }

D) Change nPost = nPost + nPre;

    nPost = 0

 

Build of VTS_C_ADT/ VTSM_C_ADT tables

This table is completely re-built. In the case of Interleaved cells, the resulting size can be much lower than the original, making the IFO smaller.

In the case of VTSM_C_ADT the resulting table could be empty

 

Fill VTS_VOBU_ADMAP/ VTSM_VOBU_ADMAP tables

This table is a “list of VOBUs”. In the case of replacing or blanking the resulting size can be lower (usually) or in some cases higher.

IFO size will be modified accordingly.

In the case of VTSM_VOBU_ADMAP the resulting table could be empty

 

IFOs growing

The maximum space for IFOs growing due ADT/ADMAP tables allocated is 64 sectors (128 KB)

Also, when splitting cells, one (or a few) additional sectors can be needed. The maximum space allocated for this purpose is 16 sectors, different from the previous 64..