Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[C#] DirectShow - podesavanje rezolucije

[es] :: .NET :: [C#] DirectShow - podesavanje rezolucije

[ Pregleda: 2461 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

johnnyc

Član broj: 175590
Poruke: 202
*.dynamic.sbb.rs.



Profil

icon [C#] DirectShow - podesavanje rezolucije30.10.2009. u 05:42 - pre 176 meseci
Pozdrav,

Da li je neko radio sa DirectShowom?

Svaki put kada pokrenem aplikaciju, video signal mi je velicine 320x240, i svaki put moram "rucno" da ga prebaucujem na npr. 640x480.

Da li mozete da mi pomognete kako mogu u code-u da ga "zakucam" da bude 640x480?


Znam da je najbolje resenje da se upotrebi IAMStreamConfig, ali meni taj sistem jednostavno nije jasan.........

please help!
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: [C#] DirectShow - podesavanje rezolucije30.10.2009. u 08:54 - pre 176 meseci
Primer je u c++ cisto da vidis metodologiju a i klase i strukture se u c# zovu slicno
Code:

// IBaseFilter je capture filter od tvog uredjaja (web camera tv kartica  itd ..) 
IBaseFilter* pBaseFilter ;
 
//od capture filtera trazis raspolozive pin-ove koji postoje na njemu .. 
CComPtr<IEnumPins> pEnum;
pBaseFilter->EnumPins(&pEnum);

//trazis pin od capture filtera u kome se nalaze raspolozivi formati video signala 
IPin* m_pCamOutPin = 0 ;
HRESULT hr = pEnum->Reset();
hr = pEnum->Next(1, &m_pCamOutPin, NULL); 


// u AM_MEDIA_TYPE strukturi ti se nalazi VIDEOINFOHEADER koji ti daje raspolozive rezolucije 
IEnumMediaTypes *pMedia;
AM_MEDIA_TYPE *pmt = NULL, *pfnt = NULL;
hr = m_pCamOutPin->EnumMediaTypes( &pMedia );

// enumerises media tipove koji postoje u pin-u 

while(pMedia->Next(1, &pmt, 0) == S_OK)
{
  if( pmt->formattype == FORMAT_VideoInfo )
   {
      if (pmt->cbFormat >= sizeof(VIDEOINFOHEADER)) 
       {
        
        VIDEOINFOHEADER *vih = reinterpret_cast<VIDEOINFOHEADER*>(pmt->pbFormat);
         if (640 == vih->bmiHeader.biWidth && 480 == vih->bmiHeader.biHeight)
         {
            lSampleSize = pmt->lSampleSize ; 
            pfnt = pmt ;  // sacuvas AM_MEDIA_TYPE strukturu 
                            
          }
       }
            
   }                        
}
pMedia->Release();


// trazis interfejs IAMStreamConfig od capture graph buildera 
CComPtr<IAMStreamConfig> pAmCfg ; 
hr = m_pCaptureGraph->FindInterface(&PIN_CATEGORY_CAPTURE,
                                                     &MEDIATYPE_Video,pBaseFilter,IID_IAMStreamConfig,
                                                      (void**)&pAmCfg) ;   

pAmCfg->SetFormat(pfnt) ;  // ovo setuje odgovarajucu rezoluciju video signala ... 

//posle ovog sledi 
hr = m_pCaptureGraph->RenderStream (&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
                                          pBaseFilter, NULL, NULL);






Viva lollapalooza
 
Odgovor na temu

johnnyc

Član broj: 175590
Poruke: 202
*.dynamic.sbb.rs.



Profil

icon Re: [C#] DirectShow - podesavanje rezolucije31.10.2009. u 15:10 - pre 176 meseci
Pazi kad nema sanse da ga skontam.....
:-((((

Pokusavam sa:

Code:

        public Size FrameSize
        {
            get
            {
                BitmapInfoHeader bmiHeader;
                bmiHeader = (BitmapInfoHeader) getStreamConfigSetting( videoStreamConfig, "BmiHeader" );
                Size size = new Size(720, 576);
                bmiHeader.Height = 576;
                bmiHeader.Width = 720; 
                return( size );

            }
            set
            {
                BitmapInfoHeader bmiHeader;

                setStreamConfigSetting(videoStreamConfig, "BmiHeader", new Size(720, 576));

            }
        }





U kom delu bi trebao da se nalazi code koji si napisao?

Isto tako, pokusavao sam i sa:

Code:

                VideoInfoHeader v = new VideoInfoHeader();
                Marshal.PtrToStructure(mediaType.formatPtr, v);
                v.BmiHeader.Width = 720;
                v.BmiHeader.Height = 576;
                hr = videoStreamConfig.SetFormat(mediaType);



ne znam sta jos nisam pokusao, i uvek mi pokrece u 320x240
:-(


[Ovu poruku je menjao johnnyc dana 31.10.2009. u 17:00 GMT+1]
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: [C#] DirectShow - podesavanje rezolucije02.11.2009. u 09:06 - pre 176 meseci
Ne mozes stavljati rezoluciju kroz VideoInfoHeader koju hoces ako je sam uredjaj ne podrzava ..
web-camere , tv kartice imaju set rezolucija (ili mozda jednu jedinu) koje emituju i to je podrzano i hardverski ..
Tvoje je da ih enumerises i da izaberes neku od tih ponudjenih a kroz VideoInfoHeader samo ispitujes
da li je neka od tih tj. da li zadovoljava tvoj izbor rezolucije ..
ako je nema onda ces morati da izaberes prvu (default) ..

Druga stvar : ne vidim odakle si dobio mediatype strukturu
Code:

Marshal.PtrToStructure(mediaType.formatPtr, v);


Da bi ti bilo jasnije skini Vista SDK u njemu je graphedit program koji ti omogucava
graficki da editujes svoj graphbuilder (za strimovanja , pustanje video iz fajla itd.. )

U capture pin-u ti je media format koje enumerises i one ti daju listu rezolucija :

Capture pin properties :


Capture pin media formats:











[Ovu poruku je menjao deerbeer dana 02.11.2009. u 10:18 GMT+1]


[Ovu poruku je menjao deerbeer dana 02.11.2009. u 10:22 GMT+1]
Viva lollapalooza
Prikačeni fajlovi
 
Odgovor na temu

johnnyc

Član broj: 175590
Poruke: 202
*.dynamic.sbb.rs.



Profil

icon Re: [C#] DirectShow - podesavanje rezolucije03.11.2009. u 00:32 - pre 176 meseci
u pravu si, skroz se slazem sa tim sto si napisao.

ali, ja znam da moja kartica podrzava 720x576. zato bih i zeleo da u programu definisem da mi pusta video sa tjuner karte u toj rezoluciji.

ono sto mi treba, je da "zaobidjem" taj dijalog prozor u kom moram "rucno" da podesim rezoluciju (prva slika koju si postavio uz poruku).

sada sam nekako namestio moj program, da mi se prilikom njegovog pokretanja prvo pojavi taj dijalog prozor, da u njemu podesim 720x576.

da li moze da se to odradi nekako, bez dodatnih programa kao sto je graphedit i slicno?


veliko hvala unapred!
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: [C#] DirectShow - podesavanje rezolucije03.11.2009. u 08:58 - pre 176 meseci
Citat:

ali, ja znam da moja kartica podrzava 720x576. zato bih i zeleo da u programu definisem da mi pusta video sa tjuner karte u toj rezoluciji.
ono sto mi treba, je da "zaobidjem" taj dijalog prozor u kom moram "rucno" da podesim rezoluciju (prva slika koju si postavio uz poruku)

Slika je samo primera radi da vidis sta je filter i sta su PIN -ovi na njemu i cemu sluze ...
jer bez njih neces ni moci da setujes rezoluciju .
Graphedit je za to ko stvoren ako si pocetnik u ds-u.

Pogledaj kod sto sam okacio ..jes da nije u c# ali opet slicno je jer se o istim klasama/strukturama i metodologiji radi
Da ti pojednostavim kod :
1.) Pronadjes capture pin na capture filteru (IEnumPins)
2.) Enumerises media tipove koji postoje na tom capture pinu (IEnumMediaTypes)
3.) Za svaki media tip(AM_MEDIA_TYPE) proveris da li je video format i da li ima VIDEOINFOHEADER struktura
4.) Ispitas da li rezolucija u VH strukturi zadovoljava uslov (720x560)
5.) Ako zadovoljava sacuvaj trenutni media type i pozovi SetFormat od IAMStreamConfiga
6.) Pozovi RenderStream metodu od CaptureGraphBuildera

Ako ti ne ide probaj ovde da iskopas nesto :
http://sourceforge.net/projects/directshownet/forums/forum/460697

Viva lollapalooza
 
Odgovor na temu

[es] :: .NET :: [C#] DirectShow - podesavanje rezolucije

[ Pregleda: 2461 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.