Thursday, April 06, 2006

Il piano (v1.1)


Nel flusso quotidiano del lavoro su/in transcode, attualmente sotto asservazione ci sono tre aspetti che per il momento sono stati classificati come "secondari".
Infatti, la maggior parte del (poco, inevitabilmente) tempo dedicato alla faccenda nel complesso e` dedicato a riunire il branch NMS in HEAD.
Prima della felice riunione rimane da sistemare un bug grosso & fastidioso con l'opzione -c, che non viene onorata qualora si usi il nuovo codice dell'encoder.

Dei summenzionati aspetti "secondari", quello che giusto adesso mi sta creando piu` grattacapi e` la riorganizzazione di import_vnc. Si tratta di una di quelle rarely used features che rendono particolare transcode, e che quindi van tenute, anche se a me personalmente piacciono poco, le uso quasi mai and so on.

A grandi linee, attualmente, le cose funzionano cosi`.
tc si appoggia per parte del lavoro (per la precisione per quasi tutta la parte "sporca) ad un programma esterno, vncrec, che consente oltre che di registrare una sessione VNC, anche di riprodurre una sessione preregistrata e, cosa piu` interessante, di emettere i singoli frame componenti la registrazione. Questo e` quello che ci interessa. vncrec permette di emettere ogni frame (in formato XPM) attraverso un programma esterno, impostabile mediante un'opportuna variabile di ambiente. Per default e` qualcosa tipo

"cat > image%05i.xpm"

In import_vnc, tale comando esterno e` impostato ad essere 'tcxpm2rgb' che, come suggerisce il nome, si incarica di leggere una (o piu`) immagini XPM e scrivere una (o piu`) corrispondente rappresentazione RAW RGB su un FILE a scelta.
E` interessante notare che tcxpm2rgb e` usato solo in import_vnc, e verrebbe quindi voglia di liberarsene. Oltretutto, chi in genere abbisognasse di traslare XPM in $SOMETHING_ELSE, dovrebbe trovarsi meglio con ImageMagicK, netpbm o altro ancora.

Tornando a noi, siamo ad un punto in cui vncrec emette, sfruttando tcxpm2rgb, un flusso di immagini in formato RGB, chiaramente usando i giusti parametri dacche` vncrec e` comunque lanciato da transcode (mediante import_vnc). A questo punto import_vnc prosegue come tanti altri moduli leggendo da un'opportuna pipe i frame RGB teste` emessi, e tutti sono contenti.

Ora, io avrei anche un po` di perplessita` su come import_vnc e` scritto:
personalmente vedrei bene una popen invece della fork + execvp, non vedo perche` usare la select(), penso che la fifo si possa evitare e non mi piace come son gestiti gli argomenti opzionali passabili/passati a vncrec.

L'idea quindi sarebbe da rivedere dalle fondamenta l'ambaradan, semplificando pesantemente il tutto.
Eliminare tcxpm2rgb si puo` fare, basta potenziare alla bisogna vncrec.
Ci vorra` una patch non ufficiale (almeno in prima approssimazione), ma pace, perche` le cose dovrebbero, se tutto va come penso, migliorare sensibilmente, e per tutti.
Una volta reso vncrec in grado di emettere una serie di frame in formato RAW RGB il grosso e` fatto, perche` a quel punto dovrebbe bastare impostare il comando di output come una cosa tipo

cat -

e, da import_vnc (dopo aver impostato i vari PARAMETRI), fare semplicemente una cosa tipo (occhio: pseudo-pseudo-pseudo codice)

static FILE* my_fd = NULL;
MOD_open
{
char cmd_buf[256];
tc_snprintf(cmd_buf, 256, "vncrec -movie -raw -i %s %s", vob->video_in_file, PARAMS);
my_fd = popen(cmd_buf, "r");
param->fd = my_fd;
return 0;
}

MOD_decode
{
return 0;
}

MOD_close
{
pclose(my_fd);
my_fd = NULL;
}

riempiendo, ovviamente, i buchi mancanti.

Maggiori dettagli (forse) nelle prossime avvincenti puntate.

Comments: Post a Comment

Subscribe to Post Comments [Atom]





<< Home

This page is powered by Blogger. Isn't yours?

Subscribe to Posts [Atom]