Index Table Segment

Références SMPTE EG-377-3-2013 - MXF Engineering Guideline
Chapitre 4.6.1 - Index Tables P14
SMPTE 377-1 - MXF - File Format Specification
Chapitre 11.2.1 - Index Table Segments P100
SMPTE 429-3-2007 - DCP - Sound And Pictures Track File
Chapitre 4.3.6 - Index Tables P5
Modèle KLV Local Sets
Universal Label
06.0e.2b.34.02.53.01.01.0d.01.02.01.01.10.01.00 - 2-bytes LocalTags, 2-bytes Length
06.0e.2b.34.02.13.01.01.0d.01.02.01.01.10.01.00 - 2-bytes LocalTags, BER-format Length
Notes Optionnel

Préface

Index Table Segment

Le KLV Index Table Segment sert à fournir des informations en cas de déplacement (seek) un peu aléatoire dans le fichier.

Par exemple "je veux aller à 10s de la vidéo", la table va donner l'offset dans le fichier (position relative, jamais absolue).

Un Index Tables peut être présent dans chaque partition (donc dans le Header, Body, Footer, ou même dans d'autres partitions en plus). Mais dans notre cas, vous ne verrez qu'un seul Index Table et il sera présent uniquement dans la partition Footer.

A noter que sa taille est limitée à moins de 65535 octets (64Ko). Si c'est le cas, il sera segmenté en plusieurs Index Table Segment.

Les métadonnées

╓─────────────────────────────────────────────────────────────────────────────
║   3C0A - Instance UID                ║  979ed7a0.8c91483a.974ec4ec.7d6817b2
║   3F0B - Index Edit Rate             ║  24/1
║   3F0C - Index Start Position        ║  0
║   3F0D - Index Duration              ║  24
║   3F05 - Edit Unit Byte Count        ║  0
║   3F06 - IndexSID                    ║  129
║   3F07 - BodySID                     ║  1
║   3F08 - Slice Count                 ║  0
║   3F0E - PosTableCount               ║  0
║   3F09 - Delta Entry Array           ║  1 entries (6 bytes each)
║   3F0A - Index Entry Array           ║  24 entries (11 bytes each)
╙─────────────────────────────────────────────────────────────────────────────

Les différentes positions se trouveront dans Index Entry Array. Sa structure est de la sorte :

Nom Taille Requis
Nombre d'entrée Uint32 (4 octets) Oui
La taille d'une entrée Uint32 (4 octets) Oui
Temporal Offset Int8 (1 octet) Oui
Key-Frame Offset Int8 (1 octet) Oui
Flags EditUnitFlag (1 octet) Oui
Stream Offset Uint64 (8 octets) Oui
SliceOffset 4 octets * SliceCount Optionnel
PosTable 8 octets * PosTableCount Optionnel

Pour Delta Entry Array :

Nom Taille Requis
Nombre d'entrée Uint32 (4 octets) Oui
La taille d'une entrée Uint32 (4 octets) Oui
PosTableIndex Int8 (1 octet) Requis
Slice Uint8 (1 octet) Requis
Element Delta Uint32 (4 octets) Requis

Ne vous prenez pas trop la tête avec Temporal Offset, Key-Frame Offset et EditUnitFlags, ils ne sont utiles que pour des encodages comme le MPEG qui nécessite de connaître les références des keyframes. Dans notre cas, avec le JPEG2000, chacune de nos images sont des références. Toutes les entrées dans Index Entry Array commenceront donc par trois zéros.

Etude rapide de l'Universal Label de Index Table Segment

UL = 06.0E.2B.34.02.53.01.vv.0D.01.02.01.01.10.01.00
                             ^^------------------------------ Item Designator    : Organizationally registered
                                ^^--------------------------- Organization       : AAF Association
                                   ^^------------------------ Application        : MXF File Structure
                                      ^^--------------------- Structure Version  : Version 1
                                         ^^------------------ Structure Kind     : File Structure sets and packs
                                            ^^--------------- Set/Pack Kind      : Index Table Segment
                                               ^^------------ Version            : Index Table Specification version