Skip to content

Torchvision doesn't compile against ffmpeg-5 #5616

@xuzhao9

Description

@xuzhao9

🐛 Describe the bug

Steps to reproduce:

  1. Install torchvision nightly from conda: conda install -y -c pytorch-nightly torchvision. This will also install ffmpeg-5 from conda
  2. Compile torchvision from source: python setup.py install
  3. The compile fails with the following error:
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:21:36: error: use of enum ‘AVLockOp’ without previous declaration
 int ffmpeg_lock(void** mutex, enum AVLockOp op) {
                                    ^~~~~~~~
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp: In function ‘int ffmpeg::{anonymous}::ffmpeg_lock(void**, int)’:
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:24:10: error: ‘AV_LOCK_CREATE’ was not declared in this scope
     case AV_LOCK_CREATE:
          ^~~~~~~~~~~~~~
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:24:10: note: suggested alternative: ‘AV_LOG_TRACE’
     case AV_LOCK_CREATE:
          ^~~~~~~~~~~~~~
          AV_LOG_TRACE
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:27:10: error: ‘AV_LOCK_OBTAIN’ was not declared in this scope
     case AV_LOCK_OBTAIN:
          ^~~~~~~~~~~~~~
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:27:10: note: suggested alternative: ‘CLOCK_TAI’
     case AV_LOCK_OBTAIN:
          ^~~~~~~~~~~~~~
          CLOCK_TAI
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:30:10: error: ‘AV_LOCK_RELEASE’ was not declared in this scope
     case AV_LOCK_RELEASE:
          ^~~~~~~~~~~~~~~
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:30:10: note: suggested alternative: ‘AV_LOG_VERBOSE’
     case AV_LOCK_RELEASE:
          ^~~~~~~~~~~~~~~
          AV_LOG_VERBOSE
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:33:10: error: ‘AV_LOCK_DESTROY’ was not declared in this scope
     case AV_LOCK_DESTROY:
          ^~~~~~~~~~~~~~~
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:33:10: note: suggested alternative: ‘AV_LOG_ERROR’
     case AV_LOCK_DESTROY:
          ^~~~~~~~~~~~~~~
          AV_LOG_ERROR
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp: In lambda function:
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:206:5: error: ‘av_lockmgr_register’ was not declared in this scope
     av_lockmgr_register(&ffmpeg_lock);
     ^~~~~~~~~~~~~~~~~~~
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp: In member function ‘virtual bool ffmpeg::Decoder::init(const ffmpeg::DecoderParameters&, ffmpeg::DecoderInCallback&&, std::vector<ffmpeg::DecoderMetadata>*)’:
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:280:33: error: invalid conversion from ‘const AVInputFormat*’ to ‘AVInputFormat*’ [-fpermissive]
       fmt = av_find_input_format(fmtName);
             ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp: In member function ‘int ffmpeg::Decoder::getFrame(size_t)’:
/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:509:27: warning: ‘void av_init_packet(AVPacket*)’ is deprecated [-Wdeprecated-declarations]
   av_init_packet(&avPacket);
                           ^
In file included from /home/ec2-user/anaconda3/envs/pr-ci/include/libavcodec/avcodec.h:45:0,
                 from /home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/defs.h:12,
                 from /home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/seekable_buffer.h:3,
                 from /home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.h:5,
                 from /home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder/decoder.cpp:1:
/home/ec2-user/anaconda3/envs/pr-ci/include/libavcodec/packet.h:506:6: note: declared here
 void av_init_packet(AVPacket *pkt);
      ^~~~~~~~~~~~~~
[15/16] c++ -MMD -MF /home/ec2-user/nvme/srcs/vision/build/temp.linux-x86_64-3.7/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/video_reader/video_reader.o.d -pthread -B /home/ec2-user/anaconda3/envs/pr-ci/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder -I/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/video_reader -I/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/video -I/home/ec2-user/nvme/srcs/vision/torchvision/csrc -I/home/ec2-user/anaconda3/envs/pr-ci/include -I/home/ec2-user/nvme/srcs/vision/torchvision/csrc -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/torch/csrc/api/include -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/TH -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/THC -I/usr/local/cuda/include -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/torch/csrc/api/include -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/TH -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/THC -I/home/ec2-user/anaconda3/envs/pr-ci/include/python3.7m -c -c /home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/video_reader/video_reader.cpp -o /home/ec2-user/nvme/srcs/vision/build/temp.linux-x86_64-3.7/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/video_reader/video_reader.o -std=c++14 -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=video_reader -D_GLIBCXX_USE_CXX11_ABI=1
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
[16/16] c++ -MMD -MF /home/ec2-user/nvme/srcs/vision/build/temp.linux-x86_64-3.7/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/video/video.o.d -pthread -B /home/ec2-user/anaconda3/envs/pr-ci/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/decoder -I/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/video_reader -I/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/video -I/home/ec2-user/nvme/srcs/vision/torchvision/csrc -I/home/ec2-user/anaconda3/envs/pr-ci/include -I/home/ec2-user/nvme/srcs/vision/torchvision/csrc -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/torch/csrc/api/include -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/TH -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/THC -I/usr/local/cuda/include -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/torch/csrc/api/include -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/TH -I/home/ec2-user/anaconda3/envs/pr-ci/lib/python3.7/site-packages/torch/include/THC -I/home/ec2-user/anaconda3/envs/pr-ci/include/python3.7m -c -c /home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/video/video.cpp -o /home/ec2-user/nvme/srcs/vision/build/temp.linux-x86_64-3.7/home/ec2-user/nvme/srcs/vision/torchvision/csrc/io/video/video.o -std=c++14 -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=video_reader -D_GLIBCXX_USE_CXX11_ABI=1
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++

The error doesn't happen with an older version of ffmpeg e.g. 4.4.1

Versions

Torchvision nightly + main branch

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions