OSDN Git Service
Anton Khirnov [Thu, 3 Feb 2011 13:58:59 +0000 (14:58 +0100)]
lavc: remove the FF_API_SET_STRING_OLD cruft.
Anton Khirnov [Thu, 3 Feb 2011 13:51:50 +0000 (14:51 +0100)]
lavc: remove the FF_API_USE_LPC cruft.
Anton Khirnov [Thu, 3 Feb 2011 13:50:06 +0000 (14:50 +0100)]
lavc: remove the FF_API_SUBTITLE_OLD cruft.
Anton Khirnov [Thu, 3 Feb 2011 13:48:39 +0000 (14:48 +0100)]
lavc: remove the FF_API_VIDEO_OLD cruft.
Anton Khirnov [Thu, 3 Feb 2011 13:48:00 +0000 (14:48 +0100)]
lavc: remove the FF_API_AUDIO_OLD cruft.
Anton Khirnov [Thu, 3 Feb 2011 13:45:22 +0000 (14:45 +0100)]
lavc: remove the FF_API_OPT_SHOW cruft.
Anton Khirnov [Thu, 3 Feb 2011 13:43:53 +0000 (14:43 +0100)]
lavc: remove the FF_API_MM_FLAGS cruft.
Anton Khirnov [Wed, 13 Apr 2011 06:01:49 +0000 (08:01 +0200)]
lavf: remove misc disabled cruft.
Anton Khirnov [Tue, 12 Apr 2011 18:10:10 +0000 (20:10 +0200)]
lavf: remove FF_API_INDEX_BUILT cruft
Anton Khirnov [Thu, 3 Feb 2011 11:53:28 +0000 (12:53 +0100)]
lavf: remove FF_API_URL_CLASS cruft.
Anton Khirnov [Thu, 3 Feb 2011 11:49:12 +0000 (12:49 +0100)]
lavf: remove FF_API_SYMVER cruft
Anton Khirnov [Thu, 3 Feb 2011 11:47:18 +0000 (12:47 +0100)]
lavf: remove FF_API_FIRST_FORMAT cruft
Anton Khirnov [Thu, 3 Feb 2011 11:46:12 +0000 (12:46 +0100)]
lavf: remove FF_API_PARAMETERS_CODEC_ID cruft
Anton Khirnov [Thu, 3 Feb 2011 11:45:30 +0000 (12:45 +0100)]
lavf: remove FF_API_LAVF_UNUSED cruft
Anton Khirnov [Thu, 3 Feb 2011 11:44:04 +0000 (12:44 +0100)]
lavf: remove FF_API_PARSE_FRAME_PARAM cruft
Anton Khirnov [Thu, 3 Feb 2011 11:42:38 +0000 (12:42 +0100)]
lavf: remove FF_API_ALLOC_FORMAT_CONTEXT cruft
Anton Khirnov [Thu, 3 Feb 2011 11:40:25 +0000 (12:40 +0100)]
lavf: remove FF_API_URL_SPLIT cruft
Anton Khirnov [Thu, 3 Feb 2011 11:39:11 +0000 (12:39 +0100)]
lavf: remove FF_API_UDP_GET_FILE cruft
Anton Khirnov [Thu, 3 Feb 2011 11:38:05 +0000 (12:38 +0100)]
lavf: remove FF_API_GUESS_FORMAT cruft
Anton Khirnov [Thu, 3 Feb 2011 11:36:18 +0000 (12:36 +0100)]
lavf: remove FF_API_REGISTER_PROTOCOL cruft
Anton Khirnov [Thu, 3 Feb 2011 11:32:59 +0000 (12:32 +0100)]
lavf: remove FF_API_URL_RESETBUF cruft
Anton Khirnov [Thu, 3 Feb 2011 11:30:16 +0000 (12:30 +0100)]
lavf: remove FF_API_OLD_METADATA cruft
Anton Khirnov [Thu, 3 Feb 2011 11:25:54 +0000 (12:25 +0100)]
lavf: remove FF_API_MAX_STREAMS cruft
Kostya [Mon, 18 Apr 2011 05:32:14 +0000 (05:32 +0000)]
document introduction of side data in APIchanges
this should've been written earlier, sorry
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diego Biurrun [Tue, 19 Apr 2011 06:47:59 +0000 (08:47 +0200)]
pcm: Add const to cast in ENCODE macro.
This fixes a lot of warnings of the sort:
libavcodec/pcm.c:105: warning: cast discards qualifiers from pointer target type
Diego Biurrun [Mon, 18 Apr 2011 21:12:40 +0000 (23:12 +0200)]
Remove now obsolete references to _g-suffixed binaries.
Automatic stripping of binaries was removed in commit
e0be794
and the _g binaries disappeared along with it.
Luca Barbato [Mon, 18 Apr 2011 20:12:50 +0000 (22:12 +0200)]
libvo-aacenc,libvo-amrwbenc}: fix api usage
Use the correct error codes and format identifier.
Anton Khirnov [Thu, 3 Feb 2011 11:18:16 +0000 (12:18 +0100)]
Bump major versions of all libraries.
They've accumulated enough new APIs and corresponding deprecated cruft.
This breaks API and ABI.
Diego Biurrun [Sun, 17 Apr 2011 18:13:59 +0000 (20:13 +0200)]
Replace mplayerhq.hu URLs by libav.org.
Diego Biurrun [Sun, 17 Apr 2011 17:48:27 +0000 (19:48 +0200)]
asfdec: Remove dead code from asf_read_close().
Diego Biurrun [Sun, 17 Apr 2011 21:42:10 +0000 (23:42 +0200)]
ptx: Use av_log_ask_for_sample() where appropriate.
Diego Biurrun [Sun, 17 Apr 2011 20:18:00 +0000 (22:18 +0200)]
Update regtest checksums after revision
6001dad.
The string "FFmpeg" was replaced by "Libav" in metadata that
got encoded in file headers.
Diego Biurrun [Fri, 15 Apr 2011 20:30:26 +0000 (22:30 +0200)]
Replace more FFmpeg references by Libav.
Justin Ruggles [Sun, 17 Apr 2011 16:26:47 +0000 (12:26 -0400)]
ac3dec: fix processing of delta bit allocation information.
The number of dba segments is the coded value + 1.
The coupling dba offset starts at the first coupling band, not at zero.
Ronald S. Bultje [Sat, 16 Apr 2011 19:29:05 +0000 (19:29 +0000)]
vc1: fix fate-vc1 after previous commit.
PROFILE_ADVANCED doesn't set res_fasttx, so make that a special case
in the condition that decides which IDCT to use (and whether to read
coefficients transposed or not).
Signed-off-by: Kostya Shishkov <kostya.shishkov@gmail.com>
Ronald S. Bultje [Sat, 16 Apr 2011 19:07:14 +0000 (15:07 -0400)]
wmv3dec: fix playback of complex WMV3 files using simple_idct.
IDCT coefficients are read transposed, but simple_idct does not expect
this. Therefore, only do tranposed coefficient reading if we're not
using simple_idct.
Fixes http://forum.videolan.org/viewtopic.php?f=14&t=89651
Diego Biurrun [Fri, 15 Apr 2011 15:49:36 +0000 (17:49 +0200)]
Replace references to ffmpeg-devel with libav-devel; fix roundup URL.
Kostya Shishkov [Wed, 13 Apr 2011 15:36:02 +0000 (17:36 +0200)]
make av_dup_packet() more cautious on allocation failures
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Kostya Shishkov [Sat, 9 Apr 2011 13:49:51 +0000 (15:49 +0200)]
make containers pass palette change in AVPacket
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Kostya Shishkov [Sat, 9 Apr 2011 13:31:39 +0000 (15:31 +0200)]
introduce side information for AVPacket
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diego Biurrun [Fri, 15 Apr 2011 11:28:04 +0000 (13:28 +0200)]
xwma: Fix wrong printf format expression.
Also add inttypes.h #include for PRId64 macros.
This fixes the following warnings:
libavformat/xwma.c:147: warning: too many arguments for format
libavformat/xwma.c:151: warning: too many arguments for format
Max Horn [Fri, 15 Apr 2011 07:43:15 +0000 (09:43 +0200)]
xwma demuxer: typos
Signed-off-by: Diego Biurrun <diego@biurrun.de>
Clément Bœsch [Sun, 10 Apr 2011 07:26:43 +0000 (09:26 +0200)]
oggdec: simplify audio chained ogg streams support
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Janne Grunau [Fri, 15 Apr 2011 07:12:34 +0000 (09:12 +0200)]
swscale: fix "ISO C90 forbids mixed declarations and code" warning
only hit with --enable-runtime-cpudetect
Janne Grunau [Fri, 15 Apr 2011 00:09:44 +0000 (02:09 +0200)]
swscale: fix compilation with --enable-runtime-cpudetect
Janne Grunau [Thu, 14 Apr 2011 22:31:04 +0000 (00:31 +0200)]
swscale: correct include path to fix ppc altivec build
Luca Barbato [Thu, 14 Apr 2011 20:03:45 +0000 (22:03 +0200)]
swscale: simplify rgb2rgb templating
MMX is always built. Drop the ifdefs
Josh Allmann [Wed, 13 Apr 2011 18:57:32 +0000 (20:57 +0200)]
swscale: simplify initialization code
Simplify the fallthrough case when no accelerated functions
can be initialized.
Josh Allmann [Wed, 13 Apr 2011 18:57:31 +0000 (20:57 +0200)]
swscale: further cleanup swscale.c
Move x86-specific constants out of swscale.c
Luca Barbato [Wed, 13 Apr 2011 18:57:30 +0000 (20:57 +0200)]
swscale: partially move the arch specific code left
PPC and x86 code is split off from swscale_template.c. Lots of code is
still duplicated and should be removed later.
Again uniformize the init system to be more similar to the dsputil one.
Unset h*scale_fast in the x86 init in order to make the output
consistent with the previous status. Thanks to Josh for spotting it.
Luca Barbato [Wed, 13 Apr 2011 18:57:29 +0000 (20:57 +0200)]
swscale: move away x86 specific code from rgb2rgb
Keep only the plain C code in the main rgb2rgb.c and move the x86
specific optimizations to x86/rgb2rgb.c
Change the initialization pattern a little so some of it can be
factorized to behave more like dsputils.
Alexis Ballier [Thu, 7 Apr 2011 13:19:23 +0000 (10:19 -0300)]
avutil: make aes and sha api public
The functions are already av_ prefixed and sha1 header is already provided.
Install libavutil/{aes,sha}.h
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Max Horn [Tue, 12 Apr 2011 15:44:20 +0000 (17:44 +0200)]
handle malloc failures in ff_get_wav_header
ff_get_wav_header is reading data from a WAVE file and then uses it
(without validation) to malloc a buffer. It then proceeded to read
data into the buffer, without verifying that the allocation succeeded.
To address this, change ff_get_wav_header to return an error if
allocation failed, and adapted all calling code to handle that error.
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Max Horn [Tue, 12 Apr 2011 11:59:39 +0000 (13:59 +0200)]
add xWMA demuxer
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Rudolf Polzer [Thu, 14 Apr 2011 09:12:57 +0000 (11:12 +0200)]
mpegts: force the default timebase
The mpegts muxer does not set the stream time base using
av_set_pts_info, but expects it to have the default value of 1/90000.
If the calling code changes stream pts before writing the header,
other muxers override the time base at that point (like mpegenc.c).
Martin Storsjö [Wed, 13 Apr 2011 22:04:53 +0000 (01:04 +0300)]
libavcodec: Bump micro after adding the dtx AVOptions
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Wed, 13 Apr 2011 18:47:12 +0000 (21:47 +0300)]
libopencore-amr, libvo-amrwbenc: Allow enabling DTX via private AVOptions
DTX, discontinuous transmission, allows emitting frames with
comfort noise when no voice is detected in the input audio.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Wed, 13 Apr 2011 08:03:19 +0000 (11:03 +0300)]
libopencore-amr, libvo-amrwbenc: Only check the bitrate when changed
Also rename the incorrectly named enc_bitrate to enc_mode, use the
enc_bitrate variable for storing the last chosen bitrate.
This avoids continuous warning log messages if not using an
exactly matching bitrate, while still allowing changing bitrate
at any point.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Wed, 13 Apr 2011 07:59:08 +0000 (10:59 +0300)]
libopencore-amr, libvo-amrwbenc: Find the closest matching bitrate
Dynamically print the supported bitrates from the local table,
instead of using a hardcoded log message.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Wed, 13 Apr 2011 19:31:20 +0000 (22:31 +0300)]
libvo-*: Fix up the long codec names
Include VisualOn to clarify the codec name, but remove the
actual library name from the user-friendly description.
Also mention Android, to clarify which VisualOn implementation
this refers to, since they do sell other variants of the same
code, too.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Wed, 13 Apr 2011 18:48:00 +0000 (21:48 +0300)]
libavcodec: Mark AVCodec->priv_class const
This avoids warnings of this kind, everywhere priv_class
is initialized:
warning: initialization discards qualifiers from pointer target type
Signed-off-by: Martin Storsjö <martin@martin.st>
Luca Barbato [Mon, 11 Apr 2011 17:48:13 +0000 (19:48 +0200)]
swscale: Factorize FAST_BGR2YV12 definition.
It is used only for x86 so it will eventually be moved with that code
into the x86 arch subdirectory.
Martin Storsjö [Tue, 12 Apr 2011 07:35:23 +0000 (10:35 +0300)]
libvo-aacenc: Only produce extradata if the global header flag is set
Signed-off-by: Martin Storsjö <martin@martin.st>
Anton Khirnov [Wed, 23 Feb 2011 06:38:52 +0000 (07:38 +0100)]
lavf: postpone removal of public metadata conversion API
It's been deprecated only a few months ago, long after 0.6.
Anton Khirnov [Wed, 6 Apr 2011 05:47:26 +0000 (07:47 +0200)]
lavc: postpone removal of request_channels
No decoder uses the supposed replacement, request_channel_layout, yet.
Anton Khirnov [Wed, 6 Apr 2011 05:31:32 +0000 (07:31 +0200)]
lavc: postpone removal of audioconvert and sample_fmt wrappers
Those were moved to libavutil only recently.
Anton Khirnov [Wed, 23 Feb 2011 06:39:59 +0000 (07:39 +0100)]
lavf: postpone removal of deprecated avio functions
They've been deprecated very recently.
Martin Storsjö [Tue, 12 Apr 2011 21:25:43 +0000 (00:25 +0300)]
libopencore-amr: Cosmetics: Rewrap and align
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 21:20:26 +0000 (00:20 +0300)]
libopencore-amr, libvo-amrbwenc: Rename variables and functions
Avoid camelCase names for functions and variables.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Wed, 13 Apr 2011 07:12:56 +0000 (10:12 +0300)]
libopencore-amr: Convert commented out debug logging into av_dlog
Also add the avctx as logging context.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 20:58:45 +0000 (23:58 +0300)]
libopencore-amr: Remove an unused state variable
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 21:42:24 +0000 (00:42 +0300)]
libvo-amrwbenc: Don't explicitly store bitrate modes in the bitrate table
The bitrate modes are equal to the array indices.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 21:17:48 +0000 (00:17 +0300)]
libopencore-amr: Remove a useless local variable
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 21:15:01 +0000 (00:15 +0300)]
libopencore-amr, libvo-amrwbenc: Make the bitrate/mode mapping array static const
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 21:10:56 +0000 (00:10 +0300)]
libopencore-amr, libvo-amrwbenc: Return proper error codes in most places
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 21:08:14 +0000 (00:08 +0300)]
libopencore-amr: Don't print carriage returns in log messages
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 21:06:29 +0000 (00:06 +0300)]
libopencore-amr: Remove an old workaround for libamr header weirdness
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 20:56:41 +0000 (23:56 +0300)]
libopencore-amr: Make the opaque encoder pointer a void*
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 20:50:51 +0000 (23:50 +0300)]
libopencore-amr: Remove unused code fragments
This parts are heritage from the encoder part from the old
libamr code removed in SVN rev 19365.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Mon, 11 Apr 2011 21:19:56 +0000 (00:19 +0300)]
applehttp: Only check the discard flags if v->ctx actually is initialized
This code could be executed if the demuxer reads more than one
segment before returning from av_open_input_stream.
Signed-off-by: Martin Storsjö <martin@martin.st>
Luca Barbato [Sat, 9 Apr 2011 21:54:31 +0000 (23:54 +0200)]
doc: update developer guide
Refer to the current submission policy and refer to FATE in the
Regression Test section.
Anton Khirnov [Tue, 12 Apr 2011 08:01:30 +0000 (10:01 +0200)]
lavf: bump minor and add an APIChanges entry for the last avio changes
Anton Khirnov [Tue, 12 Apr 2011 07:46:45 +0000 (09:46 +0200)]
avio: deprecate url_exist in favor of avio_check.
Stefano Sabatini [Thu, 30 Sep 2010 11:21:42 +0000 (13:21 +0200)]
file: implement url_check() callback in the file and pipe protocols
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Stefano Sabatini [Fri, 8 Apr 2011 16:32:25 +0000 (18:32 +0200)]
avio: add avio_check()
The new function is more flexible than url_exist(), as it allows to
specify which access flags to check, and does not require an explicit
open of the checked resource.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Anton Khirnov [Wed, 13 Apr 2011 05:35:35 +0000 (07:35 +0200)]
avio: left-shift AVIO_ flags on next bump
Now AVIO_RDONLY is defined as 0, so it's not usable as a flag.
Alberto Delmas [Mon, 12 Apr 2010 21:16:12 +0000 (23:16 +0200)]
Check for successful h263 init in msmpeg4 init
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Vitor Sessak [Mon, 11 Apr 2011 20:20:36 +0000 (16:20 -0400)]
lavf/utils.c: Order packets with identical PTS by stream index.
This allows for more reproducible results when using multi-threading.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Martin Storsjö [Tue, 12 Apr 2011 13:37:54 +0000 (16:37 +0300)]
flvdec: Allow parsing keyframes metadata without seeking in most cases
Stop the avio input at a point where amf_parse_object can
continue parsing the end of the object seamlessly, when all
data is available.
If unsupported data is encountered within the keyframes object,
try seeking to the start of the keyframes object - if the seek
back was successful, the caller can continue parsing the rest
of the AMF data.
Signed-off-by: Martin Storsjö <martin@martin.st>
Luca Barbato [Mon, 4 Apr 2011 13:24:19 +0000 (15:24 +0200)]
Error out if vaapi is not found
Make the behaviour consistent with the other external deps.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Anton Khirnov [Tue, 12 Apr 2011 07:37:10 +0000 (09:37 +0200)]
avio: undeprecate av_url_read_fseek/fpause under nicer names
It seems their replacements won't be ready anytime soon.
Martin Storsjö [Tue, 12 Apr 2011 07:33:35 +0000 (10:33 +0300)]
libvo-*: Don't use deprecated sample format names and enum names
Signed-off-by: Martin Storsjö <martin@martin.st>
Kharkov Alexander [Fri, 8 Apr 2011 09:20:45 +0000 (16:20 +0700)]
flvdec: Fix support for flvtool2 "keyframes based" generated index
Current keyframes data parser unconditionally rewind metadata to
the end at the end of function. As result ALL metadata located
after keyframes index not parsed, and as metadata object can have
ANY placement inside metadata it can lead to unpredictable result
(bitrate can not be found, etc.). As result FLV movie will not
play at all in such situation.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 12 Apr 2011 07:32:43 +0000 (10:32 +0300)]
libavcodec: Use "const enum AVSampleFormat[]" in AVCodec initialization
Signed-off-by: Martin Storsjö <martin@martin.st>
Alex Converse [Mon, 11 Apr 2011 06:42:29 +0000 (23:42 -0700)]
Fix the conversion of AV_SAMPLE_FMT_FLT and _DBL to AV_SAMPLE_FMT_S32.
(1<<31) is undefined and seems to be evaluated by gcc to -2^31 when
these formulae require 2^31.
These conversions still need fate tests.
Alex Converse [Sun, 10 Apr 2011 00:22:04 +0000 (17:22 -0700)]
Convert some undefined 1<<31 shifts into 1U<<31.
According to ISO 9899:1999 S 6.5.7/4:
The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits
are filled with zeros. If E1 has an unsigned type, the value of the
result is E1× 2^E2, reduced modulo one more than the maximum value
representable in the result type. If E1 has a signed type and
nonnegative value, and E1× 2^E2 is representable in the result type, then
that is the resulting value; otherwise, the behavior is undefined.
Diego Biurrun [Sun, 10 Apr 2011 19:12:08 +0000 (21:12 +0200)]
Add unconditional return statement to yuva420_rgb32_MMX() / yuva420_bgr32_MMX().
When HAVE_7REGS was not defined these functions had an empty body
causing the following warnings during compilation.
In file included from libswscale/x86/yuv2rgb_mmx.c:58:
libswscale/x86/yuv2rgb_template.c: In function ‘yuva420_rgb32_MMX’:
libswscale/x86/yuv2rgb_template.c:412: warning: no return statement in function returning non-void
libswscale/x86/yuv2rgb_template.c: In function ‘yuva420_bgr32_MMX’:
libswscale/x86/yuv2rgb_template.c:457: warning: no return statement in function returning non-void
Signed-off-by: Diego Biurrun <diego@biurrun.de>
Diego Biurrun [Sun, 10 Apr 2011 19:22:45 +0000 (21:22 +0200)]
Fix compilation of timefilter test program.
The printf function is forbidden in library code, but not in test programs,
so #undefine the printf macro that disables the system printf function.
Signed-off-by: Diego Biurrun <diego@biurrun.de>
Martin Storsjö [Tue, 29 Dec 2009 14:48:09 +0000 (16:48 +0200)]
Add support for AMR-WB encoding via libvo-amrwbenc
The wrapper code is based on the libamr wrapper removed in SVN rev 19365.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Sun, 19 Dec 2010 19:40:23 +0000 (21:40 +0200)]
Add an AAC encoder by using the libvo-aacenc library
Signed-off-by: Martin Storsjö <martin@martin.st>