summaryrefslogtreecommitdiff
path: root/recordmydesktop/src
AgeCommit message (Collapse)Author
2020-06-23*: first attempt to unfuck thread synchronizationVito Caputo
I'm already regretting this... I don't think the author understood how condition variables work, that signal/broadcast is purely synchronous with blocked waiters - they don't queue a "signaled" state. So all these cond_waits littered everywhere without any explicit stateful condition being watched, if they didn't happen to be sitting in the wait when the signal occurred, that signal event was lost, and blocking would persist until the next one. Even if the wait only *just* missed the arrival due to scheduling, it was a very racy and broken use of condition variables. Not to mention the possibility of spurious wakeups... You *always* need some shared state to use condition variables properly, it's why they include a mutex; to protect the shared state. If you're not writing a while() loop to wait on a condition variable, you're almost certainly doing it wrong. This stuff will continue to evolve as I get around to it.
2020-06-20setbrwindow: yank nbytes out of BRWindow structVito Caputo
This only gets used in one place and isn't even relevant for shmem scenarios where the size in bytes depends on the bytes per row from the server. For now I'm just moving its simple computation to where it's used, as-is. It seems to be doing some 16-byte alignment dance as well which... seems very odd. If the sizes were already getting 16-byte aligned, why do this again? I fully expect to throw the alignment shit out at some point, as this all gets reworked. The way this was done seems completely misguided... the Theora alignment considerations should be handled in the YUV buffer, since the copy needs to be made from the XImage in all cases - shmem and non, to convert to YUV, the YUV buffer should have been sized to accomodate Theora, and the RGB->YUV conversion-copy should pad out the aligned target buffer as needed.
2020-06-20get_frame: simplify rmdBRWinCpyVito Caputo
There's no need to copy all the members of the nested rects, just copy the whole structs.
2020-06-20brwin: s/.rect/.winrect/Vito Caputo
Disambiguate this member name a bit from the other .rect uses, just to make things a bit easier to search for.
2020-06-20*: just some fast and nasty reformattingVito Caputo
If I'm going to actually be modifying this program substantially and possibly maintaining some fork of it, it's gotta be formmatted how I prefer. This is by no means done or perfect, rmd_types.h in particular is quite the mess, I will be revisiting this issue...
2020-06-20get_frame: eliminate pointless pxl_data pointersVito Caputo
Just cleaning up some junk while trying to make sense of this mess
2020-06-18*: fix new theoraVito Caputo
Import of debian/patches/02_fix_new_theora.dpatch
2020-06-18*: update includesVito Caputo
Import of debian/patches/01_update_includes.dpatch
2009-11-08Fix "uint_32_t truncation of cache compression statistics"enselic
Apply patch from Piotr Engelking that fix integer overflow issues for cache statistics. The patch is attached to this bug report: recordmydesktop: uint_32_t truncation of cache compression statistics http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=549263 git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@601 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-03-12Applied patch from Kevin Lo that fixes compilation on FreeBSD byenselic
addressing include and format string issues. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@599 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-11src/rmd_parseargs.c: Remove 'static' keyword (which belonged to anenselic
incomplete static variable declaration). git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@598 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-11src/rmd_parseargs.c: Remove comment that accidentally was commited.enselic
git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@597 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-11src/rmd_parseargs.c: Stop parsing on error and report the error.enselic
git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@596 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-11src/rmd_parseargs.c: Fix minor formating issues.enselic
git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@595 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-11src/rmd_parseargs.c: Make sure all options have longarg variants asenselic
this makes the --help output look nicer. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@594 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-11configure.ac: Link with libpopt.enselic
src/rmd_parseargs.c: Port to libpopt. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@593 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-11src/rmd_get_frame.c: Work around issue with underflow inenselic
rmdBlocksFromList(). I call this a "workaround" because the whole code base needs to stop using unsigned so much IMO. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@592 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-11src/rmd_types.h: Make ProgArgs::width,height signed as that is whatenselic
they are parsed as. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@591 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-10src/*.c: Namescape all functions for consistency and general codebaseenselic
sanity (previously only a few rmd functions were namespaced). git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@590 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-10src/rmd_parseargs.c: Remove silent backwards compatibility forenselic
-longoptions in preparation for libpopt migration. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@589 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-10src/rmd_types.h: Make ProgArgs::jack_port_names a fixed sizeenselic
100-element array. src/rmd_initialize_data.c: Reset ProgArgs::jack_port_names using memset(). src/rmd_parseargs.c: With ProgArgs::jack_port_names as a fixed size array we can read the --use-jack options in a single pass which makes the code more libpopt migration friendly. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@588 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-08src/rmd_parseargs.c: Put configure-time option dependent stuff inenselic
PrintConfig outside the function as this makes the code a bit nicer to read. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@586 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2009-01-07src/rmd_parseargs.c: Reformat the Usage:-message and make the codeenselic
structure reflect the outputted message structure. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@585 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-12-13Added missing stdio.h and errno.h headers in anyiovar
files that needed them (could cause compilation failure on some platforms). Also, rearranged the sequence with which include's happen, so that any missing headers will be more likely to show up as copilation errors, in the future. rmd_yuv_utils.[ch] and rmd_block_utils.[ch] have been merged within the former, as they deal with the same subject (converting rgb buffers to yuv ones, with the only difference that rmd_block_utils had the double-buffer convertions while rmd_yuv_utils dealt with the single-buffered ones). Their headers also had the a circular dependency (rmd_yuv_utils.h included rmd_block_utils.h and vice-versa). rmd_math.[ch] was added. This file holds now the rmdRoundf function which is a portable implementation of roundf (which depends on C99). The reasoning behind the addition of these files, is that they might hold more purely mathematical functions, in the future. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@583 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-11-22 src/rmd_cache.c, src/rmd_cache_frame.c, src/rmd_get_frame.c, iovar
src/rmd_init_encoder.c, src/rmd_poll_events.c, src/rmd_rectinsert.c, src/rmd_rectinsert.h, src/rmd_rescue.c, src/rmd_setbrwindow.c, src/rmd_specsfile.c, src/rmd_types.h, src/rmd_update_image.c, src/test-rectinsert-data.c, src/test-rectinsert-types.h, src/test-rectinsert.c: Replaced the custom WGeometry struct-type with the Xlib-provided XRectangle type. Since XRectangle has unsigned width and height, any places in the code where -1 was used in these members of WGeometry to denote invalid rects, where changed to 0 ( zero width or height rects are also considered invalid, wherever met). Also, the following variable renames happened : wgeom => xrect, rgeom => rrect, geom => rect and so on. Some other minor changes in this commit are all related to this type change and also the fact that WGeometry had members of type int, while XRectangle is comprised of short members. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@580 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-11-15 iovar
configure.ac, doc/recordmydesktop.1, src/rmd.c, src/rmd_cache_audio.c, src/rmd_encode_sound_buffer.c, src/rmd_initialize_data.c, src/rmd_jack.c, src/rmd_jack.h, src/rmd_parseargs.c, src/rmd_threads.c, src/rmd_types.h: Changed the way Jack support is offered, from dlopening at runtime to normal linking at compilation. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@569 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-11-15src/rmd_wm_is_compositing.[ch], src/rmd.c, src/rmd_types.h, src/Makefile.am : iovar
Added rmdWMIsCompositing method which is used to determine if the window manager is compositing and thus if it will be recorded in --full-shots mode. This method replaces the name check that was previously used, but rmdWMCheck hasn't been removed as it is also a proper method of identifying compliance with the freedesktop.org standards, which is a neccessary step before determining whether a window manager is compositing. This method is still not perfect as non-3d compositing WM's will trigger full-shots, without neccessarily needing it, but the only penalty for this mistake will be increased CPU usage while previously, non-identification of compositing WM as such could lead in distorted/unusable videos (e.g. KWin when used in 3d compositing mode). git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@568 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-11-15 Changed CACHE_FILE_SIZE_LIMIT back to 500 Mb ( 500*1<<20 ) iovar
git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@567 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-10-03src/rmd_init_encoder.c: Format the code for the initialization of theenselic
theora_info structure to increase readability. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@566 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-10-03src/rmd_init_encoder.c: When not overwriting files, output whatenselic
filename that was eventually used. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@565 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-10-03src/rmd_setbrwindow.c: Make SetBRWindow() return a success-boolean,enselic
i.e. TRUE for success and FALSE for failure. src/rmd.c: Adapt. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@564 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-10-03src/rmd_types.h: To be on the safer side, only define TRUE and FALSEenselic
if they are not already defined. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@563 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-10-03src/rmd_cache_frame.c: Fix display of recorded data info andenselic
compression ratio by using unsigned long long ints to prevent integer overflow, and convert to Mb as late as possible. Also did some reformating. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@562 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-10-03src/rmd_cache_frame.c: Define CACHE_OUT_BUFFER_SIZE andenselic
CACHE_FILE_SIZE_LIMIT in a readable manner, and remove redundant comments. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@561 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-18src/rmd_parseargs.censelic
doc/recordmydesktop.1: Make options consistently have GNU-style, i.e. --this instead of -this. We're still backwards compatible with old options, but they are undocumented. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@560 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-17src/rmd_get_frame.c : As Martin has found, we need to markiovar
both the new and the old area of the cursor, for it to render correctly. This changeset does that for the full-shots scenario, (which is always double-buffered) by making dirty the new area on the back buffer, before the Yuv convertion. Other changes are that the MARK_BACK_BUFFER macro has been renamed to MARK_BUFFER_AREA (as that is what it does and there is nothing intristically tying it to the back buffer) and also a non-sensical comment was removed (probably a thought I never got to finish). git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@558 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-17src/rmd_get_frame.c: Make the cursor area be properly invalidated andenselic
captured. We need to add dirtiness not only for the old cursor position, but also for the new position. The cursor with --full-shots is still broken however. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@557 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-16src/rmd_cache.c ,iovar
src/rmd_init_encoder.c , src/rmd_jack.c : replaced calls to the redudant I16TOA macro, with calls to snprintf and as a result, the above files no longer depend on src/rmd_macro.h. src/rmd_macro.h : Removed the redudant and now unneeded I16TOA macro. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@556 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-16src/rmd_macro.h: Remove the COMPARE_STRIDE define, it's not used anyenselic
longer. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@555 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-16src/rmd_macro.h: Move the DEFAULT_AUDIO_DEVICE define toenselic
src/rmd_types.h here. src/rmd_parseargs.c: That way we can get rid of the dependency to rmd_macro.h from here, yay! git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@554 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-16src/rmd_types.h: Add a rescue_path member to ProgArgs.enselic
src/rmd_initialize_data.c: Initialize rescue_path. src/rmd_parseargs.c: Don't rmdRescue() in ParseArgs(). We want the parse args functionality to be free from depdenencies. ParseArgs() should only parse args. Instead set the new rescue_path ProgArgs member. src/rmd.c: If a rescue_path was given, call rmdRescue() with that path. By doing this rmd_parseargs.c becomes more self-contained. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@553 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-16src/rmd_rectinsert.c: Remove unnecessary mallocs, we can use the stackenselic
instead. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@552 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-16src/rmd_yuv_utils.c : Applied patch by Luca Bonavita, that correctsiovar
the rgb to yuv algorithm and provides near perfect colorspace conversion. src/rmd_get_frame.c : The sum of the chroma subcomponents, in the XFIXES_POINTER_TO_YUV macro, must wrap around the unsigned char type range, for the calculation to be correct. So, we take its modulo to that range. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@551 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-16src/rmd_types.h: Update comment, the DEFAULTS_ARGS() macro is replacedenselic
with the SetupDefaultArgs() function. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@550 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-16src/rmd_types.h: Remove DisplaySpecs::bpixel and wpixel.enselic
src/rmd_make_dummy_pointer.[ch]: Take Display as a parameter to MakeDummyPointer() and put bpixel and wpixel locally here instead. src/rmd.c: Remove initialization of DisplaySpecs::bpixel and wpixel. src/rmd_initialize_data.c: Pass Display to MakeDummyPointer(). git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@549 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-16src/rmd_types.henselic
src/rmd_initialize_data.c: Remove unused ProgData member sound_buffer_ready. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@548 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-16src/recordmydesktop.c: Renamed toenselic
src/rmd.c this, it feels cleaner this way. configure.ac src/Makefile.am: Changed accordingly. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@547 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-14src/*.[ch]: Rename files so that the name becomesenselic
rmd_some_file.[ch]. The exceptions are recordmydesktop.c which is the main file and skeleton.[ch] which are external files. src/Makefile.am: Adapt. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@546 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-14src/block_utils.censelic
src/cache_audio.c src/cache_frame.c src/capture_sound.c src/encode_cache.c src/encode_image_buffer.c src/encode_sound_buffer.c src/flush_to_ogg.c src/get_frame.c src/getzpixmap.c src/init_encoder.c src/initialize_data.c src/load_cache.c src/make_dummy_pointer.c src/opendev.c src/parseargs.c src/poll_events.c src/queryextensions.c src/recordmydesktop.c src/rectinsert.c src/register_callbacks.c src/rmd_cache.c src/rmd_error.c src/rmd_frame.c src/rmd_jack.c src/rmd_rescue.c src/rmd_timer.c src/rmdmacro.h src/rmdthreads.c src/rmdtypes.h src/setbrwindow.c src/shortcuts.c src/specsfile.c src/test-rectinsert-data.c src/test-rectinsert.c src/update_image.c src/wm_check.c src/yuv_utils.c: There is no need for us to test if config.h exists. It's our pacakge, we know it exists. Also make sure that each .c files includes config.h as the first include. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@544 f606c939-3180-4ac9-a4b8-4b8779d57d0a
2008-09-14src/rmdtypes.h: Move out a lot of includes to the .c files that needs them. enselic
src/cache_audio.c src/cache_frame.c src/capture_sound.c src/encode_cache.c src/encode_sound_buffer.c src/flush_to_ogg.c src/get_frame.c src/getzpixmap.c src/init_encoder.c src/initialize_data.c src/load_cache.c src/queryextensions.c src/rmd_cache.c src/rmd_jack.c src/rmd_rescue.c src/rmd_timer.c src/rmdmacro.h src/rmdthreads.c src/update_image.c src/wm_check.c: Adapted. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@543 f606c939-3180-4ac9-a4b8-4b8779d57d0a
© All Rights Reserved