Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct

    Solved help with QtAV

    General and Desktop
    2
    5
    1588
    Loading More Posts
    • 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.
    • S
      saber last edited by saber

      there is project called qtav here

      here is the nhj.pro

      TEMPLATE = subdirs
      
      SUBDIRS += libQtAV \
                 coreplayer
      
      coreplayer.depends = libQtAV
      !no-widgets {
        SUBDIRS += libQtAVWidgets
        libqtavwidgets.file = libQtAVWidgets/libQtAVWidgets.pro
        libqtavwidgets.depends = libqtav
      }
      
      

      this is UNMODIFIED libQtAV.pro

      TEMPLATE = lib
      MODULE_INCNAME = QtAV # for mac framework. also used in install_sdk.pro
      TARGET = QtAV
      QT += core gui
      #CONFIG *= ltcg
      greaterThan(QT_MAJOR_VERSION, 4) {
        contains(QT_CONFIG, opengl) {
            CONFIG *= config_opengl
            greaterThan(QT_MINOR_VERSION, 3) {
              CONFIG *= config_openglwindow
            }
        }
      } else {
        config_gl: QT += opengl
      }
      CONFIG *= qtav-buildlib
      static: CONFIG *= static_ffmpeg
      INCLUDEPATH += $$[QT_INSTALL_HEADERS] # TODO: ffmpeg dir
      
      #mac: simd.prf will load qt_build_config and the result is soname will prefixed with QT_INSTALL_LIBS and link flag will append soname after QMAKE_LFLAGS_SONAME
      config_libcedarv: CONFIG *= neon config_simd #need by qt4 addSimdCompiler(). neon or config_neon is required because tests/arch can not detect neon
      ## sse2 sse4_1 may be defined in Qt5 qmodule.pri but is not included. Qt4 defines sse and sse2
      sse4_1|config_sse4_1|contains(TARGET_ARCH_SUB, sse4.1): CONFIG *= sse4_1 config_simd
      sse2|config_sse2|contains(TARGET_ARCH_SUB, sse2): CONFIG *= sse2 config_simd
      CONFIG(debug, debug|release): DEFINES += DEBUG
      #release: DEFINES += QT_NO_DEBUG_OUTPUT
      #var with '_' can not pass to pri?
      PROJECTROOT = $$PWD/..
      !include(libQtAV.pri): error("could not find libQtAV.pri")
      preparePaths($$OUT_PWD/../out)
      exists($$PROJECTROOT/extra/qtLongName(include)): INCLUDEPATH += $$PROJECTROOT/extra/qtLongName(include)
      exists($$PROJECTROOT/extra/qtLongName(lib)): LIBS += -L$$PROJECTROOT/extra/qtLongName(lib)
      staticlib: DEFINES += BUILD_QTAV_STATIC
      
      config_uchardet {
        DEFINES += LINK_UCHARDET
        LIBS *= -luchardet
      } else:exists($$PROJECTROOT/contrib/uchardet/src/uchardet.h) {
        include($$PROJECTROOT/contrib/uchardet.pri)
        DEFINES += BUILD_UCHARDET
      }
      exists($$PROJECTROOT/contrib/capi/capi.pri) {
        include($$PROJECTROOT/contrib/capi/capi.pri)
        DEFINES *= QTAV_HAVE_CAPI=1
      } else {
        warning("contrib/capi is missing. run 'git submodule update --init' first")
      }
      
      RESOURCES += QtAV.qrc \
          shaders/shaders.qrc
      
      !rc_file {
          RC_ICONS = QtAV.ico
          QMAKE_TARGET_COMPANY = "Shanghai University->S3 Graphics->Deepin | wbsecg1@gmail.com"
          QMAKE_TARGET_DESCRIPTION = "QtAV Multimedia framework. http://qtav.org"
          QMAKE_TARGET_COPYRIGHT = "Copyright (C) 2012-2017 WangBin, wbsecg1@gmail.com"
          QMAKE_TARGET_PRODUCT = "QtAV"
      } else:win32 {
          RC_FILE = QtAV.rc
      #no depends for rc file by default, even if rc includes a header. Makefile target use '/' as default, so not works iwth win cmd
          rc.target = $$clean_path($$RC_FILE) #rc obj depends on clean path target
          rc.depends = $$PWD/QtAV/version.h
      #why use multiple rule failed? i.e. add a rule without command
          isEmpty(QMAKE_SH) {
              rc.commands = @copy /B $$system_path($$RC_FILE)+,, #change file time
          } else {
              rc.commands = @touch $$RC_FILE #change file time
          }
          QMAKE_EXTRA_TARGETS += rc
      }
      
      OTHER_FILES += $$RC_FILE QtAV.svg
      TRANSLATIONS = i18n/QtAV_zh_CN.ts i18n/QtAV.ts
      
      sse4_1 {
        CONFIG += sse2 #only sse4.1 is checked. sse2 now can be disabled if sse4.1 is disabled
        DEFINES += QTAV_HAVE_SSE4_1=1
        !config_simd: CONFIG *= simd
        SSE4_1_SOURCES += utils/CopyFrame_SSE4.cpp
      }
      sse2 {
        DEFINES += QTAV_HAVE_SSE2=1
        !config_simd: CONFIG *= simd
        SSE2_SOURCES += utils/CopyFrame_SSE2.cpp
      }
      
      win32 {
      # cross build, old vc etc.
        !config_dx: INCLUDEPATH += $$PROJECTROOT/contrib/dxsdk
      }
      *msvc*:!winrt {
      #link FFmpeg and portaudio which are built by gcc need /SAFESEH:NO
        win32-msvc2010|win32-msvc2008|win32-msvc2012 {
          QMAKE_LFLAGS *= /DEBUG #workaround for CoInitializeEx() and other symbols not found at runtime
          INCLUDEPATH *= compat/msvc # vs2012 only has stdint.h
        }
          debug: QMAKE_LFLAGS += /SAFESEH:NO
      #CXXFLAGS debug: /MTd
          !static:QMAKE_LFLAGS *= /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcmtd.lib #for msbuild vs2013
      }
      capi {
      contains(QT_CONFIG, egl)|contains(QT_CONFIG, dynamicgl)|contains(QT_CONFIG, opengles2) {
        CONFIG *= enable_egl
        !ios {
          winrt: DEFINES += CAPI_LINK_EGL #required by capi_egl.*
          DEFINES += QTAV_HAVE_EGL_CAPI=1
          HEADERS *= capi/egl_api.h
          SOURCES *= capi/egl_api.cpp
        }
      }
      }
      enable_egl:greaterThan(QT_MAJOR_VERSION,4):qtHaveModule(x11extras): QT *= x11extras
      
      config_gl|config_opengl {
        contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles2): CONFIG *= enable_desktopgl
      }
      #UINT64_C: C99 math features, need -D__STDC_CONSTANT_MACROS in CXXFLAGS
      DEFINES += __STDC_CONSTANT_MACROS
      android {
        CONFIG *= config_opensl
        SOURCES *= jmi/jmi.cpp
        qtHaveModule(androidextras) { #qt5.2 has QAndroidJniObject
          QT *= androidextras #QPlatformNativeInterface get "QtActivity"
          SOURCES *= io/AndroidIO.cpp
          SOURCES *= codec/video/VideoDecoderMediaCodec.cpp
          exists($$[QT_INSTALL_HEADERS]/MediaCodecTextureStandalone.h) {
            DEFINES *= MEDIACODEC_TEXTURE
            LIBS *= -lqtav-mediacodec
          }
        }
      }
      config_x11 {
        DEFINES += QTAV_HAVE_X11=1
        SOURCES *= filter/X11FilterContext.cpp
        LIBS *= -lX11
      }
      config_swresample {
          DEFINES += QTAV_HAVE_SWRESAMPLE=1
          SOURCES += AudioResamplerFF.cpp
          LIBS += -lswresample
      }
      config_avresample {
          DEFINES += QTAV_HAVE_AVRESAMPLE=1
          SOURCES += AudioResamplerLibav.cpp
          LIBS += -lavresample
      }
      config_avdevice { #may depends on avfilter
          DEFINES += QTAV_HAVE_AVDEVICE=1
          LIBS *= -lavdevice
          static_ffmpeg {
            win32 {
              LIBS *= -lgdi32 -loleaut32 -lshlwapi #shlwapi: desktop >= xp only
            } else:linux {
              LIBS *= -lXv #-lX11 -lxcb -lxcb-shm -lxcb-xfixes -lxcb-render -lxcb-shape
            } else:mac { # static ffmpeg
              LIBS += -framework Foundation -framework CoreMedia -framework QuartzCore -framework CoreGraphics -framework CoreVideo
              ios {
                LIBS += -framework AVFoundation
              } else {
                LIBS += -framework QTKit
            # assume avdevice targets to the same version as Qt and always >= 10.6
               !isEqual(QMAKE_MACOSX_DEPLOYMENT_TARGET, 10.6): LIBS += -framework AVFoundation
              }
            }
          }
      }
      config_avfilter {
          DEFINES += QTAV_HAVE_AVFILTER=1
          LIBS += -lavfilter
          mac:!ios:static_ffmpeg: LIBS += -framework AppKit
      }
      config_ipp {
          DEFINES += QTAV_HAVE_IPP=1
          ICCROOT = $$(IPPROOT)/../compiler
          INCLUDEPATH += $$(IPPROOT)/include
          SOURCES += ImageConverterIPP.cpp
          message("QMAKE_TARGET.arch" $$QMAKE_TARGET.arch)
          *64|contains(QMAKE_TARGET.arch, x86_64)|contains(TARGET_ARCH, x86_64) {
              IPPARCH=intel64
          } else {
              IPPARCH=ia32
          }
          LIBS *= -L$$(IPPROOT)/lib/$$IPPARCH -lippcc -lippcore -lippi
          LIBS *= -L$$(IPPROOT)/../compiler/lib/$$IPPARCH -lsvml -limf
          #omp for static link. _t is multi-thread static link
      }
      mac|ios {
        CONFIG *= config_openal
        SOURCES += output/audio/AudioOutputAudioToolbox.cpp
        LIBS += -framework AudioToolbox
        LIBS += -Wl,-unexported_symbols_list,$$PWD/unexport.list
      } else:!win32 {
        #LIBS += -Wl,--exclude-libs,ALL
      }
      win32: {
        HEADERS += output/audio/xaudio2_compat.h
        SOURCES += output/audio/AudioOutputXAudio2.cpp
        DEFINES *= QTAV_HAVE_XAUDIO2=1
        winrt {
          LIBS += -lxaudio2 #only for xbox or >=win8
        } else {
          LIBS += -lole32 #CoInitializeEx for vs2008, but can not find the symbol at runtime
        }
      }
      config_dsound:!winrt {
          SOURCES += output/audio/AudioOutputDSound.cpp
          DEFINES *= QTAV_HAVE_DSOUND=1
      }
      config_portaudio {
          SOURCES += output/audio/AudioOutputPortAudio.cpp
          DEFINES *= QTAV_HAVE_PORTAUDIO=1
          LIBS *= -lportaudio
          #win32: LIBS *= -lwinmm #-lksguid #-luuid
      }
      config_openal {
          SOURCES *= output/audio/AudioOutputOpenAL.cpp
          HEADERS *= capi/openal_api.h
          SOURCES *= capi/openal_api.cpp
          DEFINES *= QTAV_HAVE_OPENAL=1
          static_openal: DEFINES += AL_LIBTYPE_STATIC # openal-soft AL_API dllimport error. mac's macro is AL_BUILD_LIBRARY
          ios: CONFIG *= config_openal_link
          !capi|config_openal_link|static_openal {
            DEFINES *= CAPI_LINK_OPENAL
            win32 {
              LIBS += -lOpenAL32 -lwinmm
            } else:mac {
              LIBS += -framework OpenAL
              DEFINES += HEADER_OPENAL_PREFIX
            } else:blackberry {
              LIBS += -lOpenAL
            } else {
              LIBS += -lopenal
              static_openal:!android: LIBS += -lasound
            }
          }
      }
      config_opensl {
          SOURCES += output/audio/AudioOutputOpenSL.cpp
          DEFINES *= QTAV_HAVE_OPENSL=1
          LIBS += -lOpenSLES
      }
      config_pulseaudio {
          SOURCES += output/audio/AudioOutputPulse.cpp
          DEFINES *= QTAV_HAVE_PULSEAUDIO=1
          LIBS += -lpulse
      }
      CONFIG += config_cuda
      #CONFIG += config_cuda_link
      config_cuda {
          DEFINES += QTAV_HAVE_CUDA=1
          HEADERS += cuda/dllapi/nv_inc.h cuda/helper_cuda.h
          SOURCES += codec/video/VideoDecoderCUDA.cpp
          #contains(QT_CONFIG, opengl) {
            HEADERS += codec/video/SurfaceInteropCUDA.h
            SOURCES += codec/video/SurfaceInteropCUDA.cpp
          #}
          INCLUDEPATH += $$PWD/cuda cuda/dllapi
          config_dllapi:config_dllapi_cuda {
              DEFINES += QTAV_HAVE_DLLAPI_CUDA=1
              INCLUDEPATH += ../depends/dllapi/src
      include(../depends/dllapi/src/libdllapi.pri)
              SOURCES += cuda/dllapi/cuda.cpp cuda/dllapi/nvcuvid.cpp cuda/dllapi/cuviddec.cpp
          } else:config_cuda_link {
              DEFINES += CUDA_LINK
              INCLUDEPATH += $$(CUDA_PATH)/include
              LIBS += -L$$(CUDA_PATH)/lib
              contains(TARGET_ARCH, x86): LIBS += -L$$(CUDA_PATH)/lib/Win32
              else: LIBS += -L$$(CUDA_PATH)/lib/x64
              LIBS += -lnvcuvid -lcuda
          }
          SOURCES += cuda/cuda_api.cpp
          HEADERS += cuda/cuda_api.h
      }
      config_d3d11va {
        CONFIG *= d3dva c++11
        DEFINES *= QTAV_HAVE_D3D11VA=1
        SOURCES += codec/video/VideoDecoderD3D11.cpp
        HEADERS += directx/SurfaceInteropD3D11.h
        SOURCES += directx/SurfaceInteropD3D11.cpp
        HEADERS += directx/D3D11VP.h
        SOURCES += directx/D3D11VP.cpp
        enable_egl {
          SOURCES += directx/SurfaceInteropD3D11EGL.cpp
        }
        enable_desktopgl {
          SOURCES += directx/SurfaceInteropD3D11GL.cpp
        }
        winrt: LIBS *= -ld3d11
      }
      win32:!winrt {
        HEADERS += directx/SurfaceInteropD3D9.h
        SOURCES += directx/SurfaceInteropD3D9.cpp
        enable_egl {
          SOURCES += directx/SurfaceInteropD3D9EGL.cpp
        }
        enable_desktopgl {
          SOURCES += directx/SurfaceInteropD3D9GL.cpp
        }
      }
      config_dxva {
        CONFIG *= d3dva
        DEFINES *= QTAV_HAVE_DXVA=1
        SOURCES += codec/video/VideoDecoderDXVA.cpp
        LIBS += -lole32
      }
      d3dva {
        HEADERS += codec/video/VideoDecoderD3D.h
        SOURCES += codec/video/VideoDecoderD3D.cpp
      }
      config_vaapi* {
          DEFINES *= QTAV_HAVE_VAAPI=1
          SOURCES += codec/video/VideoDecoderVAAPI.cpp  vaapi/vaapi_helper.cpp
          HEADERS += vaapi/vaapi_helper.h
        #contains(QT_CONFIG, opengl) {
          HEADERS += vaapi/SurfaceInteropVAAPI.h
          SOURCES += vaapi/SurfaceInteropVAAPI.cpp
        #}
          LIBS *= -lva -lX11 #dynamic load va-glx va-x11 using dllapi. -lX11: used by tfp
      }
      config_libcedarv {
          DEFINES *= QTAV_HAVE_CEDARV=1
          QMAKE_CXXFLAGS *= -march=armv7-a
      # Can not use NEON_SOURCE because it can not work with moc
          SOURCES += codec/video/VideoDecoderCedarv.cpp
          !config_simd: CONFIG *= simd #addSimdCompiler xxx_ASM
          CONFIG += no_clang_integrated_as #see qtbase/src/gui/painting/painting.pri. add -fno-integrated-as from simd.prf
          NEON_ASM += codec/video/tiled_yuv.S #from libvdpau-sunxi
          LIBS += -lvecore -lcedarv
          OTHER_FILES += $$NEON_ASM
      }
      mac {
        HEADERS *= codec/video/SurfaceInteropCV.h
        SOURCES *= codec/video/SurfaceInteropCV.cpp \
                   codec/video/SurfaceInteropIOSurface.mm
        ios {
          OBJECTIVE_SOURCES *= codec/video/SurfaceInteropCVOpenGLES.mm
        } else {
          #CONFIG += config_vda
          #SOURCES *= codec/video/SurfaceInteropCVOpenGL.cpp
        }
        LIBS += -framework CoreVideo -framework CoreFoundation
      }
      config_vda {
          DEFINES *= QTAV_HAVE_VDA=1
          SOURCES += codec/video/VideoDecoderVDA.cpp
          LIBS += -framework VideoDecodeAcceleration
      }
      config_videotoolbox {
        DEFINES *= QTAV_HAVE_VIDEOTOOLBOX=1
        SOURCES *= codec/video/VideoDecoderVideoToolbox.cpp
        LIBS += -framework CoreMedia -framework VideoToolbox
      }
      
      config_gl|config_opengl {
        contains(QT_CONFIG, egl) {
          DEFINES *= QTAV_HAVE_QT_EGL=1
      #if a platform plugin depends on egl (for example, eglfs), egl is defined
        }
        OTHER_FILES += shaders/planar.f.glsl shaders/rgb.f.glsl
        SDK_HEADERS *= \
          QtAV/Geometry.h \
          QtAV/GeometryRenderer.h \
          QtAV/GLSLFilter.h \
          QtAV/OpenGLRendererBase.h \
          QtAV/OpenGLTypes.h \
          QtAV/OpenGLVideo.h \
          QtAV/ConvolutionShader.h \
          QtAV/VideoShaderObject.h \
          QtAV/VideoShader.h
        SDK_PRIVATE_HEADERS = \
          QtAV/private/OpenGLRendererBase_p.h
        HEADERS *= \
          opengl/gl_api.h \
          opengl/OpenGLHelper.h \
          opengl/SubImagesGeometry.h \
          opengl/SubImagesRenderer.h \
          opengl/ShaderManager.h
        SOURCES *= \
          filter/GLSLFilter.cpp \
          output/video/OpenGLRendererBase.cpp \
          opengl/gl_api.cpp \
          opengl/OpenGLTypes.cpp \
          opengl/Geometry.cpp \
          opengl/GeometryRenderer.cpp \
          opengl/SubImagesGeometry.cpp \
          opengl/SubImagesRenderer.cpp \
          opengl/OpenGLVideo.cpp \
          opengl/VideoShaderObject.cpp \
          opengl/VideoShader.cpp \
          opengl/ShaderManager.cpp \
          opengl/ConvolutionShader.cpp \
          opengl/OpenGLHelper.cpp
      }
      config_openglwindow {
        SDK_HEADERS *= QtAV/OpenGLWindowRenderer.h
        SOURCES *= output/video/OpenGLWindowRenderer.cpp
      }
      config_libass {
      #link against libass instead of dynamic load
        !capi|winrt|android|ios|config_libass_link {
          LIBS += -lass #-lfribidi -lfontconfig -lxml2 -lfreetype -lharfbuzz -lz
          DEFINES += CAPI_LINK_ASS
        }
        DEFINES *= QTAV_HAVE_LIBASS=1
        HEADERS *= capi/ass_api.h
        SOURCES *= capi/ass_api.cpp
        SOURCES *= subtitle/SubtitleProcessorLibASS.cpp
      }
      # mac is -FQTDIR we need -LQTDIR
      LIBS *= -L$$[QT_INSTALL_LIBS] -lavcodec -lavformat -lswscale -lavutil
      win32 {
        HEADERS *= utils/DirectXHelper.h
        SOURCES *= utils/DirectXHelper.cpp
      #dynamicgl: __impl__GetDC __impl_ReleaseDC __impl_GetDesktopWindow
        !winrt:LIBS += -luser32
      }
      winrt {
        SOURCES *= io/WinRTIO.cpp
        LIBS *= -lshcore
      }
      # compat with old system
      # use old libva.so to link against
      glibc_compat: *linux*: LIBS += -lrt  # do not use clock_gettime in libc, GLIBC_2.17 is not available on old system
      static_ffmpeg {
      # libs needed by mac static ffmpeg. corefoundation: vda, avdevice. coca: vf_coreimage
        mac|ios: LIBS += -liconv -lbz2 -llzma -lz -framework CoreFoundation -framework Security # -framework Cocoa Cocoa is not available on ios10
        win32: LIBS *= -lws2_32 -lstrmiids -lvfw32 -luuid
        !mac:*g++* {
          LIBS *= -lz
          QMAKE_LFLAGS *= -Wl,-Bsymbolic #link to static lib, see http://ffmpeg.org/platform.html
        }
      }
      SOURCES += \
          AVCompat.cpp \
          QtAV_Global.cpp \
          subtitle/SubImage.cpp \
          subtitle/CharsetDetector.cpp \
          subtitle/PlainText.cpp \
          subtitle/PlayerSubtitle.cpp \
          subtitle/Subtitle.cpp \
          subtitle/SubtitleProcessor.cpp \
          subtitle/SubtitleProcessorFFmpeg.cpp \
          utils/GPUMemCopy.cpp \
          utils/Logger.cpp \
          AudioThread.cpp \
          utils/internal.cpp \
          AVThread.cpp \
          AudioFormat.cpp \
          AudioFrame.cpp \
          AudioResampler.cpp \
          AudioResamplerTemplate.cpp \
          codec/audio/AudioDecoder.cpp \
          codec/audio/AudioDecoderFFmpeg.cpp \
          codec/audio/AudioEncoder.cpp \
          codec/audio/AudioEncoderFFmpeg.cpp \
          codec/AVDecoder.cpp \
          codec/AVEncoder.cpp \
          AVMuxer.cpp \
          AVDemuxer.cpp \
          AVDemuxThread.cpp \
          ColorTransform.cpp \
          Frame.cpp \
          FrameReader.cpp \
          filter/Filter.cpp \
          filter/FilterContext.cpp \
          filter/FilterManager.cpp \
          filter/LibAVFilter.cpp \
          filter/SubtitleFilter.cpp \
          filter/EncodeFilter.cpp \
          ImageConverter.cpp \
          ImageConverterFF.cpp \
          Packet.cpp \
          PacketBuffer.cpp \
          AVError.cpp \
          AVPlayer.cpp \
          AVPlayerPrivate.cpp \
          AVTranscoder.cpp \
          AVClock.cpp \
          VideoCapture.cpp \
          VideoFormat.cpp \
          VideoFrame.cpp \
          io/MediaIO.cpp \
          io/QIODeviceIO.cpp \
          output/audio/AudioOutput.cpp \
          output/audio/AudioOutputBackend.cpp \
          output/audio/AudioOutputNull.cpp \
          output/video/VideoRenderer.cpp \
          output/video/VideoOutput.cpp \
          output/video/QPainterRenderer.cpp \
          output/AVOutput.cpp \
          output/OutputSet.cpp \
          Statistics.cpp \
          codec/video/VideoDecoder.cpp \
          codec/video/VideoDecoderFFmpegBase.cpp \
          codec/video/VideoDecoderFFmpeg.cpp \
          codec/video/VideoDecoderFFmpegHW.cpp \
          codec/video/VideoEncoder.cpp \
          codec/video/VideoEncoderFFmpeg.cpp \
          VideoThread.cpp \
          VideoFrameExtractor.cpp
      
      SDK_HEADERS *= \
          QtAV/QtAV \
          QtAV/QtAV.h \
          QtAV/dptr.h \
          QtAV/QtAV_Global.h \
          QtAV/AudioResampler.h \
          QtAV/AudioDecoder.h \
          QtAV/AudioEncoder.h \
          QtAV/AudioFormat.h \
          QtAV/AudioFrame.h \
          QtAV/AudioOutput.h \
          QtAV/AVDecoder.h \
          QtAV/AVEncoder.h \
          QtAV/AVDemuxer.h \
          QtAV/AVMuxer.h \
          QtAV/Filter.h \
          QtAV/FilterContext.h \
          QtAV/LibAVFilter.h \
          QtAV/EncodeFilter.h \
          QtAV/Frame.h \
          QtAV/FrameReader.h \
          QtAV/QPainterRenderer.h \
          QtAV/Packet.h \
          QtAV/AVError.h \
          QtAV/AVPlayer.h \
          QtAV/AVTranscoder.h \
          QtAV/VideoCapture.h \
          QtAV/VideoRenderer.h \
          QtAV/VideoOutput.h \
          QtAV/MediaIO.h \
          QtAV/AVOutput.h \
          QtAV/AVClock.h \
          QtAV/VideoDecoder.h \
          QtAV/VideoEncoder.h \
          QtAV/VideoFormat.h \
          QtAV/VideoFrame.h \
          QtAV/VideoFrameExtractor.h \
          QtAV/FactoryDefine.h \
          QtAV/Statistics.h \
          QtAV/SubImage.h \
          QtAV/Subtitle.h \
          QtAV/SubtitleFilter.h \
          QtAV/SurfaceInterop.h \
          QtAV/version.h
      
      SDK_PRIVATE_HEADERS *= \
          QtAV/private/factory.h \
          QtAV/private/mkid.h \
          QtAV/private/prepost.h \
          QtAV/private/singleton.h \
          QtAV/private/PlayerSubtitle.h \
          QtAV/private/SubtitleProcessor.h \
          QtAV/private/AVCompat.h \
          QtAV/private/AudioOutputBackend.h \
          QtAV/private/AudioResampler_p.h \
          QtAV/private/AVDecoder_p.h \
          QtAV/private/AVEncoder_p.h \
          QtAV/private/MediaIO_p.h \
          QtAV/private/AVOutput_p.h \
          QtAV/private/Filter_p.h \
          QtAV/private/Frame_p.h \
          QtAV/private/VideoShader_p.h \
          QtAV/private/VideoRenderer_p.h \
          QtAV/private/QPainterRenderer_p.h
      
      # QtAV/private/* may be used by developers to extend QtAV features without changing QtAV library
      # headers not in QtAV/ and it's subdirs are used only by QtAV internally
      HEADERS *= \
          $$SDK_HEADERS \
          $$SDK_PRIVATE_HEADERS \
          AVPlayerPrivate.h \
          AVDemuxThread.h \
          AVThread.h \
          AVThread_p.h \
          AudioThread.h \
          PacketBuffer.h \
          VideoThread.h \
          ImageConverter.h \
          ImageConverter_p.h \
          codec/video/VideoDecoderFFmpegBase.h \
          codec/video/VideoDecoderFFmpegHW.h \
          codec/video/VideoDecoderFFmpegHW_p.h \
          filter/FilterManager.h \
          subtitle/CharsetDetector.h \
          subtitle/PlainText.h \
          utils/BlockingQueue.h \
          utils/GPUMemCopy.h \
          utils/Logger.h \
          utils/SharedPtr.h \
          utils/ring.h \
          utils/internal.h \
          output/OutputSet.h \
          ColorTransform.h
      # from mkspecs/features/qt_module.prf
      # OS X and iOS frameworks
      mac_framework { # from common.pri
         #QMAKE_FRAMEWORK_VERSION = 4.0
         CONFIG += lib_bundle sliced_bundle qt_framework
         CONFIG -= qt_install_headers #no need to install these as well
         !debug_and_release|!build_all|CONFIG(release, debug|release) {
              FRAMEWORK_HEADERS.version = Versions
              FRAMEWORK_HEADERS.files = $$SDK_HEADERS
              FRAMEWORK_HEADERS.path = Headers
      # 5.4(beta) workaround for wrong include path
      # TODO: why <QtCore/qglobal.h> can be found?
              qtAtLeast(5,3): FRAMEWORK_HEADERS.path = Headers/$$MODULE_INCNAME
              FRAMEWORK_PRIVATE_HEADERS.version = Versions
              FRAMEWORK_PRIVATE_HEADERS.files = $$SDK_PRIVATE_HEADERS
              FRAMEWORK_PRIVATE_HEADERS.path = Headers/$$VERSION/$$MODULE_INCNAME/private
              QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS FRAMEWORK_PRIVATE_HEADERS
         }
      }
      
      mac {
         CONFIG += explicitlib
         macx-g++ {
             QMAKE_CFLAGS += -fconstant-cfstrings
             QMAKE_CXXFLAGS += -fconstant-cfstrings
         }
      }
      
      unix:!mac:!cross_compile {
      icon.files = $$PWD/$${TARGET}.svg
      icon.path = /usr/share/icons/hicolor/scalable/apps
      INSTALLS += icon
      #debian
      DEB_INSTALL_LIST = .$$[QT_INSTALL_LIBS]/libQt*AV.so.*
      libqtav.target = libqtav.install
      libqtav.commands = echo \"$$join(DEB_INSTALL_LIST, \\n)\" >$$PROJECTROOT/debian/$${libqtav.target}
      QMAKE_EXTRA_TARGETS += libqtav
      target.depends *= $${libqtav.target}
      
      DEB_INSTALL_LIST = $$join(SDK_HEADERS, \\n.$$[QT_INSTALL_HEADERS]/, .$$[QT_INSTALL_HEADERS]/)
      DEB_INSTALL_LIST += .$$[QT_INSTALL_LIBS]/libQt*AV.prl .$$[QT_INSTALL_LIBS]/libQt*AV.so
      MKSPECS_DIR=$$[QT_HOST_DATA]/mkspecs # we only build deb for qt5, so QT_HOST_DATA is fine. qt4 can use $$[QMAKE_MKSPECS]
      DEB_INSTALL_LIST += .$${MKSPECS_DIR}/features/av.prf .$${MKSPECS_DIR}/modules/qt_lib_av.pri
      qtav_dev.target = qtav-dev.install
      qtav_dev.commands = echo \"$$join(DEB_INSTALL_LIST, \\n)\" >$$PROJECTROOT/debian/$${qtav_dev.target}
      QMAKE_EXTRA_TARGETS += qtav_dev
      target.depends *= $${qtav_dev.target}
      
      DEB_INSTALL_LIST = $$join(SDK_PRIVATE_HEADERS, \\n.$$[QT_INSTALL_HEADERS]/QtAV/*/, .$$[QT_INSTALL_HEADERS]/QtAV/*/)
      DEB_INSTALL_LIST += .$${MKSPECS_DIR}/modules/qt_lib_av_private.pri
      qtav_private_dev.target = qtav-private-dev.install
      qtav_private_dev.commands = echo \"$$join(DEB_INSTALL_LIST, \\n)\" >$$PROJECTROOT/debian/$${qtav_private_dev.target}
      QMAKE_EXTRA_TARGETS += qtav_private_dev
      target.depends *= $${qtav_private_dev.target}
      
      greaterThan(QT_MAJOR_VERSION, 4) {
        qtav_dev_links.target = qtav-dev.links
        qtav_dev_links.commands = echo \"$$[QT_INSTALL_LIBS]/libQtAV.so $$[QT_INSTALL_LIBS]/libQt$${QT_MAJOR_VERSION}AV.so\" >$$PROJECTROOT/debian/$${qtav_dev_links.target}
        QMAKE_EXTRA_TARGETS *= qtav_dev_links
        target.depends *= $${qtav_dev_links.target}
      } #Qt>=5
      } #debian
      
      MODULE_INCNAME = QtAV
      MODULE_VERSION = $$VERSION
      #use Qt version. limited by qmake
      # windows: Qt5AV.dll, not Qt1AV.dll
      !mac_framework: MODULE_VERSION = $${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
      !contains(QMAKE_HOST.os, Windows):include($$PROJECTROOT/deploy.pri)
      
      

      this is MODIFIED libQtAVWidgets.pro

      just this line
      !include($$PROJECTROOT/src/libQtAV.pri): error("could not find libQtAV.pri")

      to this
      !include($$PROJECTROOT/libQtAV/libQtAV.pri): error("could not find libQtAV.pri")

      TEMPLATE = lib
      MODULE_INCNAME = QtAVWidgets # for mac framework. also used in install_sdk.pro
      TARGET = QtAVWidgets
      QT += gui
      config_gl: QT += opengl
      greaterThan(QT_MAJOR_VERSION, 4) {
        # qtHaveModule does not exist in Qt5.0
        qtHaveModule(widgets) {
          QT *= widgets
        }
        qtHaveModule(opengl) {
          QT *= opengl
        }
      }
      CONFIG *= qtavwidgets-buildlib
      
      INCLUDEPATH += $$[QT_INSTALL_HEADERS]
      #release: DEFINES += QT_NO_DEBUG_OUTPUT
      #var with '_' can not pass to pri?
      PROJECTROOT = $$PWD/..
      !include($$PROJECTROOT/libQtAV/libQtAV.pri): error("could not find libQtAV.pri")
      !include(libQtAVWidgets.pri): error("could not find libQtAVWidgets.pri")
      preparePaths($$OUT_PWD/../out)
      
      !rc_file {
          RC_ICONS = $$PROJECTROOT/src/QtAV.ico
          QMAKE_TARGET_COMPANY = "Shanghai University->S3 Graphics->Deepin | wbsecg1@gmail.com"
          QMAKE_TARGET_DESCRIPTION = "QtAVWidgets module. QtAV Multimedia framework. http://qtav.org"
          QMAKE_TARGET_COPYRIGHT = "Copyright (C) 2012-2017 WangBin, wbsecg1@gmail.com"
          QMAKE_TARGET_PRODUCT = "QtAV Widgets"
      } else:win32 {
          RC_FILE = QtAVWidgets.rc
      #no depends for rc file by default, even if rc includes a header. Makefile target use '/' as default, so not works iwth win cmd
          rc.target = $$clean_path($$RC_FILE) #rc obj depends on clean path target
          rc.depends = QtAVWidgets/version.h
      #why use multiple rule failed? i.e. add a rule without command
          isEmpty(QMAKE_SH) {
              rc.commands = @copy /B $$system_path($$RC_FILE)+,, #change file time
          } else {
              rc.commands = @touch $$RC_FILE #change file time
          }
          QMAKE_EXTRA_TARGETS += rc
      }
      
      OTHER_FILES += $$RC_FILE
      
      win32 {
      #dynamicgl: __impl__GetDC __impl_ReleaseDC
        !winrt:LIBS *= -luser32
      }
      
      SDK_HEADERS *= \
          QtAVWidgets/QtAVWidgets \
          QtAVWidgets/QtAVWidgets.h \
          QtAVWidgets/global.h \
          QtAVWidgets/version.h \
          QtAVWidgets/VideoPreviewWidget.h \
          QtAVWidgets/GraphicsItemRenderer.h \
          QtAVWidgets/WidgetRenderer.h
      
      
      SOURCES *= \
          global.cpp \
          VideoPreviewWidget.cpp \
          GraphicsItemRenderer.cpp \
          WidgetRenderer.cpp
      
      contains(QT_CONFIG, opengl):greaterThan(QT_MAJOR_VERSION, 4) {
        SDK_HEADERS *= QtAVWidgets/OpenGLWidgetRenderer.h
        SOURCES *= OpenGLWidgetRenderer.cpp
        isEqual(QT_MAJOR_VERSION, 5):lessThan(QT_MINOR_VERSION, 4) {
          SDK_HEADERS *= QtAVWidgets/QOpenGLWidget.h
          SOURCES *= QOpenGLWidget.cpp
        }
      }
      
      config_gl {
        DEFINES *= QTAV_HAVE_GL=1
        SOURCES += GLWidgetRenderer2.cpp
        SDK_HEADERS += QtAVWidgets/GLWidgetRenderer2.h
        !contains(QT_CONFIG, dynamicgl) { #dynamicgl does not support old gl1 functions which used in GLWidgetRenderer
      #GLWidgetRenderer depends on internal functions of QtAV
          #DEFINES *= QTAV_HAVE_GL1
          #SOURCES += GLWidgetRenderer.cpp
          #SDK_HEADERS += QtAVWidgets/GLWidgetRenderer.h
        }
      }
      config_gdiplus {
        DEFINES *= QTAV_HAVE_GDIPLUS=1
        SOURCES += GDIRenderer.cpp
        LIBS *= -lgdiplus -lgdi32
      }
      config_direct2d {
        DEFINES *= QTAV_HAVE_DIRECT2D=1
        !*msvc*: INCLUDEPATH += $$PROJECTROOT/contrib/d2d1headers
        SOURCES += Direct2DRenderer.cpp
        #LIBS += -lD2d1
      }
      config_xv {
        DEFINES *= QTAV_HAVE_XV=1
        SOURCES += XVRenderer.cpp
        LIBS *= -lXv -lX11 -lXext
      }
      config_x11 {
        DEFINES *= QTAV_HAVE_X11=1
        SOURCES *= X11Renderer.cpp
        LIBS *= -lX11
      }
      # QtAV/private/* may be used by developers to extend QtAV features without changing QtAV library
      # headers not in QtAV/ and it's subdirs are used only by QtAV internally
      HEADERS *= \
          $$SDK_HEADERS \
          $$SDK_PRIVATE_HEADERS
      
      # from mkspecs/features/qt_module.prf
      # OS X and iOS frameworks
      mac_framework { # from common.pri
         #QMAKE_FRAMEWORK_VERSION = 4.0
         CONFIG += lib_bundle sliced_bundle qt_framework
         CONFIG -= qt_install_headers #no need to install these as well
         !debug_and_release|!build_all|CONFIG(release, debug|release) {
              FRAMEWORK_HEADERS.version = Versions
              FRAMEWORK_HEADERS.files = $$SDK_HEADERS
              FRAMEWORK_HEADERS.path = Headers
      # 5.4(beta) workaround for wrong include path
      # TODO: why <QtCore/qglobal.h> can be found?
              qtAtLeast(5,3): FRAMEWORK_HEADERS.path = Headers/$$MODULE_INCNAME
              FRAMEWORK_PRIVATE_HEADERS.version = Versions
              FRAMEWORK_PRIVATE_HEADERS.files = $$SDK_PRIVATE_HEADERS
              FRAMEWORK_PRIVATE_HEADERS.path = Headers/$$VERSION/$$MODULE_INCNAME/private
              QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS FRAMEWORK_PRIVATE_HEADERS
         }
      }
      
      mac {
         CONFIG += explicitlib
         macx-g++ {
             QMAKE_CFLAGS += -fconstant-cfstrings
             QMAKE_CXXFLAGS += -fconstant-cfstrings
         }
      }
      
      unix:!android:!mac {
      #debian
      DEB_INSTALL_LIST = .$$[QT_INSTALL_LIBS]/libQt*AVWidgets.so.*
      libqtavwidgets.target = libqtavwidgets.install
      libqtavwidgets.commands = echo \"$$join(DEB_INSTALL_LIST, \\n)\" >$$PROJECTROOT/debian/$${libqtavwidgets.target}
      QMAKE_EXTRA_TARGETS += libqtavwidgets
      target.depends *= $${libqtavwidgets.target}
      
      DEB_INSTALL_LIST = $$join(SDK_HEADERS, \\n.$$[QT_INSTALL_HEADERS]/, .$$[QT_INSTALL_HEADERS]/)
      DEB_INSTALL_LIST += .$$[QT_INSTALL_LIBS]/libQt*AVWidgets.prl .$$[QT_INSTALL_LIBS]/libQt*AVWidgets.so
      MKSPECS_DIR=$$[QT_HOST_DATA]/mkspecs
      DEB_INSTALL_LIST += .$${MKSPECS_DIR}/features/avwidgets.prf .$${MKSPECS_DIR}/modules/qt_lib_avwidgets.pri
      qtavwidgets_dev.target = qtav-dev.install #like qtmultimedia5-dev, contains widgets headers
      qtavwidgets_dev.commands = echo \"$$join(DEB_INSTALL_LIST, \\n)\" >>$$PROJECTROOT/debian/$${qtavwidgets_dev.target}
      QMAKE_EXTRA_TARGETS += qtavwidgets_dev
      target.depends *= $${qtavwidgets_dev.target}
      
      greaterThan(QT_MAJOR_VERSION, 4) {
        qtavwidgets_dev_links.target = qtav-dev.links #like qtmultimedia5-dev, contains widgets .so
        qtavwidgets_dev_links.commands = echo \"$$[QT_INSTALL_LIBS]/libQtAVWidgets.so $$[QT_INSTALL_LIBS]/libQt$${QT_MAJOR_VERSION}AVWidgets.so\" >>$$PROJECTROOT/debian/$${qtavwidgets_dev_links.target}
        QMAKE_EXTRA_TARGETS *= qtavwidgets_dev_links
        target.depends *= $${qtavwidgets_dev_links.target}
      } #Qt>=5
      } #debian
      
      MODULE_INCNAME = QtAVWidgets
      MODULE_VERSION = $$VERSION
      #use Qt version. limited by qmake
      # windows: Qt5AV.dll, not Qt1AV.dll
      !mac_framework: MODULE_VERSION = $${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
      !contains(QMAKE_HOST.os, Windows):include($$PROJECTROOT/deploy.pri)
      
      

      here is folder stracture

      0_1526802472554_iu.png

      i am getting this error
      0_1526802531479_iy.png

      so i just want to build the library file to minimize the player that i build.

      so where is the problem?

      1 Reply Last reply Reply Quote 0
      • SGaist
        SGaist Lifetime Qt Champion last edited by

        Hi,

        Why did you modify that file ?

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

        S 1 Reply Last reply Reply Quote 0
        • S
          saber @SGaist last edited by

          @SGaist to link libqtav to libqtavwidget as i am building only the library .

          1 Reply Last reply Reply Quote 0
          • SGaist
            SGaist Lifetime Qt Champion last edited by

            What's the problem with building QtAV completely before using it ?

            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 Reply Quote 0
            • S
              saber last edited by

              i opened a issue in qtav github page here

              and to build only the library add this line in QtAV.pro and then build.

              CONFIG+=no-examples no-tests
              

              thanks.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post