summaryrefslogtreecommitdiff
path: root/libavformat/rtpenc_chain.c
Commit message (Collapse)AuthorAge
* avformat: Constify the API wrt AV(In|Out)putFormatAndreas Rheinhardt2021-04-27
| | | | | | | Also constify AVProbeData. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
* lavf: Constify AVOutputFormat pointer.Carl Eugen Hoyos2019-03-20
|
* rtpenc_chain: forward strict_std_compliance flags to rtp muxerTristan Matthews2019-02-23
| | | | | fixes: https://trac.ffmpeg.org/ticket/6713 Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avformat: deprecate unused MP4A_LATM flagGyan Doshi2018-06-13
| | | | | | | A generic lavf flag for AAC LATM packetization for the RTP muxer was added in ef409645f0 and then made inert 20 days later in 0832122880 when a private muxer option was added and the generic flag no longer read.
* avformat/rtpenc_chain: use the proper function to free AVFormatContextJames Almer2018-03-26
| | | | | | Fixes ticket #7075 Signed-off-by: James Almer <jamrial@gmail.com>
* Merge commit '9200514ad8717c63f82101dc394f4378854325bf'Derek Buitenhuis2016-04-10
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit '9200514ad8717c63f82101dc394f4378854325bf': lavf: replace AVStream.codec with AVStream.codecpar This has been a HUGE effort from: - Derek Buitenhuis <derek.buitenhuis@gmail.com> - Hendrik Leppkes <h.leppkes@gmail.com> - wm4 <nfxjfg@googlemail.com> - Clément Bœsch <clement@stupeflix.com> - James Almer <jamrial@gmail.com> - Michael Niedermayer <michael@niedermayer.cc> - Rostislav Pehlivanov <atomnuker@gmail.com> Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
| * lavf: replace AVStream.codec with AVStream.codecparAnton Khirnov2016-02-23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, AVStream contains an embedded AVCodecContext instance, which is used by demuxers to export stream parameters to the caller and by muxers to receive stream parameters from the caller. It is also used internally as the codec context that is passed to parsers. In addition, it is also widely used by the callers as the decoding (when demuxer) or encoding (when muxing) context, though this has been officially discouraged since Libav 11. There are multiple important problems with this approach: - the fields in AVCodecContext are in general one of * stream parameters * codec options * codec state However, it's not clear which ones are which. It is consequently unclear which fields are a demuxer allowed to set or a muxer allowed to read. This leads to erratic behaviour depending on whether decoding or encoding is being performed or not (and whether it uses the AVStream embedded codec context). - various synchronization issues arising from the fact that the same context is used by several different APIs (muxers/demuxers, parsers, bitstream filters and encoders/decoders) simultaneously, with there being no clear rules for who can modify what and the different processes being typically delayed with respect to each other. - avformat_find_stream_info() making it necessary to support opening and closing a single codec context multiple times, thus complicating the semantics of freeing various allocated objects in the codec context. Those problems are resolved by replacing the AVStream embedded codec context with a newly added AVCodecParameters instance, which stores only the stream parameters exported by the demuxers or read by the muxers.
* | rtpenc_chain: also copy AVFMT_FLAG_BITEXACT to new AVFormatContextAndreas Cadhalpun2015-08-23
| | | | | | | | | | | | | | | | Otherwise it is impossible to make '-movflags +rtphint' bitexact after FF_API_LAVF_BITEXACT has been disabled. Reviewed-by: Ronald S. Bultje <rsbultje@gmail.com> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
* | Merge commit '8e32b1f0963d01d4f5d4803eb721f162e0d58d9a'Michael Niedermayer2015-02-25
|\| | | | | | | | | | | | | * commit '8e32b1f0963d01d4f5d4803eb721f162e0d58d9a': libavformat: Use ffio_free_dyn_buf where applicable Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * libavformat: Use ffio_free_dyn_buf where applicableMartin Storsjö2015-02-24
| | | | | | | | Signed-off-by: Martin Storsjö <martin@martin.st>
* | avformat/rtpenc_chain: Use avio_closep() to avoid leaving stale pointers in ↵Michael Niedermayer2015-01-08
| | | | | | | | | | | | memory Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | Merge commit '2bb2c2bd75e5f4b28a945511cda77e0a1a44c758'Michael Niedermayer2014-09-18
|\| | | | | | | | | | | | | | | * commit '2bb2c2bd75e5f4b28a945511cda77e0a1a44c758': rtpenc_chain: Pass the initial time_base hint on to the chained muxer See: [FFmpeg-devel] [PATCH] avformat/rtpenc_chain: Set timebase Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * rtpenc_chain: Pass the initial time_base hint on to the chained muxerMartin Storsjö2014-09-17
| | | | | | | | | | | | | | | | | | | | | | | | In practice this hint is ignored - the rtp muxer always overwrites the stream time base without taking the hint into account. But as a general practice this is the correct way to pass a time base hint on to a chained muxer. This avoids warnings about using the codec time base as hint being deprecated. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit 'f797b134cad4d248b1c8955659997980d0668bc3'Michael Niedermayer2014-05-31
|\| | | | | | | | | | | | | | | * commit 'f797b134cad4d248b1c8955659997980d0668bc3': rtpenc_chain: Don't copy the time base to the source stream by default See: 1fe40e1b0538a8eb8425123c47775b5d141ae084 Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * rtpenc_chain: Don't copy the time base to the source stream by defaultMartin Storsjö2014-05-31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Only copy it manually in the muxers where it makes sense (rtspenc, sapenc). Don't touch the original AVStream in movenchint, where the original AVStream should be kept untouched. This fixes the normal tracks in RTP hinted files after abb810db - the hint tracks were ok while the normal media tracks were broken, noticed by Michael Niedermayer. This reverts abb810db but achieves the same effect for the other muxers. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit 'abb810db036628e11a5171134ebe320b187ee6d6'Michael Niedermayer2014-05-30
|\| | | | | | | | | | | | | * commit 'abb810db036628e11a5171134ebe320b187ee6d6': Revert "rtpenc_chain: Don't copy the time_base back to the caller" Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * Revert "rtpenc_chain: Don't copy the time_base back to the caller"Martin Storsjö2014-05-30
| | | | | | | | | | | | | | | | | | | | | | | | | | While it strictly isn't necessary to copy the time base (since any use of it is scaled in ff_write_chained), it still is better to signal the actual time base to the caller, avoiding one unnecessary rescaling. This also lets the caller know what the actual internal time base is, in case that is useful info for some caller. This reverts commit 397ffde115f4e0482a007b672f40457596cebfc4. Signed-off-by: Martin Storsjö <martin@martin.st>
* | avformat: remove duplicate includesMichael Niedermayer2013-09-21
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | Merge commit '62572435d4106098c090fb8f129a9090e41ff1eb'Michael Niedermayer2013-08-07
|\| | | | | | | | | | | | | * commit '62572435d4106098c090fb8f129a9090e41ff1eb': rtpenc_chain: Check for errors from ffio_fdopen and ffio_open_dyn_packet_buf Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * rtpenc_chain: Check for errors from ffio_fdopen and ffio_open_dyn_packet_bufMartin Storsjö2013-08-07
| | | | | | | | Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit '4a4a7e138c92901e04db46a6b05cc6948023e5f5'Michael Niedermayer2013-01-24
|\| | | | | | | | | | | | | | | * commit '4a4a7e138c92901e04db46a6b05cc6948023e5f5': rtpenc_chain: Use the original AVFormatContext for getting payload type rtp: Make sure the output format pointer is set Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * rtpenc_chain: Use the original AVFormatContext for getting payload typeMartin Storsjö2013-01-24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In ff_rtp_get_payload_type, the AVFormatContext is used for checking whether the payload_type or rtpflags options are set. In rtpenc_chain, the rtpctx struct is a newly initialized struct where no options have been set yet, so no options can be fetched from there. All muxers that internally chain rtp muxers have the "rtpflags" field that allows passing such options on (which is how this worked before 8034130e06), so this works just as intended. This makes it possible to produce H263 in RFC2190 format with chained RTP muxers. CC: libav-stable@libav.org Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit 'e4d349b4014ee2a03f521027e0bd1ace4a9e60bd'Michael Niedermayer2012-11-29
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit 'e4d349b4014ee2a03f521027e0bd1ace4a9e60bd': fate: h264: Add dependencies fate: ea: Add dependencies fate: Do not unconditionally run libavutil tests rtpenc_chain: Remove unused variable nuv: check for malloc failure when allocating extradata nuv: use the stream indices generated by avformat_new_stream() Conflicts: tests/fate/ea.mak Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * rtpenc_chain: Remove unused variableDiego Biurrun2012-11-28
| |
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2012-11-15
|\| | | | | | | | | | | | | | | | | | | | | * qatar/master: bgmc: Fix av_malloc checks in ff_bgmc_init() rtp: set the payload type as stream id Conflicts: libavformat/rtpenc_chain.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * rtp: set the payload type as stream idLuca Barbato2012-11-14
| | | | | | | | | | | | | | Support multiple video/audio streams with different format in the same session. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2012-05-26
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: opt: Add av_opt_set_bin() avconv: Display the error returned by avformat_write_header rtpenc_chain: Return an error code instead of just a plain pointer rtpenc_chain: Free the URLContext on failure rtpenc: Expose the ssrc as an avoption avprobe: display the codec profile in show_stream() avprobe: fix function prototype cosmetics: Fix indentation avprobe: changelog entry avprobe: update documentation avprobe: provide JSON output avprobe: output proper INI format avprobe: improve formatting rtmp: fix url parsing fate: document TARGET_EXEC and its usage Conflicts: doc/APIchanges doc/fate.texi doc/ffprobe.texi ffprobe.c libavformat/version.h libavutil/avutil.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * rtpenc_chain: Return an error code instead of just a plain pointerMartin Storsjö2012-05-26
| | | | | | | | | | | | Also check the return value in sapenc. Signed-off-by: Martin Storsjö <martin@martin.st>
| * rtpenc_chain: Free the URLContext on failureMartin Storsjö2012-05-26
| | | | | | | | | | | | | | | | If an URLContext is passed in, its ownership is given to this function, and is either owned by the returned AVFormatContext on a successful return, or freed on failure. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2012-01-29
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: aacenc: Fix LONG_START windowing. aacenc: Fix a bug where deinterleaved samples were stored in the wrong place. avplay: use the correct array size for stride. lavc: extend doxy for avcodec_alloc_context3(). APIchanges: mention avcodec_alloc_context()/2/3 avcodec_align_dimensions2: set only 4 linesizes, not AV_NUM_DATA_POINTERS. aacsbr: ARM NEON optimised sbrdsp functions aacsbr: align some arrays aacsbr: move some simdable loops to function pointers cosmetics: Remove extra newlines at EOF Conflicts: libavcodec/utils.c libavfilter/formats.c libavutil/mem.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * cosmetics: Remove extra newlines at EOFAlex Converse2012-01-27
| |
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2011-11-14
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: lavf: pass options from AVFormatContext to avio. avformat: Use avio_open2, pass the AVFormatContext interrupt_callback onwards avio: add avio_open2, taking an interrupt callback and options avio: add support for passing options to protocols. avio: add and use ffurl_protocol_next(). avformat: Pass the interrupt callback on to chained muxers/demuxers avio: Add an AVIOInterruptCB parameter to ffurl_open/ffurl_alloc avformat: Use ff_check_interrupt avio: Add an internal utility function for checking the new interrupt callback avio: Add AVIOInterruptCB texi2html: remove stray \n doc: prettyfy the texi2html documentation swscale: handle unaligned buffers in yuv2plane1 Conflicts: libavformat/avformat.h libavformat/avio.c libavformat/mov.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * avformat: Pass the interrupt callback on to chained muxers/demuxersMartin Storsjö2011-11-13
| | | | | | | | | | | | There are a few more cases of chained demuxers, but they only use custom IO which don't do any blocking IO and thus don't need the callback.
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2011-10-20
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: presets: rename presets directory lavc: make avcodec_get_context_defaults3 "officially" public lavf: replace av_new_stream->avformat_new_stream part II. lavf,lavd: replace av_new_stream->avformat_new_stream part I. lavf: add avformat_new_stream as a replacement for av_new_stream. Use correct scaling table for bwd-pred MVs in second B-field Ut Video decoder Makefile: change presets extension to .avpreset lavfi: add rgbtestsrc source, ported from MPlayer libmpcodecs lavfi: add testsrc source AVOptions: add documentation. presets: update libx264 ffpresets Conflicts: Changelog doc/APIchanges doc/ffmpeg.texi ffpresets/libx264-ipod320.ffpreset ffpresets/libx264-ipod640.ffpreset ffserver.c libavcodec/avcodec.h libavcodec/options.c libavcodec/version.h libavdevice/libdc1394.c libavfilter/avfilter.h libavfilter/vsrc_testsrc.c libavformat/flvdec.c libavformat/riff.c libavformat/version.h libavformat/wtv.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * lavf,lavd: replace av_new_stream->avformat_new_stream part I.Anton Khirnov2011-10-19
| | | | | | | | | | Trivial replacements with sed are done in this commit: sed 's/av_new_stream(\([^)]*\), 0)/avformat_new_stream(\1, NULL)/'
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2011-10-13
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: (31 commits) tiffenc: initialize forgotten avctx. avplay: free the active audio packet at exit. avplay: free rdft data used for spectrogram analysis. log.h: make AVClass a named struct fix ac3 encoder documentation vc1: more prettyprinting cosmetics vc1: prettyprint some tables vc1: K&R formatting cosmetics AVOptions: bump minor and add APIchanges entry. cmdutils/avtools: simplify show_help() by using av_opt_child_class_next() AVOptions: rename FF_OPT_TYPE_* => AV_OPT_TYPE_* Remove all uses of deprecated AVOptions API. AVOptions: add av_opt_next, deprecate av_next_option. AVOptions: add functions for evaluating option strings. AVOptions: split get_number(). AVOptions: add av_opt_get*, deprecate av_get*. AVOptions: add av_opt_set*(). AVOptions: add new API for enumerating children. rv34: move inverse transform functions to DSP context flvenc: Write the right metadata entry count ... Conflicts: avconv.c cmdutils.c doc/APIchanges ffplay.c ffprobe.c libavcodec/ac3dec.c libavcodec/h264.c libavcodec/libvpxenc.c libavcodec/libx264.c libavcodec/mpeg12enc.c libavcodec/options.c libavdevice/libdc1394.c libavdevice/v4l2.c libavfilter/vf_drawtext.c libavformat/flvdec.c libavformat/mpegtsenc.c libavformat/options.c libavutil/avutil.h libavutil/opt.c libswscale/utils.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * Remove all uses of deprecated AVOptions API.Anton Khirnov2011-10-12
| |
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2011-06-18
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: lavc: add opt_find to AVCodecContext class. h264: Complexify frame num gap shortening code intreadwrite.h: fix AV_RL32/AV_RB32 signedness. Fix decoding of mpegts streams with h264 video that does *NOT* have b frames Add minor bumps and APIChanges entries for lavf private options. ffmpeg: deprecate -vc and -tvstd ffmpeg: use new avformat_open_* API. ffserver: use new avformat_open_* API. ffprobe: use new avformat_open_* API. ffplay: use new avformat_open_* API. cmdutils: add opt_default2(). dict: add AV_DICT_APPEND flag. lavf: add avformat_write_header() as a replacement for av_write_header(). Deprecate av_open_input_* and remove their uses. lavf: add avformat_open_input() as a replacement for av_open_input_* AVOptions: add av_opt_find() as a replacement for av_find_opt. AVOptions: add av_opt_set_dict() mapping a dictionary struct to a context. ffmpeg: don't abuse a global for passing frame size from input to output ffmpeg: don't abuse a global for passing pixel format from input to output ffmpeg: initialise encoders earlier. Conflicts: cmdutils.c doc/APIchanges ffmpeg.c ffplay.c ffprobe.c libavcodec/h264.c libavformat/avformat.h libavformat/utils.c libavformat/version.h libavutil/avutil.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * lavf: add avformat_write_header() as a replacement for av_write_header().Anton Khirnov2011-06-16
| | | | | | | | It supports more convenient setting of AVOptions.
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2011-06-11
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: bitstream: Properly promote av_reverse values before shifting. libavutil/swscale: YUV444P10/YUV444P9 support. H.264: Fix high bit depth explicit biweight h264: Fix 10-bit H.264 x86 chroma v loopfilter asm. Replace DEBUG_SEEK/DEBUG_SI + av_log combinations by av_dlog. Update copyright year for ac3enc_opts_template.c. adts: Adjust frame size mask to follow the specification. movenc: Add RTP muxer/hinter options movenc: Pass the RTP AVFormatContext to the SDP generation rtspenc: Add RTP muxer options rtspenc: Add an AVClass for setting muxer specific options rtpenc_chain: Pass the rtpflags options through to the chained muxer rtpenc: Declare the rtp flags private AVOptions in rtpenc.h sdp: Reindent after the previous commit rtpenc: MP4A-LATM payload support avoptions: Add an av_opt_flag_is_set function for inspecting flag fields sdp: Allow passing an AVFormatContext to the SDP generation mov: Fix wrong timestamp generation for fragmented movies that have time offset caused by the first edit list entry. mpeg12: more advanced ffmpeg mpeg2 aspect guessing code. swscale: split YUYV output out of yuv2packed[12X]_c(). Conflicts: doc/APIchanges libavcodec/Makefile libavcodec/h264dsp_template.c libavcodec/mpeg12.c libavformat/aacdec.c libavformat/avidec.c libavformat/internal.h libavformat/movenc.c libavformat/rtpenc.c libavformat/rtpenc_latm.c libavformat/sdp.c libavformat/version.h libavutil/avutil.h libavutil/pixfmt.h libswscale/swscale.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * rtpenc_chain: Pass the rtpflags options through to the chained muxerMartin Storsjö2011-06-10
| | | | | | | | Signed-off-by: Martin Storsjö <martin@martin.st>
* | rtpenc_chain: Pass the MP4A_LATM flag to chained muxersMartin Storsjö2011-05-20
| |
* | Merge remote branch 'qatar/master'Michael Niedermayer2011-04-04
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: fate: fix partial run when no samples path is specified ARM: NEON fixed-point forward MDCT ARM: NEON fixed-point FFT lavf: bump minor version and add an APIChanges entry for avio changes avio: simplify url_open_dyn_buf_internal by using avio_alloc_context() avio: make url_fdopen internal. avio: make url_open_dyn_packet_buf internal. avio: avio_ prefix for url_close_dyn_buf avio: avio_ prefix for url_open_dyn_buf avio: introduce an AVIOContext.seekable field ac3enc: use generic fixed-point mdct lavfi: add fade filter Change yadif to not use out of picture lines. lavc: deprecate AVCodecContext.antialias_algo lavc: mark mb_qmin/mb_qmax for removal on next major bump. Conflicts: doc/filters.texi libavcodec/ac3enc_fixed.h libavcodec/ac3enc_float.h libavfilter/Makefile libavfilter/allfilters.c libavfilter/vf_fade.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * avio: make url_fdopen internal.Anton Khirnov2011-04-03
| | | | | | | | | | The unbuffered URLContext API will be made private, so there's no point in this function being public.
| * avio: make url_open_dyn_packet_buf internal.Anton Khirnov2011-04-03
| | | | | | | | | | | | | | It doesn't look fit to be a part of the public API. Adding a temporary hack to ffserver to be able to use it, should be cleaned up when somebody is up for it.
| * avio: avio_ prefix for url_close_dyn_bufAnton Khirnov2011-04-03
| |
| * Replace FFmpeg with Libav in licence headersMans Rullgard2011-03-19
| | | | | | | | Signed-off-by: Mans Rullgard <mans@mansr.com>
| * avio: rename url_fopen/fclose -> avio_open/close.Anton Khirnov2011-02-23
| | | | | | | | Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
| * rtpenc_chain: Don't copy the time_base back to the callerMartin Storsjö2011-02-04
| | | | | | | | | | | | | | | | If required, the caller can do this itself. ff_write_chained rescales timestamps as necessary, and all current callers of rtpenc_chain use ff_write_chained, making this timebase copy unnecessary. Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
| * Use avformat_free_context for cleaning up muxersMartin Storsjö2011-02-04
| | | | | | | | Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>