[libcamera-devel] qcam display scale bug
hermann at stamm-wilbrandt.de
hermann at stamm-wilbrandt.de
Tue Jul 7 12:09:39 CEST 2020
Hi Naushir,
I could do the experiment you asked for.
But I seem accidentially having uncovered that it is a Raspberry X11
only issue.
I did run
$ LIBCAMERA_LOG_LEVELS=RPiFocus:DEBUG build/src/qcam/qcam
in an ssh session with X11 forwarding
$ ssh -X pi at 192.168.178.44
That qcam window that I saw looked better, and I took a screenshot:
https://stamm-wilbrandt.de/en/libcamera/qcam.ssh_X.screenshot.png
The top left coordinate is 10,84, bottom right is 809,684.
So when qcam app is displayed on my RHEL 7.8, I get 800x600 as
requested.
Only when started on Raspberry, I only get 800x472.
I get same 800x472 frames on X11 HDMI and X11 DPMI display -- its same
X11.
So it seems to be a Raspberry X11 only qcam display scale issue.
Can you please start qcam like I did on Raspberry, take a screenshot and
measure top left and bottom right coordinates of displayed frame?
And see whether you get 800x600 or 800x472 or something else.
"dtoverlay=vc4-fkms-v3d" is commented out in my /boot/config.txt
Thanks,
Hermann.
On 2020-07-07 10:28, Naushir Patuck wrote:
> Hi Hermann,
>
> On Tue, 7 Jul 2020 at 08:02, <hermann at stamm-wilbrandt.de> wrote:
>>
>> Hi Laurent,
>>
>> > I assume you're using the new HQ camera, right ?
>> >
>> yes, but from looking into the code that should not make a difference.
>>
>> > I'd like to clarify this first, to make sure I understand the problem
>> > correctly. Do you mean that qcam display a captured frame of 800x472
>> > pixels in a 800x600 screen region, scaling it in a way that doesn't
>> > preserve square pixels ? Do you just start the qcam application without
>> > passing it any parameter or resizing the window, or do you perform any
>> > specific operation ?
>> >
>> Yes, I am calling qcam without parameters.
>> qcam application requests 800x600 frames (see "size"):
>>
>> libcamera/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
>> case StreamRole::Viewfinder:
>> fmts =
>> data->isp_[Isp::Output0].dev()->formats();
>> pixelFormat = formats::ARGB8888;
>> size = { 800, 600 };
>> bufferCount = 4;
>> outCount++;
>> break;
>>
>> libcamera determines "2028x1520 pbCC" as best fit per log output.
>> The 2028x1520 frames captured get scaled into the display frame.
>> If the display frame would be 800x600 as requested, all would be fine.
>> But display frame being 800x472 compresses captured frame vertically
>> by factor 600/472=1.27.
>
> The 2028x1520 frame actually gets cropped in the ISP to correct for
> the requested aspect ratio before getting resized to the 800x600
> resolution. So, the flow is actually as follows:
>
> 2028x1520 (sensor) -> 2026x1520 (aspect ratio crop) -> 800x600 (isp
> resize).
>
> The reason for the crop in the middle is that the 800/600 aspect ratio
> is exactly 4/3, but 2028/1520 is not. This is why there will be a
> small amount of mismatch. Having said that, you seem to be seeing a
> much bigger variation that does not correspond to the calculations
> that take place.
>
>
>>
>> I verified that by picture of micrometer:
>> https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=278268&p=1690839#p1690839
>> The longest divisions are of length 300µm vertically, but show only
>> 221px in display. Horizontally I measured 281px for 300µm.
>>
>
> Could you try getting qcam to output 2028x1520 so that no crop/resize
> takes place just to confirm your measurements are correct?
>
> Thanks,
> Naush
>
>> I just see that the 800x600 is specified in raspberrypi.cpp.
>> Can you please start qcam on some non-Raspberry system passing
>> width=800
>> and height=600, and then take screenshot and use image processing (I
>> use
>> gimp) to measure size of displayed frame?
>>
>>
>> On 2020-07-07 01:30, Laurent Pinchart wrote:
>> > Hi Hermann,
>> >
>> > (CC'ing Naush)
>> >
>> > On Sun, Jul 05, 2020 at 09:44:15PM +0200, hermann at stamm-wilbrandt.de
>> > wrote:
>> >> I started working with libcamera on Raspberry Pi.
>> >
>> > Thank you for your interest in the project :-)
>> >
>> >> I cannot tell whether this scale bug exists for raspberrypi only, or
>> >> in
>> >> general.
>> >>
>> >> qcam app requests a 800x600 window, but displayed window is 800x472
>> >> only.
>> >> This is not acceptable when using qcam as microscope app:
>> >> https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=278268&p=1690839#p1690839
>> >
>> > I assume you're using the new HQ camera, right ?
>> >
>> >> The best mode selected by libcamera is 2028x1520 which is 4:3.
>> >> So 800x600 (also 4:3) is needed for display.
>> >>
>> >> It would be helpful to know whether qcam display is also 800x472
>> >> instead
>> >> of 800x600 when not running on Rasberry Pi.
>> >
>> > I'd like to clarify this first, to make sure I understand the problem
>> > correctly. Do you mean that qcam display a captured frame of 800x472
>> > pixels in a 800x600 screen region, scaling it in a way that doesn't
>> > preserve square pixels ? Do you just start the qcam application without
>> > passing it any parameter or resizing the window, or do you perform any
>> > specific operation ?
More information about the libcamera-devel
mailing list