*******************************************************************************

Libre Media Server - An Open source Media Server.
(c) Santiago Noreña 2012-2013

*******************************************************************************

Developing and support: libremediaserver@gmail.com

Code: http://code.google.com/p/libremediaserver

*******************************************************************************

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*******************************************************************************

Lee instalacion.txt para el proceso de instalación.

*******************************************************************************

Libre Media Server es un programa para utilizar audio y/o video en artes escénicas, conciertos, eventos, performances, instalaciones, etc. 

Se controla mediante el Open Lighting Arquitecture que soporta una gran variedad de protocolos y dispositivos estandard de iluminación: Artnet, ShowNet, PathPort, ACN, Enttec Open DMX Pro, Anyuma, OpenSoundControl, ...

El motor gráfico y de audio es Pure Data, que se ejecuta en background invisible al usuario. Ahora mismo podemos reproducir 255 carpetas con 255 videos cada una en cualquier formato en que esté el codec instalado en el sistema. Si lo puede leer en el reproductor de medios de gnome podrá reproducirlo LMS. Podemos variar la velocidad, ejecutarlo en distintas direcciones (hacia delante, hacia atrás, ping-pong), y en bucle o en un sólo disparo. También podemos renderizar fotos y textos.

LMS tiene 8 capas de video o texto, cada dispone de una correción Bezier de 4 puntos, por lo que podemos mapear diferentes superficies, o lados de objetos. También podemos corregir el keystone mediante estos ajustes. Por supuesto, hay ajustes de color, posición, tamaño y rotación por cada capa.

Las mezclas entre capas se realizan mediante 7 canales: 3 canales pasa altos RGB, 3 canales pasa bajos RGB, con lo que se puden hacer lumas y cromas entre capas, y otro canal que define el método OpenGL de blending. El orden de las capas se controla mediante el canal de posición Z: cuanto más grande sea más al fondo se encuentra. Si no el orden de prioridad es cuanto más pequeño el número de capa más prioridad tiene (la capa 1 es la más prioritaria).

También podemos manejar 8 capas de audio, cada una reproduciendo un archivo .ogg. El control de volumen es en 16 bits de precisión y logarítmico.

*******************************************************************************

GUI:

El interface gráfico es muy simple, sirve para manejar la configuración de Pure Data y sirve para ver el archivo que cada capa está reproduciendo. Tenemos dos pestañas: Una para la configuración de Video y otra para la de Audio. Cada capa de audio y/o video se deberá patchear en la mesa independientemente. Los dos procesos son independientes y pueden funcionar individualmente o conjuntamente. 
Como los controles son parecidos para las dos ventanas, las explicamos juntas. Empezando de arriba hacia abajo:

A. Terminal. Se muestran mensajes de estado y de error. Común a las dos capas.

B. 8 Capas. Representan las 8 capas de video.
	
  - B.1 Ventana de Preview. Muestra el archivo que está siendo reproducido en la capa, sin efectos ni modificaciones. Funciona a 1 frame por segundo. Aunque el dimmer de la capa esté a 0% esta ventana seguirá mostrando el archivo como si estuviera a 100%, lo que es útil para verificar que es el archivo correcto antes de lanzarlo.
	- B.2 Botón de activado de la capa. Si no está clickado la capa no está activada y no renderiza, se quedará en la pantalla el último frame renderizado; desactivando la capa no va a negro.
	- B.3 Dirección DMX. Hay que introducir el primer canal DMX de la capa, el mismo que se patcheó en la mesa.

C. Video/Audio. Inicia o detiene los procesos de video y de audio.

D. ReadDMX. Empieza o termina la lectura de datos DMX.

E. OLA Universe. El universo de Open Lighting Arquitecture que hemos configurado como entrada y al que el proceso escuchará. Ver instalacion.txt para detalles y configuración de OLA.

F. Window. Crea y destruye la ventana de reproducción.

G. Window Position. Posición de la ventana de renderizado en pixeles x,y.

H. Window Size. Tamaño de la ventana de renderizado en pixeles x, y.

I. IP Adress. Dirección IP de la interface que queremos usar para el CITP/MSEx. Dejar en 0.0.0.0 para todas las interfaces.

J. Ventana de preview. La ventana grande es un preview de la mezcla final. Funciona a 2 frames por segundo.

Menu File:

	- Open Configuration: Abre un archivo de configuración previamente grabado.
	- Save Configuration: Graba un archivo de configuración al disco.
	- Change Media Path: Cambia la ruta al árbol de medias.

*******************************************************************************

CITP/MSEx

El CITP/MSEx no funciona en el interface localhost. Sin embargo la recepción de datos ArtNet sí. Se necesita tener un interface de red activo en el momento de lanzar el programa, pero después se puede desconectar. Se puede usar en el mismo ordenador LMS y MagicQLinux para controlarlo.

Inicia la ejecución de CITP/MSEx desde el menu CITP/MSEx --> Init. Antes tendrás que haber generado los thumbnails desde el mismo menu --> Make Thumbs. Si tienes una biblioteca grande de medios esto puede tardar un rato y consumir muchos recurso del ordenador. No lo hagas en directo!

CITP/MSEx se ejecutará en la interfaz de red con la dirección IP definida en la pestaña video. Deja en 0.0.0.0 para que se ejecute en la interfaz de dirección más baja, típicamente 2.x.x.x

*******************************************************************************

Ventana de renderizado: 

La ventana de renderizado se muestra sobre todas las demás ventanas y sin que aparezca el cursor en ella. Si tenemos problemas en la configuración, por ejemplo nos quedamos sin ver el escritorio,  siempre podemos llevar el cursor a la ventana de renderizado y presionar Escape para cerrarla. La posición de la ventana se configura con los controles "Window Position" y el tamaño de la ventana con "Window Size", los dos primero el ancho y después el alto. Para hacer algo útil deberemos tener el escritorio extendido a un segundo monitor y configurar en estos controles los valores de ese monitor. Para aplicar cambios hay que cerrar la ventana y reabrirla. En la ventana Preview siempre se muestra el preview para los valores actuales de posición y tamaño, lo que es útil para corroborar que la ventana se va a abrir donde queremos. 	

*******************************************************************************

Estructura de medias:

Los archivos de medios que utiliza LMS deben de estar ordenados en un árbol de ficheros. La dirección superior del árbol es la que se tiene que configurar en LMS mediante el la opción en el menu File --> Change media Path.

El árbol de ficheros tiene el siguiente esquema:

+ media
	+ video
		+ 000-descripcion
 			- 000-miloop.mov
			- 001-milooocool.avi
			- 002-mipelo.mpg
			...
			- 255-ultimo.avi		
		
		+ 001-otrodir
			- 000-otrapeli.mov
			- 001-maspelis.mov
			...
			- 255.ultimodelasegundacarpeta.mov
		
		+ 002-fuego		
			- 000-Boladefuego.avi
			- 001-Murodefuego.avi
			...
			- 255-fuentedefuego.avi		

		...
		
		+ 255-ultimodir
			+255.ultimapeli.mov

	+ audio
		+ 000-miprimealbum		
			- 000-mifichero.ogg
				...
  		- 255-miultimofichero.ogg

		+ 001-misegundoalbum
			- 000-mifichero.ogg
				...
  		- 255-miultimofichero.ogg
		
		...
		+ 255-miultimoalbum
			- 000-mifichero.ogg
				...
  		- 255-miultimofichero.ogg

	+ fonts
		- 000-mifuente.ttf
		...
		- 255-miultimafuente.ttf

	+ images
		- 000-miprimerafoto.jpg
		...
		- 255-miultimafoto.jpg

Los números al principio de ficheros y directorios no son obligatorios, pero ayudan mucho a organizar el material. LMS busca por orden alfabético en los directorios/ficheros, y ese orden es el que determina  los valores de los canales Folder y File para reproducirlos.

En la página de descargas del proyecto hay un archivo comprimido con varios archivos de medios de ejemplo listo para descomprimir y usarlos con LMS.

*******************************************************************************

Textos:

Puedes definir hasta 255 frases editando con un editor ASCII el fichero text.txt. El formato es:

1, Esto es una frase;
2, El número es el valor del canal 6 folder;
3, no se pueden usar comas;
4, las frases tienen que acabar con punto y coma;
255, última frase que se puede usar;

Para cambiar de frase usa el parámetro Folder. Para cambiar de fuente el parámetro file. Puede renderizar cualquier fuente True Type que se le instale en el directorio "fonts".

*******************************************************************************

Listado de canales DMX:

LibreMediaServer Video:

Entre paréntesis el valor normal de uso (locate).

1 Alpha/Dimmer (255)
2 Rojo	(127)
3 Verde (127)
4 Azul  (127)
5 Speed (40; esto se corresponde a 25 fps. El valor del canal son los milisegundos del metro, por lo que la inversa es el valor real de FPS).

     0-244: Velocidad de reproducción.
     245-249: Autodeteccion de fps, una sola vez. Se reproducirá a la velocidad de la película.
     250-255: Autodeteccion de fps, loop	

En los modos auto el inicio y fin de loop no son aplicables, se reproduce la película completa en modo Normal (ver canal 9).

6 Directorio / Texto
7 Archivo / Fuente
8 Tipo de Media
    0-24:    OFF
    25-49:   Video
    50-75:   Imagenes
    75-99:   Texto	
9 Modos de Reproduccion (Sólo aplicable si canal 5 < 245):
    00-24 Normal loop 
    25-49 Back loop 
    50-74 Ping-pong loop 
    75-99 Normal una vez
    100-124 Back una vez 
    125-149 Ping-Pong una vez 
    150-174 Stop/pause
    175-200 Continue/Play
10 Inicio loop (0 principio peli- 255 final)  (0)
11 Final Loop  (0 principio peli - 255 final) (255)
12 Rotate X (0)
13 Rotate Y (0)
14 Rotate Z (0)
15 Size X (127)
16 Size Y (127)
17 Z (127)
18 X (127)
19 Y (127)
20 X Fine (127)
21 Y Fine (127)

Los siguientes canales son usados para lumas y cromas.
Los High filtran los pixeles con ese valor o superior y los convierte en transparente (croma)

22 Alpha High Red   (255)
23 Alpha High Green (255)
24 Alpha High Blue  (255)

Los Low filtran los pixeles con ese valor o inferior (máscara).

25 Alpha Low Red    (0)
26 Alpha Low Green  (0)
27 Alpha Low Blue   (0) 

Los siguientes canales se usan para correción de keystone y videomapping. Hay configuración por capa, el resto de configuraciones de posición y tamaño se reajustarán dentro de la nueva capa

28 Corner Bottom Left X  (0)
29 Corner Bottom Left Y  (0)
30 Corner Top Left X     (0)
31 Corner Top Left Y     (255)
32 Corner Bottom Right X (255)
33 Corner Bottom Right Y (0)
34 Corner Top Right X    (255) 
35 Corner Top Right Y    (255)

Los siguientes canales son usados para control de efectos

36 Selección FX 1 - Ver abajo para lista de efectos. 
37 Selección FX 2 (Reservado - No Implementado todavía).
38 Param 1 FX 1
39 Param 2 FX 1
40 Param 3 FX 1
41 Param 4 FX 1
42 Param 5 FX 1
43 Param 6 FX 1
44 Param 7 FX 1
45 Param 8 FX 1

46 - Blending Mode.  Este canal elige el tipo de mezcla entre capas. Se corresponde a los modos de mezcla OpenGL:
	
	0:  GL_ONE_MINUS_SRC_ALPHA;
	1:  GL_ONE;
	2:  GL_ZERO;
	3:  GL_SRC_COLOR;
	4:  GL_ONE_MINUS_SRC_COLOR; (Locate, mezcla normal)
	5:  GL_DST_COLOR;
	6:  GL_ONE_MINUS_DST_COLOR;
	7:  GL_SRC_ALPHA;
	8:  GL_ONE_MINUS_SRC_ALPHA;
	9:  GL_DST_ALPHA;
	10: GL_ONE_MINUS_DST_ALPHA;
	11: GL_CONSTANT_COLOR;
	12: GL_ONE_MINUS_CONSTANT_COLOR;
	13: GL_CONSTANT_ALPHA;
	14: GL_ONE_MINUS_CONSTANT_ALPHA;
	15: GL_SRC_ALPHA_SATURATE;
	16: GL_SRC1_COLOR;
	17: GL_ONE_MINUS_SRC1_COLOR;
	18: GL_SRC1_ALPHA;
	19: GL_ONE_MINUS_SRC1_ALPHA;
	20: GL_ONE_MINUS_SRC_ALPHA;

Más información sobre los distintos tipos de blending en http://www.opengl.org/wiki/GLAPI/glBlendFunc.

*******************************************************************************

Efectos Video:

Atención! Algunos de estos efectos y/o combinaciones de parámetros cascan Pure Data. Testéalos antes de usarlos en directo. 

0 - No effect
1 - Bitmask 
	Fx 1 All   (255)
	Fx 2 Red   (255)
	Fx 3 Green (255)
	Fx 4 Blue  (255)
2 - Halftone
	FX 1 Size
	FX 2 Angle
	FX 3 Smooth
	FX 4 Style 
3 - Rds
 	FX 1 Method
	FX 2 Stride
4 - Roll
	FX 1 Axis
	FX 2 Roll
5 - Invert
	FX 1 On/Off
6 - Scanline
	FX 1 Mode
	Fx 2 Interlace
7 - Threshold
	FX 1 All
	FX 2 Red
	Fx 3 Green
	Fx 4 Blue
8 - Metaimage
	FX 1 Cheap
	FX 2 Distance
	FX 3 Size	
9 - Refraction
	FX 1 Width
	FX 2 Height
	FX 3 Mag
	FX 4 Refract
10 - Convolve
	FX 1 Escala
	FX 2 Modo (none, smooth, edge1, edge2)
11 - Gain
	FX 1 Common
	FX 2 Red
	FX 3 Green
	FX 4 Blue
12 - Lumaoffset
	FX 1 Fill On/Off
	FX 2 Smooth On/Off
	FX 3 Gap
	FX 4 Offset
13 - tIIR
	FX 1 Feedback 1
	FX 2 Feedback 2
	FX 3 Feedback 3
	FX 4 Feedforward 1
	FX 5 Feedforward 2
14 - rtx
	FX 1 Clamp discontinuity to the edge (On/Off)
15 - Normalize
	No Params
16 - Kaleidoskope
	FX 1 Segments
	FX 2 Source Angle
	FX 3 X
	FX 4 Y
	FX 5 cX
	FX 6 CY
	FX 7 RLP
	FX 8 SAP
	
*******************************************************************************

PureMediaServer Audio:

1 - Volumen Coarse
2 - Pan
3 - Folder
4 - File
5 - Playback
	0-24 : Play. Reproduce desde el inicio del fichero.
	25-49: Stop.
	50-74: Resume. Reproduce desde el punto desde el que se paró, o desde el punto designado por Entry Point.
6 - Control - Reservado, sin uso en este momento.
7 - Volume Fine
8 - Entry Point Coarse - Punto de entrada de reproducción. 
9 - Entry Point Fine - El valor de estos dos canales en centésimas de segundo.
