I've just tested whether i would be able to use the constructor;
QVideoFrame
( QAbstractVideoBuffer
* buffer,
const QSize & size, PixelFormat format
)
QVideoFrame ( QAbstractVideoBuffer * buffer, const QSize & size, PixelFormat format )
To copy to clipboard, switch view to plain text mode
As the constructor i wish to use, makes the `buffer` from the data I pass to it, this then gave me a similar linker error;
~myfile.cpp:146: undefined reference to `_imp___ZN11QVideoFrameC1EP20QAbstractVideoBufferRK5QSizeNS_13AVPixelFormatE'
collect2.exe: error: ld returned 1 exit status
~myfile.cpp:146: undefined reference to `_imp___ZN11QVideoFrameC1EP20QAbstractVideoBufferRK5QSizeNS_13AVPixelFormatE'
collect2.exe: error: ld returned 1 exit status
To copy to clipboard, switch view to plain text mode
This is really confusing me now, as the only other constructors (ignoring the copy constructor);
QVideoFrame
( const QImage & image
)QVideoFrame ( const QVideoFrame & other )
QVideoFrame ( const QImage & image )
QVideoFrame ( const QVideoFrame & other )
To copy to clipboard, switch view to plain text mode
Both compile/link without fault and are unsuitable for my usage, is it possible that parts of QVideoFrame have silently failed to compile?
Checking back through the QVideoFrame class from its inception in qt4.6-4.8 they all have the 4 constructors, so I still see no reason for 2 to be missing :s
Added after 12 minutes:

Originally Posted by
ChrisW67
People are quite good at stuffing about until something compiles, i.e. by using full paths in #include or settings INCLUDEPATH, and then failing at link because of a lack of understanding. They are also good as giving a description of the problem that is coloured by their assumptions. I like to look for the obvious before looking for the not obvious.
Your assessment of the QVideoFrame sources certainly imply that the constructor is both public and, by virtue of the class, exported. The message seems consistent with the symbol either not being present or not being exported. There does not seem to be a way for the implementation to have been pre-processed out.
Is there any chance the linker is picking up a very old Qt4 library? (It's a long shot).
If your MinGW tool chain has the "nm" command, does the output of:
nm -D \path\to\QtMultimedia4.dll
nm -D \path\to\QtMultimedia4.dll
To copy to clipboard, switch view to plain text mode
contain "_ZN11QVideoFrameC1EiRK5QSizeiNS_13AVPixelFormatE" ?
Edit: Just checked, and there are no symbols visible through nm in my off-the-shelf Qt 4.8.4
Edit2: I played with the params of nm and I found that;
nm -a -C auto QtMultimediad4.dll
nm -a -C auto QtMultimediad4.dll
To copy to clipboard, switch view to plain text mode
returns
64dc943e T QVideoFrame
::QVideoFrame(int,
QSize const
&,
int, QVideoFrame
::PixelFormat)64dc93e8 T QVideoFrame
::QVideoFrame(QAbstractVideoBuffer
*,
QSize const
&, QVideoFrame
::PixelFormat)64dc9534 T QVideoFrame
::QVideoFrame(QImage const
&)64dc9610 T QVideoFrame::QVideoFrame(QVideoFrame const&)
64dc93b4 T QVideoFrame::QVideoFrame()
64dc943e T QVideoFrame
::QVideoFrame(int,
QSize const
&,
int, QVideoFrame
::PixelFormat)64dc93e8 T QVideoFrame
::QVideoFrame(QAbstractVideoBuffer
*,
QSize const
&, QVideoFrame
::PixelFormat)64dc9534 T QVideoFrame
::QVideoFrame(QImage const
&)64dc9610 T QVideoFrame::QVideoFrame(QVideoFrame const&)
64dc93b4 T QVideoFrame::QVideoFrame()
64dc9654 T QVideoFrame::~QVideoFrame()
64dc9654 T QVideoFrame::~QVideoFrame()
64dc943e T QVideoFrame::QVideoFrame(int, QSize const&, int, QVideoFrame::PixelFormat)
64dc93e8 T QVideoFrame::QVideoFrame(QAbstractVideoBuffer*, QSize const&, QVideoFrame::PixelFormat)
64dc9534 T QVideoFrame::QVideoFrame(QImage const&)
64dc9610 T QVideoFrame::QVideoFrame(QVideoFrame const&)
64dc93b4 T QVideoFrame::QVideoFrame()
64dc943e T QVideoFrame::QVideoFrame(int, QSize const&, int, QVideoFrame::PixelFormat)
64dc93e8 T QVideoFrame::QVideoFrame(QAbstractVideoBuffer*, QSize const&, QVideoFrame::PixelFormat)
64dc9534 T QVideoFrame::QVideoFrame(QImage const&)
64dc9610 T QVideoFrame::QVideoFrame(QVideoFrame const&)
64dc93b4 T QVideoFrame::QVideoFrame()
64dc9654 T QVideoFrame::~QVideoFrame()
64dc9654 T QVideoFrame::~QVideoFrame()
To copy to clipboard, switch view to plain text mode
and without the name mangling fix parameter;
64dc943e T __ZN11QVideoFrameC1EiRK5QSizeiNS_11PixelFormatE
64dc93e8 T __ZN11QVideoFrameC1EP20QAbstractVideoBufferRK5QSizeNS_11PixelFormatE
64dc9534 T __ZN11QVideoFrameC1ERK6QImage
64dc9610 T __ZN11QVideoFrameC1ERKS_
64dc93b4 T __ZN11QVideoFrameC1Ev
64dc943e T __ZN11QVideoFrameC2EiRK5QSizeiNS_11PixelFormatE
64dc93e8 T __ZN11QVideoFrameC2EP20QAbstractVideoBufferRK5QSizeNS_11PixelFormatE
64dc9534 T __ZN11QVideoFrameC2ERK6QImage
64dc9610 T __ZN11QVideoFrameC2ERKS_
64dc93b4 T __ZN11QVideoFrameC2Ev
64dc9654 T __ZN11QVideoFrameD1Ev
64dc9654 T __ZN11QVideoFrameD2Ev
64dc943e T __ZN11QVideoFrameC1EiRK5QSizeiNS_11PixelFormatE
64dc93e8 T __ZN11QVideoFrameC1EP20QAbstractVideoBufferRK5QSizeNS_11PixelFormatE
64dc9534 T __ZN11QVideoFrameC1ERK6QImage
64dc9610 T __ZN11QVideoFrameC1ERKS_
64dc93b4 T __ZN11QVideoFrameC1Ev
64dc943e T __ZN11QVideoFrameC2EiRK5QSizeiNS_11PixelFormatE
64dc93e8 T __ZN11QVideoFrameC2EP20QAbstractVideoBufferRK5QSizeNS_11PixelFormatE
64dc9534 T __ZN11QVideoFrameC2ERK6QImage
64dc9610 T __ZN11QVideoFrameC2ERKS_
64dc93b4 T __ZN11QVideoFrameC2Ev
64dc9654 T __ZN11QVideoFrameD1Ev
64dc9654 T __ZN11QVideoFrameD2Ev
To copy to clipboard, switch view to plain text mode
This seems to show the debug symbols for them exist, despite the -D parameter returning nothing for any qt dll, albeit the name mangled versions being different (presumably due to them being debug symbols).
Bookmarks