Added CButtonTranslator::IsAnalog(int actionID) for testing if an action may be analog

[joystick] New joystick abstraction - make input handling separate from joystick APIs

This allows for APIs to coexist, such as DirectInput alongside XInput for full 360-like controller support. The current behavior is retained, where the most recent button action across all controllers is repeated at a 0.1s delay.

Analog axes can now imitate buttons, allowing easy GUI navigation. For example: `<axis id="1" limit="+1">Right</axis>`. This has the effect that pushing the analog stick >= 50% right will send a single Right action. After an initial delay (500ms) it will then send more Right actions at a 100ms period until the right stick is moved < 50%. This behavior mirrors keyboard keys.

[joystick] Added XInput joystick support. XBMC now supports all 360-like XInput-compatible controllers out of the box using the Xbox 360 keymap, regardless of controller name.

[joystick] Added Linux Joystick API client to joystick abstraction

[Joystick] implemented Suspend - Resume

LinuxJoystick now ignores the initial events, because they mess up the buttons

Refactor CKeyboardStat so that an event can be translated to a key without calling ProcessKeyDown()

[Confluence] Don't show video progress bar if player has no duration (always stuck at 0:00:00)

[games] Added game info tags to XBMC

XBMC can now load metadata from game images. The following types of game images are currently supported: GBA, GB/GBC. CFileItem::IsGame() can be used to determine if the file item has a game info tag loaded.

[games] fix crash when PVR is used

[python/games] Expose GameInfoTag properties to Python list items.

Refactor service starting/stopping using a callback-based interface when enabling/disabling add-ons in the add-on database

[game clients] Added new Game Client add-ons based on the libretro API.

[game clients] Add rewind functionality to GameClient.

[game clients] Refactor game client serialization into its own class.

[JSON-RPC] Add xbmc.gameclient as a valid add-on type.

[game clients] Add win32 and linux repositories for game client add-ons

[AE] Add AESTREAM_LOW_LATENCY to AEStreamOptions for enabling a low-latency "gaming mode"

[retroplayer] Added RetroPlayer, a new player core that enables game clients to play video and audio.

Thanks to ChrisMyhre for catching a compile error.

[retroplayer] Audio: Fixed delay on ALSA devices, and disabled audio delay setting in game settings.

[retroplayer] Added RGB565 support.

[retroplayer] Added keyboard and joystick input handling to RetroPlayer built on the new joystick abstraction layer.

Add new type of add-on, xbmc.addon.game - plugins and scripts that can be run from MyGames window

[JSON-RPC] Add xbmc.addon.game as a valid add-on type

Add repository for new ROM Collection Browser with "Game Add-on" support

[games] Add MyGames window to the GUI

[python] Allow Python xbmc.Addon objects to be constructed from uninstalled add-ons.

Only getAddonInfo() is available to uninstalled add-on objects. Attempting to get/set settings or location strings will have no effect.

[python] xbmc.Addon.getAddonInfo() can return "extensions" and "platforms" properties for game client add-ons

[JSON-RPC] New parameter for Addons.GetAddons, "uninstalled", to get add-on info from remote repos.

Example: Addon.GetAddons({"method": "Addons.GetAddons", "params": {"type": "xbmc.addon.video", "enabled": "uninstalled"}})

[bson] Add BSON C implementation, from the MongoDB BSON library

Version is release 0.7.1, 2013-01-07. https://github.com/mongodb/mongo-c-driver

[bson] Added BSON library to Windows and Linux build.

Thanks to Ryan Roth for Linux compile fixes and N3MIS15 for VS configuration fixes.

[bson] Identify anonymous structs for forward-declaration

[bson] Added bson parser for Variant and test cases

Added new database abstraction, denormalized database with dynamic normalization for optimal read queries.

Objects are stored in a central table with key/value pairs. When 1:1, 1:N and N:N relationships are declared, data is drawn from the key/value pairs to fill the newly created tables. Data is kept in sync across adds and deletes, as well as when new relations are added/dropped.

[savestates] Added game state persistence built on a new save game database.

RetroPlayer can automatically load previous game state on file open, and 9 slots are available for hotkey-based save state storage.

[savestates] Added new Save State Manager dialog window.

[joystick] Fix compiler warning: remove #pragma once from .cpp file

Fix compiler error: ‘class CApplication’ has no member named ‘IsPlayingGame’

Move callback system over to interface-based callbacks instead of raw function pointers

Refactored game client config variables, now part of CGameClient instead of a disparate class

Silence compiler warnings: "narrowing conversion of `axisID' from `unsigned int’ to `unsigned char’ inside { } is ill-formed in C++11" and "narrowing conversion of `frame.CRetroPlayerVideo::Frame::pitch’ from `size_t {aka long unsigned int}’ to `int’ inside { } is ill-formed in C++11"

Refactor game file code (VFS reads, CRC calculation) into new class, CGameFile, in GameFileLoader.cpp

Refactored RetroPlayer game-launching dialogs into new file, RetroPlayerDialogs.cpp

Use smart pointers instead of strings for member variables

Fix scope issue

Refactor GameManager: Fix file extension filter glitch in My Games, and move game auto-launching functionality into new file GameFileAutoLauncher.cpp

[log] Remove "C" prefix from class names. I consider the leading C an implementation detail (the user doesn't need to know if they are classes, structs or interfaces).

Fix error: "[swscaler @ 0x7fe8ac005a60] 0x0 -> 0x0 is invalid scaling dimension"

Changed: (correctly) sort emulators by name using lower case strings as sort tokens

[cosmetic] Refactor some code in RetroPlayerDialogs.cpp

Remove unused header

Fixes and refactors in RetroPlayer core.

Fixed: no video during game since 86ac5ed

Simplify audio handling

Fix compile error "RenderManager.h:61:27: error: 'DWORD' has not been declared"

Refactor RetroPlayer buffers for audio and video, abstract using type
erasure pattern

Remove need to explicitly set RetroPlayerAudio's buffer's samplerate

Improved some game client functionality (setting frame rate, resetting file path/data)

[retroplayer] Fix compile errors and warnings on linux

Refactor Joystick API

[cosmetic] Improve RetroPlayerBuffer documentation

Refactor RetroPlayerInput, still possibly needs some work

[retroplayer] Don't use CStdString function

[cosmetic] Fix TODO comment

Remove GBA and GameBoy game info tags. Will be replaced by PyRomInfo (https://github.com/garbear/pyrominfo) in the future