2014-01-27

Today's C++ Monday Project is not like our usual fare, but I thought it kind of cool and we don't highlight C++ utilities often. Also it's two-for-one day too!

So why did I think it cool? All to often when I'm trying to explain a bug to someone, a video would be about 100x's faster than text or even voice. Yet capturing video can be a pain and then there's the file size. Finally if you want to post it to your blog... well, you get the picture.

Animated GIF's are pretty retro too... :)

LICEcap

LICEcap can capture an area of your desktop and save it directly to .GIF (for viewing in web browsers, etc) or .LCF (see below).

LICEcap is an intuitive but flexible application (for Windows and now OSX), that is designed to be lightweight and function with high performance.

LICEcap is easy to use: view a demo (output is here).

In addition to .GIF, LICEcap supports its own native lossless .LCF file format, which allows for higher compression ratios than .GIF, higher quality (more than 256 colors per frame), and more accurate timestamping. If you record to .LCF, you can play back the .LCF files within REAPER (and/or use it to convert to .gif or another video format).

LICEcap is GPL free software, each download package includes the source.
Features and options:

Record directly to .GIF or .LCF.

Move the screen capture frame while recording.

Pause and restart recording, with optional inserted text messages.

Global hotkey (shift+space) to toggle pausing while recording

Adjustable maximum recording framerate, to allow throttling CPU usage.

Basic title frame, with or without text.

Record mouse button presses.

Display elapsed time in the recording.

Requirements:

For Windows: Windows XP/Vista/7 (might work with reduced functionality on other versions)

For OSX: OS 10.4+ (10.6+ for full feature support), PPC or Intel (note: OS X support is still preliminary, some features are not supported)

A reasonably fast CPU

A healthy amount of RAM (1GB+, especially when encoding to LCF)

...

[Read the rest and download it]

Here's a quick example, running on my machine;





Also of interest (and required to compile the source) is...

WDL (whittle)

[re]usable C++, modestly

WDL is a free and open source C++ library that is designed to be easily used by other code.

Much of WDL is a set of simple C++ classes that do not attempt to do everything. You can use as little or as much of WDL as you like, mix it with whatever other toolkits you use, etc. It tries very hard not to get in your way.

WDL includes:
The Basics

Lightweight inline classes for cleanly managing memory allocations, lists, queues, resource pools, strings, etc

File reading/writing wrappers:

Support various asynchronous and unbuffered reads/writes

Large file support

Portable API

Memory mapped file support

Directory scanning API

SHA-1 implementation

Mersenne Twister implementation

Mergesort implementation

Blowfish implementation

Fast FFT implementation (based on DJBFFT)

RDTSC timing utility (win32/x86 only)

Audio tools:

A realtime convolution engine

Fast sinewave generator

dB/amplitude convertors

Basic Reverb engine (based on FreeVerb2)

Integer PCM audio sample conversions

SHOUTcast source broadcaster (and PHP based server)

Encoding/decoding audio using LAME and OGG Vorbis.

A simple pitch shifting engine

ADPCM encode/decode engines

Audio buffer/pin manager

Samplerate conversion (supporting point sampling, linear interpolation with optional IIR filters, sinc interpolation)

LICE - Lightweight Image Compositing Engine:

32bpp 2D image engine with full alpha channel support

PNG, JPEG, GIF, BMP, PCX, ICO loading

PNG, JPEG, GIF writing

Blit, scaled blit, rotated blit, delta/grid divided blits, with optional bilinear filtering, blurred blit

Primitives including line drawing, rectangle fills, gradients, circles, triangles, bezier curves

Optional antialiasing for most primitives

Alpha and source alpha support for primitives and blits

Many blend modes including copy, additive, subtractive, dodge, multiplicative, overlay, HSV adjust

Glyph and text drawing systems (including cached-system-text drawing)

Texture generators

WDL Virtual Window system:

Allows the building of dynamic, complex UIs within OS hosted windows

Included controls for text display, combo boxes, buttons, sliders, list boxes

Supports full transparency, overlays, controls with shadows/highlights outside of their range

Fully themeable (uses LICE for compositing)

Plush2 - Portable, lightweight software 3D rendering engine

32bpp 3D rendering

Scene management (unlimited cameras, objects)

Frustum clipping

Multitexture support

Environment map support

Texture-alpha support

Variable-alpha materials

Bilinear texture filtering

Colored lighting with unlimited lightsources

Gouraud and flat shading

Supports most LICE blend modes as per-pixel operations

Z-buffering

3DS,COB file import

Integrates with LICE.

Based on Plush

SWELL - Simple Windows Emulation Layer (for OS X):

Allows targeting win32 and OS X by using a reasonable subset of the win32 API

Auto (PHP-based) dialog and menu resource conversion

Many common APIs and common controls implemented

SWELL-specific win32-style OS X extensions

And more:

Shared memory IPC connection and low latency messaging classes

EEL2 expression evaluation library/realtime compiler (allow users to write code that your programs execute) (based on AVS's EEL)

win32_curses: A graphical Curses emulation library for Win32 and OS X (port or write curses applications in a window of a larger application, or standalone)

win32_utf8: code you can include to enable UTF8 support in normal ANSI windows applications

[See the rest and grab the source]

Two for one day indeed!

Show more