Newsgroup: it.comp.lang.visual-basic
Titolo: [?] DirectX 8.1 e VB Objects

Ciao ragazzi
son sempre mi a rompere le scatole.
Vorrei riuscire ad enumerare i codecs video ( e in un secondo momento quelli
audio) installati su una macchina qualsiasi.
Dopo un bel pò di ricerche, (avevo postato mesi fa senza avere risposta),
sono arrivato a compiere il primo passo. Il codice è questo:
Dim mGraph As New FilgraphManager
Dim objRegFilter As IRegFilterInfo
For Each objRegFilter In mGraph.RegFilterCollection
    List1.AddItem (objRegFilter.Name)
    i = i + 1
Next
in questo modo vengono elencati però tutti i filtri direct show presenti nel
sistema, e la osa è poco interessant e quantomeno ridondante per quello che
devo fare io.
Ora, il modo per far elencare solo i compressori e i decompressori c'è. Ma
io proprio non ci sto riuscendo, per cui vi chiedo una mano. Gli oggetti di
cui sto parlando sono descritti qui
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dx8_c/direc
tx_cpp/htm/visualbasicobjects.asp
qualcuno potrebbe darmi una mano? almeno a capire come funzionano sti
benedetti pins e ste iamcollections... io sono davvero in alto mare...
Grazie
www.rippinguide.too.it

 Ora, il modo per far elencare solo i compressori e i decompressori c'č. Ma


 Ma io proprio non ci sto riuscendo, per cui vi chiedo una mano.
Purtroppo non ho il DirectX SDK installato (e non posso installarlo
per il momento), per cui non posso fare le necessarie prove. Se pero`
tu postassi il codice che cerchi di usare, ed il tipo di errore che
ritorna si potrebbe anche tentare a darTi una mano.
DirectShow in VB e` un po' un'inferno perche` non tutte le interfaccie
implementano OLE Automation.
Probabilmente se posti le tue domande su microsoft.public.vb.directx
troverai risposte piu` celeri alla tua domanda.
--
ale
www.sen.it

 Mi va bene anche se..
Una cosa importante che mi ero scordato nell'altro post: la Microsoft
ha annunciato da mesi che la nuova release di DirectX, (la 9.0)
uscira` in autunno (per cui sono gia` in ritardo) e che sara`
pienamente integrata con .Net; se la scadenza del progetto a cui stai
lavorando non e` troppo stringente, forse ti conviene aspettare,
oppure chiedere alla MS il beta delle DirectX 9.0 (e` in giro da
Maggio).
--
ale
www.sen.it

Premetto che sono davvero troppo confuso.
Il codice che uso per leggere i filtri installati nel sistema lo avevo già
postato ed è:
Dim mGraph As New FilgraphManager
Dim objRegFilter As IRegFilterInfo
For Each objRegFilter In mGraph.RegFilterCollection
    List1.AddItem (objRegFilter.Name)
    i = i + 1
Next
associato all'evento onload del form. Quindi mi viene restituita una lista
di centinaia di filtri installati nel sistema (182 e passa). Ora io vorrei
realizzare un loop che mi permetta, giocando coi pin di iascuno di questi
filttri, di distinguere tra i codecs veri e propri, e i filtri directshow e
roba simile, che non mi servono.
ti riporto un pezzo di codice che ho trovato in un esempio, e che io ho
cercato invano di adattare alle mie esigenze. Gli errori che ho ottenuto
sono davvero diversi tra loro:
1) blocco with..... (e non c'era alcun blocco with)
2) impossibile creare il controllo Activex
gli altri non me li ricordo purtroppo.
Public Function EnumVideoCapHW(ByRef lst As ListBox) As Long
   'returns number of Video capture devices
   ' and loads their names into the combo box for user to select
   ' provides UI feedback through the label control
    '*Note we 'must create new FilterGraph because there is no way to
enumerate certain types of filters without
    ' connecting them to a filterGraph, and there is no way to disconnect
pins from the FIlter graph
    'in VB!
    Dim tempFIlterGraph As FilgraphManager
    Set tempFIlterGraph = New FilgraphManager
    Dim filterRef As IRegFilterInfo 'registered filters (only info we can
get from this is the name as string!)
    Dim f As IFilterInfo 'gives a little more info about the filter, but
does not provide any way to control the filter!
    Dim PreviewPin As IPinInfo
    Dim CapturePin As IPinInfo
    Dim numdevs As Long
'    Dim FilterCol As Object
'    Set FilterCol = FilterGraph.RegFilterCollection
    cb.Clear
    For Each filterRef In tempFIlterGraph.RegFilterCollection
        'loop through all filters' pins
        'if the filter has both a preview pin and a ~capture pin
        'then assume it is a vidcap filter and add it to combo-box
        'this is the only way to find this info from VB currently :-(
        Set f = Nothing
        'lbl.Caption = filterRef.Name
        'lbl.Refresh
        If filterRef.Name <> "Oscilloscope" Then 'kludge to avoid the stupid
oscilloscope filter that appears as soon as you instantiate it!
            filterRef.filter f
            For Each CapturePin In f.Pins
                If CapturePin.Name = "~Capture" Then
                    'note* not all video capture devices will have a Preview
pin
                    For Each PreviewPin In f.Pins
                        If PreviewPin.Name = "Preview" Then
                            numdevs = numdevs + 1
                            List2.AddItem f.Name
                        End If
                    Next
                End If
            Next
        End If
    Next
    lbl.Caption = ""
    If cb.ListCount > 0 Then
        cb.ListIndex = 0 'show first device
    End If
    EnumVideoCapHW = numdevs
End Function
bene, questa funzione nell'esempio, enumera le periferiche di cattura video
in una combo box, mentre in una label fa vedere in sequenza tutti i codecs
installati nel sistema, ma a una velocità supersonica.
A me ovviamente interessa la parte riguardante la label, non l'enumerazione
delle periferiche.
In sostanza quello che voglio fare è questo. Ho realizzato un proggo che
prende in input files avi e restituisce una serie molto dettagliata di
informazioni. Io vorrei che fosse in grado ance di dirmi se il codec è
installato nel sistema, e per farlo avrei bisogno di capire come si leggono
i pin ecc. per risalire poi al fourcc che è associatoa ciascun codec.
Bah, sono stato prolisso.
grazie cmq