Newsgroup: it.comp.programmare.win32
Titolo: C++ vidCap: come salvare il codec?

Ciao a tutti, avevo postato questa domanda stamattina usando un account 
smart1 adsl ma con mia grande sorpresa non la vedo in linea.
Il problema e` questo: ho scritto un programma ultraleggero di acquisizione 
audio/video basato su vidCap. Funziona tutto molto bene, ma la dialog di 
selezione del codec (che e` relativa al driver video agganciato dal mio 
programma) non salva la scelta da nessuna parte, per cui ad ogni avvio deve 
essere reimpostata.
Il problema e` grave perche` il programma prevede la possibilita` di partire 
in registrazione ad un dato orario e il pc viene acceso poco prima, per cui 
nessuno puo` impostare il codec manualmente ed il default e` "no 
compression", ovvero 1GB al minuto (!).
Qualcuno sa come fare?
Ciao e grazie!
Alessandro

essere reimpostata.
La capDlgVideoCompression non salva nessuna informazione.
Puoi dare uno sguardo alla SendDriverMessage ();
Ho anche trovato questo consiglio:
===========================================
Next approach working for all VFW codecs (for DS codecs you can
use save/load methods of IStream())
1.  Making internal application for show dialog with codec
properties
    HIC hic = ICOpen(ICTYPE_VIDEO, fccCodec, ICMODE_COMPRESS);
    ICConfigure(hic, hWnd);        // Codec dialog
2. Selecting properties in dialog
3. Saving properties to file (for sample) in internal application
    ICGetState(hic, ...)
    ...
    WriteFile(...)
4. Attaching this file as binary resource to your project
5. Using this resource in user application before codec running
    HIC hic = ICOpen(ICTYPE_VIDEO, fccCodec, ICMODE_COMPRESS);
    ICSetState(hic, pvBuffer, cbBuffer);
ATTENTION. Don't use code, returned from ICConfigure. For sample,
DivX & MPG codecs returning incorrect code. Comparing data from
ICGetState before and after dialog call.
===========================================

 use save/load methods of IStream())
Anche questo mi sembra molto interessante e vale certamente la pena di 
perderci tempo. Pero` mi sembra che si tratti di salvare le impostazioni di 
un ben preciso driver di compressione, mentre il mio obbiettivo sarebbe 
quello di salvare QUALE driver di compressione e` stato scelto usando la 
maledettissima capDlgVideoCompression. In altre parole, mi sembra che la 
soluzione proposta sia relativa ad un prossimo possibile step evolutivo 
della cosa, ovvero salvare ANCHE le impostazioni specifiche di quel certo 
driver (ad esempio la qualita`). Prima pero` devo riuscire a dire alla 
AVICap (quello e` il nome della classe, che per sbaglio avevo chiamato 
"vidcap") di usare un certo codec senza far apparire la dialog di scelta...
Non posso veramente credere che siano stati cosi` deficienti da non 
consentire di settare un codec senza richiamare la dialog... o si? Adesso 
provo a tracciare col debugger la chiamata a capDlgVideoCompression.
Potresti anche dirmi dove hai trovato quel consiglio? Magari potrei cercare 
da quelle parti.
Intanto grazie mille!
Alessandro 

 capDlgVideoCompression.
Non si traccia un accidente :-(
Pero` ho notato che qui a casa, invece del solito "no compression" che 
appare all'apertura della dialog di capDlgVideoCompression, ho "Cinepak 
Codec by Radius" per default. Deve trattarsi del codec installato da una 
webcam, visto che qui per le prove ho una pin-cam usb. Vuoi vedere che c'e' 
il modo di forzare un codec di default? Sarebbe gia` piu` che sufficiente... 
magari si tratta di una qualche chiave di registro, che il mio programma 
potrebbe manipolare opportunamente. Domani indago.
Ancora ciao e grazie.
Alessandro

il modo di forzare un codec di default?
Ti sconsiglio di sbatterci la testa su quella funzione. Trovi il
Cinepak di default perche' i codec sono elencati in ordine
alfabetico (magari trovare il modo di cambiargli il nome e
mettere Xvid come primo?). La capDlgVideoCompression e' cosi',
punto e basta, siamo fortunati se ci hanno lasciato la
possibilita' di intervenire sulla GetOpenFileName!
Per trovare quelle informazioni ho cercato (naturalmente!) con
Google, nei gruppi di discussione.
Fai un salto su 
http://www.virtualdub.org/
 e scaricati i
sorgenti, anche quelli ti saranno d'aiuto.
Paolo

 Ti sconsiglio di sbatterci la testa su quella funzione.
L'ho riscritto di sana pianta, stavolta usando capCaptureSequenceNoFile(), 
e` molto piu` difficile perche` devo intercettare le callback video e audio, 
provvedere alla compressione e alla scrittura dello stream.
Incredibilmente sono riuscito a mettere a punto la sezione video. Ora per 
scegliere il codec non ho piu` bisogno della capCompression (o come diavolo 
si chiamava) e posso finalmente salvare in un file .cfg le scelte 
dell'utente.
Sto pero` ancora usando una classe preconfezionata per scrivere l'AVI, 
ovvero la AVIFile. E qui sorge il nuovo problema. Spostiamoci in nuovo 
thread cosi` forse il titolo attrae qualcuno che ha gia` provato.
Ciao e grazie!