[MacPorts] #47808: port:jpeg proposal to prepare for making port:libjpeg-turbo the default jpeg dependency
MacPorts
noreply at macports.org
Sat May 23 07:29:20 PDT 2015
#47808: port:jpeg proposal to prepare for making port:libjpeg-turbo the default
jpeg dependency
--------------------------+--------------------------
Reporter: rjvbertin@… | Owner: ryandesign@…
Type: enhancement | Status: new
Priority: Normal | Milestone:
Component: ports | Version:
Resolution: | Keywords: haspatch
Port: jpeg |
--------------------------+--------------------------
Comment (by rjvbertin@…):
Replying to [comment:5 cal@…]:
> But yet, it is much more complicated than our standard approach of 1.
replace port, 2. fix dependencies, 3. revbump dependents.
> ...
> No, but it adds significant complexity that we should avoid, IMO. Just
in the spirit of keeping things simple, where they don't need to be
complex.
Much more, significant (to what level of confidence?) complexity? Now
who's seeing problems where there really aren't? I've taken care that this
change can be pushed without rebuilding a single port except for port:jpeg
itself, which takes about 30s on my system (going on 4yo and with an HDD
instead of an SSD). It also carries no inherent obligation at all to
follow up on my suggestions on how to use it, and I'm not even thinking of
obliging everyone to keep having the port installed.
Plus I did all the work...
> I believe that most of our users do not directly use libJPEG –
essentially, most of them probably do not care which specific JPEG library
is being used, as long as the end result (i.e. their use case of rendering
or encoding JPEGs) continues to work. And, if due to a change we make,
this use case becomes faster, that's probably even a welcome side-effect.
I'm not saying I care what libjpeg version is being used most of the time,
except when dealing with photos when I want to be sure to get the
correct/best rendering. That, and the fact that libjpeg-turbo v8 is a
2-releases wide emulation layer on top of something that was ABI
compatible with libjpeg v6 (and even that version wasn't guaranteed to
yield identical results) are reason enough for me to want to maintain the
port.
----
''For the most part'', libjpeg-turbo ''should'' produce identical output
to libjpeg
''v6b''. The one exception to this is when using the floating point
DCT/IDCT, in
which case the outputs of libjpeg v6b and libjpeg-turbo can differ for the
following reasons:
<snip>
While libjpeg-turbo does emulate the libjpeg v8 API/ABI, under the hood,
it is
still using the same algorithms as libjpeg v6b, ''so there are several
specific
cases in which libjpeg-turbo '''cannot be expected''' to produce the same
output as
libjpeg v8'':
-- When decompressing using scaling factors of 1/2 and 1/4, because
libjpeg v8
implements those scaling algorithms differently than libjpeg v6b does,
and
libjpeg-turbo's SIMD extensions are based on the libjpeg v6b behavior.
-- When using chrominance subsampling, because libjpeg v8 implements this
with its DCT/IDCT scaling algorithms rather than with a separate
downsampling/upsampling algorithm. In our testing, the
subsampled/upsampled
output of libjpeg v8 is less accurate than that of libjpeg v6b for this
reason.
-- When decompressing using a scaling factor > 1 and merged (AKA "non-
fancy" or
"non-smooth") chrominance upsampling, because libjpeg v8 does not
support
merged upsampling with scaling factors > 1.
----
Not so long ago when I was still in vision research this could have been a
much bigger deal for me, now I don't even know for sure anymore how many
of my former colleagues are still using OS X (and MacPorts as a resource).
Re: Performance: it was a comment in LibVNCServer's output that got me
interested in libjpeg-turbo. This seemed the kind of application where a
2-4x decoding speed-up would be noticeable, but in the end I can't say I
noticed anything. Other comparisons I ran on even the largest jpeg images
I have around showed similar results: I suppose the decoding speed gain
was insignificant compared to other bottlenecks, i.e. the overal process
not decoding-constrained. So I'm tempted to think that you're preparing a
change with a huge overhead for nothing much if a (mostly theoretical)
performance gain is the sole reason.
What I do care about has been rehashed a couple of times already
apparently without leaving much impression. I'm using a number of ports
(including KDE and GTk-based apps) as alternatives for "native"
applications, and not just from time to time, and without a backup OS X
machine. I'm using "devel" versions of Qt4, Qt5 and kdelibs4, and there's
just no way I'm going to get myself in a situation where I have to rebuild
all of those plus the GTk ports at the same time because a basic library
has been downgraded (which in turn was necessary because it was updated
for updating's sake) without keeping the newer version around at least
during a grace period.
> I would even argue that MacPorts should not be a show-case of what FOSS
can be installed through it, and for that reason '''not''' keep the jpeg
port around. We should just make a sane choice for most of our users that
really don't care which JPEG library gets used, just as the big Linux
distros have done by replacing jpeg with libjpeg-turbo.
The situation is different with the big Linux distros and their users.
Their packaging/distribution systems are usually much more powerful than
MacPorts', and there are no such things as "variants" which oblige users
to build from source instead of using the provided binary packages. But
most of all, they've never been in the situation where they had to
downgrade. I have a hunch that more than 1 distribution would have decided
to roll their own v9 emulation for libjpeg-turbo because apparently that
`can be done easily enough`.
Linux distributions also don't have activation/deactivation of older
and/or alternative port versions. You did realise I hope that by doing an
all-out replacement of port:jpeg by port:libjpeg-turbo, it becomes
impossible to re-activate an older version of a port that was built before
the change (and probably cannot be rebuilt anymore) without re- or de-
activating *all* other ports depending on the jpeg replacement? The simple
fact of providing libjpeg.9.dylib (which doesn't bite anything or anyone)
makes that issue go away.
--
Ticket URL: <https://trac.macports.org/ticket/47808#comment:6>
MacPorts <https://www.macports.org/>
Ports system for OS X
More information about the macports-tickets
mailing list