Luca Barbato [Sat, 3 Dec 2011 20:53:09 +0000 (21:53 +0100)]
doc: add pulseaudio to the input list
Luca Barbato [Thu, 8 Dec 2011 01:17:18 +0000 (02:17 +0100)]
avconv: remove unsubstantiated comment
All the currently supported OS-es manage to use return values
properly.
John Brooks [Thu, 8 Dec 2011 09:16:21 +0000 (09:16 +0000)]
shorten: avoid abort() on unknown audio types
Signed-off-by: Janne Grunau <janne-libav@jannau.net>
Paul B Mahol [Thu, 8 Dec 2011 00:05:23 +0000 (00:05 +0000)]
cljr: add encoder
Signed-off-by: Diego Biurrun <diego@biurrun.de>
Diego Biurrun [Wed, 7 Dec 2011 20:49:53 +0000 (21:49 +0100)]
build: merge lists of HTML documentation targets
Diego Biurrun [Wed, 21 Sep 2011 16:44:41 +0000 (18:44 +0200)]
tests/examples: Mark some variables only used within their files as static.
Diego Biurrun [Wed, 21 Sep 2011 16:46:56 +0000 (18:46 +0200)]
tests/tools/examples: Replace direct exit() calls by return.
Sean McGovern [Wed, 7 Dec 2011 21:51:28 +0000 (21:51 +0000)]
x86 cpuid: set vendor union members separately
Solaris Studio (suncc) has difficulty with filling in
members of a union. Instead, let's retrieve and store the
cpuid() results separately. This is still a compiler bug,
however this fix does not cause a regression on other platforms.
Signed-off-by: Janne Grunau <janne-libav@jannau.net>
Paul B. Mahol [Tue, 6 Dec 2011 04:14:55 +0000 (04:14 +0000)]
cljr: release picture at end of decoding
Otherwise after transcoding from cljr we get: Found 1 unreleased buffers!
Signed-off-by: Janne Grunau <janne-libav@jannau.net>
Mans Rullgard [Wed, 7 Dec 2011 22:28:00 +0000 (22:28 +0000)]
rv40: NEON optimised rv40 qpel motion compensation
Based on patch by Janne Grunau.
Signed-off-by: Mans Rullgard <mans@mansr.com>
Luca Barbato [Wed, 7 Dec 2011 19:30:55 +0000 (20:30 +0100)]
drawtext: remove typo
It slipped through the last two iterations.
Hendrik Leppkes [Sun, 4 Dec 2011 22:15:51 +0000 (23:15 +0100)]
pcm-mpeg: implement new audio decoding api
Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
Ronald S. Bultje [Wed, 7 Dec 2011 04:42:55 +0000 (20:42 -0800)]
w32thread: port fixes to pthread_cond_broadcast() from x264.
Diego Biurrun [Mon, 5 Dec 2011 12:18:27 +0000 (13:18 +0100)]
doc: add editor configuration section with Vim and Emacs settings
based on a patch by Victor Vasiliev, vasilvv gmail com
Rafaël Carré [Wed, 7 Dec 2011 15:23:52 +0000 (10:23 -0500)]
dxva2.h: include d3d9.h to define LPDIRECT3DSURFACE9
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diego Biurrun [Wed, 7 Dec 2011 10:30:07 +0000 (11:30 +0100)]
avformat/utils: Drop unused goto label.
libavformat/utils.c:2165:2: warning: label ‘fail’ defined but not used
Diego Biurrun [Wed, 7 Dec 2011 12:43:36 +0000 (13:43 +0100)]
doxygen: Replace '\' by '@' in Doxygen markup tags.
Diego Biurrun [Wed, 7 Dec 2011 12:48:58 +0000 (13:48 +0100)]
cosmetics: drop some completely pointless parentheses
Paul B. Mahol [Tue, 6 Dec 2011 17:45:37 +0000 (17:45 +0000)]
cljr: simplify CLJRContext
There is no need to have delta, offset and gb in CLJRContext.
Signed-off-by: Janne Grunau <janne-libav@jannau.net>
Luca Barbato [Sun, 4 Dec 2011 23:56:21 +0000 (00:56 +0100)]
drawtext: introduce rand(min, max)
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Luca Barbato [Sun, 4 Dec 2011 20:13:56 +0000 (21:13 +0100)]
drawtext: introduce explicit draw/hide variable
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Martin Storsjö [Mon, 5 Dec 2011 10:35:06 +0000 (12:35 +0200)]
rtmp: Use nb_invokes for all invoke commands
704af3e29c3ddbc22ac5c8f40e5a0f860d53ac4c broke publishing
of rtmp streams, at least publishing to Wowza servers.
This changes all invoke commands to use nb_invokes.
Signed-off-by: Martin Storsjö <martin@martin.st>
Konstantin Todorov [Mon, 5 Dec 2011 16:40:28 +0000 (18:40 +0200)]
Code cleanup - mpegvideo.c - 500-1000line
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Janne Grunau [Mon, 5 Dec 2011 21:22:57 +0000 (21:22 +0000)]
rv40: NEON optimised weighted prediction
Signed-off-by: Mans Rullgard <mans@mansr.com>
Janne Grunau [Mon, 5 Dec 2011 21:18:05 +0000 (21:18 +0000)]
rv40: NEON optimised chroma MC
Signed-off-by: Mans Rullgard <mans@mansr.com>
Mans Rullgard [Tue, 6 Dec 2011 12:44:05 +0000 (12:44 +0000)]
ARM: move NEON H264 chroma mc to a separate file
This allows sharing code with the rv40 version of these functions.
Signed-off-by: Mans Rullgard <mans@mansr.com>
Janne Grunau [Sat, 24 Sep 2011 11:05:55 +0000 (13:05 +0200)]
rv34: NEON optimised inverse transform functions
Signed-off-by: Mans Rullgard <mans@mansr.com>
Alex Converse [Mon, 5 Dec 2011 00:38:05 +0000 (16:38 -0800)]
mov: Don't av_malloc(0).
malloc() is allowed to return NULL when zero is the argument. This
causes us to think malloc has failed and return AVERROR(ENOMEM). In
addition OS X malloc() returns an unfreeable non-NULL pointer for size
zero when alignment is greater than 16.
Justin Ruggles [Mon, 5 Dec 2011 16:49:38 +0000 (11:49 -0500)]
avconv: only allocate 1 AVFrame per input stream
This avoids allocating/freeing an AVFrame for each packet decode. It also
simplifies error handling in transcode_audio() and transcode_video().
Justin Ruggles [Mon, 5 Dec 2011 15:36:54 +0000 (10:36 -0500)]
avconv: fix memleaks due to not freeing the AVFrame for audio
Ronald S. Bultje [Sat, 26 Nov 2011 21:10:17 +0000 (13:10 -0800)]
h264-fate: remove -strict 1 except where necessary (mr4/5-tandberg).
Diego Biurrun [Sun, 30 Oct 2011 18:10:50 +0000 (19:10 +0100)]
misc Doxygen markup improvements
Diego Biurrun [Sun, 30 Oct 2011 17:27:33 +0000 (18:27 +0100)]
doxygen: eliminate Qt-style doxygen syntax
Martin Storsjö [Sat, 3 Dec 2011 22:58:31 +0000 (00:58 +0200)]
g722: Add a regression test for muxing/demuxing in wav
Signed-off-by: Martin Storsjö <martin@martin.st>
Sjoerd Simons [Thu, 1 Dec 2011 23:08:35 +0000 (01:08 +0200)]
g722: Change bits per sample to 4
Earlier, bits per sample was defined as 8, since
bits_per_coded_sample was used to indicate whether to ignore
the lower bits of the codeword, having values 6, 7 or 8.
g722 encodes 2 samples into one byte codeword, therefore the
bits per sample is 4. By changing this, the generated timestamps
for streams encoded with g722 become correct.
This makes timestamp generation for g722 data correct (both when
encoding and when demuxing from raw g722 files).
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Sat, 3 Dec 2011 17:54:20 +0000 (19:54 +0200)]
g722dec: Signal skipping the lower bits via AVOptions instead of bits_per_coded_sample
This avoids using bits_per_coded_sample for this information.
bits_per_coded_sample should be 4 for this codec normally,
since two samples are encoded into one 8 bit codeword.
In principle, this might be info that needs to be passed from
a demuxer, and in that case, a private AVOption isn't the best
choice, but no such samples are available at the moment, so
that use case is purely theoretical at the moment.
Signed-off-by: Martin Storsjö <martin@martin.st>
Justin Ruggles [Fri, 11 Nov 2011 20:44:41 +0000 (15:44 -0500)]
api-example: update to use avcodec_decode_audio4()
Justin Ruggles [Wed, 12 Oct 2011 17:27:41 +0000 (13:27 -0400)]
avplay: use avcodec_decode_audio4()
Justin Ruggles [Tue, 11 Oct 2011 19:49:39 +0000 (15:49 -0400)]
avplay: use a separate buffer for playing silence
Justin Ruggles [Wed, 2 Nov 2011 18:35:36 +0000 (14:35 -0400)]
avformat: use avcodec_decode_audio4() in avformat_find_stream_info()
Justin Ruggles [Mon, 21 Nov 2011 22:41:49 +0000 (17:41 -0500)]
avconv: use avcodec_decode_audio4() instead of avcodec_decode_audio3()
Alex Converse [Sat, 3 Dec 2011 01:00:11 +0000 (17:00 -0800)]
mov: Allow empty stts atom.
Fixes regressions caused by
30c3d976
Diego Biurrun [Tue, 8 Nov 2011 14:01:47 +0000 (15:01 +0100)]
doc: document preferred Doxygen syntax and make patcheck detect it
Chris Berov [Fri, 2 Dec 2011 19:52:49 +0000 (21:52 +0200)]
adpcmenc: cosmetics: pretty-printing
Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
Chris Berov [Fri, 2 Dec 2011 15:46:01 +0000 (17:46 +0200)]
ac3dec: cosmetics: pretty-printing
Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
Chris Berov [Wed, 30 Nov 2011 11:16:07 +0000 (13:16 +0200)]
yuv4mpeg: cosmetics: pretty-printing
Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
Paul B. Mahol [Tue, 29 Nov 2011 01:52:58 +0000 (01:52 +0000)]
shorten: remove dead initialization
Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
Reimar Döffinger [Sat, 5 Nov 2011 22:27:00 +0000 (23:27 +0100)]
roqvideodec: set AVFrame reference before reget_buffer.
Otherwise it might return a write-only frame which would break
decoding completely.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Carl Eugen Hoyos [Thu, 10 Nov 2011 22:07:27 +0000 (23:07 +0100)]
bmp: fix some 1bit samples.
<= 8bpp BMP images always have palette.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Janne Grunau [Fri, 2 Dec 2011 23:21:06 +0000 (00:21 +0100)]
latmdec: add fate test for audio config change
David Goldwich [Fri, 2 Dec 2011 04:54:21 +0000 (05:54 +0100)]
oma: PCM support
Signed-off-by: David Goldwich <david.goldwich@gmail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
David Goldwich [Fri, 2 Dec 2011 04:54:20 +0000 (05:54 +0100)]
oma: better format detection with small probe buffer
Signed-off-by: David Goldwich <david.goldwich@gmail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
David Goldwich [Fri, 2 Dec 2011 04:54:19 +0000 (05:54 +0100)]
oma: clearify ambiguous if condition
Signed-off-by: David Goldwich <david.goldwich@gmail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Derek Buitenhuis [Sat, 3 Dec 2011 19:35:23 +0000 (14:35 -0500)]
wavpack: Properly clip samples during lossy decode
When decoding lossy WavPack samples, they are supposed
to be clipped, in order to be decoded correctly.
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Yordan Makariev [Sat, 3 Dec 2011 18:25:57 +0000 (20:25 +0200)]
Code clean-up for crc.c, lfg.c, log.c, random_see.d, rational.c and tree.c.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Tsvetelina Borisova [Sat, 3 Dec 2011 18:23:52 +0000 (20:23 +0200)]
Cleaned pixdesc.c file in libavutil
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Nathan Adil Maxson [Fri, 2 Dec 2011 19:08:56 +0000 (11:08 -0800)]
zmbv.c: coding style clean-up.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Nathan Adil Maxson [Fri, 2 Dec 2011 23:00:16 +0000 (15:00 -0800)]
xan.c: coding style clean-up.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Konstantin Todorov [Wed, 30 Nov 2011 20:55:45 +0000 (22:55 +0200)]
mpegvideo.c: code cleanup - first 500 lines.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Ronald S. Bultje [Wed, 30 Nov 2011 06:22:44 +0000 (22:22 -0800)]
h264: fix frame reordering code.
Fixes fate-h264-conformance-{mr2_tandberg_e,mr3_tandberg_b} without
requiring -strict 1.
Derek Buitenhuis [Thu, 1 Dec 2011 20:24:08 +0000 (20:24 +0000)]
fate: Add a test for the VBLE decoder
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Signed-off-by: Janne Grunau <janne-libav@jannau.net>
Luca Barbato [Sat, 3 Dec 2011 00:18:28 +0000 (01:18 +0100)]
doc: break some long lines in developer.texi
Luca Barbato [Thu, 1 Dec 2011 10:43:11 +0000 (11:43 +0100)]
drawtext: make x and y parametric
Introduce variables "E", "PHI", "PI", "main_w"/"W", "main_h"/"H",
"text_w"/"w", "text_h"/"h", "x", "y", "n" and "t" in line with
vf_overlay and refactor the code accordingly.
Luca Barbato [Thu, 1 Dec 2011 10:27:19 +0000 (11:27 +0100)]
drawtext: manage memory allocation better
Call dtext_prepare_text as early as possible
Do not draw if the memory allocation failed
Luca Barbato [Thu, 1 Dec 2011 10:14:54 +0000 (11:14 +0100)]
drawtext: refactor draw_text
Split the memory allocation from the actual drawing.
Janne Grunau [Sat, 3 Dec 2011 00:11:12 +0000 (01:11 +0100)]
doc: remove space between variable and post increment in example code
Janne Grunau [Sat, 22 Oct 2011 20:04:00 +0000 (22:04 +0200)]
aac_latm: reconfigure decoder on audio specific config changes
Janne Grunau [Fri, 21 Oct 2011 15:25:30 +0000 (17:25 +0200)]
latmdec: fix audio specific config parsing
Pass the correct size in bits to mpeg4audio_get_config and add a flag
to disable parsing of the sync extension when the size is not known.
Latm with AudioMuxVersion 0 does not specify the size of the audio
specific config. Data after the audio specific config can be
misinterpreted as sync extension resulting in random and wrong configs.
Justin Ruggles [Tue, 6 Sep 2011 16:17:45 +0000 (12:17 -0400)]
Add avcodec_decode_audio4().
Deprecate avcodec_decode_audio3().
Implement audio support in avcodec_default_get_buffer().
Implement the new audio decoder API in all audio decoders.
Justin Ruggles [Mon, 14 Nov 2011 21:07:03 +0000 (16:07 -0500)]
avcodec: change number of plane pointers from 4 to 8 at next major bump.
Add AV_NUM_DATA_POINTERS to simplify the bump transition.
This will allow for supporting more planar audio channels without having to
allocate separate pointer arrays.
Victor Vasiliev [Thu, 1 Dec 2011 16:45:44 +0000 (20:45 +0400)]
Update developers documentation with coding conventions.
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Mans Rullgard [Sat, 26 Nov 2011 15:30:34 +0000 (15:30 +0000)]
svq1dec: avoid undefined get_bits(0) call
Signed-off-by: Mans Rullgard <mans@mansr.com>
Mans Rullgard [Fri, 2 Dec 2011 16:45:00 +0000 (16:45 +0000)]
ARM: h264dsp_neon cosmetics
- Replace 'ip' with 'r12'.
- Use correct size designators for vld1/vst1.
- Whitespace fixes.
Signed-off-by: Mans Rullgard <mans@mansr.com>
Janne Grunau [Tue, 29 Nov 2011 13:38:10 +0000 (13:38 +0000)]
ARM: make some NEON macros reusable
Signed-off-by: Mans Rullgard <mans@mansr.com>
Mans Rullgard [Tue, 29 Nov 2011 18:38:02 +0000 (18:38 +0000)]
Do not memcpy raw video frames when using null muxer
Commit 035af99 made avconv always call an encoder when using the
null muxer. While useful for 2-pass encodes, it inadvertently
caused an extra memcpy of raw frames when decoding only.
This hack restores the old behaviour when only decoding while
allowing use of the null muxer with encoded streams as well.
Signed-off-by: Mans Rullgard <mans@mansr.com>
Luca Barbato [Fri, 2 Dec 2011 13:07:45 +0000 (14:07 +0100)]
fate: update asf seektest
Aaron Colwell [Mon, 28 Nov 2011 15:21:47 +0000 (07:21 -0800)]
vp8: flush buffers on size changes.
Luca Barbato [Fri, 2 Dec 2011 09:26:00 +0000 (10:26 +0100)]
doc: improve general documentation for MacOSX
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
John Stebbins [Tue, 15 Nov 2011 02:56:37 +0000 (03:56 +0100)]
asf: use packet dts as approximation of pts
Having a somehow off seeking is better than having none at all.
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Luca Barbato [Mon, 14 Nov 2011 14:18:49 +0000 (15:18 +0100)]
asf: do not call av_read_frame
The asf_read_pts should read the bitstream directly.
Martin Storsjö [Fri, 2 Dec 2011 09:06:18 +0000 (11:06 +0200)]
rtsp: Initialize the media_type_mask in the rtp guessing demuxer
The media_type_mask is initialized via AVOptions for the
rtsp and sdp demuxers, but it isn't available as an option
for the rtp guessing demuxer (since it doesn't really make
sense there). Therefore, it must be manually initialized
instead, since a zero value means no media types at all
are accepted.
Signed-off-by: Martin Storsjö <martin@martin.st>
Nathan Adil Maxson [Thu, 1 Dec 2011 05:37:33 +0000 (21:37 -0800)]
Cleaned up alacenc.c
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Martin Storsjö [Wed, 30 Nov 2011 21:11:50 +0000 (23:11 +0200)]
rtpenc: Add support for G726 audio
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Thu, 1 Dec 2011 08:45:26 +0000 (10:45 +0200)]
rtpdec: Interpret the different G726 names as bits_per_coded_sample
For the standardized 8 kHz sample rate, this works exactly the same.
For nonstandard sample rates, the different predefined G726
names (G726-16, G726-24, G726-32, G726-40) are interpreted as an
indication of the bits per coded sample, even though their
actual bitrates aren't what the name specifies.
This feels more sane than using free-form names for nonstandard
sample rate/bitrate combinations, e.g like G726-22, G726-33
for 11025 Hz.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Wed, 30 Nov 2011 21:10:54 +0000 (23:10 +0200)]
rtpenc: Change rtp_send_samples to handle sample sizes other than even bytes
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Wed, 30 Nov 2011 20:03:43 +0000 (22:03 +0200)]
rtpenc: Cast a rescaling parameter to int64_t
This avoids overflow if frame_size is over 2147, since both
frame_size and AV_TIME_BASE are plain integers.
Signed-off-by: Martin Storsjö <martin@martin.st>
Ronald S. Bultje [Thu, 1 Dec 2011 20:45:10 +0000 (12:45 -0800)]
h264: cap max has_b_frames at MAX_DELAYED_PIC_COUNT - 1.
This prevents frame allocation overflows, and fixed
fate-h264-conformance-mr3_tandberg_b with 2 threads.
Mans Rullgard [Thu, 1 Dec 2011 18:39:02 +0000 (18:39 +0000)]
ARM: fix indentation in ff_dsputil_init_neon()
Signed-off-by: Mans Rullgard <mans@mansr.com>
Mans Rullgard [Thu, 1 Dec 2011 15:01:44 +0000 (15:01 +0000)]
ARM: NEON put/avg_pixels8/16 cosmetics
This makes whitespace and register names consistent with
the style used in more recent code.
Signed-off-by: Mans Rullgard <mans@mansr.com>
Mans Rullgard [Thu, 1 Dec 2011 05:07:09 +0000 (05:07 +0000)]
ARM: add remaining NEON avg_pixels8/16 functions
Mans Rullgard [Thu, 1 Dec 2011 05:04:32 +0000 (05:04 +0000)]
ARM: clean up NEON put/avg_pixels macros
Although this adds a few lines, the macro calls are less convoluted.
Signed-off-by: Mans Rullgard <mans@mansr.com>
Justin Ruggles [Wed, 30 Nov 2011 21:51:01 +0000 (16:51 -0500)]
fate: split acodec-pcm into individual tests
this removes 2 redundant tests for pcm in mkv.
we can add the coverage back in later as fate-lavf tests if needed.
Reinhard Tartler [Thu, 1 Dec 2011 17:48:33 +0000 (18:48 +0100)]
swscale: #include "libavutil/mathematics.h"
this file uses the M_PI macro since
4e74187db2f5db52f88729efc662df9d6bc763e1, so include the correct header
directly.
Signed-off-by: Reinhard Tartler <siretart@tauware.de>
Anton Khirnov [Thu, 1 Dec 2011 16:28:36 +0000 (17:28 +0100)]
pmpdec: don't use deprecated av_set_pts_info.
Mans Rullgard [Thu, 1 Dec 2011 00:18:38 +0000 (00:18 +0000)]
rv34: align temporary block of "dct" coefs
This is needed for optimised transforms.
Signed-off-by: Mans Rullgard <mans@mansr.com>
Reimar Döffinger [Sat, 26 Mar 2011 15:25:10 +0000 (16:25 +0100)]
Add PlayStation Portable PMP format demuxer
Not yet complete, for demuxing AAC the AAC header must be generated
manually.
Possibly the decoder could accept the header as extradata to simplify
this.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Martin Storsjö [Thu, 1 Dec 2011 09:53:57 +0000 (11:53 +0200)]
proto: Realign struct initializers
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Thu, 1 Dec 2011 09:44:21 +0000 (11:44 +0200)]
proto: Use .priv_data_size to allocate the private context
This simplifies the open functions by avoiding one function
call that needs error checking, reducing the amount of
extra bulk code.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Thu, 1 Dec 2011 09:48:03 +0000 (11:48 +0200)]
mmsh: Properly clean up if the second ffurl_alloc failed
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Thu, 1 Dec 2011 09:34:06 +0000 (11:34 +0200)]
rtmp: Clean up properly if the handshake failed
This prevents memory leaks if this function returns an error.
Signed-off-by: Martin Storsjö <martin@martin.st>