-
Bug
-
Resolution: Fixed
-
P1: Critical
-
6.4.1
-
None
-
armv7 android 7.1
The multimedia back-end ffmpeg plug-in is reporting an error on android 。
I art : Late-enabling -Xcheck:jni E art : setrlimit(RLIMIT_CORE) failed for pid 6778: Operation not permitted W System : ClassLoader referenced unknown path: D Qt JAVA : Class org.qtproject.qt.android.multimedia.QtAudioDeviceManager does not implement setActivity method I QtCore : Start I Qt : qt started I mali_so : [File] : hardware/rockchip/mali_so/driver/product/base/src/mali_base_kbase.c; [Line] : 876; [Func] : base_context_deal_with_version_affairs_rk_ext; I mali_so : arm_release_ver of this mali_so is 'r18p0-01rel0', rk_so_ver is '6@0'. D mali_so : [File] : hardware/rockchip/mali_so/driver/product/base/src/mali_base_kbase.c; [Line] : 881; [Func] : base_context_deal_with_version_affairs_rk_ext; D mali_so : current process is NOT sf, to bail out. I OpenGLRenderer: Initialized EGL, version 1.4 D OpenGLRenderer: Swap behavior 1 D mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000 D qt.core.plugin.factoryloader: : checking directory path "/data/app/org.qtproject.example.mediaplayer-2/lib/arm" ... D qt.core.plugin.factoryloader: : looking at "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libplugins_platforms_qtforandroid_armeabi-v7a.so" D qt.core.plugin.loader: : Found metadata in lib /data/app/org.qtproject.example.mediaplayer-2/lib/arm/libplugins_platforms_qtforandroid_armeabi-v7a.so, metadata= D qt.core.plugin.loader: { D qt.core.plugin.loader: "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3", D qt.core.plugin.loader: "MetaData": { D qt.core.plugin.loader: "Keys": [ D qt.core.plugin.loader: "android" D qt.core.plugin.loader: ] D qt.core.plugin.loader: }, D qt.core.plugin.loader: "archlevel": 0, D qt.core.plugin.loader: "className": "QAndroidIntegrationPlugin", D qt.core.plugin.loader: "debug": false, D qt.core.plugin.loader: "version": 394240 D qt.core.plugin.loader: } 11-24 20:16:18.711 6778 6794 D qt.core.plugin.loader: 11-24 20:16:18.711 6778 6794 D qt.core.plugin.loader: D qt.core.plugin.factoryloader: : Got keys from plugin meta data QList("android") D qt.core.library: : "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libplugins_platforms_qtforandroid_armeabi-v7a.so" loaded library D qt.core.plugin.factoryloader: : checking directory path "/data/app/org.qtproject.example.mediaplayer-2/lib/arm" ... D qt.core.plugin.loader: : Found metadata in lib /data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtMultimedia_quickmultimediaplugin_armeabi-v7a.so, metadata= D qt.core.plugin.loader: { D qt.core.plugin.loader: "IID": "org.qt-project.Qt.QQmlEngineExtensionInterface", D qt.core.plugin.loader: "archlevel": 0, D qt.core.plugin.loader: "className": "QMultimediaQuickModule", D qt.core.plugin.loader: "debug": false, D qt.core.plugin.loader: "uri": [ D qt.core.plugin.loader: "QtMultimedia" D qt.core.plugin.loader: ], D qt.core.plugin.loader: "version": 394240 D qt.core.plugin.loader: } 11-24 20:16:18.832 6778 6812 D qt.core.plugin.loader: 11-24 20:16:18.832 6778 6812 D qt.core.plugin.loader: D qt.core.library: : "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtMultimedia_quickmultimediaplugin_armeabi-v7a.so" loaded library D qt.core.plugin.loader: : Found metadata in lib /data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtQuick_Controls_qtquickcontrols2plugin_armeabi-v7a.so, metadata= D qt.core.plugin.loader: { D qt.core.plugin.loader: "IID": "org.qt-project.Qt.QQmlExtensionInterface/1.0", D qt.core.plugin.loader: "archlevel": 0, D qt.core.plugin.loader: "className": "QtQuickControls2Plugin", D qt.core.plugin.loader: "debug": false, D qt.core.plugin.loader: "uri": [ D qt.core.plugin.loader: "QtQuick.Controls" D qt.core.plugin.loader: ], D qt.core.plugin.loader: "version": 394240 D qt.core.plugin.loader: } 11-24 20:16:18.835 6778 6812 D qt.core.plugin.loader: 11-24 20:16:18.835 6778 6812 D qt.core.plugin.loader: D qt.core.library: : "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtQuick_Controls_qtquickcontrols2plugin_armeabi-v7a.so" loaded library D qt.core.plugin.loader: : Found metadata in lib /data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtQuick_Controls_Material_qtquickcontrols2materialstyleplugin_armeabi-v7a.so, metadata= D qt.core.plugin.loader: { D qt.core.plugin.loader: "IID": "org.qt-project.Qt.QQmlExtensionInterface/1.0", D qt.core.plugin.loader: "archlevel": 0, D qt.core.plugin.loader: "className": "QtQuickControls2MaterialStylePlugin", D qt.core.plugin.loader: "debug": false, D qt.core.plugin.loader: "uri": [ D qt.core.plugin.loader: "QtQuick.Controls.Material" D qt.core.plugin.loader: ], D qt.core.plugin.loader: "version": 394240 D qt.core.plugin.loader: } 11-24 20:16:18.837 6778 6812 D qt.core.plugin.loader: 11-24 20:16:18.837 6778 6812 D qt.core.plugin.loader: D qt.core.library: : "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtQuick_Controls_Material_qtquickcontrols2materialstyleplugin_armeabi-v7a.so" loaded library D qt.core.plugin.loader: : Found metadata in lib /data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtQuick_Controls_Basic_qtquickcontrols2basicstyleplugin_armeabi-v7a.so, metadata= D qt.core.plugin.loader: { D qt.core.plugin.loader: "IID": "org.qt-project.Qt.QQmlExtensionInterface/1.0", D qt.core.plugin.loader: "archlevel": 0, D qt.core.plugin.loader: "className": "QtQuickControls2BasicStylePlugin", D qt.core.plugin.loader: "debug": false, D qt.core.plugin.loader: "uri": [ D qt.core.plugin.loader: "QtQuick.Controls.Basic" D qt.core.plugin.loader: ], D qt.core.plugin.loader: "version": 394240 D qt.core.plugin.loader: } 11-24 20:16:18.868 6778 6812 D qt.core.plugin.loader: 11-24 20:16:18.868 6778 6812 D qt.core.plugin.loader: D qt.core.library: : "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtQuick_Controls_Basic_qtquickcontrols2basicstyleplugin_armeabi-v7a.so" loaded library D qt.core.plugin.loader: : Found metadata in lib /data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtQuick_Templates_qtquicktemplates2plugin_armeabi-v7a.so, metadata= D qt.core.plugin.loader: { D qt.core.plugin.loader: "IID": "org.qt-project.Qt.QQmlExtensionInterface/1.0", D qt.core.plugin.loader: "archlevel": 0, D qt.core.plugin.loader: "className": "QtQuickTemplates2Plugin", D qt.core.plugin.loader: "debug": false, D qt.core.plugin.loader: "uri": [ D qt.core.plugin.loader: "QtQuick.Templates" D qt.core.plugin.loader: ], D qt.core.plugin.loader: "version": 394240 D qt.core.plugin.loader: } 11-24 20:16:18.877 6778 6812 D qt.core.plugin.loader: 11-24 20:16:18.877 6778 6812 D qt.core.plugin.loader: D qt.core.library: : "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtQuick_Templates_qtquicktemplates2plugin_armeabi-v7a.so" loaded library D qt.core.plugin.loader: : Found metadata in lib /data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtQuick_Controls_Material_impl_qtquickcontrols2materialstyleimplplugin_armeabi-v7a.so, metadata= D qt.core.plugin.loader: { D qt.core.plugin.loader: "IID": "org.qt-project.Qt.QQmlEngineExtensionInterface", D qt.core.plugin.loader: "archlevel": 0, D qt.core.plugin.loader: "className": "QtQuickControls2MaterialStyleImplPlugin", D qt.core.plugin.loader: "debug": false, D qt.core.plugin.loader: "uri": [ D qt.core.plugin.loader: "QtQuick.Controls.Material.impl" D qt.core.plugin.loader: ], D qt.core.plugin.loader: "version": 394240 D qt.core.plugin.loader: } 11-24 20:16:18.893 6778 6812 D qt.core.plugin.loader: 11-24 20:16:18.893 6778 6812 D qt.core.plugin.loader: D qt.core.library: : "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libqml_QtQuick_Controls_Material_impl_qtquickcontrols2materialstyleimplplugin_armeabi-v7a.so" loaded library D qt.core.plugin.factoryloader: : checking directory path "/data/app/org.qtproject.example.mediaplayer-2/lib/arm" ... D qt.core.plugin.factoryloader: : looking at "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libplugins_multimedia_ffmpegmediaplugin_armeabi-v7a.so" D qt.core.plugin.loader: : Found metadata in lib /data/app/org.qtproject.example.mediaplayer-2/lib/arm/libplugins_multimedia_ffmpegmediaplugin_armeabi-v7a.so, metadata= D qt.core.plugin.loader: { D qt.core.plugin.loader: "IID": "org.qt-project.Qt.QPlatformMediaPlugin", D qt.core.plugin.loader: "MetaData": { D qt.core.plugin.loader: "Keys": [ D qt.core.plugin.loader: "ffmpeg" D qt.core.plugin.loader: ] D qt.core.plugin.loader: }, D qt.core.plugin.loader: "archlevel": 0, D qt.core.plugin.loader: "className": "QFFmpegMediaPlugin", D qt.core.plugin.loader: "debug": true, D qt.core.plugin.loader: "version": 394240 D qt.core.plugin.loader: } 11-24 20:16:18.907 6778 6794 D qt.core.plugin.loader: 11-24 20:16:18.907 6778 6794 D qt.core.plugin.loader: D qt.core.plugin.factoryloader: : Got keys from plugin meta data QList("ffmpeg") D qt.core.plugin.factoryloader: : looking at "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libplugins_multimedia_androidmediaplugin_armeabi-v7a.so" D qt.core.plugin.loader: : Found metadata in lib /data/app/org.qtproject.example.mediaplayer-2/lib/arm/libplugins_multimedia_androidmediaplugin_armeabi-v7a.so, metadata= D qt.core.plugin.loader: { D qt.core.plugin.loader: "IID": "org.qt-project.Qt.QPlatformMediaPlugin", D qt.core.plugin.loader: "MetaData": { D qt.core.plugin.loader: "Keys": [ D qt.core.plugin.loader: "android" D qt.core.plugin.loader: ] D qt.core.plugin.loader: }, D qt.core.plugin.loader: "archlevel": 0, D qt.core.plugin.loader: "className": "QAndroidMediaPlugin", D qt.core.plugin.loader: "debug": false, D qt.core.plugin.loader: "version": 394240 D qt.core.plugin.loader: } 11-24 20:16:18.908 6778 6794 D qt.core.plugin.loader: 11-24 20:16:18.908 6778 6794 D qt.core.plugin.loader: D qt.core.plugin.factoryloader: : Got keys from plugin meta data QList("android") D qt.core.library: : "/data/app/org.qtproject.example.mediaplayer-2/lib/arm/libplugins_multimedia_ffmpegmediaplugin_armeabi-v7a.so" loaded library D libmediaplayer_armeabi-v7a.so: >>>> listing codecs D libmediaplayer_armeabi-v7a.so: 1111 F libmediaplayer_armeabi-v7a.so: ASSERT failure in QList::operator[]: "index out of range", file D:\Qt\6.4.1\android_armv7\include\QtCore/qlist.h, line 428 F libc : Fatal signal 6 (SIGABRT), code -6 in tid 6794 (qtMainLoopThrea) 20:16:20: "org.qtproject.example.mediaplayer" died.
I added debug print and found the problem。
// D:\Git\qtmultimedia\src\plugins\multimedia\ffmpeg\qffmpegmediaformatinfo.cpp QFFmpegMediaFormatInfo::QFFmpegMediaFormatInfo() { qDebug() << ">>>> listing codecs"; QList<QMediaFormat::AudioCodec> audioEncoders; QList<QMediaFormat::AudioCodec> extraAudioDecoders; QList<QMediaFormat::VideoCodec> videoEncoders; QList<QMediaFormat::VideoCodec> extraVideoDecoders; const AVCodecDescriptor *descriptor = nullptr; while ((descriptor = avcodec_descriptor_next(descriptor))) { bool canEncode = (avcodec_find_encoder(descriptor->id) != nullptr); bool canDecode = (avcodec_find_decoder(descriptor->id) != nullptr); auto videoCodec = videoCodecForAVCodecId(descriptor->id); auto audioCodec = audioCodecForAVCodecId(descriptor->id); if (descriptor->type == AVMEDIA_TYPE_VIDEO && videoCodec != QMediaFormat::VideoCodec::Unspecified) { if (canEncode) { if (!videoEncoders.contains(videoCodec)) videoEncoders.append(videoCodec); } else if (canDecode) { if (!extraVideoDecoders.contains(videoCodec)) extraVideoDecoders.append(videoCodec); } } else if (descriptor->type == AVMEDIA_TYPE_AUDIO && audioCodec != QMediaFormat::AudioCodec::Unspecified) { if (canEncode) { if (!audioEncoders.contains(audioCodec)) audioEncoders.append(audioCodec); } else if (canDecode) { if (!extraAudioDecoders.contains(audioCodec)) extraAudioDecoders.append(audioCodec); } } } // get demuxers // qDebug() << ">>>> Muxers"; void *opaque = nullptr; const AVOutputFormat *outputFormat = nullptr; while ((outputFormat = av_muxer_iterate(&opaque))) { auto mediaFormat = formatForAVFormat(outputFormat); if (mediaFormat == QMediaFormat::UnspecifiedFormat) continue; // qDebug() << " mux:" << outputFormat->name << outputFormat->long_name << outputFormat->mime_type << outputFormat->extensions << mediaFormat; CodecMap encoder; encoder.format = mediaFormat; for (auto codec : audioEncoders) { auto id = codecId(codec); // only add the codec if it can be used with this container if (avformat_query_codec(outputFormat, id, FF_COMPLIANCE_NORMAL) == 1) { // add codec for container // qDebug() << " " << codec << Qt::hex << av_codec_get_tag(outputFormat->codec_tag, id); encoder.audio.append(codec); } } for (auto codec : videoEncoders) { auto id = codecId(codec); // only add the codec if it can be used with this container if (avformat_query_codec(outputFormat, id, FF_COMPLIANCE_NORMAL) == 1) { // add codec for container // qDebug() << " " << codec << Qt::hex << av_codec_get_tag(outputFormat->codec_tag, id); encoder.video.append(codec); } } // sanity checks and handling special cases if (encoder.audio.isEmpty() && encoder.video.isEmpty()) continue; switch (encoder.format) { case QMediaFormat::WMV: // add WMA encoders.append({ QMediaFormat::WMA, encoder.audio, {} }); break; case QMediaFormat::MPEG4: // add Mpeg4Audio and QuickTime encoders.append({ QMediaFormat::QuickTime, encoder.audio, encoder.video }); encoders.append({ QMediaFormat::Mpeg4Audio, encoder.audio, {} }); break; case QMediaFormat::Wave: // FFmpeg allows other encoded formats in WAV containers, but we do not want that if (!encoder.audio.contains(QMediaFormat::AudioCodec::Wave)) continue; encoder.audio = { QMediaFormat::AudioCodec::Wave }; break; default: break; } encoders.append(encoder); } // FFmpeg doesn't allow querying supported codecs for decoders // we take a simple approximation stating that we can decode what we // can encode. That's a safe subset. decoders = encoders;// qDebug() << "extraDecoders:" << extraAudioDecoders << extraVideoDecoders; // FFmpeg can currently only decode WMA and WMV, not encode if (extraAudioDecoders.contains(QMediaFormat::AudioCodec::WMA)) { qDebug() << "1111"; decoders[QMediaFormat::WMA].audio.append(QMediaFormat::AudioCodec::WMA); qDebug() << "2222"; decoders[QMediaFormat::WMV].audio.append(QMediaFormat::AudioCodec::WMA); } if (extraVideoDecoders.contains(QMediaFormat::VideoCodec::WMV)) { decoders[QMediaFormat::WMV].video.append(QMediaFormat::VideoCodec::WMV); } // Add image formats we support. We currently simply use Qt's built-in image write // to save images. That doesn't give us HDR support or support for larger bit depths, // but most cameras can currently not generate those anyway. const auto imgFormats = QImageWriter::supportedImageFormats(); for (const auto &f : imgFormats) { if (f == "png") imageFormats.append(QImageCapture::PNG); else if (f == "jpeg") imageFormats.append(QImageCapture::JPEG); else if (f == "tiff") imageFormats.append(QImageCapture::Tiff); else if (f == "webp") imageFormats.append(QImageCapture::WebP); }}
This place is incorrectly reported
decoders[QMediaFormat::WMA].audio.append(QMediaFormat::AudioCodec::WMA);