Unsolved Building qt module from source doesn't apply changes
-
I didn't run the
make install
as it says not to after the config, and I know for sure I didn't do it before either. But I'll trymake
and thenmake install
on Monday and see if it works then. -
Even with
make install
no luck.This is what I get as output for
~user/Qt/5.11.3/ios/bin/qmake ../qtmultimedia
and why I didn't use make install before. Not sure anymore what could be the problem.Info: creating stash file /Users/user/QTProjects/buildqtm/.qmake.stash Info: creating cache file /Users/user/QTProjects/buildqtm/.qmake.cache Running configuration tests... Checking for ALSA... no Checking for AVFoundation... yes Checking for Vivante GPU... no Checking for GStreamer 1.0... no Checking for GStreamer 0.10... no Checking for Video for Linux... no Checking for OpenAL... yes Checking for PulseAudio >= 0.9.10... no Checking for libresourceqt5... no Done running configuration tests. Configure summary: Qt Multimedia: ALSA ................................... no GStreamer 1.0 .......................... no GStreamer 0.10 ......................... no Video for Linux ........................ no OpenAL ................................. yes PulseAudio ............................. no Resource Policy (libresourceqt5) ....... no AVFoundation ........................... yes Windows Audio Services ................. no DirectShow ............................. no Windows Media Foundation ............... no Qt is now configured for building. Just run 'make'. Once everything is built, Qt is installed. You should NOT run 'make install'. Note that this build cannot be deployed to other machines or devices. Prior to reconfiguration, make sure you remove any leftovers from the previous build.
I could paste the makefile it creates if that would be of use?
-
@Wiru so what does
make install
do?The only reason for not installing is a developer build of Qt, AFAIK.
-
In short it does nothing, here is a piece of the output:
/Users/user/Qt/5.11.3/ios/bin/qmake -install qinstall /Users/user/QTProjects/buildqtm/lib/cmake/Qt5Multimedia/Qt5Multimedia_AVFMediaPlayerServicePlugin.cmake /Users/user/Qt/5.11.3/ios/lib/cmake/Qt5Multimedia/Qt5Multimedia_AVFMediaPlayerServicePlugin.cmake cd camera/ && ( test -e Makefile || /Users/user/Qt/5.11.3/ios/bin/qmake -o Makefile /Users/user/QTProjects/qtmultimedia/src/plugins/avfoundation/camera/camera.pro ) && /Applications/Xcode.app/Contents/Developer/usr/bin/make -f Makefile install /Applications/Xcode.app/Contents/Developer/usr/bin/make -f Makefile.Debug install /Users/user/Qt/5.11.3/ios/bin/qmake -install qinstall /Users/user/QTProjects/buildqtm/mkspecs/modules-inst/qt_plugin_qavfcamera.pri /Users/user/Qt/5.11.3/ios/mkspecs/modules/qt_plugin_qavfcamera.pri /Users/user/Qt/5.11.3/ios/bin/qmake -install qinstall ../../../../plugins/mediaservice/libqavfcamera_debug.a /Users/user/Qt/5.11.3/ios/plugins/mediaservice/libqavfcamera_debug.a /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib -s /Users/user/Qt/5.11.3/ios/plugins/mediaservice/libqavfcamera_debug.a sed -e 's,/Users/user/QTProjects/buildqtm/lib,$$[QT_INSTALL_LIBS],g' ../../../../plugins/mediaservice/libqavfcamera_debug.prl > /Users/user/Qt/5.11.3/ios/plugins/mediaservice/libqavfcamera_debug.prl /Users/user/Qt/5.11.3/ios/bin/qmake -install qinstall /Users/user/QTProjects/buildqtm/lib/cmake/Qt5Multimedia/Qt5Multimedia_AVFServicePlugin.cmake /Users/user/Qt/5.11.3/ios/lib/cmake/Qt5Multimedia/Qt5Multimedia_AVFServicePlugin.cmake /Applications/Xcode.app/Contents/Developer/usr/bin/make -f Makefile.Release install /Users/user/Qt/5.11.3/ios/bin/qmake -install qinstall /Users/user/QTProjects/buildqtm/mkspecs/modules-inst/qt_plugin_qavfcamera.pri /Users/user/Qt/5.11.3/ios/mkspecs/modules/qt_plugin_qavfcamera.pri /Users/user/Qt/5.11.3/ios/bin/qmake -install qinstall ../../../../plugins/mediaservice/libqavfcamera.a /Users/user/Qt/5.11.3/ios/plugins/mediaservice/libqavfcamera.a /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib -s /Users/user/Qt/5.11.3/ios/plugins/mediaservice/libqavfcamera.a sed -e 's,/Users/user/QTProjects/buildqtm/lib,$$[QT_INSTALL_LIBS],g' ../../../../plugins/mediaservice/libqavfcamera.prl > /Users/user/Qt/5.11.3/ios/plugins/mediaservice/libqavfcamera.prl /Users/user/Qt/5.11.3/ios/bin/qmake -install qinstall /Users/user/QTProjects/buildqtm/lib/cmake/Qt5Multimedia/Qt5Multimedia_AVFServicePlugin.cmake /Users/user/Qt/5.11.3/ios/lib/cmake/Qt5Multimedia/Qt5Multimedia_AVFServicePlugin.cmake
but even after that nothing visible changed in the app build.
Almost like it uses a cashed version or something and no matter what I build doesn't apply. Even tried to delete half of the code to break the module, as that would for sure be a noticeable change, but no luck.
I tried to run it on simulator and device. -
Then a silly question, did you do a full rebuild (as in delete the build folder) of your application after calling
make install
? -
@SGaist Yes, I delete it every time.
Right now I'm building the whole q5 from source, that at least should apply changes, but it takes way longer than building just one module.EDIT: I'm starting to think that xcode is messing with me, what I said before that it worked with Qt 5.10 it was also the older version of xcode, that's the only other thing that might mess up the compile, but still doesn't make much sense.
-
Just in case, you don't need to build the whole of Qt, you can either skip all unneeded modules or build only qtbase and then the modules you need.
-
Is there a way to see if the specific part I added is present in the build?
Even after building whole qt nothing changed.This is the
git commit
I added to qtmultimedia, and as far as I know that's the part of code responsible for playback of iOS multimedia component?Based on that it shouldn't even start playing anything.
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm index 06fb71ef..80033d45 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm @@ -111,34 +111,37 @@ - (AVFMediaPlayerSessionObserver *) initWithMediaPlayerSession:(AVFMediaPlayerSe - (void) setURL:(NSURL *)url { - if (m_URL != url) - { - [m_URL release]; - m_URL = [url copy]; - - //Create an asset for inspection of a resource referenced by a given URL. - //Load the values for the asset keys "tracks", "playable". - - // use __block to avoid maintaining strong references on variables captured by the - // following block callback - __block AVURLAsset *asset = [[AVURLAsset URLAssetWithURL:m_URL options:nil] retain]; - __block NSArray *requestedKeys = [[NSArray arrayWithObjects:AVF_TRACKS_KEY, AVF_PLAYABLE_KEY, nil] retain]; - - __block AVFMediaPlayerSessionObserver *blockSelf = self; - QPointer<AVFMediaPlayerSession> session(m_session); - - // Tells the asset to load the values of any of the specified keys that are not already loaded. - [asset loadValuesAsynchronouslyForKeys:requestedKeys completionHandler: - ^{ - dispatch_async( dispatch_get_main_queue(), - ^{ - if (session) - [blockSelf prepareToPlayAsset:asset withKeys:requestedKeys]; - [asset release]; - [requestedKeys release]; - }); - }]; - } +// if (m_URL != url) +// { +// [m_URL release]; +// m_URL = [url copy]; + +//qInfo() << "#################################"; + + NSLog(@"################################# %@", url); +// //Create an asset for inspection of a resource referenced by a given URL. +// //Load the values for the asset keys "tracks", "playable". + +// // use __block to avoid maintaining strong references on variables captured by the +// // following block callback +// __block AVURLAsset *asset = [[AVURLAsset URLAssetWithURL:m_URL options:nil] retain]; +// __block NSArray *requestedKeys = [[NSArray arrayWithObjects:AVF_TRACKS_KEY, AVF_PLAYABLE_KEY, nil] retain]; + +// __block AVFMediaPlayerSessionObserver *blockSelf = self; +// QPointer<AVFMediaPlayerSession> session(m_session); + +// // Tells the asset to load the values of any of the specified keys that are not already loaded. +// [asset loadValuesAsynchronouslyForKeys:requestedKeys completionHandler: +// ^{ +// dispatch_async( dispatch_get_main_queue(), +// ^{ +// if (session) +// [blockSelf prepareToPlayAsset:asset withKeys:requestedKeys]; +// [asset release]; +// [requestedKeys release]; +// }); +// }]; +// } } - (void) unloadMedia @@ -216,7 +219,10 @@ - (void) prepareToPlayAsset:(AVURLAsset *)asset } //Create a new instance of AVPlayerItem from the now successfully loaded AVAsset. - m_playerItem = [AVPlayerItem playerItemWithAsset:asset]; + //m_playerItem = [AVPlayerItem playerItemWithAsset:asset]; + + m_playerItem = [AVPlayerItem playerItemWithAsset:asset + automaticallyLoadedAssetKeys:requestedKeys]; //Observe the player item "status" key to determine when it is ready to play. [m_playerItem addObserver:self @@ -427,6 +433,7 @@ - (void) dealloc , m_seekable(false) { m_observer = [[AVFMediaPlayerSessionObserver alloc] initWithMediaPlayerSession:this]; +NSLog(@"#################################"); } AVFMediaPlayerSession::~AVFMediaPlayerSession() @@ -494,45 +501,46 @@ - (void) dealloc qDebug() << Q_FUNC_INFO << content.canonicalUrl(); #endif - [(AVFMediaPlayerSessionObserver*)m_observer unloadMedia]; +// [(AVFMediaPlayerSessionObserver*)m_observer unloadMedia]; m_resources = content; m_mediaStream = stream; - setAudioAvailable(false); - setVideoAvailable(false); - setSeekable(false); - m_requestedPosition = -1; - Q_EMIT positionChanged(position()); + NSLog(@"???????########## "); +// setAudioAvailable(false); +// setVideoAvailable(false); +// setSeekable(false); +// m_requestedPosition = -1; +// Q_EMIT positionChanged(position()); - const QMediaPlayer::MediaStatus oldMediaStatus = m_mediaStatus; - const QMediaPlayer::State oldState = m_state; +// const QMediaPlayer::MediaStatus oldMediaStatus = m_mediaStatus; +// const QMediaPlayer::State oldState = m_state; - if (content.isNull() || content.canonicalUrl().isEmpty()) { - m_mediaStatus = QMediaPlayer::NoMedia; - if (m_mediaStatus != oldMediaStatus) - Q_EMIT mediaStatusChanged(m_mediaStatus); +// if (content.isNull() || content.canonicalUrl().isEmpty()) { +// m_mediaStatus = QMediaPlayer::NoMedia; +// if (m_mediaStatus != oldMediaStatus) +// Q_EMIT mediaStatusChanged(m_mediaStatus); - m_state = QMediaPlayer::StoppedState; - if (m_state != oldState) - Q_EMIT stateChanged(m_state); +// m_state = QMediaPlayer::StoppedState; +// if (m_state != oldState) +// Q_EMIT stateChanged(m_state); - return; - } +// return; +// } - m_mediaStatus = QMediaPlayer::LoadingMedia; - if (m_mediaStatus != oldMediaStatus) - Q_EMIT mediaStatusChanged(m_mediaStatus); +// m_mediaStatus = QMediaPlayer::LoadingMedia; +// if (m_mediaStatus != oldMediaStatus) +// Q_EMIT mediaStatusChanged(m_mediaStatus); - //Load AVURLAsset - //initialize asset using content's URL - NSString *urlString = [NSString stringWithUTF8String:content.canonicalUrl().toEncoded().constData()]; - NSURL *url = [NSURL URLWithString:urlString]; - [(AVFMediaPlayerSessionObserver*)m_observer setURL:url]; +// //Load AVURLAsset +// //initialize asset using content's URL +// NSString *urlString = [NSString stringWithUTF8String:content.canonicalUrl().toEncoded().constData()]; +// NSURL *url = [NSURL URLWithString:urlString]; +// [(AVFMediaPlayerSessionObserver*)m_observer setURL:url]; - m_state = QMediaPlayer::StoppedState; - if (m_state != oldState) - Q_EMIT stateChanged(m_state); +// m_state = QMediaPlayer::StoppedState; +// if (m_state != oldState) +// Q_EMIT stateChanged(m_state); } qint64 AVFMediaPlayerSession::position() const @@ -700,61 +708,62 @@ - (void) dealloc void AVFMediaPlayerSession::play() { -#ifdef QT_DEBUG_AVF - qDebug() << Q_FUNC_INFO << "currently: " << m_state; -#endif - if (m_mediaStatus == QMediaPlayer::NoMedia || m_mediaStatus == QMediaPlayer::InvalidMedia) - return; + qDebug() << Q_FUNC_INFO << "##########currently: " << m_state; +NSLog(@"################################# "); - if (m_state == QMediaPlayer::PlayingState) - return; +// if (m_mediaStatus == QMediaPlayer::NoMedia || m_mediaStatus == QMediaPlayer::InvalidMedia) +// return; - if (m_videoOutput) { - m_videoOutput->setLayer([(AVFMediaPlayerSessionObserver*)m_observer playerLayer]); - } +// if (m_state == QMediaPlayer::PlayingState) +// return; - // Reset media status if the current status is EndOfMedia - if (m_mediaStatus == QMediaPlayer::EndOfMedia) - setPosition(0); +// if (m_videoOutput) { +// m_videoOutput->setLayer([(AVFMediaPlayerSessionObserver*)m_observer playerLayer]); +// } - if (m_mediaStatus == QMediaPlayer::LoadedMedia || m_mediaStatus == QMediaPlayer::BufferedMedia) { - // Setting the rate starts playback - [[(AVFMediaPlayerSessionObserver*)m_observer player] setRate:m_rate]; - } +// // Reset media status if the current status is EndOfMedia +// if (m_mediaStatus == QMediaPlayer::EndOfMedia) +// setPosition(0); - m_state = QMediaPlayer::PlayingState; - processLoadStateChange(); +// return; - if (m_videoOutput) { - m_videoOutput->setLayer([(AVFMediaPlayerSessionObserver*)m_observer playerLayer]); - } +// if (m_state == QMediaPlayer::PlayingState) +// return; - // Reset media status if the current status is EndOfMedia - if (m_mediaStatus == QMediaPlayer::EndOfMedia) - setPosition(0); +// if (m_videoOutput) { +// m_videoOutput->setLayer([(AVFMediaPlayerSessionObserver*)m_observer playerLayer]); +// } - if (m_mediaStatus == QMediaPlayer::LoadedMedia || m_mediaStatus == QMediaPlayer::BufferedMedia) { - // Setting the rate starts playback - [[(AVFMediaPlayerSessionObserver*)m_observer player] setRate:m_rate]; - } +// // Reset media status if the current status is EndOfMedia +// if (m_mediaStatus == QMediaPlayer::EndOfMedia) +// setPosition(0); - m_state = QMediaPlayer::PlayingState; - processLoadStateChange(); +// if (m_mediaStatus == QMediaPlayer::LoadedMedia || m_mediaStatus == QMediaPlayer::BufferedMedia) { +// // Setting the rate starts playback +// [[(AVFMediaPlayerSessionObserver*)m_observer player] setRate:m_rate]; +// } - Q_EMIT stateChanged(m_state); +// m_state = QMediaPlayer::PlayingState; +// processLoadStateChange(); + +// Q_EMIT stateChanged(m_state); }
Not really sure anymore what's wrong, by all means, this should make the changes apply on Qt 5.11.3
-
hi @Wiru
might be just me, that I fail to see it, but where exactly do you replace the old QtMulimedia folder with the newly created one? -
@J.Hilk Not really sure what you mean with replace, shouldn't the
make install
do that part? At least that's how it worked before, and at that time I only usedmake
.
Should I manually copy the folder? -
@Wiru
I'm not sure, does make install replace already existing files ?When I change stuff in the Qt Source code I usually compile the whole libary and simply create a new kit linking against it. Never replaced only a single modul.
In fact, the customer support recommended me to build the whole libary once, evenso we made only changes in the BlueTooth Module.
-
@J.Hilk
I do create a new kit when I build the whole qt source, but for just module it should replace it in the qt version you used qmake from (in this example it should replace qtmultimedia inside qt5.11.3) -
Weird as it may be, nothing worked. In the end I made a new Qml project and all changes are visible there, compiled
qtmultimedia
3 times and every time the change was there.
So I don't really understand why the previous project wouldn't use the modified version even after deleting its build folder. I even deleted~/Library/Developer/Xcode/DerivedData
in case there was some cache in it.