So I'm following this post on how to install openCV for Python 3. And I'm running into some issues at the compile process. Running the make -j4
command goes fine up until it's 28% through when I get this error message: error: use of undeclared identifier 'avcodec_free_frame'; did you mean 'avcodec_get_name'?
I don't even know where to start to solve this issue. I've got ffmpeg
installed through brew.
Complete list of commands:
cd ~
git clone https://github.com/Itseez/opencv.git
cd opencv
git checkout 3.0.0
cd ~
git clone https://github.com/Itseez/opencv_contrib.git
cd opencv_contrib
git checkout 3.0.0
cd ~/opencv
mkdir build
cd build
cmake CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D PYTHON3_LIBRARY=/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/config-3.5m/libpython3.5.dylib \
-D PYTHON3_INCLUDE_DIR=/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/include/python3.5m/ \
-D PYTHON3_EXECUTABLE=$VIRTUAL_ENV/bin/python \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D BUILD_EXAMPLES=ON .. \
-D FFMPEG_INCLUDE_DIR=/usr/local/Cellar/ffmpeg/3.3.4/include/
-D FFMPEG_LIB_DIR=/usr/local/Cellar/ffmpeg/3.3.4/lib/
-D WITH_FFMPEG=ON
cmake
make -j4
I got the FFMPEG_INCLUDE_DIR
, FFMPEG_LIB_DIR
and WITH_FFMPEG
from this post: http://blog.jiashen.me/2014/12/23/build-opencv-3-on-mac-os-x-with-python-3-and-ffmpeg-support/
The full error log:
[ 28%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_qtkit.mm.o
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:317:9: error: use of undeclared identifier
'avcodec_free_frame'; did you mean 'avcodec_get_name'?
avcodec_free_frame(&picture);
^~~~~~~~~~~~~~~~~~
avcodec_get_name
/usr/local/Cellar/ffmpeg/3.3.4/include/libavcodec/avcodec.h:6289:13: note: 'avcodec_get_name' declared here
const char *avcodec_get_name(enum AVCodecID id);
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:317:28: error: cannot initialize a parameter of type
'enum AVCodecID' with an rvalue of type 'AVFrame **'
avcodec_free_frame(&picture);
^~~~~~~~
/usr/local/Cellar/ffmpeg/3.3.4/include/libavcodec/avcodec.h:6289:45: note: passing argument to parameter 'id' here
const char *avcodec_get_name(enum AVCodecID id);
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:632:23: error: use of undeclared identifier
'avcodec_alloc_frame'
picture = avcodec_alloc_frame();
^
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:635:41: error: use of undeclared identifier
'PIX_FMT_BGR24'; did you mean 'AV_PIX_FMT_BGR24'?
avpicture_get_size( PIX_FMT_BGR24,
^~~~~~~~~~~~~
AV_PIX_FMT_BGR24
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:65:5: note: 'AV_PIX_FMT_BGR24' declared here
AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR...
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:638:29: error: use of undeclared identifier
'PIX_FMT_BGR24'; did you mean 'AV_PIX_FMT_BGR24'?
PIX_FMT_BGR24, enc->width, enc->height );
^~~~~~~~~~~~~
AV_PIX_FMT_BGR24
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:65:5: note: 'AV_PIX_FMT_BGR24' declared here
AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR...
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:738:67: error: use of undeclared identifier
'PIX_FMT_RGB24'; did you mean 'AV_PIX_FMT_RGB24'?
avpicture_fill((AVPicture*)&rgb_picture, rgb_picture.data[0], PIX_FMT_RGB24,
^~~~~~~~~~~~~
AV_PIX_FMT_RGB24
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:64:5: note: 'AV_PIX_FMT_RGB24' declared here
AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB...
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:756:17: error: use of undeclared identifier
'PIX_FMT_BGR24'; did you mean 'AV_PIX_FMT_BGR24'?
PIX_FMT_BGR24,
^~~~~~~~~~~~~
AV_PIX_FMT_BGR24
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:65:5: note: 'AV_PIX_FMT_BGR24' declared here
AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR...
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1110:15: error: use of undeclared identifier
'avcodec_alloc_frame'
picture = avcodec_alloc_frame();
^
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1113:33: error: unknown type name 'PixelFormat'; did you
mean 'AVPixelFormat'?
size = avpicture_get_size( (PixelFormat) pix_fmt, width, height);
^~~~~~~~~~~
AVPixelFormat
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:60:6: note: 'AVPixelFormat' declared here
enum AVPixelFormat {
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1122:25: error: unknown type name 'PixelFormat'; did you
mean 'AVPixelFormat'?
(PixelFormat) pix_fmt, width, height);
^~~~~~~~~~~
AVPixelFormat
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:60:6: note: 'AVPixelFormat' declared here
enum AVPixelFormat {
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1230:19: error: unknown type name 'PixelFormat'; did you
mean 'AVPixelFormat'?
c->pix_fmt = (PixelFormat) pixel_format;
^~~~~~~~~~~
AVPixelFormat
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:60:6: note: 'AVPixelFormat' declared here
enum AVPixelFormat {
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1405:26: error: use of undeclared identifier
'PIX_FMT_BGR24'; did you mean 'AV_PIX_FMT_BGR24'?
if (input_pix_fmt == PIX_FMT_BGR24) {
^~~~~~~~~~~~~
AV_PIX_FMT_BGR24
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:65:5: note: 'AV_PIX_FMT_BGR24' declared here
AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR...
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1410:31: error: use of undeclared identifier
'PIX_FMT_GRAY8'; did you mean 'AV_PIX_FMT_GRAY8'?
else if (input_pix_fmt == PIX_FMT_GRAY8) {
^~~~~~~~~~~~~
AV_PIX_FMT_GRAY8
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:70:5: note: 'AV_PIX_FMT_GRAY8' declared here
AV_PIX_FMT_GRAY8, ///< Y , 8bpp
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1423:25: error: unknown type name 'PixelFormat'; did you
mean 'AVPixelFormat'?
(PixelFormat)input_pix_fmt, width, height);
^~~~~~~~~~~
AVPixelFormat
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:60:6: note: 'AVPixelFormat' declared here
enum AVPixelFormat {
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1429:47: error: unknown type name 'PixelFormat'; did you
mean 'AVPixelFormat'?
(PixelFormat)input_pix_fmt,
^~~~~~~~~~~
AVPixelFormat
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:60:6: note: 'AVPixelFormat' declared here
enum AVPixelFormat {
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1447:25: error: unknown type name 'PixelFormat'; did you
mean 'AVPixelFormat'?
(PixelFormat)input_pix_fmt, width, height);
^~~~~~~~~~~
AVPixelFormat
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:60:6: note: 'AVPixelFormat' declared here
enum AVPixelFormat {
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1604:25: error: use of undeclared identifier
'PIX_FMT_BGR24'; did you mean 'AV_PIX_FMT_BGR24'?
input_pix_fmt = PIX_FMT_BGR24;
^~~~~~~~~~~~~
AV_PIX_FMT_BGR24
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:65:5: note: 'AV_PIX_FMT_BGR24' declared here
AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR...
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1607:25: error: use of undeclared identifier
'PIX_FMT_GRAY8'; did you mean 'AV_PIX_FMT_GRAY8'?
input_pix_fmt = PIX_FMT_GRAY8;
^~~~~~~~~~~~~
AV_PIX_FMT_GRAY8
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:70:5: note: 'AV_PIX_FMT_GRAY8' declared here
AV_PIX_FMT_GRAY8, ///< Y , 8bpp
^
In file included from /Users/myuser/opencv/modules/videoio/src/cap_ffmpeg.cpp:45:
/Users/myuser/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:1683:25: error: use of undeclared identifier
'PIX_FMT_YUV422P'; did you mean 'AV_PIX_FMT_YUV422P'?
codec_pix_fmt = PIX_FMT_YUV422P;
^~~~~~~~~~~~~~~
AV_PIX_FMT_YUV422P
/usr/local/Cellar/ffmpeg/3.3.4/include/libavutil/pixfmt.h:66:5: note: 'AV_PIX_FMT_YUV422P' declared here
AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/Users/myuser/opencv/modules/videoio/src/cap_qtkit.mm:46:9: fatal error: 'QTKit/QTKit.h' file not found
#import <QTKit/QTKit.h>
^
1 error generated.
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_qtkit.mm.o] Error 1
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make: *** [all] Error 2
This question on openCV's website seems to adress the same issue but there is no solution posted: http://answers.opencv.org/question/90091/error-use-of-undeclared-identifier-avcodec_free_frame-did-you-mean-avcodec_get_name/