summaryrefslogtreecommitdiff
path: root/libavdevice/x11grab.c
Commit message (Collapse)AuthorAge
* Merge commit '2a5ac99e6e06078713f684fee2466c91f677b303'Michael Niedermayer2014-10-05
|\ | | | | | | | | | | | | | | | | | | | | * commit '2a5ac99e6e06078713f684fee2466c91f677b303': x11grab: Check the XQueryPointer return value Conflicts: libavdevice/x11grab.c See: 69c34a6ac986e31b5286a1d566617ec25b93e6a7 Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * x11grab: Check the XQueryPointer return valueAntonio Ospite2014-10-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The paint_mouse_pointer() code uses XFixes to retrieve the cursor coordinates, but XFixes gives no information about which screen the pointer is on; this results in always drawing the cursor on the captured screen even if the mouse pointer was on another screen. For example, when capturing from screen 1 (i.e. -f x11grab -i ":0.1") the cursor was being drawn in the captured image even when the mouse pointer was actually on screen 0, which is wrong and visually confusing. CC: libav-stable@libav.org Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
* | Merge commit '5b9c817dc7577b6d44acc94d73b9c77c52cda489'Michael Niedermayer2014-10-05
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit '5b9c817dc7577b6d44acc94d73b9c77c52cda489': x11grab: Check XFixesGetCursorImage return value Conflicts: libavdevice/x11grab.c See: a65c0a3fe822386be30fd3371af9f0d008b02874 The warning with adjusted text is kept from a65c0a3fe822386be30fd3371af9f0d008b02874 but drawing the cursor is not disabled in case XFixesGetCursorImage() fails Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * x11grab: Check XFixesGetCursorImage return valueLuca Barbato2014-10-04
| | | | | | | | | | | | | | It could return NULL if the cursor is outside the screen, the connection timed out or the system is out of memory. CC: libav-stable@libav.org
* | Merge commit '89fa2b5616274194d90bde0aeebf6adbd1245193'Michael Niedermayer2014-10-05
|\| | | | | | | | | | | | | | | * commit '89fa2b5616274194d90bde0aeebf6adbd1245193': x11grab: Check for XFixes availability at runtime See: a65c0a3fe822386be30fd3371af9f0d008b02874 Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * x11grab: Check for XFixes availability at runtimeLuca Barbato2014-10-04
| |
* | avdevice/x11grab: fix cursor drawing in multi-screen setupAntonio Ospite2014-09-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The code uses XFixes to retrieve the cursor coordinates, but XFixes gives no information of what screen the pointer is on; this results in always drawing the cursor on the captured screen even if the mouse pointer was on another screen. For example, when capturing from screen 1 (i.e. -f x11grab -i ":0.1") the cursor was being drawn in the captured image even when the mouse pointer was actually on screen 0, which is wrong and visually confusing. Use XQueryPointer to check that the pointer is actually on the screen which is being captured. Signed-off-by: Antonio Ospite <ao2@ao2.it> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avdevice/x11grab: rename the "w" Window to "root" in paint_mouse_pointerAntonio Ospite2014-09-09
| | | | | | | | | | | | | | | | | | This specifies better the meaning of the variable, and is also in preparation of a subsequent change which will introduce a temporary Window variable for which "w" is an good name. Signed-off-by: Antonio Ospite <ao2@ao2.it> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avdevice/x11grab: fix error handling in pixel formatsMichael Niedermayer2014-09-04
| | | | | | | | | | Reviewed-by: Benoit Fouet <benoit.fouet@free.fr> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | Merge commit '65e78a2e4b111627c0ebdf2c9baec95e5e21560d'Michael Niedermayer2014-09-03
|\| | | | | | | | | | | | | | | | | | | * commit '65e78a2e4b111627c0ebdf2c9baec95e5e21560d': x11grab: Refactor pixel format parsing Conflicts: libavdevice/x11grab.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * x11grab: Refactor pixel format parsingLuca Barbato2014-09-03
| |
* | Merge commit 'bb3ead7e54fec205c595cfb8b1d8900d50d3d1cc'Michael Niedermayer2014-09-03
|\| | | | | | | | | | | | | * commit 'bb3ead7e54fec205c595cfb8b1d8900d50d3d1cc': x11grab: Fallback to normal XImage if SHM is not supported Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * x11grab: Fallback to normal XImage if SHM is not supportedLuca Barbato2014-09-03
| |
* | Merge commit '58396e806c65fe0eb00e6ccf1980f810cdceed05'Michael Niedermayer2014-08-28
|\| | | | | | | | | | | | | | | | | | | * commit '58396e806c65fe0eb00e6ccf1980f810cdceed05': x11grab: Use a typedef for the context, as most other code does Conflicts: libavdevice/x11grab.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * x11grab: Use a typedef for the context, as most other code doesLuca Barbato2014-08-28
| | | | | | | | Signed-off-by: Diego Biurrun <diego@biurrun.de>
* | Merge commit '7bb505a33ca131906b2ceb2f298e104c862740ea'Michael Niedermayer2014-08-28
|\| | | | | | | | | | | | | | | | | | | | | * commit '7bb505a33ca131906b2ceb2f298e104c862740ea': x11grab: Drop a spurious space in the extension reporting message Conflicts: libavdevice/x11grab.c See: 9af209712099699d717596f55b08b3bac8b6b563 Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * x11grab: Drop a spurious space in the extension reporting messageLuca Barbato2014-08-28
| | | | | | | | Signed-off-by: Diego Biurrun <diego@biurrun.de>
* | Merge commit '20e82b41fcad23ebbb18d89948aebfcc53921198'Michael Niedermayer2014-08-28
|\| | | | | | | | | | | | | | | | | | | * commit '20e82b41fcad23ebbb18d89948aebfcc53921198': x11grab: Small near-cosmetic refactorings Conflicts: libavdevice/x11grab.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * x11grab: Small near-cosmetic refactoringsLuca Barbato2014-08-28
| | | | | | | | Signed-off-by: Diego Biurrun <diego@biurrun.de>
* | Merge commit 'f07a4290a0e8f31796e348edd3ed06b8d15132d8'Michael Niedermayer2014-08-28
|\| | | | | | | | | | | | | | | | | | | * commit 'f07a4290a0e8f31796e348edd3ed06b8d15132d8': x11grab: K&R formatting cosmetics Conflicts: libavdevice/x11grab.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * x11grab: K&R formatting cosmeticsLuca Barbato2014-08-28
| | | | | | | | Signed-off-by: Diego Biurrun <diego@biurrun.de>
* | lavd/x11grab: reindent after last commit.Nicolas George2014-07-17
| |
* | lavd/x11grab: add an option to disable MIT-SHM.Nicolas George2014-07-17
| | | | | | | | | | | | With remote displays supporting the MIT-SHM extension, the extension is detected and used, but attaching fails asynchronously.
* | lavd/x11grab: check 32-bits color masks.Nicolas George2014-07-17
| | | | | | | | | | | | | | The X11 servers by VNC, at 32-bits depths, has the following masks: R:0x000007ff G:0x003ff800 B:0xffc00000 This is not compatible with AV_PIX_FMT_0RGB32, and the result is success with completely wrong colors.
* | lavd/x11grab: change error code for unsupported visuals.Nicolas George2014-07-17
| |
* | lavd/x11grab: disable drawing mouse without XFixes.Nicolas George2014-07-17
| | | | | | | | | | | | Fix a segfault if the XFixes extension is not available on the X11 server. Can be reproduced using the VNC server.
* | lavd: add categories to device implementationsLukasz Marek2014-03-03
| | | | | | | | Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
* | lavd/x11grab: Support AV_PIX_FMT_PAL8.Carl Eugen Hoyos2013-10-24
| | | | | | | | Fixes ticket #3068.
* | avdevice/x11grab: use AV_OPT_TYPE_VIDEO_RATEPaul B Mahol2013-07-26
| | | | | | | | Signed-off-by: Paul B Mahol <onemda@gmail.com>
* | avdevice/x11grab: allocate just one CursorMichael Niedermayer2013-06-21
| | | | | | | | | | | | | | Fixes resource leak and Ticket2450 Reviewed-by: Carl Eugen Hoyos <cehoyos@ag.or.at> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | x11grab: fix mixed declaration and codeMichael Niedermayer2012-10-29
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | x11: Fix x11grab BadCursorIsaac Dooley2012-10-23
| | | | | | | | | | | | | | | | Fixes Ticket1738 Based-on: A fix found in a perl module (http://ffmpeg.org/pipermail/ffmpeg-user/2012-August/008804.html) Reviewed-by: Clemens Fruhwirth <clemens@endorphin.org> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | Merge commit '716d413c13981da15323c7a3821860536eefdbbb'Michael Niedermayer2012-10-08
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit '716d413c13981da15323c7a3821860536eefdbbb': Replace PIX_FMT_* -> AV_PIX_FMT_*, PixelFormat -> AVPixelFormat Conflicts: doc/examples/muxing.c ffmpeg.h ffmpeg_filter.c ffmpeg_opt.c ffplay.c ffprobe.c libavcodec/8bps.c libavcodec/aasc.c libavcodec/aura.c libavcodec/avcodec.h libavcodec/avs.c libavcodec/bfi.c libavcodec/bmp.c libavcodec/bmpenc.c libavcodec/c93.c libavcodec/cscd.c libavcodec/cyuv.c libavcodec/dpx.c libavcodec/dpxenc.c libavcodec/eatgv.c libavcodec/escape124.c libavcodec/ffv1.c libavcodec/flashsv.c libavcodec/fraps.c libavcodec/h264.c libavcodec/huffyuv.c libavcodec/iff.c libavcodec/imgconvert.c libavcodec/indeo3.c libavcodec/kmvc.c libavcodec/libopenjpegdec.c libavcodec/libopenjpegenc.c libavcodec/libx264.c libavcodec/ljpegenc.c libavcodec/mjpegdec.c libavcodec/mjpegenc.c libavcodec/motionpixels.c libavcodec/mpeg12.c libavcodec/mpeg12enc.c libavcodec/mpeg4videodec.c libavcodec/mpegvideo_enc.c libavcodec/pamenc.c libavcodec/pcxenc.c libavcodec/pgssubdec.c libavcodec/pngdec.c libavcodec/pngenc.c libavcodec/pnm.c libavcodec/pnmdec.c libavcodec/pnmenc.c libavcodec/ptx.c libavcodec/qdrw.c libavcodec/qpeg.c libavcodec/qtrleenc.c libavcodec/raw.c libavcodec/rawdec.c libavcodec/rl2.c libavcodec/sgidec.c libavcodec/sgienc.c libavcodec/snowdec.c libavcodec/snowenc.c libavcodec/sunrast.c libavcodec/targa.c libavcodec/targaenc.c libavcodec/tiff.c libavcodec/tiffenc.c libavcodec/tmv.c libavcodec/truemotion2.c libavcodec/utils.c libavcodec/vb.c libavcodec/vp3.c libavcodec/wnv1.c libavcodec/xl.c libavcodec/xwddec.c libavcodec/xwdenc.c libavcodec/yop.c libavdevice/v4l2.c libavdevice/x11grab.c libavfilter/avfilter.c libavfilter/avfilter.h libavfilter/buffersrc.c libavfilter/drawutils.c libavfilter/formats.c libavfilter/src_movie.c libavfilter/vf_ass.c libavfilter/vf_drawtext.c libavfilter/vf_fade.c libavfilter/vf_format.c libavfilter/vf_hflip.c libavfilter/vf_lut.c libavfilter/vf_overlay.c libavfilter/vf_pad.c libavfilter/vf_scale.c libavfilter/vf_transpose.c libavfilter/vf_yadif.c libavfilter/video.c libavfilter/vsrc_testsrc.c libavformat/movenc.c libavformat/mxf.h libavformat/utils.c libavformat/yuv4mpeg.c libavutil/imgutils.c libavutil/pixdesc.c libswscale/input.c libswscale/output.c libswscale/swscale_internal.h libswscale/swscale_unscaled.c libswscale/utils.c libswscale/x86/swscale_template.c libswscale/x86/yuv2rgb.c libswscale/x86/yuv2rgb_template.c libswscale/yuv2rgb.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * Replace PIX_FMT_* -> AV_PIX_FMT_*, PixelFormat -> AVPixelFormatAnton Khirnov2012-10-08
| |
* | Merge commit 'e6153f173a49e5bfa70b0c04d2f82930533597b9'Michael Niedermayer2012-09-05
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit 'e6153f173a49e5bfa70b0c04d2f82930533597b9': avopt: Store defaults for AV_OPT_TYPE_INT in the i64 union member Conflicts: libavcodec/libopenjpegdec.c libavcodec/libopenjpegenc.c libavcodec/libx264.c libavcodec/mpeg12enc.c libavcodec/options_table.h libavcodec/snowenc.c libavcodec/tiffenc.c libavdevice/v4l2.c libavdevice/x11grab.c libavfilter/af_amix.c libavfilter/af_asyncts.c libavfilter/af_join.c libavfilter/buffersrc.c libavfilter/src_movie.c libavfilter/vf_delogo.c libavfilter/vf_drawtext.c libavformat/http.c libavformat/img2dec.c libavformat/img2enc.c libavformat/movenc.c libavformat/mpegenc.c libavformat/mpegtsenc.c libavformat/options_table.h libavformat/segment.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * avopt: Store defaults for AV_OPT_TYPE_INT in the i64 union memberMartin Storsjö2012-09-04
| | | | | | | | Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit '124134e42455763b28cc346fed1d07017a76e84e'Michael Niedermayer2012-09-05
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit '124134e42455763b28cc346fed1d07017a76e84e': avopt: Store defaults for AV_OPT_TYPE_CONST in the i64 union member Conflicts: libavcodec/aacenc.c libavcodec/libopenjpegenc.c libavcodec/options_table.h libavdevice/bktr.c libavdevice/v4l2.c libavdevice/x11grab.c libavfilter/af_amix.c libavfilter/vf_drawtext.c libavformat/movenc.c libavformat/options_table.h libavutil/opt.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * avopt: Store defaults for AV_OPT_TYPE_CONST in the i64 union memberMartin Storsjö2012-09-04
| | | | | | | | Signed-off-by: Martin Storsjö <martin@martin.st>
* | lavd/x11grab: deprecate "nomouse" specification in filenameStefano Sabatini2012-08-08
| | | | | | | | | | Favor draw_mouse option. Should simplify parsing, and make it more robust.
* | lavd/x11grab: apply misc consistency fixes to options definitionStefano Sabatini2012-08-08
| | | | | | | | | | | | In particular, do not upcase first word, do not use final dot, use a verb to specify what the option does, sort entries by name, apply random vertical align.
* | Merge commit '36ef5369ee9b336febc2c270f8718cec4476cb85'Michael Niedermayer2012-08-07
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit '36ef5369ee9b336febc2c270f8718cec4476cb85': Replace all CODEC_ID_* with AV_CODEC_ID_* lavc: add AV prefix to codec ids. Conflicts: doc/APIchanges doc/examples/decoding_encoding.c doc/examples/muxing.c ffmpeg.c ffprobe.c ffserver.c libavcodec/8svx.c libavcodec/avcodec.h libavcodec/dnxhd_parser.c libavcodec/dvdsubdec.c libavcodec/error_resilience.c libavcodec/h263dec.c libavcodec/libvorbisenc.c libavcodec/mjpeg_parser.c libavcodec/mjpegenc.c libavcodec/mpeg12.c libavcodec/mpeg4videodec.c libavcodec/mpegvideo.c libavcodec/mpegvideo_enc.c libavcodec/pcm.c libavcodec/r210dec.c libavcodec/utils.c libavcodec/v210dec.c libavcodec/version.h libavdevice/alsa-audio-dec.c libavdevice/bktr.c libavdevice/v4l2.c libavformat/asfdec.c libavformat/asfenc.c libavformat/avformat.h libavformat/avidec.c libavformat/caf.c libavformat/electronicarts.c libavformat/flacdec.c libavformat/flvdec.c libavformat/flvenc.c libavformat/framecrcenc.c libavformat/img2.c libavformat/img2dec.c libavformat/img2enc.c libavformat/ipmovie.c libavformat/isom.c libavformat/matroska.c libavformat/matroskadec.c libavformat/matroskaenc.c libavformat/mov.c libavformat/movenc.c libavformat/mp3dec.c libavformat/mpeg.c libavformat/mpegts.c libavformat/mxf.c libavformat/mxfdec.c libavformat/mxfenc.c libavformat/nsvdec.c libavformat/nut.c libavformat/oggenc.c libavformat/pmpdec.c libavformat/rawdec.c libavformat/rawenc.c libavformat/riff.c libavformat/sdp.c libavformat/utils.c libavformat/vocenc.c libavformat/wtv.c libavformat/xmv.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * Replace all CODEC_ID_* with AV_CODEC_ID_*Anton Khirnov2012-08-07
| |
* | Replace various inlined inverse AVRational with av_inv_q().Clément Bœsch2012-08-06
| |
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2012-07-29
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: (35 commits) h264_idct_10bit: port x86 assembly to cpuflags. x86inc: clip num_args to 7 on x86-32. x86inc: sync to latest version from x264. fft: rename "z" to "zc" to prevent name collision. wv: return meaningful error codes. wv: return AVERROR_EOF on EOF, not EIO. mp3dec: forward errors for av_get_packet(). mp3dec: remove a pointless local variable. mp3dec: remove commented out cruft. lavfi: bump minor to mark stabilizing the ABI. FATE: add tests for yadif. FATE: add a test for delogo video filter. FATE: add a test for amix audio filter. audiogen: allow specifying random seed as a commandline parameter. vc1dec: Override invalid macroblock quantizer vc1: avoid reading beyond the last line in vc1_draw_sprites() vc1dec: check that coded slice positions and interlacing match. vc1dec: Do not ignore ff_vc1_parse_frame_header_adv return value configure: Move parts that should not be user-selectable to CONFIG_EXTRA lavf: remove commented out cruft in avformat_find_stream_info() ... Conflicts: Makefile configure libavcodec/vc1dec.c libavcodec/x86/h264_deblock.asm libavcodec/x86/h264_deblock_10bit.asm libavcodec/x86/h264dsp_mmx.c libavfilter/version.h libavformat/mp3dec.c libavformat/utils.c libavformat/wv.c libavutil/x86/x86inc.asm Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * Add missing libavutil/time.h includes.Anton Khirnov2012-07-28
| |
| * x11grab: cosmetics: consistent naming for x11grab-related thingsDiego Biurrun2012-07-28
| |
* | x11grab: use AV_OPT_TYPE_IMAGE_SIZE.Nicolas George2012-05-20
| |
* | x11grab: fix compilationMichael Niedermayer2012-03-18
| | | | | | | | | | Found-by: ubitux Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2012-03-17
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: resample: allocate a large enough output buffer fate: fix enc_dec_pcm tests with remote target wmaenc: remove bit-exact hack FATE: remove WMA acodec tests FATE: add WMAv1 and WMAv2 encode/decode tests with fuzzy comparison FATE: add AC-3 and E-AC-3 encode/decode tests with fuzzy comparison qtrle: Use bytestream2 functions to prevent buffer overreads. vqavideo: check malloc return values x11grab: fix a memory leak exposed by valgrind threads: fix old frames returned after avcodec_flush_buffers() MPV: always mark dummy frames as reference h264: fix deadlocks on incomplete reference frame decoding. mpeg4: report frame decoding completion at ff_MPV_frame_end(). mimic: don't use self as reference, and report completion at end of decode(). Conflicts: libavcodec/h264.c libavcodec/qtrle.c libavcodec/resample.c libavcodec/vqavideo.c libavdevice/x11grab.c tests/ref/seek/wmav1_asf tests/ref/seek/wmav2_asf Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * x11grab: fix a memory leak exposed by valgrindAntonio Ospite2012-03-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When using "-f x11grab -i :0.0" valgrind reports a definitely lost memory block with this message: ==31544== 5 bytes in 1 blocks are definitely lost in loss record 1 of 2 ==31544== at 0x4026E68: memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==31544== by 0x4026F17: posix_memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==31544== by 0x60D399A: av_malloc (in /usr/lib/x86_64-linux-gnu/libavutil.so.51.22.1) ==31544== by 0x60D3A70: av_strdup (in /usr/lib/x86_64-linux-gnu/libavutil.so.51.22.1) ==31544== by 0x4A2BE58: ??? (in /usr/lib/x86_64-linux-gnu/libavdevice.so.53.2.0) ==31544== by 0x506D29E: avformat_open_input (in /usr/lib/x86_64-linux-gnu/libavformat.so.53.21.0) ==31544== by 0x400A80: main (in /home/ao2/WIP/am7xxx-play/tests/a.out) The 5 bytes lost are the ones from param = av_strdup(":0.0"), so let's free param in the exit path. Also check the av_strdup() return value. Note: calling av_free(param) even when av_strdup() fails and param is NULL is OK and keeps the code simpler without adding another label to skip av_free(). Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>