Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

DxShow+Capturing=problems   Найти похожие ветки 

 
Ozone ©   (2006-02-21 05:45) [0]

Добрый день. Есть web-камера, хочу сразу делать превью и капчуринг в bmp по запросу.
Сегодня на "коленках" собрал вот такой код, но при попытке считать хотябы размер буфера нифига не получается...
Может кто подскажет где я дал маху... Заранее спасибо.


 pBuild     : ICaptureGraphBuilder2;
 pGraph     : IGraphBuilder;
 hr         : HWND;
 pCap       : IBaseFilter;
 pMoniker   : IMoniker;
 pDevEnum   : ICreateDevEnum;
 pEnum      : IEnumMoniker;
 MC         : IMediaControl;
 ME         : IMediaEventEx;
 VW         : IVideoWindow;
 pSampleGrabber : IBaseFilter;
 pGrabber       : ISampleGrabber;
 mt             : TAM_MEDIA_TYPE;

{...}
    { **** ПОСТРОЕНИЕ ГРАФА ****}
    pGraph := nil;
    pBuild := nil;

    hr := CoCreateInstance(CLSID_CaptureGraphBuilder2, nil,
                           CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, pBuild );
    if SUCCEEDED(hr) then begin
      hr := CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER,
                             IID_IGraphBuilder, pGraph);
      if SUCCEEDED(hr) then begin
         pBuild.SetFiltergraph(pGraph);
      end
      else pBuild := nil;
    end
    else ShowMessage("Error_2");

    pCap := nil;
    pMoniker := nil;

    // Create the system device enumerator
    pDevEnum := nil;
    hr := CoCreateInstance(CLSID_SystemDeviceEnum, nil, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, pDevEnum);
    if (FAILED(hr)) then ShowMessage("7");

    // Create an enumerator for the video capture devices
    pEnum := nil;
    hr := pDevEnum.CreateClassEnumerator(CLSID_VideoInputDeviceCategory, pEnum, 0);

    // берем первое что попалось
    if (pEnum.Next(1, pMoniker, nil) = S_OK) then begin
       // Bind Moniker to a filter object
       hr := pMoniker.BindToObject(nil,nil,IID_IBaseFilter, pCap);
       if (FAILED(hr)) then ShowMessage("9");
       hr := pGraph.AddFilter(pCap, "Capture Filter");
       if (FAILED(hr)) then ShowMessage("10");
    end;

    hr := pBuild.RenderStream(@PIN_CATEGORY_PREVIEW, @MEDIATYPE_Video, pCap, nil, nil);

    hr := pGraph.QueryInterface(IID_IMediaControl, MC);
    if (FAILED(hr)) then ShowMessage("13");

    hr := pGraph.QueryInterface(IID_IMediaEvent, ME);
    if (FAILED(hr)) then ShowMessage("14");

    hr := pGraph.QueryInterface(IID_IVideoWindow, VW);
    if (FAILED(hr)) then ShowMessage("15");

    { Insert grabber}

    hr := CoCreateInstance(CLSID_SampleGrabber, nil, CLSCTX_INPROC, IID_IBaseFilter, pSampleGrabber) ;
    if (FAILED(hr)) or  (pSampleGrabber = nil) then ShowMessage("11");

    hr := pSampleGrabber.QueryInterface(IID_ISampleGrabber, pGrabber);
    if (FAILED(hr)) then ShowMessage("19");

    // set media type
    mt.majortype := MEDIATYPE_Video;
    mt.subtype := MEDIASUBTYPE_RGB24;
    hr := pGrabber.SetMediaType(mt);
    if (FAILED(hr)) then ShowMessage("16");

    hr := pGraph.AddFilter(pSampleGrabber, "Sample Grabber");
    if (FAILED(hr)) then ShowMessage("12");
    pSampleGrabber := nil;

    pGrabber.SetOneShot(FALSE);
    pGrabber.SetBufferSamples(TRUE);

    VW.put_owner(Panel.Handle);
    VW.put_top(0);
    VW.put_left(0);
    VW.put_width(320);
    VW.put_height(240);
    VW.put_windowstyle(WS_CHILD);

{...}
    {*** RUN GRAPH ***}
    MC.Run;
    while (State_Running <> tmp) do
       MC.GetState(100, tmp);

{...}
    {*** CAPTURE IMAGE ***}
    cbBuffer : longint;
    pBuffer  : pChar;

    {...}

    cbBuffer := 0;
    hr := pGrabber.GetCurrentBuffer(cbBuffer, 0); // здесь всегда cbBuffer равно 0
    {...}


 
Ozone ©   (2006-02-21 11:09) [1]

вопрос снят, всем спасибо.


 
Belorus ©   (2006-02-24 18:50) [2]

Советую на DSPack посмотреть



Страницы: 1 вся ветка

Текущий архив: 2006.08.27;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.043 c
2-1153677722
cando
2006-07-23 22:02
2006.08.27
открыти зарегестрированного файла


1-1152695808
antonn
2006-07-12 13:16
2006.08.27
Опять про локализации...


8-1140765122
Maka
2006-02-24 10:12
2006.08.27
как заставить играть mp3 файл ....


6-1144309337
DVM
2006-04-06 11:42
2006.08.27
Как замедлить прием данных с сервера HTTP


1-1152901543
sv133
2006-07-14 22:25
2006.08.27
Программирование LPT-порта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский