Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

building WebRTC Custom OpenCV Video Capture example #252

Open
mcajkovs opened this issue Aug 31, 2018 · 2 comments
Open

building WebRTC Custom OpenCV Video Capture example #252

mcajkovs opened this issue Aug 31, 2018 · 2 comments

Comments

@mcajkovs
Copy link

mcajkovs commented Aug 31, 2018

Configuration:
OS: Ubuntu 18.04.1 LTS
Libsourcey: commit: ce311ff, date: Sun Mar 25 12:32:55 2018, tag: 1.1.4
WebRTC: webrtc-22215-ab42706-linux-x64.tar.gz from this page
OpenCV: 3.4.2 installed using this script

I've successfully compiled libsourcey flowing this tutorial
I've used prebuild WebRTC libraries except building it myself. The flags I've used:

CMAKE_BUILD_TYPE = RELEASE
OPENCV_LINK_SHARED_LIBS = FALSE
WEBRTC_ROOT_DIR = /home/marek/webrtc
WITH_OPENSSL = FALSE
BUILD_SHARED_LIBS = FALSE
WITH_FFMPEG = TRUE
BUILD_SAMPLES = TRUE
WITH_OPENCV = FALSE

But I'm unable to compile example from this page

To compile the mentioned example I've created ~/libsourcey/src/webrtc/samples/custom_opencv_video_capture which contains CustomVideoCapturer.cpp and CustomVideoCapturer.h and added add_subdirectory(custom_opencv_video_capture) to ~/libsourcey/src/webrtc/samples/CMakeLists.txt

Is suspect that the errors are due to old version of example (the former is from 2014)
Is there more recent version of mentioned example ?

Errors during compilation:

[ 97%] Building CXX object webrtc/samples/custom_opencv_video_capture/CMakeFiles/marek.dir/CustomVideoCapturer.cpp.o
In file included from /home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:1:0:
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:19:50: error: ‘uint32’ was not declared in this scope
     virtual bool GetPreferredFourccs(std::vector<uint32>* fourccs) override;
                                                  ^~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:19:50: note: suggested alternative: ‘rintf32’
     virtual bool GetPreferredFourccs(std::vector<uint32>* fourccs) override;
                                                  ^~~~~~
                                                  rintf32
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:19:56: error: template argument 1 is invalid
     virtual bool GetPreferredFourccs(std::vector<uint32>* fourccs) override;
                                                        ^
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:19:56: error: template argument 2 is invalid
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:24:49: error: ISO C++ forbids declaration of ‘DISALLOW_COPY_AND_ASSIGN’ with no type [-fpermissive]
     DISALLOW_COPY_AND_ASSIGN(CustomVideoCapturer);
                                                 ^
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:29:58: error: ‘CapturedFrame’ in namespace ‘cricket’ does not name a type
     void SignalFrameCapturedOnStartThread(const cricket::CapturedFrame* frame);
                                                          ^~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:32:10: error: ‘Thread’ in namespace ‘rtc’ does not name a type
     rtc::Thread*  m_startThread; //video capture thread
          ^~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:19:18: error: ‘virtual bool videocapture::CustomVideoCapturer::GetPreferredFourccs(int*)’ marked ‘override’, but does not override
     virtual bool GetPreferredFourccs(std::vector<uint32>* fourccs) override;
                  ^~~~~~~~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:24:30: error: cannot declare parameter to be of abstract type ‘videocapture::CustomVideoCapturer’
     DISALLOW_COPY_AND_ASSIGN(CustomVideoCapturer);
                              ^~~~~~~~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:8:7: note:   because the following virtual functions are pure within ‘videocapture::CustomVideoCapturer’:
 class CustomVideoCapturer :
       ^~~~~~~~~~~~~~~~~~~
In file included from /home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:4:0,
                 from /home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:1:
/home/marek/webrtc/include/media/base/videocapturer.h:227:16: note:     virtual bool cricket::VideoCapturer::GetPreferredFourccs(std::vector<unsigned int>*)
   virtual bool GetPreferredFourccs(std::vector<uint32_t>* fourccs) = 0;
                ^~~~~~~~~~~~~~~~~~~
In file included from /home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:1:0:
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:37:1: error: expected class-name before ‘{’ token
 {
 ^
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:42:59: error: ‘Device’ in namespace ‘cricket’ does not name a type
     virtual cricket::VideoCapturer* Create(const cricket::Device& device) {
                                                           ^~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h: In member function ‘virtual cricket::VideoCapturer* videocapture::VideoCapturerFactoryCustom::Create(const int&)’:
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:45:53: error: request for member ‘id’ in ‘device’, which is of non-class type ‘const int’
         return new CustomVideoCapturer( atoi(device.id.c_str()));
                                                     ^~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:45:64: error: invalid new-expression of abstract class type ‘videocapture::CustomVideoCapturer’
         return new CustomVideoCapturer( atoi(device.id.c_str()));
                                                                ^
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp: In member function ‘virtual cricket::CaptureState videocapture::CustomVideoCapturer::Start(const cricket::VideoFormat&)’:
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:46:5: error: ‘m_startThread’ was not declared in this scope
     m_startThread = rtc::Thread::Current();
     ^~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:46:5: note: suggested alternative: ‘g_pthread’
     m_startThread = rtc::Thread::Current();
     ^~~~~~~~~~~~~
     g_pthread
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp: In member function ‘virtual void videocapture::CustomVideoCapturer::Stop()’:
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:63:5: error: ‘m_startThread’ was not declared in this scope
     m_startThread = nullptr;
     ^~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:63:5: note: suggested alternative: ‘g_pthread’
     m_startThread = nullptr;
     ^~~~~~~~~~~~~
     g_pthread
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp: In static member function ‘static void* videocapture::CustomVideoCapturer::grabCapture(void*)’:
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:84:28: error: no matching function for call to ‘webrtc::VideoFrame::VideoFrame()’
         webrtc::VideoFrame vframe;
                            ^~~~~~
In file included from /home/marek/webrtc/include/media/base/videobroadcaster.h:18:0,
                 from /home/marek/webrtc/include/media/base/videocapturer.h:25,
                 from /home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.h:4,
                 from /home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:1:
/home/marek/webrtc/include/api/video/video_frame.h:40:3: note: candidate: webrtc::VideoFrame::VideoFrame(webrtc::VideoFrame&&)
   VideoFrame(VideoFrame&&);
   ^~~~~~~~~~
/home/marek/webrtc/include/api/video/video_frame.h:40:3: note:   candidate expects 1 argument, 0 provided
/home/marek/webrtc/include/api/video/video_frame.h:39:3: note: candidate: webrtc::VideoFrame::VideoFrame(const webrtc::VideoFrame&)
   VideoFrame(const VideoFrame&);
   ^~~~~~~~~~
/home/marek/webrtc/include/api/video/video_frame.h:39:3: note:   candidate expects 1 argument, 0 provided
/home/marek/webrtc/include/api/video/video_frame.h:31:3: note: candidate: webrtc::VideoFrame::VideoFrame(const rtc::scoped_refptr<webrtc::VideoFrameBuffer>&, uint32_t, int64_t, webrtc::VideoRotation)
   VideoFrame(const rtc::scoped_refptr<VideoFrameBuffer>& buffer,
   ^~~~~~~~~~
/home/marek/webrtc/include/api/video/video_frame.h:31:3: note:   candidate expects 4 arguments, 0 provided
/home/marek/webrtc/include/api/video/video_frame.h:26:3: note: candidate: webrtc::VideoFrame::VideoFrame(const rtc::scoped_refptr<webrtc::VideoFrameBuffer>&, webrtc::VideoRotation, int64_t)
   VideoFrame(const rtc::scoped_refptr<VideoFrameBuffer>& buffer,
   ^~~~~~~~~~
/home/marek/webrtc/include/api/video/video_frame.h:26:3: note:   candidate expects 3 arguments, 0 provided
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:85:24: error: ‘class webrtc::VideoFrame’ has no member named ‘CreateEmptyFram ’
         if(0 != vframe.CreateEmptyFrame(bgra.cols, bgra.rows, bgra.cols, (bgra.cols+1) /2, (bgra.cols+1) /2) )
                        ^~~~~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:90:25: error: ‘ConvertToI420’ is not a member of ‘webrtc’
         if(0 != webrtc::ConvertToI420(webrtc::kBGRA, bgra.ptr(), 0, 0, bgra.cols, bgra.rows, 0, webrtc::kVideoRotation_0, &vframe) ){
                         ^~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:90:25: note: suggested alternative: ‘ConvertFromI420’
         if(0 != webrtc::ConvertToI420(webrtc::kBGRA, bgra.ptr(), 0, 0, bgra.cols, bgra.rows, 0, webrtc::kVideoRotation_0, &vframe) ){
                         ^~~~~~~~~~~~~
                         ConvertFromI420
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:90:47: error: ‘kBGRA’ is not a member of ‘webrtc’
         if(0 != webrtc::ConvertToI420(webrtc::kBGRA, bgra.ptr(), 0, 0, bgra.cols, bgra.rows, 0, webrtc::kVideoRotation_0, &vframe) ){
                                               ^~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:97:34: error: ‘WebRtcCapturedFrame’ is not a member of ‘cricket’
         std::shared_ptr<cricket::WebRtcCapturedFrame> webrtc_frame(new cricket::WebRtcCapturedFrame(vframe, &capture_buffer_[0], length));
                                  ^~~~~~~~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:97:34: error: ‘WebRtcCapturedFrame’ is not a member of ‘cricket’
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:97:53: error: template argument 1 is invalid
         std::shared_ptr<cricket::WebRtcCapturedFrame> webrtc_frame(new cricket::WebRtcCapturedFrame(vframe, &capture_buffer_[0], length));
                                                     ^
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:97:72: error: expected type-specifier
         std::shared_ptr<cricket::WebRtcCapturedFrame> webrtc_frame(new cricket::WebRtcCapturedFrame(vframe, &capture_buffer_[0], length));
                                                                        ^~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:100:17: error: ‘class videocapture::CustomVideoCapturer’ has no member named  m_startThread’
         if (vc->m_startThread->IsCurrent()) {
                 ^~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:101:17: error: ‘class videocapture::CustomVideoCapturer’ has no member named  SignalFrameCaptured’; did you mean ‘grabCapture’?
             vc->SignalFrameCaptured(vc, webrtc_frame.get());
                 ^~~~~~~~~~~~~~~~~~~
                 grabCapture
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:101:54: error: request for member ‘get’ in ‘webrtc_frame’, which is of non-class type ‘int’
             vc->SignalFrameCaptured(vc, webrtc_frame.get());
                                                      ^~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:103:17: error: ‘class videocapture::CustomVideoCapturer’ has no member named  m_startThread’
             vc->m_startThread->Invoke<void>(rtc::Bind(&CustomVideoCapturer::SignalFrameCapturedOnStartThread, vc, webrtc_frame.get()));
                 ^~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:103:39: error: expected primary-expression before ‘void’
             vc->m_startThread->Invoke<void>(rtc::Bind(&CustomVideoCapturer::SignalFrameCapturedOnStartThread, vc, webrtc_frame.get()));
                                       ^~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp: At global scope:
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:109:75: error: ‘CapturedFrame’ in namespace ‘cricket’ does not name a type
 void CustomVideoCapturer::SignalFrameCapturedOnStartThread(const cricket::CapturedFrame* frame)
                                                                           ^~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp: In member function ‘void videocapture::CustomVideoCapturer::SignalFrameCapturedOnStartThread(const int*)’:
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:111:5: error: ‘SignalFrameCaptured’ was not declared in this scope
     SignalFrameCaptured(this, frame);
     ^~~~~~~~~~~~~~~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:111:5: note: suggested alternative: ‘grabCapture’
     SignalFrameCaptured(this, frame);
     ^~~~~~~~~~~~~~~~~~~
     grabCapture
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp: At global scope:
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:119:59: error: ‘uint32’ was not declared in this scope
 bool CustomVideoCapturer::GetPreferredFourccs(std::vector<uint32>* fourccs)
                                                           ^~~~~~
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:119:59: note: suggested alternative: ‘rintf32’
 bool CustomVideoCapturer::GetPreferredFourccs(std::vector<uint32>* fourccs)
                                                           ^~~~~~
                                                           rintf32
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:119:65: error: template argument 1 is invalid
 bool CustomVideoCapturer::GetPreferredFourccs(std::vector<uint32>* fourccs)
                                                                 ^
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:119:65: error: template argument 2 is invalid
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp: In member function ‘virtual bool videocapture::CustomVideoCapturer::GetPreferredFourccs(int*)’:
/home/marek/libsourcey/src/webrtc/samples/custom_opencv_video_capture/CustomVideoCapturer.cpp:123:14: error: request for member ‘push_back’ in ‘* fourccs’, which is of non-class type ‘int’
     fourccs->push_back(cricket::FOURCC_I420);
              ^~~~~~~~~
webrtc/samples/custom_opencv_video_capture/CMakeFiles/marek.dir/build.make:62: recipe for target 'webrtc/samples/custom_opencv_video_capture/CMakeFiles/marek.dir/CustomVideoCapturer.cpp.o' failed
make[2]: *** [webrtc/samples/custom_opencv_video_capture/CMakeFiles/marek.dir/CustomVideoCapturer.cpp.o] Error 1
CMakeFiles/Makefile2:2694: recipe for target 'webrtc/samples/custom_opencv_video_capture/CMakeFiles/marek.dir/all' failed
make[1]: *** [webrtc/samples/custom_opencv_video_capture/CMakeFiles/marek.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2
@aviontics
Copy link

Have same problem

@ziriax
Copy link

ziriax commented Jan 22, 2019

Might be related to this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants