Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Qt Linux ad ffmpeg6
Forum Updated to NodeBB v4.3 + New Features

Qt Linux ad ffmpeg6

Scheduled Pinned Locked Moved Solved General and Desktop
18 Posts 6 Posters 1.3k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • kkoehneK Offline
    kkoehneK Offline
    kkoehne
    Moderators
    wrote on last edited by
    #2

    @mrdebug said in Qt Linux ad ffmpeg6:

    The libraries libavcodec.a and the others exist and there are in the right place.

    But does it contain above exported symbol? You can check e.g. with nm -g | c++filt...

    Director R&D, The Qt Company

    mrdebugM 1 Reply Last reply
    0
    • kkoehneK kkoehne

      @mrdebug said in Qt Linux ad ffmpeg6:

      The libraries libavcodec.a and the others exist and there are in the right place.

      But does it contain above exported symbol? You can check e.g. with nm -g | c++filt...

      mrdebugM Offline
      mrdebugM Offline
      mrdebug
      wrote on last edited by
      #3

      @kkoehne

      denis@tomcat:~/Cpp/ffmpeg-6.0/libavcodec$ nm -g libavcodec.a | grep avcodec_send_packet
                       U avcodec_send_packet
      0000000000001080 T avcodec_send_packet
                       U avcodec_send_packet
                       U avcodec_send_packet
                       U avcodec_send_packet
                       U avcodec_send_packet
      denis@tomcat:~/Cpp/ffmpeg-6.0/libavcodec$
      

      Need programmers to hire?
      www.labcsp.com
      www.denisgottardello.it
      GMT+1
      Skype: mrdebug

      Christian EhrlicherC 1 Reply Last reply
      0
      • mrdebugM mrdebug

        @kkoehne

        denis@tomcat:~/Cpp/ffmpeg-6.0/libavcodec$ nm -g libavcodec.a | grep avcodec_send_packet
                         U avcodec_send_packet
        0000000000001080 T avcodec_send_packet
                         U avcodec_send_packet
                         U avcodec_send_packet
                         U avcodec_send_packet
                         U avcodec_send_packet
        denis@tomcat:~/Cpp/ffmpeg-6.0/libavcodec$
        
        Christian EhrlicherC Offline
        Christian EhrlicherC Offline
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on last edited by
        #4

        I would take a look in the sources of ffmpeg if this function with the exact signature is in there or e.g. deprecated and therefore not compiled.

        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
        Visit the Qt Academy at https://academy.qt.io/catalog

        1 Reply Last reply
        0
        • mrdebugM mrdebug

          Hi, I have got an incomprensible linking problem with Linux (Debian 12) and ffmpeg 6.
          This is my .pro file

          QT       += core gui
          
          greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
          
          CONFIG += c++17
          
          # You can make your code fail to compile if it uses deprecated APIs.
          # In order to do so, uncomment the following line.
          #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
          
          INCLUDEPATH += ../../ffmpeg-6.0/
          LIBS += ../../ffmpeg-6.0/libavcodec/libavcodec.a
          LIBS += ../../ffmpeg-6.0/libavdevice/libavdevice.a
          LIBS += ../../ffmpeg-6.0/libavfilter/libavfilter.a
          LIBS += ../../ffmpeg-6.0/libavformat/libavformat.a
          LIBS += ../../ffmpeg-6.0/libavutil/libavutil.a
          #LIBS += ../../ffmpeg-6.0/libpostproc/libpostproc.a
          LIBS += ../../ffmpeg-6.0/libswresample/libswresample.a
          LIBS += ../../ffmpeg-6.0/libswscale/libswscale.a
          LIBS += ../../ffmpeg-6.0/libavcodec/decode.o
          
          SOURCES += \
              main.cpp \
              qfmainwindow.cpp
          
          HEADERS += \
              qfmainwindow.h
          
          FORMS += \
              qfmainwindow.ui
          
          # Default rules for deployment.
          qnx: target.path = /tmp/$${TARGET}/bin
          else: unix:!android: target.path = /opt/$${TARGET}/bin
          !isEmpty(target.path): INSTALLS += target
          

          but on linking time I obtain this error:

          /home/denis/Cpp/ffmpegTest/ffmpegTest/main.cpp:-1: error: undefined reference to `avcodec_send_packet(AVCodecContext*, AVPacket const*)'
          

          The libraries libavcodec.a and the others exist and there are in the right place.
          I haven't got this type of error using the old version 4.2.2.

          JoeCFDJ Offline
          JoeCFDJ Offline
          JoeCFD
          wrote on last edited by
          #5

          @mrdebug
          from here: https://ffmpeg.org/doxygen/3.1/avcodec_8h.html
          The interface might have been changed.
          avcodec_send_packet (AVCodecContext *avctx, const AVPacket *avpkt)

          your call avcodec_send_packet(AVCodecContext*, AVPacket const*) is not right in the main.cpp. const is missed.

          mrdebugM 1 Reply Last reply
          1
          • JoeCFDJ JoeCFD

            @mrdebug
            from here: https://ffmpeg.org/doxygen/3.1/avcodec_8h.html
            The interface might have been changed.
            avcodec_send_packet (AVCodecContext *avctx, const AVPacket *avpkt)

            your call avcodec_send_packet(AVCodecContext*, AVPacket const*) is not right in the main.cpp. const is missed.

            mrdebugM Offline
            mrdebugM Offline
            mrdebug
            wrote on last edited by
            #6

            @JoeCFD Adding "const" has no affect.
            By the way the problem is not at compile time but linking time.
            I trying the 3 functions founded in the example ffmpeg-6.0/doc/examples/decode_video.c placed in a Qt empty project.

            Need programmers to hire?
            www.labcsp.com
            www.denisgottardello.it
            GMT+1
            Skype: mrdebug

            Christian EhrlicherC JonBJ 2 Replies Last reply
            0
            • mrdebugM mrdebug

              @JoeCFD Adding "const" has no affect.
              By the way the problem is not at compile time but linking time.
              I trying the 3 functions founded in the example ffmpeg-6.0/doc/examples/decode_video.c placed in a Qt empty project.

              Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by
              #7

              Either you forward declared (wrongly) this function somewhere or you are using the wrong outdated headers.

              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
              Visit the Qt Academy at https://academy.qt.io/catalog

              1 Reply Last reply
              1
              • mrdebugM mrdebug

                @JoeCFD Adding "const" has no affect.
                By the way the problem is not at compile time but linking time.
                I trying the 3 functions founded in the example ffmpeg-6.0/doc/examples/decode_video.c placed in a Qt empty project.

                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on last edited by
                #8

                @mrdebug

                undefined reference to `avcodec_send_packet(AVCodecContext*, AVPacket const*)`
                

                Since the last parameter ought be const AVPacket *, and (C++ expert correct me if I am wrong) AVPacket const * is not the same thing, I am with @Christian-Ehrlicher: start by searching all your sources and all that you include for avcodec_send_packet() declarations. Any chance it is incorrectly declared in one place?

                JoeCFDJ 1 Reply Last reply
                0
                • JonBJ JonB

                  @mrdebug

                  undefined reference to `avcodec_send_packet(AVCodecContext*, AVPacket const*)`
                  

                  Since the last parameter ought be const AVPacket *, and (C++ expert correct me if I am wrong) AVPacket const * is not the same thing, I am with @Christian-Ehrlicher: start by searching all your sources and all that you include for avcodec_send_packet() declarations. Any chance it is incorrectly declared in one place?

                  JoeCFDJ Offline
                  JoeCFDJ Offline
                  JoeCFD
                  wrote on last edited by
                  #9

                  @JonB const AVPacket * means: const instance of AVPacket. Only const funcs of class AVPacket can be called.
                  AVPacket const * means: this is a constant pointer and its address can be changed.

                  Two different things.

                  mrdebugM JonBJ 2 Replies Last reply
                  0
                  • JoeCFDJ JoeCFD

                    @JonB const AVPacket * means: const instance of AVPacket. Only const funcs of class AVPacket can be called.
                    AVPacket const * means: this is a constant pointer and its address can be changed.

                    Two different things.

                    mrdebugM Offline
                    mrdebugM Offline
                    mrdebug
                    wrote on last edited by
                    #10

                    The code is good because executing "make examples", the example from I have copied out the functions waw been compiled. I think the problem is related to some switch to add at the .pro file.

                    Need programmers to hire?
                    www.labcsp.com
                    www.denisgottardello.it
                    GMT+1
                    Skype: mrdebug

                    JoeCFDJ 1 Reply Last reply
                    0
                    • mrdebugM mrdebug

                      The code is good because executing "make examples", the example from I have copied out the functions waw been compiled. I think the problem is related to some switch to add at the .pro file.

                      JoeCFDJ Offline
                      JoeCFDJ Offline
                      JoeCFD
                      wrote on last edited by JoeCFD
                      #11

                      @mrdebug the order of the libs matters. Change the order of static libs in the pro file.

                      JonBJ 1 Reply Last reply
                      0
                      • JoeCFDJ JoeCFD

                        @JonB const AVPacket * means: const instance of AVPacket. Only const funcs of class AVPacket can be called.
                        AVPacket const * means: this is a constant pointer and its address can be changed.

                        Two different things.

                        JonBJ Offline
                        JonBJ Offline
                        JonB
                        wrote on last edited by
                        #12

                        @JoeCFD said in Qt Linux ad ffmpeg6:

                        Two different things.

                        I know. And the error message AVPacket const* does not match what it should be, which is const AVPacket *. Which make sit look like there is a declaration and call to AVPacket const* erroneously somewhere.

                        1 Reply Last reply
                        0
                        • JoeCFDJ JoeCFD

                          @mrdebug the order of the libs matters. Change the order of static libs in the pro file.

                          JonBJ Offline
                          JonBJ Offline
                          JonB
                          wrote on last edited by
                          #13

                          @JoeCFD said in Qt Linux ad ffmpeg6:

                          @mrdebug the order of the libs matters. Change the order of static libs in the pro file.

                          This is a good point. @mrdebug: do you call avcodec_send_packet() from your own code (e.g. main.cpp)? Because if not, and its internal, and you put libavcodec.a as the first library, and only a later library calls that function, it may not have been included. Do you get that order/list of linking the libraries from some documentation?

                          I haven't got this type of error using the old version 4.2.2.

                          Hmm ;-)

                          mrdebugM 1 Reply Last reply
                          0
                          • JonBJ JonB

                            @JoeCFD said in Qt Linux ad ffmpeg6:

                            @mrdebug the order of the libs matters. Change the order of static libs in the pro file.

                            This is a good point. @mrdebug: do you call avcodec_send_packet() from your own code (e.g. main.cpp)? Because if not, and its internal, and you put libavcodec.a as the first library, and only a later library calls that function, it may not have been included. Do you get that order/list of linking the libraries from some documentation?

                            I haven't got this type of error using the old version 4.2.2.

                            Hmm ;-)

                            mrdebugM Offline
                            mrdebugM Offline
                            mrdebug
                            wrote on last edited by
                            #14

                            @JonB Hi, I have tried to edit the libraries order without any effect.
                            Now code is:

                            #include <libavutil/frame.h>
                            #include <libavutil/mem.h>
                            #include <libavcodec/avcodec.h>
                            
                            int main(int argc, char *argv[])
                            {
                                AVCodecContext *dec_ctx;
                                AVPacket *pkt;
                                avcodec_send_packet(dec_ctx, pkt);
                                return 0;
                            }
                            

                            and the .pro file is the one above. The error is the same:

                            /home/denis/Cpp/ffmpegTest/ffmpegTest/main.cpp:25: error: undefined reference to `avcodec_send_packet(AVCodecContext*, AVPacket const*)'
                            

                            and to include only the library (libavcodec.a) that contains the function does not resolve.

                            Need programmers to hire?
                            www.labcsp.com
                            www.denisgottardello.it
                            GMT+1
                            Skype: mrdebug

                            JoeCFDJ SGaistS 2 Replies Last reply
                            0
                            • mrdebugM mrdebug

                              @JonB Hi, I have tried to edit the libraries order without any effect.
                              Now code is:

                              #include <libavutil/frame.h>
                              #include <libavutil/mem.h>
                              #include <libavcodec/avcodec.h>
                              
                              int main(int argc, char *argv[])
                              {
                                  AVCodecContext *dec_ctx;
                                  AVPacket *pkt;
                                  avcodec_send_packet(dec_ctx, pkt);
                                  return 0;
                              }
                              

                              and the .pro file is the one above. The error is the same:

                              /home/denis/Cpp/ffmpegTest/ffmpegTest/main.cpp:25: error: undefined reference to `avcodec_send_packet(AVCodecContext*, AVPacket const*)'
                              

                              and to include only the library (libavcodec.a) that contains the function does not resolve.

                              JoeCFDJ Offline
                              JoeCFDJ Offline
                              JoeCFD
                              wrote on last edited by
                              #15

                              @mrdebug
                              Try the following

                              int main(int argc, char *argv[])
                              {
                                  AVCodecContext *dec_ctx{};
                                  const AVPacket *pkt{};
                                  avcodec_send_packet(dec_ctx, pkt);
                                  return 0;
                              }
                              

                              or

                              int main(int argc, char *argv[])
                              {
                                  AVCodecContext *dec_ctx{};
                                  AVPacket * const pkt{};
                                  avcodec_send_packet(dec_ctx, pkt);
                                  return 0;
                              }
                              
                              mrdebugM 1 Reply Last reply
                              0
                              • mrdebugM mrdebug

                                @JonB Hi, I have tried to edit the libraries order without any effect.
                                Now code is:

                                #include <libavutil/frame.h>
                                #include <libavutil/mem.h>
                                #include <libavcodec/avcodec.h>
                                
                                int main(int argc, char *argv[])
                                {
                                    AVCodecContext *dec_ctx;
                                    AVPacket *pkt;
                                    avcodec_send_packet(dec_ctx, pkt);
                                    return 0;
                                }
                                

                                and the .pro file is the one above. The error is the same:

                                /home/denis/Cpp/ffmpegTest/ffmpegTest/main.cpp:25: error: undefined reference to `avcodec_send_packet(AVCodecContext*, AVPacket const*)'
                                

                                and to include only the library (libavcodec.a) that contains the function does not resolve.

                                SGaistS Offline
                                SGaistS Offline
                                SGaist
                                Lifetime Qt Champion
                                wrote on last edited by
                                #16

                                @mrdebug hi,

                                Can you show the .pro file of your minimal project ?
                                Are you sure you are linking to the expected version of ffmpeg ?
                                Do you have your distribution provided ffmpeg development packages installed ?

                                Interested in AI ? www.idiap.ch
                                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                1 Reply Last reply
                                0
                                • JoeCFDJ JoeCFD

                                  @mrdebug
                                  Try the following

                                  int main(int argc, char *argv[])
                                  {
                                      AVCodecContext *dec_ctx{};
                                      const AVPacket *pkt{};
                                      avcodec_send_packet(dec_ctx, pkt);
                                      return 0;
                                  }
                                  

                                  or

                                  int main(int argc, char *argv[])
                                  {
                                      AVCodecContext *dec_ctx{};
                                      AVPacket * const pkt{};
                                      avcodec_send_packet(dec_ctx, pkt);
                                      return 0;
                                  }
                                  
                                  mrdebugM Offline
                                  mrdebugM Offline
                                  mrdebug
                                  wrote on last edited by
                                  #17

                                  @JoeCFD Tried both. The behaviour is the same.
                                  Tomorrow I'll try on a Mac and Windows

                                  Need programmers to hire?
                                  www.labcsp.com
                                  www.denisgottardello.it
                                  GMT+1
                                  Skype: mrdebug

                                  mrdebugM 1 Reply Last reply
                                  0
                                  • mrdebugM mrdebug

                                    @JoeCFD Tried both. The behaviour is the same.
                                    Tomorrow I'll try on a Mac and Windows

                                    mrdebugM Offline
                                    mrdebugM Offline
                                    mrdebug
                                    wrote on last edited by
                                    #18

                                    Hi, in order to use ffmpeg 6 libraries in a custom software it is mandatory to compile the source using this swich "--enable-pic"
                                    and include the header in this way:

                                    extern "C" {
                                        #include <libavutil/frame.h>
                                        #include <libavutil/mem.h>
                                        #include <libavcodec/avcodec.h>
                                    }
                                    

                                    Need programmers to hire?
                                    www.labcsp.com
                                    www.denisgottardello.it
                                    GMT+1
                                    Skype: mrdebug

                                    1 Reply Last reply
                                    0
                                    • mrdebugM mrdebug has marked this topic as solved on

                                    • Login

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Categories
                                    • Recent
                                    • Tags
                                    • Popular
                                    • Users
                                    • Groups
                                    • Search
                                    • Get Qt Extensions
                                    • Unsolved