Commit Graph

259 Commits

Author SHA1 Message Date
Wei Jia
aea5de9410 MediaPlayer: sanity check track before dereferencing
Test: media post submit tests passed
Bug: 78175875
Change-Id: I6a23fc859a077eba03a17a562a7c3bb01d97e85b
2018-05-22 15:26:01 -07:00
Wei Jia
5d78d87493 BufferingParams: add annotation @TestApi
Test: CTS test passed
Bug: 77723586
Change-Id: I3811f16380f6465f884d6dd84ce969a0a5886107
2018-04-10 10:45:44 -07:00
Dongwon Kang
2fab5bfb7b Add OnMediaTimeDiscontinuity notification
Test: MediaPlayerTest
Bug: 63934228
Change-Id: I1914f32867416c5c052b6ae3bfe23e597fb314e4
2018-04-04 09:54:14 -07:00
Dongwon Kang
2492c00ae3 Unhide MediaPlayer#MEDIA_INFO_STARTED_AS_NEXT
Expose a listener constant which is used with OnInfoListener() in
order to notify that the player instance started the playback since
previous player just completed the playback.

Bug: 76121592
Test: make offline-sdk-docs
Change-Id: I69ade8e9f6916bc653ea2831e3721dc7d171dc0e
2018-03-29 15:14:26 -07:00
Jean-Michel Trivi
aabf284cbb MediaPlayer subtitle data / time discontinuity interfaces
Expose in SDK the interfaces necessary to implement unbundled
  subtitle support, which requires:
  - exposing an interface to receive the encoded subtitle data
  - exposing an interface while allows a renderer to synchronize
    its rendering clock with the media time of the player.
Deprecate duplicated timed text constant, all timed text / sub
  mime types are defined in MediaFormat.

Bug: 76121592
Test: make offline-sdk-docs
Change-Id: I42cc1d69069babb69a2feeba3f54da89889f4602
2018-03-28 11:35:14 -07:00
Andreas Gampe
57d03914a1 Frameworks: Annotate trivial @GuardedBy in media
Add @GuardedBy for simple functions that require a single lock
and are named XYZLocked.

Derived by errorprone.

Bug: 73000847
Test: m
Test: m javac-check-framework RUN_ERROR_PRONE=true
Change-Id: I17e265a771604a06792566c2dd1842f9fe6439e7
2018-02-07 23:00:50 -08:00
jiabin
9070e29586 Make native AudioRouting Handler in a seperate class.
Bug: 64038649
Test: runtest --path cts/tests/tests/media/src/android/media/cts/RoutingTest.java
Change-Id: I2fc64e177797b2541ba8652d54827f08fd6ca216
2017-11-29 15:20:44 -08:00
Wei Jia
49ca7252e4 MediaPlayer: simplify buffering control.
Test: pass cts tests
Bug: 36280094
Change-Id: If1e2dac511d038b88f7e867eb7ff8b345cb04478
2017-11-12 15:07:00 -08:00
jiabin
6e5a628ab6 Add AudioRouting interface in MediaPlayer
Bug: b/64038649
Test: Run cts in RoutingTest
      && switch output device when using MediaPlayer playing music/video

Change-Id: I48dcfd40c3a6ce01c818f6268cc86ed02b7eaa58
2017-11-01 09:53:17 -07:00
Tobias Thierer
96aac9b375 Framework: Prefer android.system.Os over libcore.io.Libcore.os
This is a pure refactoring with no a behavior change other than
that these calls now go through android.system.Os, which immediately
delegates to Libcore.os.

This is a first step towards separating framework (via
android.system.Os) vs. libcore (via Libcore.os) clients of these
low level APIs. Separating these is a prerequisite towards moving
the API parts of android.system into framework, and moving the
rest into a different package in libcore.

Test: Treehugger
Bug: 67901714

Change-Id: Ifd8349ec5416e5693f40dba48fdf2bef651b7d81
2017-10-18 10:35:22 +01:00
Wei Jia
c02f09d0d1 MediaPlayer: add notifyAt for TimeProvider
Test: TimeProvider gets correct media time when playback rate is not 1.0
Bug: 65204641
Change-Id: I5020515415e14a2c37eec0d1ece511518b9239e7
2017-09-15 09:11:51 -07:00
Wonsik Kim
e8b4c97bdf At STARTED_AS_NEXT, offload MediaPlayer.start() to a separate thread
Fixes: 65210445
Fixes: 64915666
Test: adb shell am instrument -e size small -w 'android.media.cts/android.support.test.runner.AndroidJUnitRunner'
Change-Id: I73f1cebdd4b990e28f8d466f129e781cba2b5bbf
2017-08-31 00:28:36 +00:00
Sungsoo Lim
09d62021d9 Check CookieHandler in setDataSource with cookies
If the caller of MediaPlayer.setDataSource has installed its own
CookieHandler when cookies are provided, MediaPlayer.setDataSource
requires that the CookieHandler has to be of CookieManager type.

Bug: 63638018
Test: manual
Change-Id: I1539d1fa83440ddfb00cc958cd46b9917fe3a296
2017-08-03 09:48:01 +09:00
Kevin Rocard
ec5305f8f9 MediaPlayer: fix typo in stop() documentation
Test: compile
Bug:

Change-Id: I6fd2cdcadcf22f61b0543d2844a87b9e5ef74c9e
Signed-off-by: Kevin Rocard <krocard@google.com>
2017-05-18 18:39:19 +00:00
TreeHugger Robot
62a3aa745a Merge "MediaPlayer: fix new API seekTo to address API review." into oc-dev 2017-04-21 21:10:51 +00:00
Wei Jia
bebeaf9ae3 MediaPlayer: fix new API seekTo to address API review.
Test: compiles
Bug: 36790516
Bug: 37514763
Change-Id: I91307d10e6c9bc65779651c056053b3a025b0d50
2017-04-21 11:05:13 -07:00
Hassan Shojania
5167ede2af MediaPlayer/ModularDrm API review: Document/runtime exception update
Bug:  36790220
Bug:  37514763
Test: GTS tests
Change-Id: I264f6cf66dd09e94720edcf22110240be61e9702
2017-04-19 19:35:02 -07:00
Hassan Shojania
f9d3bb7735 MediaPlayer/ModularDrm API review
Bug:  36790516
Bug:  36790220
Bug:  36788024
Bug:  36790117
Test: GTS tests
Change-Id: Id813459ae6b94e25a31736a5dec6a4c0744c4696
2017-04-15 14:26:44 -07:00
Ray Essick
10353e3601 Rework getMetrics() api per API council
Reworking the media metrics getMetrics() calls (currently in MediaCodec,
MediaExtractor, MediaPlayer, and MediaRecorder) to fit new direction
from the API Council.

Drop the MediaMetricsSet that we had in the first round; go back
to a PersistableBundle as the return type. Moves the key definitions
from MediaMetricsSet.MediaCodec to MediaCodec.MetricsConstants

Bug: 37083862
Test: ran the corresponding CTS tests
Change-Id: I7905959ad2109887dd8fd16f0eb2831247abab2a
2017-04-14 17:24:42 -07:00
TreeHugger Robot
e79081aeaa Merge "MediaPlayer: add 2 more info notifications for playback error" into oc-dev 2017-04-08 00:24:12 +00:00
Wei Jia
ae3e7067ef MediaPlayer: add 2 more info notifications for playback error
Test: mediaplayer doesn't send error notify to client when only one track has error.
Bug: 24761723
Change-Id: I7221dfdbc6a256532186c654406bbe06de831798
2017-04-07 15:24:50 -07:00
Wei Jia
f3d93a0f69 MediaPlayer: hide BufferingParams API
Test: compiles
Bug: 36280094
Change-Id: I52f3e71fb0e090ac48711bbb8ea7cbdf8db00074
2017-04-06 10:09:05 -07:00
Ray Essick
f2d0e40bf0 Integrate API Council feedback into Media Metrics APIs
Integrates the API Council's feedback into the Media Metrics
related APIs.
-- return types for the getMetrics() calls
-- definition of keys in the set of data that comes back

Bug: 35811992
Test: booted, CTS subset, checked dumpsys media.metrics output
Change-Id: Ib750f9631bd3453be3132760273ccfff0a891f88
2017-03-15 11:43:08 -07:00
Ray Essick
72a489c035 Merge "Javadoc for the recently added getMetrics()" 2017-03-02 23:04:03 +00:00
Ray Essick
f0f6685eeb Javadoc for the recently added getMetrics()
Add javadoc comments for the getMetrics() functions that
we've added to android.media.Media{Codec,Extractor,Player}.
This describes the currently implemented functionality.

Bug: 35096098
Test: Compilation
2017-03-01 17:23:48 -08:00
Hassan Shojania
cb9fe89197 Merge "Earlier processing of DrmInfo notification" 2017-02-28 21:22:00 +00:00
Hassan Shojania
8606c335c3 Earlier processing of DrmInfo notification
Bug:  35681236
Test: Manual through the test app
Change-Id: I652e3c9742d7c55ab639c9df3ed1e6a0e035e6a4
2017-02-28 09:54:23 -08:00
Andy Hung
fef734cec1 VolumeShaper: Use VolumeAutomation interface and unhide
Test: Ducking and CTS
Bug: 31015569
Change-Id: I21b77905e86bf336c05aad5378f33ff36a92b3b5
2017-02-24 19:12:50 -08:00
Hassan Shojania
06b25fb236 Modular DRM for MediaPlayer
Bug:  34559906
Test: Manual through the test app
Change-Id: I1b1ca61e74f250d63ff5ff462905facb81fe44e0
2017-02-15 18:44:54 -08:00
Hassan Shojania
a6c969c036 New setDataSource API for accepting cookies
Bug:    34736056
Test:   Manual through the test app
Change-Id: Ibd48d5e292dda490d9e4e4528589b2b7ba97a4b4
2017-02-15 10:02:01 -08:00
Andy Hung
035d4ec772 VolumeShaper: Initial implementation
The VolumeShaper is used to apply a volume
envelope to an AudioTrack or a MediaPlayer.

Test: CTS
Bug: 30920125
Bug: 31015569
Change-Id: If8b4bed29760aa3bd15a4b54cae60e40b4f518ee
2017-02-10 18:08:12 -08:00
Jean-Michel Trivi
10ffc78304 Audio player delayed start: don't throw exception
When the framework sets a delayed start on a PlayerBase instance
  (e.g. MediaPlayer or AudioTrack), catch the IllegalStateException
  that can be thrown if the player's state has changed by the time
  the actual start command gets executed.

Test: generate notifications played by NotificationPlayer
Bug 35019197

Change-Id: I51fd0305bc83b34e33fbcf9331f55627d32702f3
2017-02-07 10:47:31 -08:00
Jean-Michel Trivi
6deaa4c8cf Merge "Notification playback synchronized with audio focus" 2017-02-01 18:43:36 +00:00
Jean-Michel Trivi
99489ccf74 Notification playback synchronized with audio focus
PlayerProxy: more control options (pan, delayed start),
  remove exceptions in method signatures.
Use delayed start on notification playback for better sync
  between media apps and notifications
Disabled for now: support for AudioService (through
  MediaFocusControl and PlaybackActivityMonitor) to enforce
  audio ducking of focus owners losing audio focus with
  AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK, and who don't
  play audio that has a content labelled as CONTENT_TYPE_SPEECH.
  This feature will be enabled when setting a VolumeShaper
  on a player works.

Test: play music and play notification
Bug 30258418

Change-Id: I4e4d911645306bbde17f74288f3b61781fe0e3fe
2017-01-31 15:40:09 -08:00
Hassan Shojania
0b52e95c3f Modular DRM for MediaPlayer
Bug:  34559906
Test: Manual through the test app

Change-Id: If76e2898e6064c5661193872b907b1720838c678
2017-01-27 19:03:09 -08:00
Ray Essick
0e0fee1e3a API access to mediametrics
provide SDK/API access to media metrics for user apps. This lets the
apps metrics data for their instances of player and codecs. Others
to come.

Bug: 34715803
Test: booted, invoked new APIs to verify desired results
Change-Id: Iaae6406aadef30adc893952961ac154a7c4c761d
2017-01-27 17:58:30 +00:00
Wei Jia
23dfee521a mediaplayer: add buffering settings API
Test: compiles, ensured that params is passed all the way to source
Bug:32524218

Change-Id: I90d65e10012ecc1a78989eba80d025d513ceaadf
2017-01-25 11:54:56 -08:00
Jean-Michel Trivi
9dc22c227c AudioPlaybackConfiguration has a player control interface
An AudioPlaybackConfiguration contains an IPlayer
  interface for system control of a player. It is not
  exposed to non-system signature components.
AudioService, through PlaybackActivityMonitor, is monitoring
  the death of the IPlayer so the matching player can get
  unregistered  in case it meets its maker.

Test: use vendor/google_toolbox/team/audio/cmds/ClPlaybackActivity
Bug: 30258418

Change-Id: Ibf3bceba91882ff16bffbf1219c55a1f89ccb13f
2017-01-13 23:49:29 +00:00
qinzhichao
e5fb79bb2d Merge "Fix NullPointerException in MediaPlayer" am: c7c899bbe2 am: 15c9c1f8d1 am: 80713e98f7
am: cec9c42498

Change-Id: I19ca9ac969eca57981fd00dcc89f6fa1c724650a
2017-01-04 17:41:53 +00:00
qinzhichao
30d4a498c4 Fix NullPointerException in MediaPlayer
Issue detail:
https://code.google.com/p/android/issues/detail?id=231417

setSubtitleAnchor() is a synchronized method and has checked
mSubtitleController. So checking for null pointer is not
needed in scanInternalSubtitleTracks() method.

Signed-off-by: qinzhichao <qinzhichao@xiaomi.com>
2017-01-04 14:51:33 +08:00
Jean-Michel Trivi
791c48458e MediaPlayer: do not crash when there is no context
Prevent NPE when the instance is running without a context.
  This enables writing command-line test apps.

Test: vendor/google_toolbox/team/audio/cmds/ClMediaPlayer
Change-Id: Ie74112334675c5d9d3efdb28c7178c49d8729acb
2017-01-03 12:53:36 -08:00
Jean-Michel Trivi
292a6a4e99 Notification of playback activity
AudioService keeps track of status of implementations of PlayerBase.
AudioService's PlaybackActivityMonitor maintains a list of
  playback configurations for each PlayerBase, and a list
  of clients that want to receive updates about the playback.
Playback activity clients can query the playback configuration
  of the system through AudioManager, or register a callback
  for updates. For clients with MODIFY_AUDIO_ROUTING permission
  (system), the playback configurations contain more information
  about each player (player type, uid, pid, state), and can see
  all players, not just the "active" ones. The act of stripping
  off data about the players that is not supposed to be seen
  by non-system clients, is referred to as "anonymization". It
  is implemented in system server, so no system data is ever
  sent to playback activity clients without system permission.
More information about the AudioPlaybackConfiguration is
  available in the SystemApi (uid, pid, player type, player state).

Test: run cts -m CtsMediaTestCases -t android.media.cts.AudioPlaybackConfigurationTest
Bug: 30955183

Change-Id: I85997594c0378216419f5f0fdaa0714996fd3573
2016-12-21 13:58:08 -08:00
Jean-Michel Trivi
d29d66c787 Merge "Stream types are for volume control" 2016-12-02 17:33:54 +00:00
Wei Jia
ebc2b694d1 MediaPlayer: enable same seek modes as in MediaMetadataRetriever.
Test: manually check result of mediaplayer.seekTo
Bug: 32557491
Change-Id: Ib507fbfb86a24fcf9b42758e89e595a4a58d33b5
2016-12-01 12:32:34 -08:00
Jean-Michel Trivi
2f7511fd06 Stream types are for volume control
Deprecate methods where stream types are not used for
  volume control operations.
Add a warning in the logs about the use of stream
  types to encourage migration to audio attributes.
Since STREAM_ACCESSIBILITY is added in O for the
  volume of a11y audio, throw an exception when
  trying to use it for playback.

Test: make offline-sdk-docs
Bug: 30955183

Change-Id: I7fcf79f1de68f217a9b19561aa1325ade169dfcf
2016-11-30 09:54:23 -08:00
Jean-Michel Trivi
8e48c6939b Refactor SoundPool for appOps handling through PlayerBase
Modified the signature of the abstract volume methods so
  it is clear at the subclass level whether the volume
  command is for a mute or a volume control.
  Changed the implementations in the subclasses
  accordingly.
Removed appOps handling inside SoundPool and made it
  inherit from PlayerBase.
Moved handling of the camera sound restriction from
  SoundPool to PlayerBase.
Added support in SoundPool native implementation for
  muting, as each player has its own volume.

Test: play a long file with SoundPool and enter DnD mode

Bug: 30955183
Bug: 28249605

Change-Id: I0fcd7480f9a455c06aa4f7092486f5c65bc9d7db
2016-11-14 09:36:11 -08:00
TreeHugger Robot
cea665e36a Merge "Media: check Settings.AUTHORITY without userId" 2016-09-26 15:37:15 +00:00
Robin Lee
9d5b8368d7 Media: check Settings.AUTHORITY without userId
Otherwise we'll miss a trick and not take the settings provider
shortcut for playing work ringtones.

Bug: 30658854
Change-Id: I378cabe0ba426a2c91919b3df33a525d41fe3d0d
2016-09-26 13:49:52 +00:00
Wei Jia
a46f4e2cfb MediaPlayer: add comments of restriction for setNextMediaPlayer. am: 295e727545 am: bff3f8a337
am: e9c90cea19

Change-Id: Ief6afe2b76968e14fb124be6316972033634d3a0
2016-09-16 01:55:45 +00:00
Wei Jia
e9c90cea19 MediaPlayer: add comments of restriction for setNextMediaPlayer. am: 295e727545
am: bff3f8a337

Change-Id: I86366b9ac51539ae4000810418b9d3a688231d4e
2016-09-16 01:48:44 +00:00