Skip to content

Problems with ffmpeg4.4 #139

@waarmond

Description

@waarmond

I'm happily using chromaprint as a depency of essentia for a long time. Since FFmpeg has become too modern I'm compiling against a separate ffmpeg4.4 with such a patch:

--- a/cmake/modules/FindFFmpeg.cmake	2021-12-23 06:57:54.000000000 +0100
+++ b/cmake/modules/FindFFmpeg.cmake	2024-03-10 22:26:24.794686739 +0100
@@ -39,7 +39,7 @@
 		/opt/include
 		/usr/freeware/include
 		NO_DEFAULT_PATH
-		PATH_SUFFIXES ffmpeg
+		PATH_SUFFIXES ffmpeg ffmpeg4.4
 		DOC "Location of FFMPEG Headers"
 	)
 	FIND_PATH(FFMPEG_${varname}_INCLUDE_DIRS lib${shortname}/${headername}
@@ -93,7 +93,7 @@
     /opt/csw/include # Blastwave
     /opt/include
     /usr/freeware/include
-    PATH_SUFFIXES ffmpeg
+    PATH_SUFFIXES ffmpeg ffmpeg4.4
     DOC "Location of FFMPEG stdint.h Header"
 )

Now I'm on a new system and have to recompile everything and the compilation of fpcalc fails:

[ 95%] Building CXX object src/cmd/CMakeFiles/fpcalc.dir/fpcalc.cpp.o
In file included from ./src/audio/ffmpeg_audio_reader.h:24,
                 from ./src/cmd/fpcalc.cpp:7:
./src/audio/ffmpeg_audio_processor.h:14:2: error: #error "no audio processing library"
   14 | #error "no audio processing library"
      |  ^~~~~
./src/audio/ffmpeg_audio_reader.h:73:25: error: 'FFmpegAudioProcessor' was not declared in this scope; did you mean 'FFmpegAudioReader'?
   73 |         std::unique_ptr<FFmpegAudioProcessor> m_converter;
      |                         ^~~~~~~~~~~~~~~~~~~~
      |                         FFmpegAudioReader
./src/audio/ffmpeg_audio_reader.h:73:45: error: template argument 1 is invalid
   73 |         std::unique_ptr<FFmpegAudioProcessor> m_converter;
      |                                             ^
./src/audio/ffmpeg_audio_reader.h:73:45: error: template argument 2 is invalid
./src/audio/ffmpeg_audio_reader.h: In member function 'bool chromaprint::FFmpegAudioReader::Open(const std::string&)':
./src/audio/ffmpeg_audio_reader.h:182:9: error: 'AVChannelLayout' was not declared in this scope
  182 |         AVChannelLayout output_channel_layout;
      |         ^~~~~~~~~~~~~~~
./src/audio/ffmpeg_audio_reader.h:184:44: error: 'output_channel_layout' was not declared in this scope; did you mean 'av_get_channel_layout'?
  184 |                 av_channel_layout_default(&output_channel_layout, m_output_channels);
      |                                            ^~~~~~~~~~~~~~~~~~~~~
      |                                            av_get_channel_layout
./src/audio/ffmpeg_audio_reader.h:184:17: error: 'av_channel_layout_default' was not declared in this scope
  184 |                 av_channel_layout_default(&output_channel_layout, m_output_channels);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
./src/audio/ffmpeg_audio_reader.h:186:50: error: 'AVCodecContext' {aka 'struct AVCodecContext'} has no member named 'ch_layout'; did you mean 'channel_layout'?
  186 |                 m_output_channels = m_codec_ctx->ch_layout.nb_channels;
      |                                                  ^~~~~~~~~
      |                                                  channel_layout
./src/audio/ffmpeg_audio_reader.h:187:44: error: 'output_channel_layout' was not declared in this scope; did you mean 'av_get_channel_layout'?
  187 |                 av_channel_layout_default(&output_channel_layout, m_output_channels);
      |                                            ^~~~~~~~~~~~~~~~~~~~~
      |                                            av_get_channel_layout
./src/audio/ffmpeg_audio_reader.h:187:17: error: 'av_channel_layout_default' was not declared in this scope
  187 |                 av_channel_layout_default(&output_channel_layout, m_output_channels);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
./src/audio/ffmpeg_audio_reader.h:190:74: error: 'AVCodecContext' {aka 'struct AVCodecContext'} has no member named 'ch_layout'; did you mean 'channel_layout'?
  190 |         if (m_codec_ctx->sample_fmt != AV_SAMPLE_FMT_S16 || m_codec_ctx->ch_layout.nb_channels != m_output_channels || m_codec_ctx->sample_rate != m_output_sample_rate) {
      |                                                                          ^~~~~~~~~
      |                                                                          channel_layout
./src/audio/ffmpeg_audio_reader.h:191:29: error: request for member 'reset' in '((chromaprint::FFmpegAudioReader*)this)->chromaprint::FFmpegAudioReader::m_converter', which is of non-class type 'int'
  191 |                 m_converter.reset(new FFmpegAudioProcessor());
      |                             ^~~~~
./src/audio/ffmpeg_audio_reader.h:191:39: error: expected type-specifier before 'FFmpegAudioProcessor'
  191 |                 m_converter.reset(new FFmpegAudioProcessor());
      |                                       ^~~~~~~~~~~~~~~~~~~~
./src/audio/ffmpeg_audio_reader.h:192:28: error: base operand of '->' is not a pointer
  192 |                 m_converter->SetCompatibleMode();
      |                            ^~
./src/audio/ffmpeg_audio_reader.h:193:28: error: base operand of '->' is not a pointer
  193 |                 m_converter->SetInputSampleFormat(m_codec_ctx->sample_fmt);
      |                            ^~
./src/audio/ffmpeg_audio_reader.h:194:28: error: base operand of '->' is not a pointer
  194 |                 m_converter->SetInputSampleRate(m_codec_ctx->sample_rate);
      |                            ^~
./src/audio/ffmpeg_audio_reader.h:195:28: error: base operand of '->' is not a pointer
  195 |                 m_converter->SetInputChannelLayout(&(m_codec_ctx->ch_layout));
      |                            ^~
./src/audio/ffmpeg_audio_reader.h:195:67: error: 'AVCodecContext' {aka 'struct AVCodecContext'} has no member named 'ch_layout'; did you mean 'channel_layout'?
  195 |                 m_converter->SetInputChannelLayout(&(m_codec_ctx->ch_layout));
      |                                                                   ^~~~~~~~~
      |                                                                   channel_layout
./src/audio/ffmpeg_audio_reader.h:196:28: error: base operand of '->' is not a pointer
  196 |                 m_converter->SetOutputSampleFormat(AV_SAMPLE_FMT_S16);
      |                            ^~
./src/audio/ffmpeg_audio_reader.h:197:28: error: base operand of '->' is not a pointer
  197 |                 m_converter->SetOutputSampleRate(m_output_sample_rate);
      |                            ^~
./src/audio/ffmpeg_audio_reader.h:198:28: error: base operand of '->' is not a pointer
  198 |                 m_converter->SetOutputChannelLayout(&output_channel_layout);
      |                            ^~
./src/audio/ffmpeg_audio_reader.h:198:54: error: 'output_channel_layout' was not declared in this scope; did you mean 'av_get_channel_layout'?
  198 |                 m_converter->SetOutputChannelLayout(&output_channel_layout);
      |                                                      ^~~~~~~~~~~~~~~~~~~~~
      |                                                      av_get_channel_layout
./src/audio/ffmpeg_audio_reader.h:199:39: error: base operand of '->' is not a pointer
  199 |                 auto ret = m_converter->Init();
      |                                       ^~
./src/audio/ffmpeg_audio_reader.h:206:35: error: 'output_channel_layout' was not declared in this scope; did you mean 'av_get_channel_layout'?
  206 |         av_channel_layout_uninit(&output_channel_layout);
      |                                   ^~~~~~~~~~~~~~~~~~~~~
      |                                   av_get_channel_layout
./src/audio/ffmpeg_audio_reader.h:206:9: error: 'av_channel_layout_uninit' was not declared in this scope; did you mean 'av_get_channel_layout_string'?
  206 |         av_channel_layout_uninit(&output_channel_layout);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~
      |         av_get_channel_layout_string
./src/audio/ffmpeg_audio_reader.h: In member function 'bool chromaprint::FFmpegAudioReader::Read(const int16_t**, size_t*)':
./src/audio/ffmpeg_audio_reader.h:316:105: error: 'AVCodecContext' {aka 'struct AVCodecContext'} has no member named 'ch_layout'; did you mean 'channel_layout'?
  316 |                                         ret = av_samples_alloc(m_convert_buffer, &linsize, m_codec_ctx->ch_layout.nb_channels, m_convert_buffer_nb_samples, AV_SAMPLE_FMT_S16, 1);
      |                                                                                                         ^~~~~~~~~
      |                                                                                                         channel_layout
./src/audio/ffmpeg_audio_reader.h:322:62: error: base operand of '->' is not a pointer
  322 |                                 auto nb_samples = m_converter->Convert(m_convert_buffer, m_convert_buffer_nb_samples, (const uint8_t **) m_frame->data, m_frame->nb_samples);
      |                                                              ^~
./src/audio/ffmpeg_audio_reader.h:336:70: error: base operand of '->' is not a pointer
  336 |                                         auto nb_samples = m_converter->Flush(m_convert_buffer, m_convert_buffer_nb_samples);
      |                                                                      ^~
./src/cmd/fpcalc.cpp: In function 'void ParseOptions(int&, char**)':
./src/cmd/fpcalc.cpp:132:34: error: 'LIBAVRESAMPLE_IDENT' was not declared in this scope; did you mean 'LIBAVUTIL_IDENT'?
  132 | #define RESAMPLE_LIB_IDENT_IDENT LIBAVRESAMPLE_IDENT
      |                                  ^~~~~~~~~~~~~~~~~~~
./src/cmd/fpcalc.cpp:134:146: note: in expansion of macro 'RESAMPLE_LIB_IDENT_IDENT'
  134 |                  fprintf(stdout, "fpcalc version %s (FFmpeg %s %s %s)\n", chromaprint_get_version(), LIBAVCODEC_IDENT, LIBAVFORMAT_IDENT, RESAMPLE_LIB_IDENT_IDENT);
      |                                                                                                                                           ^~~~~~~~~~~~~~~~~~~~~~~~

How is this possible? I thought that chromaprint would be too old and need a patch for ffmpeg 5.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions