Show more

@pavel @datenwolf @dcz @martijnbraam @NekoCWD I'd expect moving binning to a separate pre-pass to make it faster, we'll see.
Also, my stats are center-weighted. Millipixels annoyed me with its reluctance to overexpose the sky 😄

@pavel @datenwolf @dcz @martijnbraam @NekoCWD It's 526x390, but properly binned (each channel's sample consists of 4 raw pixels averaged), which reduces noise. The shader got heavy though, does only ~35 FPS at this res - but there should be room for optimization. I've been more concerned with its correctness than performance so far.

Stats counting on the CPU with NEON is fast enough for full frame with some subsampling.

I'm giving it some finishing touches and will then publish it of course 😁

Note that the picture is shifted down-left a bit because the driver was misconfiguring the output parameters to include dummy pixels - fixed that too, along with several out-of-range clocks 👻

I think both left- and right-masked PDAF pixels are accessible in 1:2 mode with binning disabled, though I haven't done the math yet to be 100% sure. Enabling/disabling it on demand will be somewhat clunky though. I can also read calibration data from OTP, but AFAIK there are no kernel APIs to expose that to userspace :(
source.puri.sm/Librem5/linux/-

BTW. Recording 30 minutes with screen off ate about 15% of battery, so 3 hours of recording should be possible.

@pavel @datenwolf @dcz @martijnbraam @NekoCWD I played with it over the last days and I already have 526x390 30 FPS encoding with live viewfinder, perfectly synced audio, color correction, lens shading correction, tone mapping, AWB and AE - consuming about 40% CPU. Still needs chromatic shading correction and AF, and I started experimenting with enabling PDAF.

I can also make the sensor output 60 FPS and RAW10. Patches incoming ;) Still only 2 MIPI lanes though, so no 13MP 30FPS yet.

@asegPL Żeby jakikolwiek system się dało tak zainstalować przy EFI, musiałby siedzieć na FAT32.

My 128bit format emulation - needed for GLES3 - is starting to pass the first CTS.

#etnaviv #mesa #Librem5

Show thread

@1peter10 @agx @postmarketOS @yoasif @phosh I mean, I'm not exactly a social butterfly and we had a pandemic meanwhile, but "ooh it doesn't need swipes, I hate those on my phone" was still something I heard surprising number of times when I showed my phone to people in those early days 😂 I honestly didn't expect these reactions.

@1peter10 @agx @postmarketOS @yoasif @phosh I've seen many people praise the early Phosh interface for everything being an obvious tap away and that there's no need for performing swipes to use it. At the same time lots of people (perhaps more) complained that they couldn't swipe 🫩
Swipes solve some issues and we're in much better place now than we were without them, but I think it may be worth contemplating on how to bring back the possibility of swipeless operation, even if behind an a11y flag

ramble about immutable pmOS and direction of the project 

uint8x16_t vector1 = ((uint8x16_t){1} > (uint8x16_t){0}) >> 7;
printf("%d\n", vector1[0]); // 1 in clang, 255 in gcc

uint8x16_t vector2 = (uint8x16_t){1} > (uint8x16_t){0};
vector2 = vector2 >> 7;
printf("%d\n", vector2[0]); // 1 in both gcc and clang

🤔

Aren't you glad that sfghefaes (@dawlkjr27898) has added you to a group conversation on Twitter?

@pavel Passing the right buffer size to gst_dmabuf_allocator_alloc helps it to not crash and not have garbage at the end of the frame 😂

@pavel For GTK: either docs.gtk.org/gdk4/class.Dmabuf or gstreamer.freedesktop.org/docu

For SDL with GL: just import it the same way V4L buffers are imported.

Frankly, it's flexible enough that your choice of toolkit should only depend on other factors.

@pavel That one line is the only thing that runs from another thread and it's neither scary nor requires any locking 😁

But there are several other smelly things in this code and lots of missing error handling, so I'd rather start with that when looking for suspects.

@pavel Not sure what you mean. GStreamer is internally multi-threaded, but its API is thread-safe and there's only one thread in this code. Of course any kind of production-quality code will use some mainloop and enqueue buffers based on callbacks rather than while(!processed){} loop, but it's not exactly rocket science.

@pavel You've got a dma-buf handle, already mapped buffer and even GStreamer with all its sinks available, so... however you want? Pretty much anything will be able to consume it easily.

@pavel I'm playing with GStreamer now (which is new for me) and it seems like most of this code could be replaced with GStreamer elements, and the rest should neatly plug in as custom elements 😂

@pavel Yes, of course.

BTW. Turns out that streaming to YouTube instead of a local file is just a matter of using rtmpsink instead of filesink 😁

Show more
Librem Social

Librem Social is an opt-in public network. Messages are shared under Creative Commons BY-SA 4.0 license terms. Policy.

Stay safe. Please abide by our code of conduct.

(Source code)

image/svg+xml Librem Chat image/svg+xml