Главная страница
    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.047 c
15-1154071925
umbra
2006-07-28 11:32
2006.08.27
Литература/ссылки по проектированию баз данных


3-1147426811
Juice
2006-05-12 13:40
2006.08.27
TClientDataSet: страноости с Eof


15-1154339947
Gydvin
2006-07-31 13:59
2006.08.27
Ищу компонент


2-1155146869
Батыр
2006-08-09 22:07
2006.08.27
Где можно скачать Delphi 6 or 7


2-1155113001
Хам
2006-08-09 12:43
2006.08.27
Работа с ini файлами





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