Merge pull request #3356 from popcornmix/streamsilence

[rbp] Add streamsilence option for hdmi
[rbp/omxplayer] Replace jpeg parsing with cheaper byte aligned accesses

All the parsing is byte aligned which can be done about ten times faster
than bit based parsing.

Also remove the unused PNG parsing
[rbp/omxplayer] Fix bugs with jpeg parsing

I was finding GetCodingType to sometimes take 200ms for a single jpeg.
That was a mixture of the slow bit oriented parsing, but more significantly some bugs in the parsing.

The SOF blocks skipped the wrong number of bytes, resulting in us parsing junk.
The M_TEM, M_DRI, M_SOI and M_EOI tags when seen (usually due to the junk) can only escape by slowly parsing until end of file.
Also, after a M_SOS, there is the variable sized jpeg block which we can't parse, so best to give up then, rather than misparsing
the remaining jpeg data
[rbp/omxplayer] Detect bitstream corrupt and reject CMYK jpegs

GPU doesn't handle (the very rare) CMYK jpegs, so don't try sending them.
Merge pull request #3388 from popcornmix/jpegparse

[rbp] Some fixes for OMXImage
[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
Speedup for opening music song library

Previously, this repeatedly parsed the same URL string over and over again
for every song, each time the list of songs was opened.

Benchmarks for CMusicDatabase::GetSongsByWhere() on a Raspberry Pi with a
library of 4115 songs:

Before patch: 14.5 seconds
After patch:   4.0 seconds
[rbp/omxplayer] Add wait for buffers done calls
[rbp/omxplayer] Handle timeouts greater than a second
[rbp/omxplayer] Callback context pointer is not needed once in the class
[rbp/omxplayer] Avoid state change when already in loaded
[rbp/omxplayer] Remove warnings from event logging calls
[rbp/omxplayer] Add more event logging
[rbp/omxplayer] Signal bad state on decode error

Also abort timeouts early when in bad state