libstagefright: Extended media support via FFMPEG

 * Original work by Michael Chen - https://github.com/omxcodec
 * Kitkat port from Android X86 project

libstagefright: add null checking to addPlugin

libstagefright: fix error handling of dlsym()

According 'man dlsym', a NULL return from dlsym() doesn't indicate an error.
The correct way to test for an error is to call dlerror() to clear any old
error conditions, then call dlsym(), and then call dlerror() again to check
whether its return value is not NULL.

libstagefright: add more media mimetypes

This is the first step to add the ffmpeg plugins.

libstagefright: add ExtractorPlugin

The patch allows to load an ExtractorPlugin to extend the functions of
DataSource::sniff and MediaExtractor. A plugin has to implement a C
function getExtractorPlugin to fill the MediaExtractor::Plugin struct.

The filename of the plugin could be specified by the
media.stagefright.extractor-plugin property.

Change-Id: I995a37a4f1ab4bba6ca3c24c7001a27a1e3ccb90

FLACExtractor: Add more sample rates support

In FLACExtractor.cpp, it has function to check file's sample rate.
If the input sample rate is not in its list, it will return "unsupported
sample rate" issue. Modify code to make other sample rates (100,1k,42k,46k)
pass the check

Issue: AXIA-1441
Change-Id: I48f91119275560ec6d00feb0dedc70d10aa55262
Signed-off-by: Xiaobing Feng <xiaobing.feng@windriver.com>
Signed-off-by: Matt Gumbel <matthew.k.gumbel@intel.com>

libstagefright: add ffmpeg components

libstagefright: add more decoders

Add support for wma, wmv, ra, ape, dts decoders.

Change-Id: Iaf48a806aa0cef7d9bcb848383fc3d778c8bd248

libstagefright: allow to use the extended extractor in priority

If the meta contains the string "extended-extractor-use",
use the extended extractor first.

add support for rv20, rv30

add ffmpeg heuristic decoder

Change-Id: I5eed11b563ca7f15d44bacfb795d6f3da08ab883

add HEVC(H.265) decoder and cleanup

Squashed the following commits of branch cm_maguro-10.1 from
https://github.com/omxcodec/android_frameworks_av.git
by Michael Chen <omxcodec@gmail.com>

defb904 remove MEDIA_MIMETYPE_AUDIO_MP2
8036958 add fetchUriFromFd func to get file name
91bc7d5 fix videoCompressionFormatString and audioCodingTypeString funcs
f03069f reset FRAME_DROP_FREQ to 0
718b99a add HEVC(H.265) decoder
84f8bf6 cleanup
f026c93 cleanup
440614a add debug info

Change-Id: Ie75db0778f633357e2280aef6d47a0fa3beb823e

AwesomePlayer: use AwesomeLocalRenderer for OMX.ffmpeg.* components

stagefright: Remove duplicate types from QC media defs

Change-Id: I50ecafe79a2985d0868a1ac82464d6ca448aa2c5
libstagefright: Re-introduce a QCOM_HARDWARE ifdef after the FFMPEG commit

Fixes a build error on non QCOM hardware.

Change-Id: I4a4268b351d0d8bf748dd03ccea0fbab20ed4314
DataSource: Remove global variables in DataSource related to sniff

Removed global variables related to sniff, and added Sniffer class
to implement the sniff functionality with non-static members.

Change-Id: I6fbd0ba5b686e09fda11d78cdd687a69c81a6bdf
CRs-Fixed: 567753
libstagefright: Add MPEG2 Codec support

Enables playback support for MPEG2 Codec to play specific ts content

CRs-Fixed: 631693
Change-Id: I96e44b1f1f26ea138802d8d75f1784a06dd8dc6b
libstagefright: Fix crash while setting buffer size

The format returned from MakeAVCCodecSpecificData may be
NULL and will crash on trying to set buffer size.

Added NULL check to avoid crash

Change-Id: I45485f820a6aa657e63aeeb6dd43061a2e3575e3
CRs-Fixed: 644331
libeffect: Fix enabled effect count calculation error

When switching from tunnel to arm effects, effect chain will be moved
from offload thread to mixer thread. During this procedure effect instance
is not destroyed, instead it's preserved and mounted onto new chain.

The migrant sequence is 1) disable instance -> 2) move to new effect
chain -> 3) enable instance again. However, the accumulated effect
enabled count is not decreased when effect instance is disabled.

As a result, LvmBundle_process() is only called once when Effect_process()
called twice, which causes input buffer get processed alternately and
glitch sound appears.

Change-Id: Idd3b8753a73694cc36617ed55b40fda93155abed
CRs-Fixed: 636353
libmedia: Add timelapse profiles for 4k sizes

 The encoder profiles need to be extended to
 support 4k resolutions during timelapse as well.

Change-Id: If67ef1cca45bc61ce1d08bcd5b33adcf22ed8751
CRs-Fixed: 642013
stagefright: Fix playback for mkv files with lacing

Most mkv files having 'lacing' in their audio section to save space.
Android did not handle this properly, sending all frames in the block
with the same time code, which causes stuttery playback.

Change-Id: I4dc76e7c2a53126c7fbdd3628fe7d339d2e3364e
DataSource: Split off ffmpeg sniffer to a second pass, and only if necessary

ffmpeg's sniffer is intended as a grab-all-that-doesn't-work-elsewhere
extractor. Unfortunately, this causes two issues:

- As written, it requires ffmpeg to whitelist any extractors supported
by stagefright, or else it will blindly override them. This has codebase
sync issues, as shown by the VP9 and WAV accidental overrides
- It imposes an in-depth analysis of _all_ media, even that which we
want to be processed quickly by shipping stagefright plugins (hardware
or not). This is mostly noticeable in network streams and thumbnail
generation.

This patch moves FFmpegExtractor to an independent sniffer queue, and
it only invokes it when the regular MediaExtractor hits 1 of 3 conditions:

1 - The confidence in the identified container type is low
2 - No container is identified at all
3 - A video container was found by other extractors, but only 1 stream
(audio or video) was identified.

Change-Id: Ib96ff4f6bc06223fe0e819a57560d3c872a79ddd
libstagefright: Check for data partitioned clips

- Check for DP clips in ESDS atom of mpeg4 clips
- If the clip is detected to have data partition, return a
  error, so that video decode will fallback to SW decoder

CRs-Fixed: 630669
Change-Id: I21800eabf2a68546b6ad389d18adbb3e9fb08ed7
libstagefright: handle error when B-frame is sent to MPEG4Writer

Without this patch, writing B-frame to MediaMuxer will be blocked and
cannot return a result. This may cause an endless progress bar shown in
gallery when triming or muting some videos.

Change-Id: Ide69ddee04d2419e977b0243557a4eff224631c0
CRs-Fixed: 521005
stagefright: Cancel audioCheck event when setting nativewindow

In html5 playback, setNativeWindow_l() will be called twice
when switching from landscape to portrait mode. If the 2nd
setNativeWindow_l gets the LOCK before proceeding mCheckAudioStatusEvent
posted in the 1st setNativeWindow_l, it will get the infomation
that seeking is completed and won't do seeking in this run.

CRs-fixed: 624469
Change-Id: Ia5c4e373e8a71b907b15b913085600d9481ef982
libstagefright/omx: Fix CallbackDispatcher dereference in callback.

    - findDispatcher can return NULL. Check for NULL.

Change-Id: I07edc427b706dfdeec6a6f90f13d00c8941e77f2
audioflinger: Remove fatal error handling for non offload tracks

- Audio pop is heared on BT during SSR

- On sound card OFFLINE status,pcm track is
  recreated resulting audio pop sound

- Handle OFFLINE status only for offload tracks

Change-Id: I483d4595b61fab4d0be460b9e481ab82f7ab46b5
audio: Fix for failure in CTS MediaRecorderTest cases

 -Issue: MediaRecorder CTS test cases are failing.

 -Running the CTS test "testRecorderRandomAction" at
  beginning sets the huge file size and StageFrightRecorder
  set the 64 bit file offset. In MPEG4 writer
  estimateMoovBoxSize depends on a static const variable
  which uses this file offset info. As the variable to
  calculate estimateMoovBoxSize is static const it remains
  same for next media recording session even if file size
  is small.

 -Fix: Don't use static const variable which is used to
  calculate estimateMoovBoxSize as its value may change
  depending on file offsets.

 CRS-Fixed: 629448

Change-Id: Icdb8658a69667663ba686ae51755f461dd35712c
RTSP: Fix crash issue while repeated pause/resume

While doing repeated pause-resume operation in RTSP streaming,
some times, the accessunit timeout check is being posted when
the streaming paused, and even after receving the EOS.
Due to this check, after the EOS, the number of packets received
will be zero and the session gets Teardown while the
streaming is paused. Upon resume, it leads to check failure and crash.

Changes are done such that the accessunit timeout check will
not be done in pause/seek state.

CRs-Fixed: 636312

Change-Id: I60d09d5394eed59a8e2bbf5556628f1ea26f7807
Merge remote-tracking branch 'slim/kk4.4-caf' into ose

Conflicts:
	media/libstagefright/DataSource.cpp
	media/libstagefright/MediaExtractor.cpp