0
0
Fork 0
mirror of https://github.com/matrix-org/dendrite synced 2024-11-09 19:31:11 +01:00
dendrite/mediaapi
Till 795c4a9453
Fix media DB possibly leaking connections (#3372)
Grafana Pyroscope unveiled that we are hitting
ad10fbd3c4/src/database/sql/sql.go (L2739-L2742)
for media DB queries.

Making the methods pointer receivers fixes this.

(Also some minor `error` cosmetic updates)
2024-07-27 22:29:19 +02:00
..
fileutils Do not use ioutil as it is deprecated (#2625) 2022-08-05 10:26:59 +01:00
routing Add CORP header to /download and /thumbnail (#3299) 2024-01-10 09:39:13 +01:00
storage Fix media DB possibly leaking connections (#3372) 2024-07-27 22:29:19 +02:00
thumbnailer 🏗️ mediaapi/thumbnailer: fix build with bimg (#2440) 2022-05-09 17:51:30 +01:00
types refactor: update GMSL (#3058) 2023-04-19 15:50:33 +01:00
bimg-96x96-crop.jpg use go module for dependencies (#594) 2019-05-21 21:56:55 +01:00
mediaapi.go Use pointer when passing the connection manager around (#3152) 2023-07-19 13:37:04 +02:00
nfnt-96x96-crop.jpg use go module for dependencies (#594) 2019-05-21 21:56:55 +01:00
README.md Update Docker files and remove references to gb (#703) 2019-05-22 10:44:25 +01:00

Media API

This server is responsible for serving /media requests as per:

http://matrix.org/docs/spec/client_server/r0.2.0.html#id43

Scaling libraries

nfnt/resize (default)

Thumbnailing uses https://github.com/nfnt/resize by default which is a pure golang image scaling library relying on image codecs from the standard library. It is ISC-licensed.

It is multi-threaded and uses Lanczos3 so produces sharp images. Using Lanczos3 all the way makes it slower than some other approaches like bimg. (~845ms in total for pre-generating 32x32-crop, 96x96-crop, 320x240-scale, 640x480-scale and 800x600-scale from a given JPEG image on a given machine.)

See the sample below for image quality with nfnt/resize:

bimg (uses libvips C library)

Alternatively one can use go build -tags bimg to use bimg from https://github.com/h2non/bimg (MIT-licensed) which uses libvips from https://github.com/jcupitt/libvips (LGPL v2.1+ -licensed). libvips is a C library and must be installed/built separately. See the github page for details. Also note that libvips in turn has dependencies with a selection of FOSS licenses.

bimg and libvips have significantly better performance than nfnt/resize but produce slightly less-sharp images. bimg uses a box filter for downscaling to within about 200% of the target scale and then uses Lanczos3 for the last bit. This is a much faster approach but comes at the expense of sharpness. (~295ms in total for pre-generating 32x32-crop, 96x96-crop, 320x240-scale, 640x480-scale and 800x600-scale from a given JPEG image on a given machine.)

See the sample below for image quality with bimg: