merge in lmp-release history after reset to 44a5a202101614302f607228d4357496b350bab4
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
index eec6960..c9be0dd 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
@@ -31,6 +31,7 @@
namespace android {
static const int kMaxPendingBuffers = 10;
+static const int kMaxCachedBytes = 200000;
NuPlayer::DecoderPassThrough::DecoderPassThrough(
const sp<AMessage> ¬ify)
@@ -39,6 +40,7 @@
mBufferGeneration(0),
mReachedEOS(true),
mPendingBuffers(0),
+ mCachedBytes(0),
mComponentName("pass through decoder") {
mDecoderLooper = new ALooper;
mDecoderLooper->setName("NuPlayerDecoderPassThrough");
@@ -78,6 +80,7 @@
void NuPlayer::DecoderPassThrough::onConfigure(const sp<AMessage> &format) {
ALOGV("[%s] onConfigure", mComponentName.c_str());
mPendingBuffers = 0;
+ mCachedBytes = 0;
mReachedEOS = false;
++mBufferGeneration;
@@ -96,7 +99,7 @@
}
void NuPlayer::DecoderPassThrough::requestABuffer() {
- if (mPendingBuffers >= kMaxPendingBuffers || mReachedEOS) {
+ if (mCachedBytes >= kMaxCachedBytes || mReachedEOS) {
ALOGV("[%s] mReachedEOS=%d, max pending buffers(%d:%d)",
mComponentName.c_str(), (mReachedEOS ? 1 : 0),
mPendingBuffers, kMaxPendingBuffers);
@@ -136,8 +139,11 @@
return;
}
+ mCachedBytes += buffer->size();
+
sp<AMessage> reply = new AMessage(kWhatBufferConsumed, id());
reply->setInt32("generation", mBufferGeneration);
+ reply->setInt32("size", buffer->size());
sp<AMessage> notify = mNotify->dup();
notify->setInt32("what", kWhatDrainThisBuffer);
@@ -146,8 +152,9 @@
notify->post();
}
-void NuPlayer::DecoderPassThrough::onBufferConsumed() {
+void NuPlayer::DecoderPassThrough::onBufferConsumed(int32_t size) {
mPendingBuffers--;
+ mCachedBytes -= size;
sp<AMessage> message = new AMessage(kWhatRequestABuffer, id());
message->setInt32("generation", mBufferGeneration);
message->post();
@@ -160,6 +167,7 @@
notify->setInt32("what", kWhatFlushCompleted);
notify->post();
mPendingBuffers = 0;
+ mCachedBytes = 0;
mReachedEOS = false;
}
@@ -205,7 +213,9 @@
case kWhatBufferConsumed:
{
if (!isStaleReply(msg)) {
- onBufferConsumed();
+ int32_t size;
+ CHECK(msg->findInt32("size", &size));
+ onBufferConsumed(size);
}
break;
}
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h
index e9e5658..8590856 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h
@@ -61,12 +61,13 @@
void onConfigure(const sp<AMessage> &format);
void onFlush();
void onInputBufferFilled(const sp<AMessage> &msg);
- void onBufferConsumed();
+ void onBufferConsumed(int32_t size);
void onShutdown();
int32_t mBufferGeneration;
bool mReachedEOS;
int32_t mPendingBuffers;
+ int32_t mCachedBytes;
AString mComponentName;
DISALLOW_EVIL_CONSTRUCTORS(DecoderPassThrough);
diff --git a/services/audiopolicy/AudioPolicyManager.cpp b/services/audiopolicy/AudioPolicyManager.cpp
index 9e59488..14fdec5 100644
--- a/services/audiopolicy/AudioPolicyManager.cpp
+++ b/services/audiopolicy/AudioPolicyManager.cpp
@@ -1845,6 +1845,11 @@
mEffects.valueAt(i)->dump(fd);
}
+ snprintf(buffer, SIZE, "\nAudio Patches:\n");
+ write(fd, buffer, strlen(buffer));
+ for (size_t i = 0; i < mAudioPatches.size(); i++) {
+ mAudioPatches[i]->dump(fd, 2, i);
+ }
return NO_ERROR;
}
@@ -5214,6 +5219,8 @@
char buffer[SIZE];
String8 result;
+ snprintf(buffer, SIZE, " ID: %d\n", mId);
+ result.append(buffer);
snprintf(buffer, SIZE, " Sampling rate: %d\n", mSamplingRate);
result.append(buffer);
snprintf(buffer, SIZE, " Format: %08x\n", mFormat);
@@ -5297,6 +5304,8 @@
char buffer[SIZE];
String8 result;
+ snprintf(buffer, SIZE, " ID: %d\n", mId);
+ result.append(buffer);
snprintf(buffer, SIZE, " Sampling rate: %d\n", mSamplingRate);
result.append(buffer);
snprintf(buffer, SIZE, " Format: %d\n", mFormat);
@@ -6719,6 +6728,53 @@
return NO_ERROR;
}
+status_t AudioPolicyManager::AudioPatch::dump(int fd, int spaces, int index) const
+{
+ const size_t SIZE = 256;
+ char buffer[SIZE];
+ String8 result;
+
+
+ snprintf(buffer, SIZE, "%*sAudio patch %d:\n", spaces, "", index+1);
+ result.append(buffer);
+ snprintf(buffer, SIZE, "%*s- handle: %2d\n", spaces, "", mHandle);
+ result.append(buffer);
+ snprintf(buffer, SIZE, "%*s- audio flinger handle: %2d\n", spaces, "", mAfPatchHandle);
+ result.append(buffer);
+ snprintf(buffer, SIZE, "%*s- owner uid: %2d\n", spaces, "", mUid);
+ result.append(buffer);
+ snprintf(buffer, SIZE, "%*s- %d sources:\n", spaces, "", mPatch.num_sources);
+ result.append(buffer);
+ for (size_t i = 0; i < mPatch.num_sources; i++) {
+ if (mPatch.sources[i].type == AUDIO_PORT_TYPE_DEVICE) {
+ snprintf(buffer, SIZE, "%*s- Device ID %d %s\n", spaces + 2, "",
+ mPatch.sources[i].id, enumToString(sDeviceNameToEnumTable,
+ ARRAY_SIZE(sDeviceNameToEnumTable),
+ mPatch.sources[i].ext.device.type));
+ } else {
+ snprintf(buffer, SIZE, "%*s- Mix ID %d I/O handle %d\n", spaces + 2, "",
+ mPatch.sources[i].id, mPatch.sources[i].ext.mix.handle);
+ }
+ result.append(buffer);
+ }
+ snprintf(buffer, SIZE, "%*s- %d sinks:\n", spaces, "", mPatch.num_sinks);
+ result.append(buffer);
+ for (size_t i = 0; i < mPatch.num_sinks; i++) {
+ if (mPatch.sinks[i].type == AUDIO_PORT_TYPE_DEVICE) {
+ snprintf(buffer, SIZE, "%*s- Device ID %d %s\n", spaces + 2, "",
+ mPatch.sinks[i].id, enumToString(sDeviceNameToEnumTable,
+ ARRAY_SIZE(sDeviceNameToEnumTable),
+ mPatch.sinks[i].ext.device.type));
+ } else {
+ snprintf(buffer, SIZE, "%*s- Mix ID %d I/O handle %d\n", spaces + 2, "",
+ mPatch.sinks[i].id, mPatch.sinks[i].ext.mix.handle);
+ }
+ result.append(buffer);
+ }
+
+ write(fd, result.string(), result.size());
+ return NO_ERROR;
+}
// --- audio_policy.conf file parsing
diff --git a/services/audiopolicy/AudioPolicyManager.h b/services/audiopolicy/AudioPolicyManager.h
index f071675..e3e3172 100644
--- a/services/audiopolicy/AudioPolicyManager.h
+++ b/services/audiopolicy/AudioPolicyManager.h
@@ -312,6 +312,8 @@
const struct audio_patch *patch, uid_t uid) :
mHandle(handle), mPatch(*patch), mUid(uid), mAfPatchHandle(0) {}
+ status_t dump(int fd, int spaces, int index) const;
+
audio_patch_handle_t mHandle;
struct audio_patch mPatch;
uid_t mUid;