summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/common/evr/evrd3dpresentengine.cpp44
-rw-r--r--src/plugins/common/evr/evrd3dpresentengine.h3
-rw-r--r--src/plugins/directshow/camera/dscameracontrol.cpp2
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderermetadata.cpp79
4 files changed, 78 insertions, 50 deletions
diff --git a/src/plugins/common/evr/evrd3dpresentengine.cpp b/src/plugins/common/evr/evrd3dpresentengine.cpp
index 12b907336..ab694b795 100644
--- a/src/plugins/common/evr/evrd3dpresentengine.cpp
+++ b/src/plugins/common/evr/evrd3dpresentengine.cpp
@@ -143,11 +143,11 @@ public:
return m_glTexture;
}
- bool createTexture(const QVideoSurfaceFormat &format, IDirect3DDevice9Ex *device,
+ void createTexture(const QVideoSurfaceFormat &format, IDirect3DDevice9Ex *device,
IDirect3DTexture9 **texture)
{
if (!m_glContext)
- return false;
+ return;
m_glContext->functions()->glGenTextures(1, &m_glTexture);
QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
@@ -185,8 +185,6 @@ public:
m_glContext->functions()->glBindTexture(GL_TEXTURE_2D, m_glTexture);
m_egl->bindTexImage(m_eglDisplay, m_eglSurface, EGL_BACK_BUFFER);
-
- return texture != NULL;
}
void release()
@@ -238,7 +236,6 @@ public:
, m_sample(sample)
, m_surface(0)
, m_mapMode(NotMapped)
- , m_textureUpdated(false)
{
if (m_sample) {
m_sample->AddRef();
@@ -276,7 +273,7 @@ private:
IMFSample *m_sample;
IDirect3DSurface9 *m_surface;
MapMode m_mapMode;
- mutable bool m_textureUpdated;
+ mutable unsigned int m_textureId = 0;
};
uchar *IMFSampleVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
@@ -314,19 +311,12 @@ void IMFSampleVideoBuffer::unmap()
QVariant IMFSampleVideoBuffer::handle() const
{
- QVariant handle;
-
#ifdef MAYBE_ANGLE
- if (handleType() != GLTextureHandle)
- return handle;
-
- if (m_textureUpdated || m_engine->updateTexture(m_surface)) {
- m_textureUpdated = true;
- handle = QVariant::fromValue<unsigned int>(m_engine->m_glResources->glTexture());
- }
+ if (handleType() == GLTextureHandle && !m_textureId)
+ m_textureId = m_engine->updateTexture(m_surface);
#endif
- return handle;
+ return m_textureId;
}
@@ -618,24 +608,20 @@ QVideoFrame D3DPresentEngine::makeVideoFrame(IMFSample *sample)
#ifdef MAYBE_ANGLE
-bool D3DPresentEngine::createRenderTexture()
+unsigned int D3DPresentEngine::updateTexture(IDirect3DSurface9 *src)
{
- if (m_glResources)
- m_glResources->release();
+ if (!m_texture) {
+ if (m_glResources)
+ m_glResources->release();
- m_glResources = new OpenGLResources;
- return m_glResources->createTexture(m_surfaceFormat, m_device, &m_texture);
-}
-
-bool D3DPresentEngine::updateTexture(IDirect3DSurface9 *src)
-{
- if (!m_texture && !createRenderTexture())
- return false;
+ m_glResources = new OpenGLResources;
+ m_glResources->createTexture(m_surfaceFormat, m_device, &m_texture);
+ }
IDirect3DSurface9 *dest = NULL;
// Copy the sample surface to the shared D3D/EGL surface
- HRESULT hr = m_texture->GetSurfaceLevel(0, &dest);
+ HRESULT hr = m_texture ? m_texture->GetSurfaceLevel(0, &dest) : E_FAIL;
if (FAILED(hr))
goto done;
@@ -657,7 +643,7 @@ bool D3DPresentEngine::updateTexture(IDirect3DSurface9 *src)
done:
qt_evr_safe_release(&dest);
- return SUCCEEDED(hr);
+ return (SUCCEEDED(hr) && m_glResources) ? m_glResources->glTexture() : 0;
}
#endif // MAYBE_ANGLE
diff --git a/src/plugins/common/evr/evrd3dpresentengine.h b/src/plugins/common/evr/evrd3dpresentengine.h
index df2c9b506..8e2a444f3 100644
--- a/src/plugins/common/evr/evrd3dpresentengine.h
+++ b/src/plugins/common/evr/evrd3dpresentengine.h
@@ -143,8 +143,7 @@ private:
bool m_useTextureRendering;
#ifdef MAYBE_ANGLE
- bool createRenderTexture();
- bool updateTexture(IDirect3DSurface9 *src);
+ unsigned int updateTexture(IDirect3DSurface9 *src);
OpenGLResources *m_glResources;
IDirect3DTexture9 *m_texture;
diff --git a/src/plugins/directshow/camera/dscameracontrol.cpp b/src/plugins/directshow/camera/dscameracontrol.cpp
index 8dc0d4136..67971d1b5 100644
--- a/src/plugins/directshow/camera/dscameracontrol.cpp
+++ b/src/plugins/directshow/camera/dscameracontrol.cpp
@@ -51,7 +51,7 @@ DSCameraControl::DSCameraControl(QObject *parent)
, m_captureMode(QCamera::CaptureStillImage)
{
m_session = qobject_cast<DSCameraSession*>(parent);
- connect(m_session, &DSCameraSession::statusChanged,
+ connect(m_session, &DSCameraSession::statusChanged, this,
[&](QCamera::Status status) {
if (status == QCamera::UnloadedStatus)
m_state = QCamera::UnloadedState;
diff --git a/src/plugins/qnx/mediaplayer/mmrenderermetadata.cpp b/src/plugins/qnx/mediaplayer/mmrenderermetadata.cpp
index 50b45382c..a8b92c267 100644
--- a/src/plugins/qnx/mediaplayer/mmrenderermetadata.cpp
+++ b/src/plugins/qnx/mediaplayer/mmrenderermetadata.cpp
@@ -42,6 +42,8 @@
#include <QtCore/qfile.h>
#include <QtCore/qstringlist.h>
+#include <mm/renderer/events.h>
+#include <sys/neutrino.h>
#include <sys/strm.h>
static const char *strm_string_getx(const strm_string_t *sstr, const char *defaultValue)
@@ -49,6 +51,13 @@ static const char *strm_string_getx(const strm_string_t *sstr, const char *defau
return sstr ? strm_string_get(sstr) : defaultValue;
}
+#if _NTO_VERSION < 700
+static strm_dict_t *mmr_metadata_split(strm_dict_t const *, const char *, unsigned)
+{
+ return nullptr;
+}
+#endif
+
QT_BEGIN_NAMESPACE
MmRendererMetaData::MmRendererMetaData()
@@ -72,6 +81,12 @@ static const char * mediaTypeKey = "md_title_mediatype";
static const char * pixelWidthKey = "md_video_pixel_width";
static const char * pixelHeightKey = "md_video_pixel_height";
static const char * seekableKey = "md_title_seekable";
+static const char * trackSampleKey = "sample_rate";
+static const char * trackBitRateKey = "bitrate";
+static const char * trackWidthKey = "width";
+static const char * trackHeightKey = "height";
+static const char * trackPixelWidthKey = "pixel_width";
+static const char * trackPixelHeightKey = "pixel_height";
static const int mediaTypeAudioFlag = 4;
static const int mediaTypeVideoFlag = 2;
@@ -88,21 +103,9 @@ bool MmRendererMetaData::update(const strm_dict_t *dict)
value = strm_dict_find_rstr(dict, durationKey);
m_duration = QByteArray(strm_string_getx(value, "0")).toLongLong();
- value = strm_dict_find_rstr(dict, widthKey);
- m_width = QByteArray(strm_string_getx(value, "0")).toInt();
-
- value = strm_dict_find_rstr(dict, heightKey);
- m_height = QByteArray(strm_string_getx(value, "0")).toInt();
-
value = strm_dict_find_rstr(dict, mediaTypeKey);
m_mediaType = QByteArray(strm_string_getx(value, "-1")).toInt();
- value = strm_dict_find_rstr(dict, pixelWidthKey);
- m_pixelWidth = QByteArray(strm_string_getx(value, "1")).toFloat();
-
- value = strm_dict_find_rstr(dict, pixelHeightKey);
- m_pixelHeight = QByteArray(strm_string_getx(value, "1")).toFloat();
-
value = strm_dict_find_rstr(dict, titleKey);
m_title = QString::fromLatin1(QByteArray(strm_string_getx(value, nullptr)));
@@ -121,18 +124,58 @@ bool MmRendererMetaData::update(const strm_dict_t *dict)
value = strm_dict_find_rstr(dict, yearKey);
m_year = QByteArray(strm_string_getx(value, "0")).toInt();
- value = strm_dict_find_rstr(dict, bitRateKey);
- m_audioBitRate = QByteArray(strm_string_getx(value, "0")).toInt();
-
- value = strm_dict_find_rstr(dict, sampleKey);
- m_sampleRate = QByteArray(strm_string_getx(value, "0")).toInt();
-
value = strm_dict_find_rstr(dict, albumKey);
m_album = QString::fromLatin1(QByteArray(strm_string_getx(value, nullptr)));
value = strm_dict_find_rstr(dict, trackKey);
m_track = QByteArray(strm_string_getx(value, "0")).toInt();
+ strm_dict_t *at = mmr_metadata_split(dict, "audio", 0);
+ if (at) {
+ value = strm_dict_find_rstr(at, trackSampleKey);
+ m_sampleRate = QByteArray(strm_string_getx(value, "0")).toInt();
+
+ value = strm_dict_find_rstr(at, trackBitRateKey);
+ m_audioBitRate = QByteArray(strm_string_getx(value, "0")).toInt();
+
+ strm_dict_destroy(at);
+ } else {
+ value = strm_dict_find_rstr(dict, sampleKey);
+ m_sampleRate = QByteArray(strm_string_getx(value, "0")).toInt();
+
+ value = strm_dict_find_rstr(dict, bitRateKey);
+ m_audioBitRate = QByteArray(strm_string_getx(value, "0")).toInt();
+ }
+
+ strm_dict_t *vt = mmr_metadata_split(dict, "video", 0);
+ if (vt) {
+ value = strm_dict_find_rstr(vt, trackWidthKey);
+ m_width = QByteArray(strm_string_getx(value, "0")).toInt();
+
+ value = strm_dict_find_rstr(vt, trackHeightKey);
+ m_height = QByteArray(strm_string_getx(value, "0")).toInt();
+
+ value = strm_dict_find_rstr(vt, trackPixelWidthKey);
+ m_pixelWidth = QByteArray(strm_string_getx(value, "1")).toFloat();
+
+ value = strm_dict_find_rstr(vt, trackPixelHeightKey);
+ m_pixelHeight = QByteArray(strm_string_getx(value, "1")).toFloat();
+
+ strm_dict_destroy(vt);
+ } else {
+ value = strm_dict_find_rstr(dict, widthKey);
+ m_width = QByteArray(strm_string_getx(value, "0")).toInt();
+
+ value = strm_dict_find_rstr(dict, heightKey);
+ m_height = QByteArray(strm_string_getx(value, "0")).toInt();
+
+ value = strm_dict_find_rstr(dict, pixelWidthKey);
+ m_pixelWidth = QByteArray(strm_string_getx(value, "1")).toFloat();
+
+ value = strm_dict_find_rstr(dict, pixelHeightKey);
+ m_pixelHeight = QByteArray(strm_string_getx(value, "1")).toFloat();
+ }
+
return true;
}