Rich_Morin

Rich_Morin

How to access memory-mapped image files (eg, using a NIF)?

The Magick Persistent Cache (MPC) is a memory-mapped file of pixels, used to store image data. ImageMagick maps this into memory, then accesses desired sets of pixels by indexing into the array. Each array element contains a single-precision (32 bit) float for each channel (eg, R, G, B, A).

I’d like to do something similar in Elixir. I assume that I could use a NIF to handle the memory mapping and binary pattern matching to access the pixels, but I’m clueless about the details. Might anyone have a clue (or better, code) to do this sort of thing?

-r

Most Liked

CptnKirk

CptnKirk

There’s a chance you get this with OTP 21. They’re moving the file and network io over to NIFs. Try and see if OTP 21’s File.open supports what you’re looking for. Although, I suspect they’re shooting for feature parity, and not added functionality for this release.

In OTP 20 you’d find the data you care about, (or whole file) read that into iodata, then File.open the iodata as ram. That should give a FD for additional File based calls. However, I think you’re still operating in memory at this point without transparent disk syncing. When you’re done with your memory FD copy, you’d write the iodata back out to disk yourself.

Or…you can write your own NIF based io subsystem. Nifsy (https://github.com/ericentin/nifsy) exists. Doesn’t directly support mmap’d files, but does show how a NIF based IO library can be written.

Where Next?

Popular in Questions Top

vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lis...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
makeitrein
Hey all, just started picking up Elixir last week and am writing a scraper as a learning project. Baby step #1 is extracting the number ...
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
hpopp
To simplify some tasks at work, I wrote and published this package yesterday. It’s a simple macro that enables Access behaviour on struct...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New

Other popular topics Top

senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New
lk-geimfari
What is most correct way to open, read and parse JSON file with poison? For example if we have example.json file in root of some projec...
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
AstonJ
by Lance Halvorsen Elixir and Phoenix are generating tremendous excitement as an unbeatable platform for building modern web application...
460 27162 124
New
magnetic
Hey :wave:t3: Elixir community, I’ve been learning Elixir, and working on some side projects. My editor of choice is VSCode, and althoug...
New

We're in Beta

About us Mission Statement