Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "Media";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
15-1154071925
umbra
2006-07-28 11:32
2006.08.27
Литература/ссылки по проектированию баз данных


2-1155028521
Delphi basic
2006-08-08 13:15
2006.08.27
Отбор по дате в Access


6-1144413083
Bryak
2006-04-07 16:31
2006.08.27
чтение из файла по сети


2-1154342098
zamtmn
2006-07-31 14:34
2006.08.27
Как "динамический" вызать конструктор?


15-1154175086
Piter
2006-07-29 16:11
2006.08.27
Выбор цветов для рисования





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский