[Interest] QML Camera: resulting image is rotated
ekke
ekke at ekkes-corner.org
Mon Dec 10 10:08:01 CET 2018
I'm already using a reference to Camera QML component to get some
properties (WhiteBalance, Exposure, ...)
but have not used yet QCamera to get the Orientation from
thanks for the tip - will try later if this is working on all devices,
FronFace, BackFace, Portrait, Landscape
ekke
Am 10.12.18 um 09:51 schrieb René Hansen:
> Forgot to add, that m_filter->camera() in the snippet above, is just a
> reference to a Camera QML component.
>
> On Mon, 10 Dec 2018 at 09:48 René Hansen <renehh at gmail.com
> <mailto:renehh at gmail.com>> wrote:
>
> You can get the Camera orientation like so:
>
> QCamera *cam = qvariant_cast<QCamera
> *>(m_filter->camera()->property("mediaObject"));
> QCameraInfo(*cam).orientation()
>
> Then in case orientation is not % 180, you can rotate the image.
>
>
> /René
>
>
> On Mon, 10 Dec 2018 at 09:42 ekke <ekke at ekkes-corner.org
> <mailto:ekke at ekkes-corner.org>> wrote:
>
> Am 10.12.18 um 02:08 schrieb Alexander Ivash:
>> Thanks!
>>
>> But frankly speaking this is not the answer I hoped to get :).
> ;-)
>
>> Have you tried to extract rotation from exif / metadata? This
>> is what I'm going to do if don't find better way.
> have not tried this. please let me know if you'll find a way
>
>> In my case VideoOutput always shows preview in correct
>> orientation,
>
> have you tested on iOS and FrontFace Camera ? in my use-cases
> I needed rotation of 180 for preview (VideoOutput)
>
>> so looks like Qt /knows/ how to rotate preview frames
>> properly (why doesn't it use this knowledge to rotate saved
>> image or why doesn't it expose it - this is another
>> question). But if Qt knows - there should be some source of
>> information where it gets such a knowledge.
>
> haven't found any info about
>
> ciao
>
> ekke
>
>>
>> Regards, Alexander
>>
>> On Dec 9 2018, at 8:17 pm, ekke <ekke at ekkes-corner.org>
>> <mailto:ekke at ekkes-corner.org> wrote:
>>
>>
>> Am 09.12.18 um 16:57 schrieb Alexander Ivash:
>>
>>
>> Is it possible to understand the angle to un-rotate?
>> I've tried to un-rotate based on orientation from
>> VideoOtput but it doesn't work uniformly on all the
>> devices.
>>
>> Regards, Alexander
>> Open Tracking
>>
>> |
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at lists.qt-project.org <https://link.getmailspring.com/link/1544403647.local-a741a368-81fb-v1.5.3-420ce003@getmailspring.com/0?redirect=mailto%3AInterest%40lists.qt-project.org&recipient=ZWtrZUBla2tlcy1jb3JuZXIub3Jn>https://lists.qt-project.org/listinfo/interest <https://link.getmailspring.com/link/1544403647.local-a741a368-81fb-v1.5.3-420ce003@getmailspring.com/1?redirect=https%3A%2F%2Flists.qt-project.org%2Flistinfo%2Finterest&recipient=ZWtrZUBla2tlcy1jb3JuZXIub3Jn>
>>
>> |
>>
>> Alexander,
>>
>> from my experiences it's not so easy.
>>
>> it depends from device and how the camera module is
>> physically mounted
>>
>> so I'm doing it for my customers hardcoded while waiting
>> that QML will handle this
>>
>> here's some code from customer app
>>
>> it's on my TODO to extract the code and create example
>> app and blog and create all the specific issues - but
>> expect 2019
>>
>> To get some ideas:
>>
>> // V I D E O O U T P U T
>> VideoOutput {
>> source: camera
>> anchors.fill: parent
>> focus : visible
>> autoOrientation: true
>> rotation: isIos && isFrontFace ? 180:0
>> } // Video Output
>>
>>
>> // P R E V I E W I M A G E
>> Image {
>> id: photoPreview
>> fillMode: Image.PreserveAspectFit
>> anchors.fill: parent
>> property bool isPortraitAtCaptureTime: false
>> // i O S BUG
>> // on iOS we don't use autoTransform - otherwise
>> orientation would be wrong
>> // instead we're calculating rotation of Image
>> // we also must calculate rotation 180 for
>> VideoOutput if iOS and FrontFace
>> // see also
>> // https://bugreports.qt.io/browse/QTBUG-50056
>> <https://link.getmailspring.com/link/1544403647.local-a741a368-81fb-v1.5.3-420ce003@getmailspring.com/2?redirect=https%3A%2F%2Fbugreports.qt.io%2Fbrowse%2FQTBUG-50056&recipient=ZWtrZUBla2tlcy1jb3JuZXIub3Jn>
>> // test also front camera bugs
>> https://bugreports.qt.io/browse/QTBUG-37955
>> <https://link.getmailspring.com/link/1544403647.local-a741a368-81fb-v1.5.3-420ce003@getmailspring.com/3?redirect=https%3A%2F%2Fbugreports.qt.io%2Fbrowse%2FQTBUG-37955&recipient=ZWtrZUBla2tlcy1jb3JuZXIub3Jn>
>> and https://bugreports.qt.io/browse/QTBUG-67985
>> <https://link.getmailspring.com/link/1544403647.local-a741a368-81fb-v1.5.3-420ce003@getmailspring.com/4?redirect=https%3A%2F%2Fbugreports.qt.io%2Fbrowse%2FQTBUG-67985&recipient=ZWtrZUBla2tlcy1jb3JuZXIub3Jn>
>> autoTransform: isIos? false : true
>> rotation: 0
>> } // photoPreview
>>
>> // ROTATE BEFORE CAPTURE
>> // iOS rotation calculated in cpp:
>> int PhotoUtil::cameraScreenRotation(const bool
>> isBackFace, const int cameraOrientation)
>> {
>> const int screenAngle =
>> mScreen->angleBetween(mScreen->nativeOrientation(),
>> mScreen->orientation());
>> int rotation;
>> if (isBackFace) {
>> rotation = (360 - cameraOrientation +
>> screenAngle) % 360;
>> } else {
>> rotation = (cameraOrientation - screenAngle) % 360;
>> }
>> return rotation;
>> }
>> if(isIos) {
>>
>> photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>> requestId, theEntity, photoPreview.rotation)
>> } else {
>> // X C O V E R
>> if(isSamsungXCover) {
>> if(photoPreview.isPortraitAtCaptureTime) {
>> if(isBackFace) {
>> // PORTRAIT BACK: rotate 90°
>>
>> photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>> requestId, theEntity, 90)
>> } else {
>> // PORTRAIT FRONT: rotate -90°
>>
>> photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>> requestId, theEntity, -90)
>> }
>> } else {
>> // LANDSCAPE BACK or FRONT: rotate 180°
>>
>> photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>> requestId, theEntity, 180)
>> }
>> }
>> // P I X E L C
>> else if(isPixelC) {
>> if(photoPreview.isPortraitAtCaptureTime) {
>> if(isBackFace) {
>> // PORTRAIT BACK: rotate 90°
>>
>> photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>> requestId, theEntity, 90)
>> } else {
>> // PORTRAIT FRONT: rotate -90°
>>
>> photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>> requestId, theEntity, -90)
>> }
>> } else {
>> // LANDSCAPE BACK or FRONT: OK
>>
>> photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>> requestId, theEntity, 0)
>> }
>> }
>> // NO SPECIAL DEVICE WITH MANAGED ORIENTATION
>> else {
>>
>> photoUtil.rotateScaleSaveCapturedImage(camera.imageCapture.capturedImagePath,
>> requestId, theEntity, 0)
>> }
>> }
>>
>> have tried with some devices and also created a Settings
>> Page where customer can enter rotation needed for
>> FrontFace or BackFace camera for a specific model, so I
>> can add this
>>
>> ekke
>> _______________________________________________
>> Interest mailing list
>> Interest at lists.qt-project.org
>> <mailto:Interest at lists.qt-project.org>
>> https://lists.qt-project.org/listinfo/interest
>>
>> Open Tracking
>
> _______________________________________________
> Interest mailing list
> Interest at lists.qt-project.org
> <mailto:Interest at lists.qt-project.org>
> https://lists.qt-project.org/listinfo/interest
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20181210/7ca5e814/attachment.html>
More information about the Interest
mailing list