Mostrar/Ocultar TOC

Tabla de Contenidos del Libro
Prefacio
Capítulo 1: Introducción
Capítulo 2: Fundamentos
Capítulo 3: Mapas de Bits
Capítulo 4: Archivos Vectoriales
Capítulo 5: Metaarchivos
Capítulo 6: Dependencias de Plataforma
Capítulo 7: Conversión de Formatos
Capítulo 8: Trabajando con Archivos Gráficos  
Capítulo 9: Compresión
Capítulo 10: Multimedia
Formato: Adobe Illustrator
Formato: Adobe Photoshop
Formato: Atari ST
Formato: AutoCAD DXF
Formato: Autodesk 3D Studio
Formato: BDF
Formato: BRL-CAD
Formato: BUFR
Formato: CALS Raster
Formato: CGM
Formato: CMU
Formato: DKB
Formato: Dore Raster
Formato: DPX
Formato: Dr. Halo
Formato: DVM Movie
Formato: PostScript Encapsulado
Formato: FaceSaver
Formato: FAX
Formato: FITS
Formato: FLI
Formato: GEM Raster
Formato: GEM VDI
Formato: GIF
Texto en Inglés de Este Formato de Archivo
Imagen del CD-ROM de la 2° Edición
Imagen del CD-ROM de la 1° Edición (Torrent y HTTPS)
Versión Hipertexto del CD-ROM de la 2° Edición (En Inglés)
Versión Hipertexto del CD-ROM de la 2° Edición (En Ruso)

Formato de Archivo — DPX

Formato de Archivo — DPX


NOMBRE: DPX
TAMBIÉN CONOCIDO COMO: SMPTE Digital Pixture Exchange Format, SMPTE DPX, Kodak Cineon
TIPO: Mapa de Bits
COLORES: 1, 8, 10, 12, 16, 32 y 64 bits
COMPRESIÓN: RLE, descomprimido
TAMAÑO MÁXIMO DE IMAGEN: 4Gx4G
MÚLTIPLES IMÁGENES POR ARCHIVO: No
FORMATO NUMÉRICO: Big Endian o Little Endian
ORIGINADOR: Kodak
PLATAFORMA: Cualquiera
APLICACIONES SOPORTADAS: Aplicaciones de imagen de Kodak
ESPECIFICACIÓN EN CD: No
CÓDIGO EN CD: No
IMÁGENES EN CD: No
MIRA TAMBIÉN: Ninguno
UTILIZACIÓN: Almacenamiento de datos de imagen digital en movimiento en formato de mapa de bits.
COMENTARIOS: DPX es una modificación del formato Kodak Cineon. La Society of Motion Picture and Television Engineers (SMPTE) agregó información de cabecera al DPX que no está presente en el formato original Kodak Cineon.




Resumen

DPX es un formato de mapa de bits usado para almacenar un único cuadro de una imagen en movimiento o flujo de datos de video. Se usan múltiples archivos DPX para almacenar e intercambiar secuencias digitales de imagen en movimiento entre una amplia variedad de sistemas electrónicos y de computadora.

El formato DPX es un estándar ANSI y SMPTE basado en el formato de archivo Kodak Cineon. Estos dos formatos son casi idénticos, excepto por varios campos de cabecera extra definidos en el formato DPX. Por esta razón, recomendamos que soportes el formato DPX aun cuando estés interesado solamente en analizar archivos de imagen Cineon.

DPX tiene varias características diseñadas para soportar la independencia de dispositivo y de resolución. Por ejemplo, los archivos DPX, como los TIFF, pueden escribirse usando ya sea esquemas de ordenamiento Little Endian o Big Endian. Los datos de imagen se almacenan como una serie de hasta ocho elementos usando uno de los muchos formatos de componentes de color soportados por el estándar DPX. Los datos de pixel en sí pueden almacenarse con una profundidad de 1, 8, 10, 12, 16, 32 o 64 bits. El relleno de scan lines y datos de imagen, y el empacado de datos de pixeles, también está soportado.



Organización del Archivo

Los archivos DPX están organizados como una serie de cabeceras seguidas por un bloque opcional de datos definidos por el usuario y finalmente por los datos de imagen en sí. El estándar DPX define dos cabeceras:

Por claridad, este artículo considerará estas secciones como cinco cabeceras separadas.

Luego de estas cabeceras está un área opcional que contiene datos definidos por el usuario. Esta área puede contener cualquier tipo de información que el escritor de archivo DPX necesite para almacenar estos datos y puede tener hasta un megabyte de tamaño.

Por último en el archivo están los datos de imagen en cuestión, almacenados como un arreglo de valores de componentes de pixeles. La Figura DPX-1 ilustra el arreglo interno de un archivo DPX.

Figura DPX-1: Empacado de pixeles
FIGURA DPX-1: Formato DPX



Detalles del Archivo

Las cinco cabeceras DPX tienen todas tamaños fijos y contienen campos que van de uno a varios cientos de bytes. Los campos de los tipos de datos de punto flotante SINGLE (16 bits) y DOUBLE (32 bits) también son comunes.

Cualquier campo de cabecera entero o real que contenga datos indefinidos ha de inicializarse a su valor de "todos unos". En C, esto se logra más fácilmente al asignar el complemento a uno de 0 a un campo indefinido, así:

   WORD val = ~0; /* Establecer val a 0xFFFF */

Los campos ASCII indefinidos se inicializan todos a caracteres nulos/NULL (ASCII 00h).

Cabecera del Archivo

La cabecera del archivo contiene información sobre el archivo DPX y todas sus partes, incluyendo el nombre, tamaño y marca de fecha/hora del archivo, y la ubicación interna de los datos de imagen. La cabecera de archivo DPX tiene 768 bytes de longitud y tiene el siguiente formato:

typedef struct _GenericFileHeader
{
    DWORD Magic;            /* Número mágico */
    DWORD ImageOffset;      /* Offset al inicio de los datos de imagen en bytes */
    char  Version[8];       /* Marca de versión del formato de cabecera */
    DWORD FileSize;         /* Tamaño total del archivo DPX en bytes */
    DWORD DittoKey;         /* Especificador del contenido de la imagen */
    DWORD GenericSize;      /* Longitud de cabecera de sección genérica en bytes */
    DWORD IndustrySize;     /* Oongitud de cabecera específica de la industria en bytes */
    DWORD UserSize;         /* Longutid de datos definidos por el usuario en bytes */
    char FileName[100];     /* Nombre del archivo DPX */
    char TimeDate[24];      /* Fecha y horade creación de archivo */
    char Creator[100];      /* Nombre del creador del archivo */
    char Project[200];      /* Nombre del proyecto */
    char Copyright[200];    /* Información de copyright de los contenidos del archivo */
    char EncryptKey;        /* Clave de encriptación */
    char Reserved[104];     /* Campo reservado usado para relleno */
} GENERICFILEHEADER;

Magic es el valor de identificación del archivo DPX. También es el indicador del orden de bytes de los datos del archivo DPX. Si este valor es 53445058h ("SDPX"), los datos del archivo se escriben en orden Big Endian. Si el valor es 58504453h ("XPDS"), los datos del archivo se escriben en orden Little Endian.

ImageOffset es el offset del inicio de los datos de la imagen desde el inicio del archivo en bytes.

Version es un campo ASCII de 8 bytes que contiene una cadena de la versión del estándar DPX al cual el archivo está de conformidad. Para archivos de la versión 1.0, este campo contiene la cadena ASCII "V1.0".

FileSize es el tamaño total del archivo DPX en bytes.

DittoKey indica si la imagen en el archivo DPX es la misma que la del cuadro anterior (un valor de 0), o si es un nuevo cuadro (un valor de 1).

GenericSize es el tamaño total de la seción genérica de cabecera en bytes.

IndustrySize es el tamaño total de la sección de cabecera específica de industria en bytes.

UserSize es el tamaño total de datos definidos por el usuario en bytes. Si no hay ningun área definida por el usuario, su valor será 0.

FileName es un campo ASCII de 100 bytes que contiene información de texto de formato libre que identifica el nombre y ruta del archivo DPX.

TimeDate es un campo de 24 bytes que contiene una marca de fecha y hora de cuándo se creó el archivo DPX. Esta marca es una cadena de la forma YYYY:MM:DD:HH:MM:SS:LTZ.

Creator es un campo ASCII de 100 bytes que contiene información de texto en formato libro que identifica el proyecto con el cual el archivo DPX y/o imagen está asociada.

Copyright es una cadena ASCII de 200 bytes que contiene información de texto en formato libre que identifica el copyright de los datos de imagen almacenados dentro del archivo DP.

EncryptKey contiene un valor de 4 bytes usado como una clave para procesar el archivo usando un algoritmo de desencriptación especificado por el usuario. EncryptKey tiene un valor de FFFFFFFFh si los datos de imagen no están encriptados. Los datos de la cabecera DPX nunca están encriptados.

Reserved es un campo de 104 bytes usado para rellenar la cabecera a 768 bytes de tamaño. Versiones futuras del formato DPX pueden soportar campos adicionales en esta área.

Cabecera de Imagen

Inmediatamente después de la cabecera del archivo están los datos de imagen. Esta cabecera almacena información específica a los datos de imagen del cuadro almacenado en el archivo DPX.

Nota que esta cabecera contiene una secuencia de ocho subcabeceras idénticas. Cada subcabecera almacena información en cada uno de los ocho elementos posibles que conforman los datos de imagen.

La cabecera de imagen tiene 640 bytes de tamaño y tiene el siguiente formato:

typedef struct _GenericImageHeader
{
    WORD  Orientation;            /* Orientación de imagen */
    WORD  NumberElements;         /* Número de elementos de imagen */
    DWORD PixelsPerLine;          /* Pixeles por línea */
    DWORD LinesPerElement;        /* Líneas por elemento de imagen */
    struct _ImageElement
    {
        DWORD  DataSign;          /* Extensión de signo de datos */
        DWORD  LowData;           /* Valor de referencia de código de datos bajos */
        SINGLE LowQuantity;       /* Calidad baja de referencia representada */
        DWORD  HighData;          /* Calidad alta de referencia representada */
        SINGLE HighQuantity;      /* Cantidad alta de referencia representada */
        BYTE   Descriptor;        /* Descriptor para elemento de imagen */
        BYTE   Transfer;          /* Características de transferencia para el elemento */
        BYTE   Colorimetric;      /* Especificación colorimética para el elemento */
        BYTE   BitSize;           /* Tamaño de bit para el elemento */
        WORD   Packing;           /* Empacado para el elemento */
        WORD   Encoding;          /* Codificación para el elemento */
        DWORD  DataOffset;        /* Offset a los datos del elemento */
        DWORD  EndOfLinePadding;  /* Fin de relleno de línea usado en el elemento */
        DWORD  EndOfImagePadding; /* Fin de relleno de imagen isado en el elemento */
        char   Description[32];   /* Descripción del elemento */
    } ImageElement[8];
    BYTE Reserved[52];            /* Campo reservado usado para relleno */
} GENERICIMAGEHEADER;

Orientation especifica la dirección apropiada de la imagen en la pantalla. La dirección de línea y la dirección del cuadro se especifican, respectivamente, por los valores:

0 De zquierda a derecha, de arriba hacia abajo
1 De derecha a izquierda, de arriba hacia abajo
2 De izquierda a derecha, de abajo hacia arriba
3 De derecha a izquierda, de abajo hacia arriba
4 De arriba hacia abajo, de izquierda a derecha
5 De arriba hacia abajo, de derecha a izquierda
6 De abajo hacia arriba, de izquierda a derecha
7 De abajo hacia arriba, de derecha a izquierda

0 es el único valor soportado por el conjunto central del formato de archivo.

NumberElements indica el número de elementos en los datos de imagen. Este valor también indica el número de elementos en el arreglo ImageElement[] que contienen datos válidos.

PixelsPerLine especifica el número de pixeles en un scan line. Hay un número igual de pixeles en cada línea por elemento.

LinesPerElement especifica el número de líneas en el elemento. Hay un número igual de líneas en cada elemento.

Los siguientes 15 campos se repiten ocho veces en la cabecera genérica de imagen. Cada una de estas subcabeceras de 72 bytes contienen información sobre un elemento individual de los datos de imagen. Los campos de todas las ocho subcabeceras siempre estarán presentes en cada archivo DPX, incluso si solo hay un elemento en los datos de imagen.

DataSign es 0 si los datos de imagen no tienen signo y 1 si los datos tienen signo. Los datos de imagen normalmente se almacenan usando valores sin signo.

LowData define el valor mínimo esperado de color.

LowQuantity define la referencia para el valor de baja cantidad especificado en el campo LowData. Este valor de referencia debería considerarse el valor más bajo posible y típicamente es 0.

HighData define el valor máximo esperado de color.

HighQuantity define la referencia para el valor de alta cantidad especificado en el campo HighData. Este valor de referencia debería considerarse el valor más alto posible, y típicamente es el valor más grande que puede almacenarse en un componente del tamaño especificado (por ejemplo, 256 para componentes de 8 bits).

Descriptor especifica el tipo de componente almacenado por el elemento y su orden de empacado de pixeles. Hay 256 valores posibles para este campo; los siguientes están definidos:

0 Definido por el usuario
1 Rojo
2 Verde
3 Azul
4 Alpha
6 Luminance
7 Chrominance
8 Profundidad
9 Video compuesto
50 RGB
51 RGBA
52 ABGR
100 CbYCrY
101 CbYaCrYa
102 CbYCr
103 CbYCra
150 Elemento de 2 componentes definido por el usuario
151 Elemento de 3 componentes definido por el usuario
152 Elemento de 4 componentes definido por el usuario
153 Elemento de 5 componentes definido por el usuario
154 Elemento de 6 componentes definido por el usuario
155 Elemento de 7 componentes definido por el usuario
156 Elemento de 8 componentes definido por el usuario

Todos los valores no definidos están reservados para su uso en versiones futuras de DPX.

Transfer describe las características de transferencia usadas para transformar los datos desde un original linear. Los valores posibles de este campo son:

0 Definido por el usuario
1 Densidad de impresión
2 Linear
3 Logarítmica
4 Video no especificado
5 SMPTE 240M
6 CCIR 709-1
7 CCIR 601-2 sistema B o G
8 CCIR 601-2 sistema M
9 Video NTSC compuesto
10 Video PAL compuesto
11 Z linear
12 Z homogéneo

Colorimetric define los primarios de referencia para sistemas aditivos de color, o respuestas de color para sistemas sustractivos de color. Los valores posibles de este campo son:

0 Definido por el usuario
1 Densidad de impresión
4 Video no especificado
5 SMPTE 240M
6 CCIR 709-1
7 CCIR 601-2 sistema B o G
8 CCIR 601-2 sistema M
9 Video compuesto NTSC
10 Video compuesto PAL

BitSize especifica el número de bits en cada componente del elemento de imagen. Valores válidos son 1, 8, 10, 12, 16, 32 y 64.

Packing define el método usado para empacar los datos de los elementos de imagen en cada línea de datos de elementos de imagen. Valores posibles son 0 (empacado con palabras de 32 bits) y 1 (palabras de 32 bits con relleno).

Encoding indica si los datos de elementos de imagen están codificadas con run-length o no. Los valores son 0 (no codificado) y 1 (codificado con run-length).

DataOffset indica el offset al inicio de los datos de elemento de imagen en bytes desde el inicio del archivo.

EndOfLinePadding especifica el número de bytes agregados como relleno al final de los datos de imagen. Es común rellenar los datos de elemento a un límite de bloque par de 8K. El valor predeterminado es 0, lo que indica que no hay relleno de fin de imagen.

Description es un campo de 32 bytes almacenado como una cadena ASCII que contiene información de texto en formato libre que describe los contenidos del elemento.

Reserved es un campo de 52 bytes usado para rellenar la cabecera a 640 bytes de longitud. Versiones futuras del formato DPX pueden soportar campos adicionales en esta área.

Cabecera de Orientación

La última de las cabeceras genéricas es la cabecera de orientación. La información en esta cabecera describe la posición de la imagen en la pantalla y también contiene alguna información adicional sobre la fuente de los datos de imagen.

Esta cabecera tiene 256 bytes de longitud y tiene el siguiente formato:

typedef struct _GenericOrientationHeader
{
    DWORD  XOffset;             /* Offset X */
    DWORD  YOffset;             /* Offset Y */
    SINGLE XCenter;             /* Centro X */
    SINGLE YCenter;             /* Centro Y */
    DWORD  XOriginalSize;       /* Tamaño original X */
    DWORD  YOriginalSize;       /* Tamaño original Y */
    char   FileName[100];       /* Nombre de archivo de imagen fuente */
    char   TimeDate[24];        /* Fecha y hora de imagen fuente */
    char   InputName[32];       /* Nombre de dispositivo de entrada */
    char   InputSN[32];         /* Número de serie de dispositivo de entrada */
    WORD   Border[4];           /* Validez de borde (XL, XR, YT, YB) */
    DWORD  AspectRatio[2];      /* Tasa de aspecto de pixel (H:V) */
    BYTE   Reserved[28];        /* Campo reservado usado para relleno */
} GENERICORIENTATIONHEADER;

XOffset y YOffset indican el offset del primer pixel en la imagen almacenada desde el primer pixel en la imagen original. Si las dos imágenes no se sobrepasan, entonces los valores de estos campos serán 0.

XCenter y YCenter son valores de punto flotante que indican las coordenadas X y Y del centro de la imagen.

XOriginalSize y YOriginalSize indican la altura y anchura, respectivamente, de la imagen original, in pixeles por línea y líneas por imagen.

FileName es el nombre de la imagen fuente desde la cual la imagen fue procesada o extraída.

TimeDate es un campo de 24 bytes que contiene una marca de fecha y hora de cuando la imagen fuente fue creada. Esta marca es una cadena en la forma YYYY:MM:DD:HH:MM:SS:LTZ.

InputName es una cadena ASCII de 32 bytes que declara el nombre del dispositivo de entrada.

InputSN es una cadena ASCII de 32 bytes que declara el número de serie del dispositivo de entrada.

Border es un conjunto de cuatro valores que describen la región de la imagen erosionada debido a procesamiento de filtro sensitivo a bordes. Estos valores son, en orden: X izquierdo, X derecho, Y superior, y Y inferior. Los valores de 0,0,0,0 indican que no hay borde y por lo tanto no hay erosión.

AspectRatio es la tasa de aspecto de pixel descrita como un valor horizontal (AspectRatio[0]) dividido entre un valor vertical (AspectRatio[1]).

Reserved es un campo de 28 bytes usado para rellenar a 256 bytes de tamaño. Versiones futuras del formato DPX pueden soportar campos adicionales en esta área.

Cabeceras Específicas de la Industria

Siguiendo las cabeceras genéricas están dos cabeceras que contienen información específica de la industria. Ambas cabeceras están siempre presentes en todos los archivos DPX y se inicializan con valores de campo indefinidos cuando no se usan. Estas cabeceras no contienen ninguna información requerida por el estándar DPX y su uso es opcional.

Cabecera de Información de Filme
La primer cabecera de la industria contiene información usada por la industria de filme de imagen en movimiento. La información en esta cabecera describe la fuente de filme y cámara desde la cual los datos del cuadro de imagen se derivaron. Esta cabecera tiene 256 bytes de tamaño y tiene el siguiente formato:

typedef struct _IndustryFilmInfoHeader
{
    char   FilmMfgId[2];      /* Código de ID del fabricante */
    char   FilmType[2];       /* Tipo de archivo */
    char   Offset[2];         /* Offset en perfs */
    char   Prefix[6];         /* Prefijo */
    char   Count[4];          /* Cuenta */
    char   Format[32];        /* Formato */
    DWORD  FramePosition;     /* Posición de cuadro en secuencia */
    DWORD  SequenceLen;       /* Longitud de secuencia en cuadros */
    DWORD  HeldCount;         /* Cuenta mantenida */
    SINGLE FrameRate;         /* Tasa de cuadros del original en cuadros/seg */
    SINGLE ShutterAngle;      /* Ángulo obturador (shutter) de cámara en grados */
    char   FrameId[32];       /* Identificación de cuadro */
    char   SlateInfo[100];    /* Información de pizarra (slate) */
    BYTE   Reserved[56];      /* Campo reservado usado para relleno */
} INDUSTRYFILMINFOHEADER;

FilmMfgId almacena el código ID de fabricante representado por los mismos dos dígitos que el código de borde de filme.

FilmType almacena el código de tipo de filme representado por los mismos dos dígitos que el código de borde de filme.

Offset almacena el offset en perfs representado por los mismos dos dígitos que el código de borde de filme.

Prefix almacena el código de prefijo representado por los mismos dos dígitos que el código de borde de filme.

Count almacena el código de cuenta representado por los mismos cuatro dígitos que el código de borde de filme.

Format es una cadena ASCII que especifica el formato del filme.

SequenceLen especifica el número total de cuadros en la secuencia de imagen.

HeldCount especifica el número total de cuadros secuenciales para mantener el cuadro actual. Este valor se usa para inyectar una corrida de cuadros idénticos en una secuencia de imagen en movimiento.

FrameRate almacena la tasa de cuadros de la fuente original de filme en cuadros por segundo.

ShutterAngle especifica el ángulo de obturador (apertura temporal de muestreo) de la cámara de imagen en movimiento en grados.

FrameId es una cadena de 32 bytes que identifica el tipo de cuadro (cuadro clave, cuadro wedge/cuña, y así sucesivamente). El formato de datos en este campo se define por el creador del archivo DPX.

SlateInfo es una cadena ASCII de 100 bytes que se usa para almacenar información de producción encontrada en la pizarra (slate) de la cámara.

Reserved es un campo de 56 bytes que se usa para rellenar la cabecera a 256 bytes en longitud. Revisiones futuras del formato DPX pueden soportar campos adicionales en esta área.

Cabecera de Información de Televisión
La segunda cabecera de la industria contiene información usada por la industria de transmisión de televisión. La información en esta cabecera describe la señal de video y fuente de transmisión de televisión desde la cual se derivaron los datos de imagen. Esta cabecera tiene 128 bytes de tamaño y tiene el siguiente formato:

typedef struct _IndustryTelevisionInfoHeader
{
    DWORD  TimeCode;            /* Código de tiempo SMPTE */
    DWORD  UserBits;            /* Bits SMPTE de usuario */
    BYTE   Interlace;           /* Entrelazado */
    BYTE   FieldNumber;         /* Número de campo */
    BYTE   VideoSignal;         /* Estándar de señal de video */
    BYTE   Padding;             /* Relleno de alineación de estructura */
    SINGLE HorzSampleRate;      /* Tasa de muestreo horizontal en Hz */
    SINGLE VertSampleRate;      /* Tasa de muestreo vertical en Hz */
    SINGLE FrameRate;           /* Tasa de muestreo temporal o tasa de muestreo
                                   en Hz */
    SINGLE TimeOffset;          /* Offset de tiempo desde sync al primer pixel */
    SINGLE Gamma;               /* Valor gamma */
    SINGLE BlackLevel;          /* Valor de código de nivel de negro */
    SINGLE BlackGain;           /* Ganancia de negro */
    SINGLE Breakpoint;          /* Punto de quiebre */
    SINGLE WhiteLevel;          /* Valor de código de nivel de blanco de referencia */
    SINGLE IntegrationTimes;    /* Tiempo(s) de integración */
    BYTE   Reserved[76];        /* Campo reservado usado para relleno */
} INDUSTRYTELEVISIONINFOHEADER;

TimeCode almacena el valor de código SMPTE de tiempo para los datos de imagen.

UserBits almacena el valor de bits SMPTE de usuario para los datos de imagen.

Interface es 0 si los datos de imagen no están entrelazados y 1 si los datos están almacenados usando un entrelazado 2:1.

FieldNumber indica el número de campo al cual corresponden los datos de imagen, si es apropiado. Los valores son típicamente 1 o 2 para video compuesto, 1 a 4 para NTSC, o 1 a 12 para PAL. Este valor es 0 si los datos de imagen no están asociados con un campo particular.

VideoSignal especifica el estándar de señal de video de la fuente de video. Hay 256 valores posibles para este campo; los siguientes están definidos:

0 Indefinido
1 NTSC
2 AL
3 PAL-M
4 SECAM
50 YCBCR CCIR 601-2 525 líneas, entrelazado 2:1, tasa de aspecto 4:3
51 YCBCR CCIR 601-2 625 líneas, entrelazado 2:1, tasa de aspecto 4:3
100 YCBCR CCIR 601-2 525 líneas, entrelazado 2:1, tasa de aspecto 16:9
101 YCBCR CCIR 601-2 625 líneas, entrelazado 2:1, tasa de aspecto 16:9
150 YCBCR 1050 líneas, entrelazado 2:1, tasa de aspecto 16:9
151 YCBCR 1125 líneas, entrelazado 2:1, tasa de aspecto 16:9
152 YCBCR 1250 líneas, entrelazado 2:1, tasa de aspecto 16:9
200 YCBCR 525 líneas, entrelazado 2:1, tasa de aspecto 16:9
201 YCBCR 625 líneas, 1:1 progresivo, tasa de aspecto 16:9
202 YCBCR 787.5 líneas, 1:1 progresivo, tasa de aspecto 16:9

Todos los valores que no están definidos están reservados para su uso en versiones futuras de DPX.

Padding es un campo de un byte usado para mantener la alineación de los elementos de la estructura a un límite de 4 bytes.

HorzSampleRate y VertSampleRate especifican las tasas de muestreo horizontal y vertical de los datos de video en muestras por segundo.

FrameRate especifica la tasa de muestreo temporal, o la tasa de cuadros, en muestras por segundo.

TimeOffset almacena el offset de tiempo desde sync (el borde de referencia del sync horizontal) al primer pixel en microsegundos.

Gamma es el valor de exponente de corrección gamma para la imagen. El valor gamma predeterminado es 2.2 para una imgen NTSC.

BlackLevel especifica el valor digital que representa el negro de referencia. El valor predeterminado para este campo difiere dependiendo del estándar de señal de video de la fuente de datos de imagen.

BlackGain especifica la ganancia linear aplicada a las señales debajo del valor de umbral del punto de quiebre (breakpoint).

Breakpoint define el umbral de nivel de señal sobre el cual se aplica la ley de gamma.

WhiteLevel especifica el valor digital que representa el blanco de referencia. El valor predeterminado para este campo difiere dependiendo del estándar de señal de video de la fuente de datos de video.

IntegrationTimes especifica la apertura de muestra temporal de la cámara de televisión.

Reserved es un campo de 76 bytes para rellenar la cabecera a 128 bytes de tamaño. Versiones futuras del formato DPX pueden soportar campos adicionales en esta área.

Nota que el valor del campo VideoSignal es 0 (indefinido), los valores Gamma, BlackLevel, BlackGain, Breakpoint y WhiteLevel no pueden asumirse; por lo tanto, estos campos deben inicializarse a sus valores correctos.

Datos Definidos por el Usuario

Los datos definidos por el usuario que siguen las cabeceras de industria son opcionales y no están presentes en un archivo DPX si el valor del campo UserSize en la cabecera de archivo genérica es FFFFFFFFh. De lo contrario, el valor de UserSize indica el tamaño total de los datos definidos por el usuario en bytes.

Los datos definidos por el usuario pueden incluir cualquier información para la cual el formato DPX no proporciona almacenamiento. Dicha información incluye imágenes miniatura, documentación textual adicional, registros de procesamiento, firma de verificación, mapas de color, y así sucesivamente.

Los datos definidos por el usuario pueden tener entre 32 y 1,048,608 bytes de longitud y tienen el siguiente formato:

typedef struct _UserDefinedData
{
    char  UserId[32];    /* Cadena de identificación definida por el usuario */
    BYTE *Data;          /* Datos definidos por el usuario */
} USERDEFINEDDATA;

UserId es una cadena usada para identificar los datos encontrados en el campo Data. Este campo se usa por un lector de archivo DPX para verificar que entiende el formato del campo Data.

Data son los datos definidos por el usuario en cuestión. El formato del campo no está definido por el estándar DPX y los datos en este campo pueden tener hasta un megabyte (1,048,576 bytes) de tamaño.

Datos de Imagen

Los datos de imagen siguen las cabeceras y cualquier dato definido por el usuario. Se recomienda que los datos de imagen comiencen en un límite de bloque de 8K, para que haya relleno entre la última cabecera, o datos definidos por el usuario, y el inicio de los datos de imagen. El valor ImageOffset en la cabecera del archivo se usa para localizar el inicio de los datos de la imagen.

Los datos de imagen se almacenan como un arreglo de elementos de 32 bits conformado por cuatro valores de caracteres con o sin signo. Ya que los valores sin signo son los predeterminados de los datos de imagen DPX, representamos el arreglo de los datos de imagen aquí usando la siguiente definición de tipo:

typedef unsigned char BYTE4 [4];
typedef struct _ImageDataElement
{
    BYTE4 *Data;
} IMAGEDATAELEMENT;

El formato DPX almacena los datos de imagen por pixeles, separando cada pixel en sus valores de componentes (también llamados muestras en otros formatos) y almacenando cada valor en un elemento separado (también llamado un plano de color). Los componentes de datos de imagen pueden almacenarse en hasta ocho elementos en total.

Por ejemplo, un pixel de escala de gris de 8 bits contiene solo un componente y por lo tanto se almacena como un valor de un solo componente en un elemento. Un pixel RGBA de 32 bits contiene cuatro componentes que pueden almacenarse a lo largo de cuatro elementos como cuatro valores de componentes de 8 bits o puede almacenarse en un elemento individual como un valor de componente de 32 bits.

Como puedes ver, el formato DPX es bastante flexible en permitirte almacenar tus datos de imagen de cualquier manera que haga la lectura y escritura de los datos más eficiente posible para el hardware de tu computadora.

Todos los componentes deben tener el mismo tamaño entre todos los elementos. Los tamaños de componentes válidos son enteros de 1, 8, 10, 12 y 16 bits y reales de 32 y 64 bits (punto flotante IEEE). Todos los componentes deben almacenarse como palabras usando límites de 32 bits. Los datos de un bit se almacenan en un único elemento con el primer pixel (más a la izquierda) en el bit menos significativo en el byte y almacenado como datos de 32 bits. Los datos de ocho bits se almacenan 4 componentes a una palabra, 16 bits como dos componentes, 32 bits como un componente, y los componentes de 64 bits requieren dos palabras de 32 bits para almacenarse. Todos estos tamaños de componentes caben de forma uniforme dentro de los límites de palabras de 32 bits.

Los datos de 10 y 12 bits, sin embargo, no caben uniformemente en los límites de 32 bits. En estos casos, los componentes de 10 y 12 bits son ya sea "rellenados" en palabras de 32 bits, dejando bits sin usar en cada palabra, o "empacados" en palabras de 32 bits, sin dejar ningún bit sin usar pero provocando que los componentes se partan a través de límites de palabras de 32 bits.

El relleno se lleva a cabo al almacenar tantos componentes como quepan dentro de una palabra de 32 bits y considerando los bits restantes como relleno. Por ejemplo, tres componentes 10 bits cabrán en una palabra de 32 bits usando los bits 0:9, 10:19 y 20:29. Los dos bits restantes, 30:31, no se usan y se ponen a cero. Dos componentes de 12 bits pueden almacenarse en una palabra de 32 bits, pero cada componente se almacena comenzando en un límite de palabra de 16 bits usando los bits 0:11 y 16:27. Los bits 12:15 y 28:31 no se usan para datos y solo proporcionan relleno de alineamiento. Un dato de 8, 16, 32 y 64 bits cabe uniformemente dentro de los límites de palabra de 32 bits y por lo tanto nunca se rellena.

El empacado se usa para evitar bits desperdiciados al ignorar todos los límites de bytes y palabras. En el ejemplo anterior, notamos que tres componentes de 10 bits usan los primeros 30 bits de una palabra y desperdician los últimos dos bits. El cuarto componente de 10 bits entonces, comienza en el límite para la siguiente palabra de 32 bits. Si estos componentes estuvieran empacados, el cuarto componente comenzaría en el bit 30 de la primer palabra, y cruzaría el límite de 32 bits para ocupar los primeros ocho bits de la segunda palabra.

En el formato empacado, los bits siempre se almacenan desde el bit menos significativo hasta el más significativo en un byte. Cuando un componente da un ciclo hasta la siguiente palabra de 32 bits, sus bits restantes se colocan en el bit menos significativo de esa palabra. El empacado siempre termina al final de un scan line, y cualquier bit restante se pone a cero. (Ver la figura DPX-2.)

Figura DPX-2: Bits empacados
FIGURA DPX-2: Bits empacados

Las líneas se rellenan típicamente con bits a cero para terminar en límites de 4 bytes, aunque este no es un requerimiento del estándar DPX. Los datos de imagen también se rellenan típicamente con cero bits para terminar en un límite de bloque de 8K.

Compresión de Datos

Los componentes pueden almaenarse en un elemento de imagen usando un formato comprimido o descomprimido. Los valores de componentes descomprimidos se almacenan directamente como datos crudos sin ninguna forma de codificación. Opcionalmente, los componentes pueden comprimirse usando un esquema de codificación run-length simple.

Las corridas de valores de componentes se codifican como un valor de bandera individual seguido por uno o más valores de componentes. El bit menos significativo del valor de bandera es uno si los valores de componentes de corrida son idénticos, y cero si la corrida de los valores de componentes son diferentes. Los bits restantes en el valor de bandera especifican el número de componentes en la corrida. El valor de bandera siempre tiene el mismo tamaño que los valores de componentes.

Las corridas de valores de componentes idénticos se codifican como un valor de bandera seguido por un componente individual que especifica el valor de la corrida. Las corridas de valores diferentes de componentes se codifican como un valor de bandera seguido por un número de componentes igual a la cuenta de componente almacenada en el valor de bandera. Un valor de crominancia (CbCr) es un componente individual almacenado como dos valores.

La codificación de corrida de componente siempre termina al final de scan lines. Y los datos codificados siempre se empacan o rellenan en límites de palabras de 32 bits, como se indica por el campo Packing en la cabecera genérica de imagen.

Requerimientos Centrales de DPX

El estándar DPX proporciona una versión mínimamente definida del formato DPX que permite una implementación rápida de lectores y escritores de archivo DPX y define un conjunto mínimo de campos de cabecera centrales que deben leerse e inicializarse apropiadamente para interpretar los datos almacenados en un archivo DPX.

Los campos de cabecera centrales de un archivo DPX son los campos Magic, ImageOffset, Version y FileSize de la cabecera genérica de archivo, y los campos Orientation, NumberElements, PixelsPerLine, LinesPerElement, DataSign, Descriptor, Transfer, Colorimetric, BitSize, Packing, Encoding y DataOffset de la cabecera genérica de imagen.

Los lectores mínimos de archivos DPX debe leer estos campos y pueden ignorar todos los demás. Los escritores mínimos de archivos DPX deben inicializar estos campos centrales con valores válidos y pueden inicializar todos los otros campos con valores indefinidos.

Una vez que todas las cabeceras, áreas de datos definidas por el usuario, y datos de imagen han sido definidos, la siguiente estructura puede usarse para almacenar el contenido de un archivo DPX individual:

typedef struct _DpxFileFormat
{
   GENERICFILEHEADER            FileHeader;
   GENERICIMAGEHEADER           ImageHeader;
   GENERICORIENTATIONHEADER     OrientHeader;
   INDUSTRYFILMINFOHEADER       FilmHeader;
   INDUSTRYTELEVISIONINFOHEADER TvHeader;
   USERDEFINEDDATA              *UserData;  /* NULL si no hay datos presentes */
   IMAGEDATAELEMENT             *ImageData; /* Array de 1 a 8
                                               estructuras IMAGEDATAELEMENT */
} DPXFILEFORMAT;



Para Mayor Información

La especificación del formato DPX está disponible en el siguiente documento:

ANSI/SMPTE 268M-1994, SMPTE Standard for File Format for Digital Moving-Picture Exchange (DPX), v1.0, 18 February 1994, 14 pages.

Este documento está disponible directamente desde SMPTE:

The Society of Motion Picture and Television Engineers
595 W. Hartsdale Avenue
White Plains, NY 10607-1824
Voice: 914-761-1100
FAX: 914-761-3115
Email: smpte@smpte.org
WWW: http://www.smpte.org

SMPTE es una sociedad profesional para ingenieros de imágenes en movimiento y de televisión que está dedicada a avanzar la teoría y aplicación de le tecnoloía de movimiento-imagen, incluyendo filme, video, televisión, imágenes de computadora, y telecomunicaciones.

El siguiente documento técnico también es una fuente útil de información sobre el formato DPX:

Snider, David, Glenn Kennel, Ken Curry, and Michael McCracken, "Digital Moving-Picture Exchange: File Format and Calibration," SMPTE Journal, August 1993, pp. 712-714.

Todos los autores son de Eastman Kodak Co. en Rochester, New York. Algunos de ellos han servido en el comité que preparó el estándar SMPTE 268M.

 n0HCo(-JT' &N5i5詗7c'wOưQ|c!@|%A"@[0d1̖Y'zb,5͔Ow( 2+FcI`Fqlzv(7LX rfYvNzzYOA#.E-94Zn!S 52@K9my;.}U݀r&jn2WWHJ`Q}u_tro {rWL;=_ؼ