View this PageEdit this PageUploads to this PageVersions of this PageHomeRecent ChangesSearchHelp Guide

Carteles M&P: Formato ficheros ._pg y .gmp

Formato ficheros comprimidos ._pg de los carteles M&P


NOTA: estas especificaciones son para los carteles de 160x42, rojo-verde-amarillo

El cartel está configurado como stripes (tiras) de 64 píxeles en horizontal y 7 píxeles en vertical. Dentro de la información de la imagen, se consideran que los stripes están todos seguidos, quedando 160x6=960 columnas a codificar.

Para una columna, se especifica el color de cada píxel usando una tupla (rojo,verde), es decir, un byte para el plano rojo y otro para el plano verde.

Dentro de un byte de la tupla de información de color, se usan sólo los bits 0..6 (quedando el bit7 siempre a cero), y el bit alto (bit6) es el que queda arriba de la columna. Es decir, en un plano:

+----+----+----
|bit6|    |
|bit5|    |
|bit4|    |
|bit3|....|....
|bit2|    |
|bit1|    |
|bit0|    |
+----+----+----
  ^    ^
   \    \__byte1
    \__byte0



El formato general del fichero es:

Cabecera+fotograma0+fotograma1+...

Cabecera

Los números son shorts en little-endian (2bytes, primero el byte de menor peso, es decir, formato x86).

En el siguiente texto, "header" se refiere al offset de la cabecera en el fichero, es decir, 0x0000.

32 bytes, todos a cero excepto los siguientes:
          header+ 0: filetype (0x200 es ._pg)
          header+ 6: width (p.ej. 160)
          header+ 8: height (p.ej. 48 para los carteles de 42 píxeles en vertical)
          header+10: frames (número de fotogramas, p.ej. 1)
          header+14: planes (para imágenes en color es 2, primero el plano rojo y luego el plano verde)
          header+16: timing (p.ej. 0x204, el byte alto es siempre 0x02, el bajo es el número de fotogramas por segundo (fps))

Ejemplo de cabecera:
00000000  00 02 00 00 00 00 a0 00  30 00 01 00 00 00 02 00  |........0.......|
00000010  04 02 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|


Datos de los fotogramas


Un fotograma tiene dos partes: DICCIONARIO y DATA.

Diccionario


El diccionario se compone de un carácter que indica el número de entradas del diccionario (0 a 4), seguido de las tuplas (rojo,verde) para cada uno de los elementos del diccionario, p.ej:

00000020  02 7f 7f 7e 7e                                    |...~~           |


En este caso sería que hay dos entradas de diccionario, siendo dict[0]=(7f,7f) y dict[1]=(7e,7e)

Data


La imagen va codificada usando opcodes. Dentro de los datos, primero va el byte del opcode y luego los 'n' bytes de parámetros.

El opcode son los bits 6 y 7 del byte de opcode.

OPCODE-11: 'n' columnas iguales

Formato:
| 1 1 n n | n n n n | 0 r r r r r r r | 0 v v v v v v v |
+-------------------+-----------------+-----------------+
 Opcode  Contador          rojo             verde
<code>

Comportamiento:
- Se inicializan contador+1 columnas a la tupla (rojo,verde) especificada

Ejemplo:

<code>
 ff 7f 7f
 opcode: 11
 count: 63
 tupla (7f,7f)


Poner 64 (63+1) columnas con todos los píxeles a amarillo (todos los bits de rojo y de verde encendidos)

OPCODE-10: 'n' columnas transparentes

Formato:
| 1 0 n n | n n n n |
+-------------------+
 Opcode  Contador
<code>

Comportamiento:
- Se "saltan" contador+1 columnas (se dejan con el color que tenían en el anterior fotograma, o negro si es el primer fotograma de la secuencia)

Ejemplo:

<code>
 bf
 opcode: 10
 count: 63


Poner 64 (63+1) columnas a transparente (no se modifica el color que tenían anteriormente, negro si es el primer fotograma)

OPCODE-00: 'n' columnas de datos "raw"

Formato:
| 0 0 n n | n n n n | 0 r r r r r r r | 0 v v v v v v v | 0 r r r r r r r | 0 v v v v v v v |...
+-------------------+-----------------+-----------------+-----------------+-----------------+
 Opcode  Contador          rojo0            verde0             rojo1            verde1       ...
<code>

Comportamiento:
- Se inicializan contador+1 columnas a las tuplas especificadas (rojo,verde)

Ejemplo:

<code>
 00 7f 7f
 opcode: 00
 count: 1 (0+1)
 tupla (7f,7f)


Poner 1 columna con todos los píxeles a amarillo (todos los bits de rojo y de verde encendidos)

Ejemplo:

 02 7f 7f 2f 00 76 10
 opcode: 00
 count: 3 (2+1)
 tuplas (7f,7f) (2f,00) (76,10)


Poner 3 columnas con las tuplas especificadas

OPCODE-01: 'n' columnas con una tupla del diccionario

Formato:
| 0 1 d d | n n n n |
+-------------------+
   \   \       \______ contador
    \   \
     \   \____________ entrada del diccionario 
      \
       \______________ opcode
<code>

Comportamiento:
- Se escriben contador+1 columnas con la tupla del diccionario especificada por dict[dd].

Ejemplo:

<code>
 4a
 opcode: 01
 dictelem: 0
 count:  11 (10+1)


Poner 11 (10+1) columnas a la tupla de color especificada en dict[0].


Formato ficheros comprimidos .gmp de los carteles M&P


Es igual que en los ._pg, salvo que en la cabecera los dos primeros bytes son 00 00 (al contrario que en _pg que son 00 02). Además, el diccionario en principio está vacío (el número de entradas es 00).