summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/directshow/common')
-rw-r--r--src/plugins/directshow/common/directshowsamplegrabber.cpp8
-rw-r--r--src/plugins/directshow/common/directshowsamplegrabber.h2
2 files changed, 6 insertions, 4 deletions
diff --git a/src/plugins/directshow/common/directshowsamplegrabber.cpp b/src/plugins/directshow/common/directshowsamplegrabber.cpp
index b33c3cfc6..fb95370ca 100644
--- a/src/plugins/directshow/common/directshowsamplegrabber.cpp
+++ b/src/plugins/directshow/common/directshowsamplegrabber.cpp
@@ -99,9 +99,11 @@ public:
STDMETHODIMP BufferCB(double time, BYTE *buffer, long bufferLen)
{
- if (m_grabber)
- Q_EMIT m_grabber->bufferAvailable(time, buffer, bufferLen);
-
+ if (m_grabber) {
+ // Deep copy, the data might be modified or freed after the callback returns
+ QByteArray data(reinterpret_cast<const char *>(buffer), bufferLen);
+ Q_EMIT m_grabber->bufferAvailable(time, data);
+ }
return S_OK;
}
diff --git a/src/plugins/directshow/common/directshowsamplegrabber.h b/src/plugins/directshow/common/directshowsamplegrabber.h
index edabae2db..a9b72fcd1 100644
--- a/src/plugins/directshow/common/directshowsamplegrabber.h
+++ b/src/plugins/directshow/common/directshowsamplegrabber.h
@@ -75,7 +75,7 @@ public:
Q_SIGNALS:
void sampleAvailable(double time, IMediaSample *sample);
- void bufferAvailable(double time, quint8 *buffer, long len);
+ void bufferAvailable(double time, const QByteArray &data);
private:
IBaseFilter *m_filter;