diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2016-09-17 16:09:40 +0200 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-09-17 16:20:19 +0200 | 
| commit | c7215393794b7a901cfcca22c9afe200f5bb959e (patch) | |
| tree | 1a96ae7e44f48ce84219fd778181b0a85f09bc77 /cv | |
| parent | 1cb46ce512333342f292462121b6e23bee0a715d (diff) | |
cv: bring video property page from the attic
Diffstat (limited to 'cv')
| -rw-r--r-- | cv/video-property-page.cpp (renamed from cv/video-property-page.cpp_) | 121 | ||||
| -rw-r--r-- | cv/video-property-page.hpp | 21 | 
2 files changed, 55 insertions, 87 deletions
| diff --git a/cv/video-property-page.cpp_ b/cv/video-property-page.cpp index 319a2a78..08ac00d0 100644 --- a/cv/video-property-page.cpp_ +++ b/cv/video-property-page.cpp @@ -1,102 +1,26 @@ -#if 0 -#if 0 +/* Copyright (c) 2016 Stanislaw Halik + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + */ +  #include "video-property-page.hpp" -#else -#include <windows.h> -#include <dshow.h> -struct video_property_page final -{ -    video_property_page() = delete; -    static bool show(int id); - -private: -    static HRESULT ShowFilterPropertyPages(IBaseFilter* filter); -    static IBaseFilter* get_device(int id); -}; -#endif -// above is the header, for completeness -// OleInitialize, CoCreateInstance et al. don't help with ps3 eye. +#ifdef _WIN32  #include <cstring> -  #include <QString>  #include <QDebug> -#if 0 -DEFINE_GUID(CLSID_SampleGrabber,0xc1f400a0,0x3f08,0x11d3,0x9f,0x0b,0x00,0x60,0x08,0x03,0x9e,0x37); -DEFINE_GUID(IID_ISampleGrabber,0x6b652fff,0x11fe,0x4fce,0x92,0xad,0x02,0x66,0xb5,0xd7,0xc7,0x8f); - -struct ISampleGrabberCB : public IUnknown -{ -    virtual HRESULT STDMETHODCALLTYPE SampleCB( -        double SampleTime, -        IMediaSample *pSample) = 0; - -    virtual HRESULT STDMETHODCALLTYPE BufferCB( -        double SampleTime, -        BYTE *pBuffer, -        LONG BufferLen) = 0; -}; - -struct ISampleGrabber : public IUnknown -{ -    virtual HRESULT STDMETHODCALLTYPE SetOneShot( -        BOOL OneShot) = 0; - -    virtual HRESULT STDMETHODCALLTYPE SetMediaType( -        const AM_MEDIA_TYPE *pType) = 0; - -    virtual HRESULT STDMETHODCALLTYPE GetConnectedMediaType( -        AM_MEDIA_TYPE *pType) = 0; - -    virtual HRESULT STDMETHODCALLTYPE SetBufferSamples( -        BOOL BufferThem) = 0; - -    virtual HRESULT STDMETHODCALLTYPE GetCurrentBuffer( -        LONG *pBufferSize, -        LONG *pBuffer) = 0; - -    virtual HRESULT STDMETHODCALLTYPE GetCurrentSample( -        IMediaSample **ppSample) = 0; - -    virtual HRESULT STDMETHODCALLTYPE SetCallback( -        ISampleGrabberCB *pCallback, -        LONG WhichMethodToCallback) = 0; -}; -#endif -  #define CHECK(expr) if (FAILED(hr = (expr))) { qDebug() << QStringLiteral(#expr) << hr; goto done; }  #define CHECK2(expr) if (!(expr)) { qDebug() << QStringLiteral(#expr); goto done; } -#if 0 -static IPin* GetPin(IBaseFilter *pFilter, PIN_DIRECTION dir_) +bool video_property_page::show_from_capture(cv::VideoCapture& cap, int)  { -    IPin* ret = NULL; -    IEnumPins* pin_enum = NULL; -    PIN_DIRECTION dir; -    HRESULT hr; - -    CHECK(pFilter->EnumPins(&pin_enum)); - -    while (SUCCEEDED(pin_enum->Next(1, &ret, NULL))) -    { -        CHECK(ret->QueryDirection(&dir)); -        if (dir == dir_) -            goto done; -        ret->Release(); -        ret = NULL; -    } - -    ret = NULL; - -done: -    if (pin_enum) -        pin_enum->Release(); - -    return ret; +    cap.set(cv::CAP_PROP_SETTINGS, 0); +    return true;  } -#endif  bool video_property_page::show(int id)  { @@ -128,6 +52,8 @@ HRESULT video_property_page::ShowFilterPropertyPages(IBaseFilter* filter)      filter->QueryInterface(IID_IUnknown, (void**)&unk); +    // OleInitialize, CoCreateInstance et al. don't help with ps3 eye. +      // cl-eye uses this      // perhaps more than IBaseFilter* -> IUnknown* needs be passed to lplpUnk      // and the OleCreatePropertyFrame equiv @@ -205,4 +131,25 @@ done:      return filter;  } +#elif defined(__linux) +#   include <QProcess> +#   include "compat/camera-names.hpp" + +bool video_property_page::show(int idx) +{ +    const QList<QString> camera_names(get_camera_names()); + +    if (idx >= 0 && idx < camera_names.size()) +        return QProcess::startDetached("qv4l2", QStringList() << "-d" << camera_names[idx]); +    else +        return false; +} + +bool video_property_page::show_from_capture(cv::VideoCapture&, int idx) +{ +    return show(idx); +} +#else +bool video_property_page::show(int) { return false; } +bool video_property_page::show_from_capture(cv::VideoCapture&, int) { return false; }  #endif diff --git a/cv/video-property-page.hpp b/cv/video-property-page.hpp new file mode 100644 index 00000000..7c51f111 --- /dev/null +++ b/cv/video-property-page.hpp @@ -0,0 +1,21 @@ +#pragma once + +#ifdef _WIN32 +#   include <windows.h> +#   include <dshow.h> +#endif + +#include "opencv2/videoio.hpp" + +struct video_property_page final +{ +    video_property_page() = delete; +    static bool show(int id); +    static bool show_from_capture(cv::VideoCapture& cap, int idx); + +private: +#ifdef _WIN32 +    static HRESULT ShowFilterPropertyPages(IBaseFilter* filter); +    static IBaseFilter* get_device(int id); +#endif +}; | 
