[rbp] Ensure resolution infos have unique names

Currently the strMode for 2D and 3D resolutions have the same name.
This means the calibration info for a 2D mode can get replaced with a 3D mode
which can result in the pixel aspect ratio being reset to 0.5.

Also when using gui resolution clamping (i.e. 720p gui on 1080p display)
the calibration settings are scaled to gui resolution, but there is no indictation
of what the clamped resolution was when the settings were saved.

This means disabling gui clamping results in a minature gui.
(And I'd like to remove the gui clamping in the future).

Make sure all these resolutions have unique names by adding the gui resolution
and 3DSBS/3DTB to the resolution string.

Note: this will result in current calibration settings being lost.
[players] Fix for subtitle flood at start of file

The test for pts==0 results in every subtitle in the overlay container being rendered at start of file.

This results in hundreds of subtitles being rendered which is slow and ugly. See:
https://dl.dropboxusercontent.com/u/3669512/temp/screenshot001.png

Remove this test.

Also remove setting the media_pts to the predicted media_pts as that causes a subtitle flurry after seeking while GPU fifo fills
Merge pull request #3801 from popcornmix/unique_res_names

[rbp] Ensure resolution infos have unique names
Merge pull request #3800 from popcornmix/sub_flurry

[players] Fix for subtitle flood at start of file
[3D] Support switching to 3D resolutions

Include matching 3D flags (SBS/TAB) in the score of a resolution to switch to, to enable switching to 3d modes.
Also remove the old code that treated 3D modes differently when assigning a score.

I've also added a small weight to higher multiples of the desired framerate, so if display supports 30, 60 and 120Hz
and the video is 30fps then 30 will now be chosen rather than 120. This reduces the overhead of rendering the gui.
[confluence] Use animated gif as a cheaper working spinner
[rbp/omxplayer] Do we need discontinuity handling?

So far I've not seen what this is needed for and it does cause problems for some files.
h264_parser: Initialize the h264dsp context in the parser as well

Each AVStream struct for an H.264 elementary stream actually has two
copies of the H264DSPContext struct (and in fact all the other members
of H264Context as well):

((H264Context *) ((AVStream *)st)->codec->priv_data)->h264dsp
((H264Context *) ((AVStream *)st)->parser->priv_data)->h264dsp

but only the first of these was actually being initialised. This
prevented the addition of platform-specific implementations of
parser-related functions.

Signed-off-by: Martin Storsjö <martin@martin.st>
h264dsp: Factorize code into a new function, h264_find_start_code_candidate

This performs the start code search which was previously part of
h264_find_frame_end() - the most CPU intensive part of the function.

By itself, this results in a performance regression:
              Before          After
              Mean   StdDev   Mean   StdDev  Change
Overall time  2925.6 26.2     3068.5 31.7    -4.7%

but this can more than be made up for by platform-optimised
implementations of the function.

Signed-off-by: Martin Storsjö <martin@martin.st>
arm: Add assembly version of h264_find_start_code_candidate

               Before          After
               Mean   StdDev   Mean   StdDev  Change
This function   508.8 23.4      185.4  9.0    +174.4%
Overall        3068.5 31.7     2752.1 29.4     +11.5%

In combination with the preceding patch:
                Before          After
                Mean   StdDev   Mean   StdDev  Change
Overall         2925.6 26.2     2752.1 29.4     +6.3%

Signed-off-by: Martin Storsjö <martin@martin.st>
[ffmpeg] Backport of h264_find_start_code_candidate optimisation
[rbp/gui] Add switch between higher and lower quality textures

To save memory we default to 16bpp textures,
but provide a GUI option to increase that to 32bpp.
[rbp/gui] Add switch to remove GUI 720p limit
[rbp/omxplayer] Add fixed latency mode for live streams
[rbp/omxplayer] Avoid marking non-monotonic timestamps as unknown

Following a single spurious timestamp that is in the future,
all subsequent timestamps will be marked unknown causing out of sync.
[rbp/omxplayer] When opening a stream don't try to update gui so often

The 1ms sleep allows for up to 1000 fps gui overlay update, which when busy when opening a file is a bad idea.
Increase the sleep so it only tries to update at up to 10 times per second
[rbp/omxplayer] Use display time for EDL cut start time

There are reports that EDL commercial break skipping occurs 5-10 seconds too early. This is because the skip occurs when a timestamp
is received at PlayerVideo/PlayerAudio, but it may still be a number of seconds before that frame is presented by the GPU.

Instead use the display time (GetTime) to determine start of cut time
Implement a window ID cache

In the course of each refresh of the visibility of controls (which is
performed every frame), there are many calls to CGUIWindowManager::GetWindow
to convert from a window's integer ID to a pointer to the corresponding
CGUIWindow pointer. This involves acquiring a lock and performing a tree walk.
Yet in practice, the same ID is looked up many times in succession, so this
benefits from a simple cache of the most recently checked ID.

I measured the effect while the Videos window of the default skin was open
(but idle) on a Raspberry Pi, and this simple change alone reduced the CPU
usage by 1.5% from 46.6% to 45.1%:

          Before          After
          Mean   StdDev   Mean   StdDev  Confidence  Change
IdleCPU%  46.6   0.9      45.1   1.2     99.8%       +3.3%
Add caching of infolabels

The functions CGUIInfoLabel::GetLabel and CGUIInfoLabel::GetItemLabel take
a number of strings returned from CGUIInfoManager::GetImage or
CGUIInfoManager::GetLabel, and combine them with various constant strings
which were determined during CGUIInfoLabel::Parse.

Rather than perform all the string operations on every call, this patch
changes to use a two-pass process: first it queries all the GetImage/GetLabel
strings, and then only if at least one of them has changed does it bother
rebuilding the resultant string - otherwise it re-uses the copy built on a
preceding call.

CGUIInfoLabel::GetLabel/GetItemLabel are also changed to return string
references, rather than forcing an additional string copy.

I have measured the effect while the Videos window of the default skin was
open (but idle) on a Raspberry Pi, and this reduced the CPU usage by 0.8%
from 36.2% to 35.4%:

          Before          After
          Mean   StdDev   Mean   StdDev  Confidence  Change
IdleCPU%  36.2   0.5      35.4   0.5     99.9%       +2.2%
Remove asserts in MathUtils::round_int() and MathUtils::truncate_int().

These are very low level functions and get used a *lot*. As a result, even
the tests for the asserts have a measurable impact on performance, Surely
these are best left enabled only in some form of debug build? (Also, the
reaction in the case of overflow or underflow, to terminate the application,
seems severe to use in release builds to me.)

This patch simply wraps them in #if 0. I open the floor to suggestions of a
better switch.

I tested on a Raspberry Pi with the default theme, displaying the front page
with the RSS ticker enabled. This saturates the CPU, so I'm measuring the
improvement using the debug window's FPS figure. This patch improves this from
~49.8 FPS to ~50.8 FPS.