summaryrefslogtreecommitdiffstats
path: root/media/libavextensions
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2015-12-29 03:48:19 -0800
committerSteve Kondik <steve@cyngn.com>2015-12-29 05:03:24 -0800
commit8ca3dfd881424650951d1d72ee8809367b1c3d96 (patch)
treefe31c282698cab6797ec97e245f3abbe6c55817f /media/libavextensions
parentb19f3604b0abc7d3b835acb11c8dbc37fee8fe3d (diff)
downloadframeworks_av-8ca3dfd881424650951d1d72ee8809367b1c3d96.zip
frameworks_av-8ca3dfd881424650951d1d72ee8809367b1c3d96.tar.gz
frameworks_av-8ca3dfd881424650951d1d72ee8809367b1c3d96.tar.bz2
nuplayer: Enable PCM offload for any source
* Use the raw PCM format to perform the early open of the audio sink. This ensures that the renderer will do the same. * Fill in stubs for timestamp and position calculation. This fixes underruns and other issues. Change-Id: I8d761e523194cc12f387b4b2aa1594536e56da01
Diffstat (limited to 'media/libavextensions')
-rw-r--r--media/libavextensions/media/AVMediaExtensions.h29
-rw-r--r--media/libavextensions/mediaplayerservice/AVNuUtils.cpp14
2 files changed, 24 insertions, 19 deletions
diff --git a/media/libavextensions/media/AVMediaExtensions.h b/media/libavextensions/media/AVMediaExtensions.h
index d48feec..9622253 100644
--- a/media/libavextensions/media/AVMediaExtensions.h
+++ b/media/libavextensions/media/AVMediaExtensions.h
@@ -47,18 +47,33 @@ struct AVMediaUtils {
virtual bool AudioTrackIsPcmOffloaded(const audio_format_t format) {
return audio_is_offload_pcm(format);
}
- virtual status_t AudioTrackGetPosition(AudioTrack* /*track*/,
- uint32_t* /*position*/) {
- return NO_INIT;
+
+ virtual status_t AudioTrackGetPosition(AudioTrack* track,
+ uint32_t* position) {
+ uint32_t tempPos = (track->mState == AudioTrack::STATE_STOPPED ||
+ track->mState == AudioTrack::STATE_FLUSHED) ? 0 :
+ track->updateAndGetPosition_l();
+ *position = (tempPos /
+ (track->channelCount() * audio_bytes_per_sample(track->format())));
+ return NO_ERROR;
}
- virtual status_t AudioTrackGetTimestamp(AudioTrack* /*track*/,
- AudioTimestamp* /*timestamp*/) {
- return NO_INIT;
+ virtual status_t AudioTrackGetTimestamp(AudioTrack* track,
+ AudioTimestamp* timestamp) {
+ if (!AudioTrackIsPcmOffloaded(track->format())) {
+ return NO_INIT;
+ }
+ uint32_t tempPos = (track->mState == AudioTrack::STATE_STOPPED ||
+ track->mState == AudioTrack::STATE_FLUSHED) ? 0 :
+ track->updateAndGetPosition_l();
+ timestamp->mPosition = (tempPos / (track->channelCount() *
+ audio_bytes_per_sample(track->format())));
+ clock_gettime(CLOCK_MONOTONIC, &timestamp->mTime);
+ return NO_ERROR;
}
virtual size_t AudioTrackGetOffloadFrameCount(size_t frameCount) {
- return frameCount;
+ return frameCount * 2;
}
virtual bool AudioTrackIsTrackOffloaded(audio_io_handle_t /*output*/) {
diff --git a/media/libavextensions/mediaplayerservice/AVNuUtils.cpp b/media/libavextensions/mediaplayerservice/AVNuUtils.cpp
index 34abd0a..5f146c7 100644
--- a/media/libavextensions/mediaplayerservice/AVNuUtils.cpp
+++ b/media/libavextensions/mediaplayerservice/AVNuUtils.cpp
@@ -55,21 +55,11 @@
namespace android {
static bool is24bitPCMOffloadEnabled() {
- char propPCMOfload[PROPERTY_VALUE_MAX] = {0};
- property_get("audio.offload.pcm.24bit.enable", propPCMOfload, "0");
- if (!strncmp(propPCMOfload, "true", 4) || atoi(propPCMOfload))
- return true;
- else
- return false;
+ return property_get_bool("audio.offload.pcm.24bit.enable", false);
}
static bool is16bitPCMOffloadEnabled() {
- char propPCMOfload[PROPERTY_VALUE_MAX] = {0};
- property_get("audio.offload.pcm.16bit.enable", propPCMOfload, "0");
- if (!strncmp(propPCMOfload, "true", 4) || atoi(propPCMOfload))
- return true;
- else
- return false;
+ return property_get_bool("audio.offload.pcm.16bit.enable", false);
}
sp<MetaData> AVNuUtils::createPCMMetaFromSource(const sp<MetaData> &sMeta) {