Introduce Amlogic M8 4K video format on Android 4.4
Patch AMLCodec to work with 4K video format
Recognize Meson8 platform in AMLUtils
[AMLCodec] Allow 4K only on Meson8 or higher
Fix leaking of returned directory from FileDirectoryFactory::Create.

Fixes Coverity CID 1126046
Just throw exception, rather than a pointer to an exception,

Fix Coverity CID 1126049
Add check that stream->codec is not null.

If it could be null in the previous test, it could be null in this test.

Fixes Coverity CID 1020979
Move null check before anything references m_pFrame.

Fixes Coverity CID 1126047

Conflicts:
	xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
If a font attachment has no nameTag...
... a stream still needs to be created.

This stops the code just after the switch from dereferencing a null stream.

Fixes Coverity CID 1020980
Merge pull request #4577 from Stane1983/mainline

Patch for KitKat 4.4 and 4K video using AMLCodec
DVDCodecs: Amlogic: Handle conditions in which amcodec should be opened during Open()

DVDCodecs: Amlogic: Use mpeg2 video codec for mpeg2's

* AM Video Codec cannot properly handle the still-frames within DVDs

Signed-off-by: Brandon McAnsh <brandonm@matricom.net>

DVDFactoryCodec: Remove throttling of mpeg2 to libmpeg2 for amlogic

* Thanks to @kszaq, am-mpeg2 can handle all mpeg2's however it can't handle the still frames (which is caught above it).
* Testing .VOB isn't setting hint.stills to true so will need to address this in separate patch

Signed-off-by: Brandon McAnsh <brandonm@matricom.net>

DVDFactoryCodec: Further conditionalize HAS_LIBAMCODEC opening

Signed-off-by: Brandon McAnsh <brandonm@matricom.net>

DVDFactoryCodec: Amlogic: Force rmvb to ffmpeg

Signed-off-by: Brandon McAnsh <brandonm@matricom.net>

DVD: Amcodec: Handle conditions in which amcodec should be using during open

* Instead of before

Signed-off-by: Brandon McAnsh <brandonm@matricom.net>
Merge pull request #4431 from cg110/CoverityFixes1

Fix some coverity scan issues
[ffmpeg] Backport of h264_find_start_code_candidate optimisation
More efficient infobool expression evaluator

Expession infobools are evaluated at runtime from one or more single infobools
and a combination of boolean NOT, AND and OR operators. Previously, parsing
produced a vector of operands (leaf nodes) and operators in postfix
(reverse-Polish) form, and evaluated all leaf nodes every time the expression
was evaluated. But this ignores the fact that in many cases, once one operand
of an AND or OR operation has been evaluated, there is no need to evaluate the
other operand because its value can have no effect on the ultimate result. It
is also worth noting that AND and OR operations are associative, meaning they
can be rearranged at runtime to better suit the selected skin.

This patch rewrites the expression parsing and evaluation code. Now the
internal repreentation is in the form of a tree where leaf nodes represent a
single infobool, and branch nodes represent either an AND or an OR operation
on two or more child nodes.

Expressions are rewritten at parse time into a form which favours the
formation of groups of associative nodes. These groups are then reordered at
evaluation time such that nodes whose value renders the evaluation of the
remainder of the group unnecessary tend to be evaluated first (these are
true nodes for OR subexpressions, or false nodes for AND subexpressions).
The end effect is to minimise the number of leaf nodes that need to be
evaluated in order to determine the value of the expression. The runtime
adaptability has the advantage of not being customised for any particular skin.

The modifications to the expression at parse time fall into two groups:
1) Moving logical NOTs so that they are only applied to leaf nodes.
   For example, rewriting ![A+B]|C as !A|!B|C allows reordering such that
   any of the three leaves can be evaluated first.
2) Combining adjacent AND or OR operations such that each path from the root
   to a leaf encounters a strictly alternating pattern of AND and OR
   operations. So [A|B]|[C|D+[[E|F]|G] becomes A|B|C|[D+[E|F|G]].

I 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 2.8% from
41.9% to 39.1%:

          Before          After
          Mean   StdDev   Mean   StdDev  Confidence  Change
IdleCPU%  41.9   0.5      39.1   0.9     100.0%      +7.0%
Where an infobool expression failed to parse, evaluate the infobool as false. Previously, this would result in a segfault due to the dereferencing of an uninitialised pointer to the head of the expression tree.
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%
De-duplication of string cache for non-item and item labels
Faster and simpler portable implementation of MathUtils::round_int().

Much as I like a bit of inline assembler, I have also removed the ARM versions
of MathUtils::truncate_int() and MathUtils::round_int(). The former was just
how any sane compiler should have assembled a cast from double to signed int
anyway. The latter was a much too complicated way to achieve the desired
effect, and was switched out in most ARM builds anyway in favour of the old
portable implementation that used floor().

Verified that MathUtils::test() still passes, and that GCC is now able to
inline MathUtils::round_int(), where it didn't previously.

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
~50.8 FPS to ~52.6 FPS.
Move the reference-counting of Begin and End calls from DX and GL source files into GUIFontTTF.cpp.
Convert CGUIFontTTFBase::m_vertex to be managed as a std::vector. Also retired CGUIFontTTFBase::m_vertex_count and CGUIFontTTFBase::m_vertex_size because these can be derived from vector member functions.