Jul 31 '17 | asked a question | OpenCV 3.2.0 : Unable to open and read a video Hi Trying to open and read the Megamind.avi video using OpenCV 3.2 causes a segmentation fault. Is this a known problem or is the simple C++ program below in error (if so I would appreciate any pointers on what the issue may be) : Steps to reproduce : - Platform : Mac OS X 10.12.4
- Compiler : Clang++ (LLVM version 8.1.0 [clang-802.0.42])
- OpenCV : 3.2.0 installed from macports using command line "port install opencv +contrib +eigen +opencl +python27 +qt5"
- FFmpeg : 3.3.3 installed from macports (any variant)
- Video : Megamind.avi from http://docs.opencv.org/3.2.0/d5/dc4/t...
This video is playable using "ffplay" provided by the installed FFmpeg
- Installed OpenCV 3.2.0 has been compiled with FFmpeg enabled (The opencv2/cvconfig.h file has "#define HAVE_FFMPEG" uncommented).
Simple test C++ program (given below) #include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
int main(void)
{
try
{
cv::VideoCapture video("Megamind.avi", cv::CAP_FFMPEG);
if(!video.isOpened()) throw std::runtime_error("Could not open video");
}
catch (cv::Exception &e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
Stack trace of segmentation fault (given below) (lldb) target create "./scratch"
Current executable set to './scratch' (x86_64).
(lldb) r
Process 21181 launched: './scratch' (x86_64)
Process 21181 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
frame #0: 0x000000010474f962 libavutil.55.dylib`av_buffer_unref + 18
libavutil.55.dylib`av_buffer_unref:
-> 0x10474f962 <+18>: movq (%rax), %rbx
0x10474f965 <+21>: movq %rbx, 0x8(%rsp)
0x10474f96a <+26>: callq 0x1047630e0 ; av_freep
0x10474f96f <+31>: movl $0xffffffff, %eax ; imm = 0xFFFFFFFF
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
* frame #0: 0x000000010474f962 libavutil.55.dylib`av_buffer_unref + 18
frame #1: 0x000000010475ac8a libavutil.55.dylib`av_frame_unref + 346
frame #2: 0x00000001018878bd libopencv_videoio.3.2.dylib`CvCapture_FFMPEG::close() + 127
frame #3: 0x0000000101887aac libopencv_videoio.3.2.dylib`CvCapture_FFMPEG::open(char const*) + 42
frame #4: 0x0000000101889a33 libopencv_videoio.3.2.dylib`cvCreateFileCapture_FFMPEG + 259
frame #5: 0x000000010188a82b libopencv_videoio.3.2.dylib`CvCapture_FFMPEG_proxy::open(char const*) + 45
frame #6: 0x000000010188a4f1 libopencv_videoio.3.2.dylib`cvCreateFileCapture_FFMPEG_proxy(char const*) + 52
frame #7: 0x000000010187dd34 libopencv_videoio.3.2.dylib`cvCreateFileCaptureWithPreference + 169
frame #8: 0x000000010187ebd6 libopencv_videoio.3.2.dylib`cv::VideoCapture::open(cv::String const&, int) + 292
frame #9: 0x000000010187e765 libopencv_videoio.3.2.dylib`cv::VideoCapture::VideoCapture(cv::String const&, int) + 51
frame #10: 0x0000000100001dc9 scratch`main at scratch.cpp:9
frame #11: 0x00007fffa2ead235 libdyld.dylib`start + 1
I have searched this forum and Google but have not been able to find a resolution to the problem. In view of the above it does not seem to be a Codec issue. I have checked that it is not related to paths (absolute/relative) etc. Using "cv::CAP_ANY" instead of cv::CAP_FFMPEG", or even not setting this property, does not fix the problem either. |