QCamera + QCameraViewfinder: how to mirror the the image displayed in the viewfinder?
-
Sorry, but I can't find anything related to video surface format in the
QCameraViewFinder
class. What'svideoSurfaceProperty
in your answer?
I can getQCameraViewFinderSettings
fromQCamera
, but that doesn't appear to be what you're referring to. I've looked at theQCameraViewFinderSettings
source file and there's no mention of the "mirrored" property. -
No, it's the QVideoRendererControl that you must first retrieve first.
The mirrored property I stumbled upon while checking something unrelated in QtMultimedia's sources.
-
No, it's the QVideoRendererControl that you must first retrieve first.
The mirrored property I stumbled upon while checking something unrelated in QtMultimedia's sources.
-
No, it's the QVideoRendererControl that you must first retrieve first.
The mirrored property I stumbled upon while checking something unrelated in QtMultimedia's sources.
@SGaist, thanks. I, too, can't find a way to get it from
QViewFinder
(which is aQVideoWidget
). Looks like I needQMediaService
to getQVideoRenderControl
from it. -
QMediaService *mediaService = viewFinder->mediaObject()->service(); QVideoRendererControl *rendererControl = mediaService->requestControl<QVideoRendererControl *>(); rendererControl->setSurface(myVideoSurface);
Don't forget to add the necessary checks.
-
QMediaService *mediaService = viewFinder->mediaObject()->service(); QVideoRendererControl *rendererControl = mediaService->requestControl<QVideoRendererControl *>(); rendererControl->setSurface(myVideoSurface);
Don't forget to add the necessary checks.
@SGaist
No such luck :(viewFinder->mediaObject()
isnullptr
.
IS there a restriction on when I should callmediaObject()
relative to, say,show()
or any other lifecycle-related method of the view finder? -
Did you set the viewFinder on the camera before calling mediaObject ?
-
@SGaist
Nope, i was doing it just before that. So, now I put this code right aftersetViewfinder
, andmediaService
is not null, butmediaService->requestControl<QVideoRendererControl *>()
returnsnullptr
. -
What OS are you running ? It might be that the backend doesn't provide that control.
-
Windows 10.
-
I need the live view image from the camera being displayed in the
QCameraViewfinder
to be mirrored (flipped horizontally). What are my options for doing this?how to mirror the the image displayed in the viewfinder?
+1
Actually
+1000This is a very good question!
I also want to mirror the image (flip it left to right)!PS:
I'm using Debian Testing, which requires these packages, to get QCamera working: qt5-default, libqt5multimedia5, libqt5multimedia5-plugins, libqt5multimediaquick-p5, libqt5multimediawidgets5, qml-module-qtmultimedia, qtmultimedia5-dbg, qtmultimedia5-dev -
Just a quick update:
QVideoRendererControl *rendererControl = camera.service()->requestControl<QVideoRendererControl *>(); if (rendererControl) { QAbstractVideoSurface *surface = rendererControl->surface(); QVideoSurfaceFormat format = surface->surfaceFormat(); format.setProperty("mirrored", true); surface->stop(); surface->start(format); } else { qDebug() << "Backend doesn't provide a video renderer control"; }
-
Thanks, but still no.
rendererControl
is null, and I tried executing your snippet both before and aftercamera.start()
call. -
Can you check what plugin is loaded ? It should be either the WMF or DirectX plugin. IIRC the DX plugin has the control.
-
I can't see either. Here's the complete list of all the .dlls loaded.
I can, however, see an odd warning. I don't have a slightest idea if it's related, but probably not:D3D11CreateDevice: Flags (0x2) were specified which require the D3D11 SDK Layers for Windows 10, but they are not present on the system.
These flags must be removed, or the Windows 10 SDK must be installed.
Flags include: D3D11_CREATE_DEVICE_DEBUG -
Sorry, I meant start your application with QT_DEBUG_PLUGINS set to 1.
-
Is it an environment variable or a project define?
-
Environment variable that you can set in the Run part of the Project panel.
-
Here's the list. Can't see anything named WMF, but I guess I need to know the exact name to look for.
-
Thanks, but still no.
rendererControl
is null, and I tried executing your snippet both before and aftercamera.start()
call.@Violet-Giraffe said:
Thanks, but still no.
rendererControl
is nullSame for Debian (and it's variants [Ubuntu, etc.])