Merge "Monitor crashes of audio hal service via linkToDeath"
diff --git a/include/media/BufferingSettings.h b/include/media/BufferingSettings.h
index 281a5c1..e812d2a 100644
--- a/include/media/BufferingSettings.h
+++ b/include/media/BufferingSettings.h
@@ -66,6 +66,7 @@
status_t writeToParcel(Parcel* parcel) const override;
status_t readFromParcel(const Parcel* parcel) override;
+ String8 toString() const;
};
} // namespace android
diff --git a/include/media/mediaplayer.h b/include/media/mediaplayer.h
index be34d02..9130159 100644
--- a/include/media/mediaplayer.h
+++ b/include/media/mediaplayer.h
@@ -219,6 +219,8 @@
status_t setVideoSurfaceTexture(
const sp<IGraphicBufferProducer>& bufferProducer);
status_t setListener(const sp<MediaPlayerListener>& listener);
+ status_t getDefaultBufferingSettings(BufferingSettings* buffering /* nonnull */);
+ status_t setBufferingSettings(const BufferingSettings& buffering);
status_t prepare();
status_t prepareAsync();
status_t start();
diff --git a/media/libaudiohal/EffectHalHidl.cpp b/media/libaudiohal/EffectHalHidl.cpp
index a11719a..6cf6412 100644
--- a/media/libaudiohal/EffectHalHidl.cpp
+++ b/media/libaudiohal/EffectHalHidl.cpp
@@ -171,6 +171,8 @@
hidlData.setToExternal(reinterpret_cast<uint8_t*>(pCmdData), cmdSize);
}
status_t status;
+ uint32_t replySizeStub = 0;
+ if (replySize == nullptr) replySize = &replySizeStub;
Return<void> ret = mEffect->command(cmdCode, hidlData, *replySize,
[&](int32_t s, const hidl_vec<uint8_t>& result) {
status = s;
diff --git a/media/libmedia/BufferingSettings.cpp b/media/libmedia/BufferingSettings.cpp
index 5d6e03d..a69497e 100644
--- a/media/libmedia/BufferingSettings.cpp
+++ b/media/libmedia/BufferingSettings.cpp
@@ -80,4 +80,15 @@
return OK;
}
+String8 BufferingSettings::toString() const {
+ String8 s;
+ s.appendFormat("initialMode(%d), rebufferingMode(%d), "
+ "initialMarks(%d ms, %d KB), rebufferingMarks(%d, %d)ms, (%d, %d)KB",
+ mInitialBufferingMode, mRebufferingMode,
+ mInitialWatermarkMs, mInitialWatermarkKB,
+ mRebufferingWatermarkLowMs, mRebufferingWatermarkHighMs,
+ mRebufferingWatermarkLowKB, mRebufferingWatermarkHighKB);
+ return s;
+}
+
} // namespace android
diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp
index 699172b..6bba1f1 100644
--- a/media/libmedia/mediaplayer.cpp
+++ b/media/libmedia/mediaplayer.cpp
@@ -244,6 +244,28 @@
return mPlayer->setVideoSurfaceTexture(bufferProducer);
}
+status_t MediaPlayer::getDefaultBufferingSettings(BufferingSettings* buffering /* nonnull */)
+{
+ ALOGV("getDefaultBufferingSettings");
+
+ Mutex::Autolock _l(mLock);
+ if (mPlayer == 0) {
+ return NO_INIT;
+ }
+ return mPlayer->getDefaultBufferingSettings(buffering);
+}
+
+status_t MediaPlayer::setBufferingSettings(const BufferingSettings& buffering)
+{
+ ALOGV("setBufferingSettings");
+
+ Mutex::Autolock _l(mLock);
+ if (mPlayer == 0) {
+ return NO_INIT;
+ }
+ return mPlayer->setBufferingSettings(buffering);
+}
+
// must call with lock held
status_t MediaPlayer::prepareAsync_l()
{
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 065738e..3199495 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -975,13 +975,8 @@
status_t MediaPlayerService::Client::setBufferingSettings(
const BufferingSettings& buffering)
{
- ALOGV("[%d] setBufferingSettings(%d, %d, %d, %d, %d, %d, %d, %d)",
- mConnId, buffering.mInitialBufferingMode, buffering.mRebufferingMode,
- buffering.mInitialWatermarkMs, buffering.mInitialWatermarkKB,
- buffering.mRebufferingWatermarkLowMs,
- buffering.mRebufferingWatermarkHighMs,
- buffering.mRebufferingWatermarkLowKB,
- buffering.mRebufferingWatermarkHighKB);
+ ALOGV("[%d] setBufferingSettings{%s}",
+ mConnId, buffering.toString().string());
sp<MediaPlayerBase> p = getPlayer();
if (p == 0) return UNKNOWN_ERROR;
return p->setBufferingSettings(buffering);
@@ -995,13 +990,8 @@
if (p == 0) return UNKNOWN_ERROR;
status_t ret = p->getDefaultBufferingSettings(buffering);
if (ret == NO_ERROR) {
- ALOGV("[%d] getDefaultBufferingSettings(%d, %d, %d, %d, %d, %d, %d, %d)",
- mConnId, buffering->mInitialBufferingMode, buffering->mRebufferingMode,
- buffering->mInitialWatermarkMs, buffering->mInitialWatermarkKB,
- buffering->mRebufferingWatermarkLowMs,
- buffering->mRebufferingWatermarkHighMs,
- buffering->mRebufferingWatermarkLowKB,
- buffering->mRebufferingWatermarkHighKB);
+ ALOGV("[%d] getDefaultBufferingSettings{%s}",
+ mConnId, buffering->toString().string());
} else {
ALOGV("[%d] getDefaultBufferingSettings returned %d", mConnId, ret);
}
diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.cpp b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
index 407a5bf..91a2b7b 100644
--- a/media/libmediaplayerservice/nuplayer/GenericSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
@@ -1495,10 +1495,16 @@
buffering->mRebufferingWatermarkHighMs = kHighWaterMarkRebufferMs;
buffering->mRebufferingWatermarkLowKB = kLowWaterMarkKB;
buffering->mRebufferingWatermarkHighKB = kHighWaterMarkKB;
+
+ ALOGV("BufferingMonitor::getDefaultBufferingSettings{%s}",
+ buffering->toString().string());
}
status_t NuPlayer::GenericSource::BufferingMonitor::setBufferingSettings(
const BufferingSettings &buffering) {
+ ALOGV("BufferingMonitor::setBufferingSettings{%s}",
+ buffering.toString().string());
+
Mutex::Autolock _l(mLock);
if (buffering.IsSizeBasedBufferingMode(buffering.mInitialBufferingMode)
|| (buffering.IsTimeBasedBufferingMode(buffering.mRebufferingMode)
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp
index 716f5d8..02a1239 100755
--- a/media/libstagefright/MPEG4Writer.cpp
+++ b/media/libstagefright/MPEG4Writer.cpp
@@ -3260,8 +3260,14 @@
mOwner->writeInt32(0);
} else {
int32_t width, height;
- bool success = mMeta->findInt32(kKeyWidth, &width);
- success = success && mMeta->findInt32(kKeyHeight, &height);
+ bool success = mMeta->findInt32(kKeyDisplayWidth, &width);
+ success = success && mMeta->findInt32(kKeyDisplayHeight, &height);
+
+ // Use width/height if display width/height are not present.
+ if (!success) {
+ success = mMeta->findInt32(kKeyWidth, &width);
+ success = success && mMeta->findInt32(kKeyHeight, &height);
+ }
CHECK(success);
mOwner->writeInt32(width << 16); // 32-bit fixed-point value
diff --git a/media/libstagefright/Utils.cpp b/media/libstagefright/Utils.cpp
index 68a5b86..ec02fb9 100644
--- a/media/libstagefright/Utils.cpp
+++ b/media/libstagefright/Utils.cpp
@@ -1783,28 +1783,28 @@
void readFromAMessage(const sp<AMessage> &msg, BufferingSettings *buffering /* nonnull */) {
int32_t value;
- if (msg->findInt32("init-mode", &value) == OK) {
+ if (msg->findInt32("init-mode", &value)) {
buffering->mInitialBufferingMode = (BufferingMode)value;
}
- if (msg->findInt32("rebuffer-mode", &value) == OK) {
+ if (msg->findInt32("rebuffer-mode", &value)) {
buffering->mRebufferingMode = (BufferingMode)value;
}
- if (msg->findInt32("init-ms", &value) == OK) {
+ if (msg->findInt32("init-ms", &value)) {
buffering->mInitialWatermarkMs = value;
}
- if (msg->findInt32("init-kb", &value) == OK) {
+ if (msg->findInt32("init-kb", &value)) {
buffering->mInitialWatermarkKB = value;
}
- if (msg->findInt32("rebuffer-low-ms", &value) == OK) {
+ if (msg->findInt32("rebuffer-low-ms", &value)) {
buffering->mRebufferingWatermarkLowMs = value;
}
- if (msg->findInt32("rebuffer-high-ms", &value) == OK) {
+ if (msg->findInt32("rebuffer-high-ms", &value)) {
buffering->mRebufferingWatermarkHighMs = value;
}
- if (msg->findInt32("rebuffer-low-kb", &value) == OK) {
+ if (msg->findInt32("rebuffer-low-kb", &value)) {
buffering->mRebufferingWatermarkLowKB = value;
}
- if (msg->findInt32("rebuffer-high-kb", &value) == OK) {
+ if (msg->findInt32("rebuffer-high-kb", &value)) {
buffering->mRebufferingWatermarkHighKB = value;
}
}
diff --git a/media/mtp/MtpFfsHandle.cpp b/media/mtp/MtpFfsHandle.cpp
index d11a10d..d0696a8 100644
--- a/media/mtp/MtpFfsHandle.cpp
+++ b/media/mtp/MtpFfsHandle.cpp
@@ -107,6 +107,7 @@
.bInterfaceClass = USB_CLASS_STILL_IMAGE,
.bInterfaceSubClass = 1,
.bInterfaceProtocol = 1,
+ .iInterface = 1,
};
const struct usb_interface_descriptor ptp_interface_desc = {
@@ -259,14 +260,23 @@
.intr_comp = ss_intr_comp,
};
+#define STR_INTERFACE "MTP"
const struct {
struct usb_functionfs_strings_head header;
+ struct {
+ __le16 code;
+ const char str1[sizeof(STR_INTERFACE)];
+ } __attribute__((packed)) lang0;
} __attribute__((packed)) strings = {
.header = {
.magic = cpu_to_le32(FUNCTIONFS_STRINGS_MAGIC),
.length = cpu_to_le32(sizeof(strings)),
- .str_count = cpu_to_le32(0),
- .lang_count = cpu_to_le32(0),
+ .str_count = cpu_to_le32(1),
+ .lang_count = cpu_to_le32(1),
+ },
+ .lang0 = {
+ .code = cpu_to_le16(0x0409),
+ .str1 = STR_INTERFACE,
},
};