Durante este proyecto me he afrontado con los siguientes problemas:
El HMC se basa en el sistema operativo WindowsCE 3.0 sobre cual esta montado la plataforma MicrosoftTV (MSTV). Este último es el middleware y ofrece funcionalidades como la grabación de contenido MPEG-2 al disco duro, un browser adaptado a la televisión, gestión de contenidos y programación electrónica.
WindowsCE 3.0 es un OS ya bastante abandonado por su sucesor WindowsCE .NET, y algunas librarías de desarrollo no se ha portado nunca a esta plataforma.
Una de ellas es la Standard Template Library (STL) para C++. Con MSTV viene una portación, pero está muy limitada. Toda la parte de IO (iostreams ...) está excluida. Y con ello muchas funcionalidades a la hora de formatear datos a cadenas.
Es increíble, pero todas mis investigaciones por Internet resultaron en que nadie había portado jamás la libraría STLport a WindowsCE.
Me puse a adaptar todas las cabeceras necesarias para poder compilar la STLport bajo WindowsCE y me creé un streambuffer propietario para poder imprimir cadenas al depurador del PlatformBuilder (mediante comunicación por Ethernet).
El siguiente reto era la portación de la librería mpeg4ip 1. Esta libraría sirve para leer y escribir vídeos en formato MPEG-4 en el contenedor MP4.
El gran problema de esta libraría es el hecho de que hace uso abundante de excepciones de C++. Por desgracia, WindowsCE 3.0 no permite excepciones.
No tenía ni el tiempo para reescribir toda la libraría, ni hubiera tenido sentido por que sería incompatible con futuras versiones del software.
Así que reemplacé todos los throws, try y
catch por macros 2
que emulaban el mismo comportamiento.
Además, añadí propios átomos al stream para poder localizar exactamente los bloques de meta-datos y para permitir un acceso directo a la tabla de key-frames.
El HMC lleva una tarjeta sintonizadora WinTV-PVR de Hauppauge para digitalizar los señales analógicas de la televisión a un stream MPEG-2.
Los demás productos basados en WindowsCE y MSTV trabajan sobre señales desde satélite y TDT que ya llevan la señal digitalizado. Por eso, no existe ningún driver para una tarjeta de estas característica.
Empleé a fondo mis conocimientos adquiridos por mis estudios para realizar dicho driver y viajé a San Francisco para resolver las últimas dudas en la sede de Conexant / iCompression.
Entre tantas tareas realicé:
Otro driver mucho más sencillo era para algunas funcionalidades del Via VT86Bxx brigde chip, por ejemplo, regular una LED y avisar mediante evento cuando el usuario pulsase un botón en el panel frontal.
try por un if
(...) etc.