Главная страница
    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
Время: 4.166 c
2-1154682670
TrainerOfDolphins
2006-08-04 13:11
2006.08.27
Action.ShortCut:=Ctrl+S;


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


1-1153028556
Chort
2006-07-16 09:42
2006.08.27
RadioGroup


15-1153980738
IceBeerg
2006-07-27 10:12
2006.08.27
Где XP хранит список часто используемых программ?


15-1153997361
ПЛОВ
2006-07-27 14:49
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский