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.
  • 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