Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-108830

libmediaplayer_armeabi-v7a.so: ASSERT failure in QList::operator[]: "index out of range"

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P1: Critical P1: Critical
    • 6.5.1
    • 6.4.1
    • Multimedia
    • None
    • armv7 android 7.1
    • Android

      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);
      

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            samuelmira Samuel Mira
            wmoon yi ersan
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes