lunes, 26 de diciembre de 2011

Imprimir desde Android

Pues es muy difícil.
Se nota que está pensado para teléfonos: lo único oficial que he encontrado que soporta el sistema operativo es una API miserable para imprimir sólo texto.
Me recuerda los tiempos antiguos del MS-DOS: las aplicaciones gestionan directamente la impresión, normalmente respondiendo a las acciones "share" o "view". Así que, no habiendo API oficial, exigen partir de formatos conocidos: PDF, imágenes, o documentos de MS Office.

En lugar de arreglar la API para poder usar Bluetooth, o los USB, para conectarse directamente con tu impresora, las fuerzas mayores proponen matar moscas a cañonazos: enviar por HTTPS o correo los documentos a Internet y que llegen a la impresora que tienes al lado (Google Print Cloud, HP ePrint).

Hay otras soluciones (de pago):
- PrinterShare Puede usar Wifi o bluetooth si la impresora los soporta. Acepta DOC, DOCX, XLS, XLSX, PPT, PPTX, PDF, TXT. 

Otros enlaces interesantes:
PrintIntent API
CUPS
HPLIP Android PDF Viewer basado en MuPDF library

lunes, 7 de febrero de 2011

Velocidad de conversión de vídeo DV a DVD

Una sencilla comparativa de velocidad: partir de un fichero de vídeo DV, convertirlo a DVD PAL, y anotar los fotogramas por segundo que nos reporta ffmpeg.

ffmpeg -threads 2 -i a.dv -target pal-dvd -y a.vob

Para exprimir nuestro procesador al máximo, hay que compilar ffmpeg con las optimizaciones de nuestra arquitectura (usar --cpu= en configure), y hay que ejecutarlo con tantas "threads" como núcleos tengamos.

Tengo bastante variedad de CPUs a mi alcance, e iré completando esta tabla:

Fotogramas por segundo
CPUGHzcache K--cpu=-threads 1-threads 2-threads 3-threads 4
Pentium-M1.401024pentium-m38---
Amd Neo K1251.701024 amdfam104242--
Intel D8303.002048prescott4165--
Intel E6400 2.132048core285119--
E2-1800 1.701024amdfam10100116--
E2-1800 1.701024amdfam10 64b109122--
Intel E52002.502048core289129--
Intel E52002.502048core2 64b109138--
Intel Q8300 2.504096core2103133158132
Intel Z3775 1.462048core2110134152159
Intel i7 640LM 2.134096core286118142160
Intel i3 3217U 1.803072core2 64b165196222226
Intel i7 640LM 2.134096corei7 199245281290
Intel i7 640LM 2.134096corei7 64b216267298310
i5-3450 3.106144corei7200275327351
i5-3450 3.106144corei7 64b215299364389
Intel i7 3630QM 2.406144corei7 64b217311394413
Intel i5 8300H 2.308192corei7 64b51888311181098

Sorprenden los resultados de mi humilde Pentium-M. La posible explicación es que está corriendo sobre Ubuntu, y este test debe estar limitado por el ancho de banda del disco (los demás procesadores corren sobre Cygwin).

También es curioso que el Q8300 y el 8300H funcionen mejor con 3 threads que con 4. Posible caso de cache trashing.

domingo, 16 de enero de 2011

Recortar y rellenar con FFMpeg

Vamos a usar los filtros crop y pad.

Para recortar a una imagen 8 píxeles por la izquierda, y 8 por la derecha:

ffmpeg.exe -i input.png -vf 'crop=in_w-16' output.png


Para rellenar con verde (R=69,G=94,B=18) 4 píxeles por la izquierda, y 4 por la derecha, si la imagen tiene 142 de ancho:

ffmpeg -i input.png -vf 'pad=150:0:8:0:699418' output.png

El filtro crop permite referenciar variables que representan el ancho/alto de la imagen. El filtro crop todavía no admite variables.