Merge "Convert AACExtractor to use AMediaFormat"
diff --git a/drm/common/DrmEngineBase.cpp b/drm/common/DrmEngineBase.cpp
index f734905..aec5959 100644
--- a/drm/common/DrmEngineBase.cpp
+++ b/drm/common/DrmEngineBase.cpp
@@ -79,12 +79,12 @@
}
status_t DrmEngineBase::consumeRights(
- int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int action, bool reserve) {
return onConsumeRights(uniqueId, decryptHandle, action, reserve);
}
status_t DrmEngineBase::setPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position) {
return onSetPlaybackStatus(uniqueId, decryptHandle, playbackStatus, position);
}
@@ -120,7 +120,7 @@
}
status_t DrmEngineBase::openDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle,
+ int uniqueId, sp<DecryptHandle>& decryptHandle,
int fd, off64_t offset, off64_t length, const char* mime) {
if (!mime || mime[0] == '\0') {
@@ -131,7 +131,7 @@
}
status_t DrmEngineBase::openDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle,
+ int uniqueId, sp<DecryptHandle>& decryptHandle,
const char* uri, const char* mime) {
if (!mime || mime[0] == '\0') {
return onOpenDecryptSession(uniqueId, decryptHandle, uri);
@@ -139,33 +139,33 @@
return onOpenDecryptSession(uniqueId, decryptHandle, uri, mime);
}
-status_t DrmEngineBase::openDecryptSession(int uniqueId, DecryptHandle* decryptHandle,
+status_t DrmEngineBase::openDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle,
const DrmBuffer& buf, const String8& mimeType) {
return onOpenDecryptSession(uniqueId, decryptHandle, buf, mimeType);
}
-status_t DrmEngineBase::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) {
+status_t DrmEngineBase::closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) {
return onCloseDecryptSession(uniqueId, decryptHandle);
}
status_t DrmEngineBase::initializeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, const DrmBuffer* headerInfo) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId, const DrmBuffer* headerInfo) {
return onInitializeDecryptUnit(uniqueId, decryptHandle, decryptUnitId, headerInfo);
}
status_t DrmEngineBase::decrypt(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) {
return onDecrypt(uniqueId, decryptHandle, decryptUnitId, encBuffer, decBuffer, IV);
}
status_t DrmEngineBase::finalizeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId) {
return onFinalizeDecryptUnit(uniqueId, decryptHandle, decryptUnitId);
}
ssize_t DrmEngineBase::pread(
- int uniqueId, DecryptHandle* decryptHandle, void* buffer, ssize_t numBytes, off64_t offset) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, void* buffer, ssize_t numBytes, off64_t offset) {
return onPread(uniqueId, decryptHandle, buffer, numBytes, offset);
}
diff --git a/drm/common/IDrmManagerService.cpp b/drm/common/IDrmManagerService.cpp
index 44f98dd..a6d33b0 100644
--- a/drm/common/IDrmManagerService.cpp
+++ b/drm/common/IDrmManagerService.cpp
@@ -39,7 +39,7 @@
using namespace android;
static void writeDecryptHandleToParcelData(
- const DecryptHandle* handle, Parcel* data) {
+ const sp<DecryptHandle>& handle, Parcel* data) {
data->writeInt32(handle->decryptId);
data->writeString8(handle->mimeType);
data->writeInt32(handle->decryptApiType);
@@ -67,7 +67,7 @@
}
static void readDecryptHandleFromParcelData(
- DecryptHandle* handle, const Parcel& data) {
+ sp<DecryptHandle>& handle, const Parcel& data) {
if (0 == data.dataAvail()) {
return;
}
@@ -99,7 +99,7 @@
}
}
-static void clearDecryptHandle(DecryptHandle* handle) {
+static void clearDecryptHandle(sp<DecryptHandle> &handle) {
if (handle == NULL) {
return;
}
@@ -414,7 +414,7 @@
}
status_t BpDrmManagerService::consumeRights(
- int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int action, bool reserve) {
ALOGV("consumeRights");
Parcel data, reply;
@@ -431,7 +431,7 @@
}
status_t BpDrmManagerService::setPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position) {
ALOGV("setPlaybackStatus");
Parcel data, reply;
@@ -603,7 +603,7 @@
return reply.readInt32();
}
-DecryptHandle* BpDrmManagerService::openDecryptSession(
+sp<DecryptHandle> BpDrmManagerService::openDecryptSession(
int uniqueId, int fd, off64_t offset, off64_t length, const char* mime) {
ALOGV("Entering BpDrmManagerService::openDecryptSession");
Parcel data, reply;
@@ -621,7 +621,7 @@
remote()->transact(OPEN_DECRYPT_SESSION, data, &reply);
- DecryptHandle* handle = NULL;
+ sp<DecryptHandle> handle;
if (0 != reply.dataAvail()) {
handle = new DecryptHandle();
readDecryptHandleFromParcelData(handle, reply);
@@ -629,7 +629,7 @@
return handle;
}
-DecryptHandle* BpDrmManagerService::openDecryptSession(
+sp<DecryptHandle> BpDrmManagerService::openDecryptSession(
int uniqueId, const char* uri, const char* mime) {
ALOGV("Entering BpDrmManagerService::openDecryptSession: mime=%s", mime? mime: "NULL");
@@ -646,7 +646,7 @@
remote()->transact(OPEN_DECRYPT_SESSION_FROM_URI, data, &reply);
- DecryptHandle* handle = NULL;
+ sp<DecryptHandle> handle;
if (0 != reply.dataAvail()) {
handle = new DecryptHandle();
readDecryptHandleFromParcelData(handle, reply);
@@ -656,7 +656,7 @@
return handle;
}
-DecryptHandle* BpDrmManagerService::openDecryptSession(
+sp<DecryptHandle> BpDrmManagerService::openDecryptSession(
int uniqueId, const DrmBuffer& buf, const String8& mimeType) {
ALOGV("Entering BpDrmManagerService::openDecryptSession");
Parcel data, reply;
@@ -673,7 +673,7 @@
remote()->transact(OPEN_DECRYPT_SESSION_FOR_STREAMING, data, &reply);
- DecryptHandle* handle = NULL;
+ sp<DecryptHandle> handle;
if (0 != reply.dataAvail()) {
handle = new DecryptHandle();
readDecryptHandleFromParcelData(handle, reply);
@@ -683,7 +683,7 @@
return handle;
}
-status_t BpDrmManagerService::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) {
+status_t BpDrmManagerService::closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) {
ALOGV("closeDecryptSession");
Parcel data, reply;
@@ -698,7 +698,7 @@
}
status_t BpDrmManagerService::initializeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle,
+ int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo) {
ALOGV("initializeDecryptUnit");
Parcel data, reply;
@@ -718,7 +718,7 @@
}
status_t BpDrmManagerService::decrypt(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) {
ALOGV("decrypt");
Parcel data, reply;
@@ -754,7 +754,7 @@
}
status_t BpDrmManagerService::finalizeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId) {
ALOGV("finalizeDecryptUnit");
Parcel data, reply;
@@ -770,7 +770,7 @@
}
ssize_t BpDrmManagerService::pread(
- int uniqueId, DecryptHandle* decryptHandle, void* buffer,
+ int uniqueId, sp<DecryptHandle>& decryptHandle, void* buffer,
ssize_t numBytes, off64_t offset) {
ALOGV("read");
Parcel data, reply;
@@ -1128,16 +1128,16 @@
const int uniqueId = data.readInt32();
- DecryptHandle handle;
- readDecryptHandleFromParcelData(&handle, data);
+ sp<DecryptHandle> handle = new DecryptHandle();
+ readDecryptHandleFromParcelData(handle, data);
const int action = data.readInt32();
const bool reserve = static_cast<bool>(data.readInt32());
const status_t status
- = consumeRights(uniqueId, &handle, action, reserve);
+ = consumeRights(uniqueId, handle, action, reserve);
reply->writeInt32(status);
- clearDecryptHandle(&handle);
+ clearDecryptHandle(handle);
return DRM_NO_ERROR;
}
@@ -1148,16 +1148,16 @@
const int uniqueId = data.readInt32();
- DecryptHandle handle;
- readDecryptHandleFromParcelData(&handle, data);
+ sp<DecryptHandle> handle = new DecryptHandle();
+ readDecryptHandleFromParcelData(handle, data);
const int playbackStatus = data.readInt32();
const int64_t position = data.readInt64();
const status_t status
- = setPlaybackStatus(uniqueId, &handle, playbackStatus, position);
+ = setPlaybackStatus(uniqueId, handle, playbackStatus, position);
reply->writeInt32(status);
- clearDecryptHandle(&handle);
+ clearDecryptHandle(handle);
return DRM_NO_ERROR;
}
@@ -1329,13 +1329,13 @@
const off64_t length = data.readInt64();
const String8 mime = data.readString8();
- DecryptHandle* handle
+ sp<DecryptHandle> handle
= openDecryptSession(uniqueId, fd, offset, length, mime.string());
- if (NULL != handle) {
- writeDecryptHandleToParcelData(handle, reply);
+ if (NULL != handle.get()) {
+ writeDecryptHandleToParcelData(handle.get(), reply);
clearDecryptHandle(handle);
- delete handle; handle = NULL;
+ handle.clear();
}
return DRM_NO_ERROR;
}
@@ -1349,13 +1349,13 @@
const String8 uri = data.readString8();
const String8 mime = data.readString8();
- DecryptHandle* handle = openDecryptSession(uniqueId, uri.string(), mime.string());
+ sp<DecryptHandle> handle = openDecryptSession(uniqueId, uri.string(), mime.string());
- if (NULL != handle) {
- writeDecryptHandleToParcelData(handle, reply);
+ if (NULL != handle.get()) {
+ writeDecryptHandleToParcelData(handle.get(), reply);
clearDecryptHandle(handle);
- delete handle; handle = NULL;
+ handle.clear();
} else {
ALOGV("NULL decryptHandle is returned");
}
@@ -1373,13 +1373,12 @@
bufferSize);
const String8 mimeType(data.readString8());
- DecryptHandle* handle = openDecryptSession(uniqueId, buf, mimeType);
+ sp<DecryptHandle> handle = openDecryptSession(uniqueId, buf, mimeType);
if (handle != NULL) {
writeDecryptHandleToParcelData(handle, reply);
clearDecryptHandle(handle);
- delete handle;
- handle = NULL;
+ handle.clear();
} else {
ALOGV("NULL decryptHandle is returned");
}
@@ -1393,7 +1392,7 @@
const int uniqueId = data.readInt32();
- DecryptHandle* handle = new DecryptHandle();
+ sp<DecryptHandle> handle = new DecryptHandle();
readDecryptHandleFromParcelData(handle, data);
const status_t status = closeDecryptSession(uniqueId, handle);
@@ -1408,8 +1407,8 @@
const int uniqueId = data.readInt32();
- DecryptHandle handle;
- readDecryptHandleFromParcelData(&handle, data);
+ sp<DecryptHandle> handle = new DecryptHandle();
+ readDecryptHandleFromParcelData(handle, data);
const int decryptUnitId = data.readInt32();
@@ -1417,17 +1416,17 @@
const uint32_t bufferSize = data.readInt32();
if (bufferSize > data.dataAvail()) {
reply->writeInt32(BAD_VALUE);
- clearDecryptHandle(&handle);
+ clearDecryptHandle(handle);
return DRM_NO_ERROR;
}
DrmBuffer* headerInfo = NULL;
headerInfo = new DrmBuffer((char *)data.readInplace(bufferSize), bufferSize);
const status_t status
- = initializeDecryptUnit(uniqueId, &handle, decryptUnitId, headerInfo);
+ = initializeDecryptUnit(uniqueId, handle, decryptUnitId, headerInfo);
reply->writeInt32(status);
- clearDecryptHandle(&handle);
+ clearDecryptHandle(handle);
delete headerInfo; headerInfo = NULL;
return DRM_NO_ERROR;
}
@@ -1439,8 +1438,8 @@
const int uniqueId = data.readInt32();
- DecryptHandle handle;
- readDecryptHandleFromParcelData(&handle, data);
+ sp<DecryptHandle> handle = new DecryptHandle;
+ readDecryptHandleFromParcelData(handle, data);
const int decryptUnitId = data.readInt32();
const uint32_t decBufferSize = data.readInt32();
@@ -1450,7 +1449,7 @@
decBufferSize > MAX_BINDER_TRANSACTION_SIZE) {
reply->writeInt32(BAD_VALUE);
reply->writeInt32(0);
- clearDecryptHandle(&handle);
+ clearDecryptHandle(handle);
return DRM_NO_ERROR;
}
@@ -1470,7 +1469,7 @@
}
const status_t status
- = decrypt(uniqueId, &handle, decryptUnitId, encBuffer, &decBuffer, IV);
+ = decrypt(uniqueId, handle, decryptUnitId, encBuffer, &decBuffer, IV);
reply->writeInt32(status);
@@ -1480,7 +1479,7 @@
reply->write(decBuffer->data, size);
}
- clearDecryptHandle(&handle);
+ clearDecryptHandle(handle);
delete encBuffer; encBuffer = NULL;
delete decBuffer; decBuffer = NULL;
delete [] buffer; buffer = NULL;
@@ -1495,13 +1494,13 @@
const int uniqueId = data.readInt32();
- DecryptHandle handle;
- readDecryptHandleFromParcelData(&handle, data);
+ sp<DecryptHandle> handle = new DecryptHandle();
+ readDecryptHandleFromParcelData(handle, data);
- const status_t status = finalizeDecryptUnit(uniqueId, &handle, data.readInt32());
+ const status_t status = finalizeDecryptUnit(uniqueId, handle, data.readInt32());
reply->writeInt32(status);
- clearDecryptHandle(&handle);
+ clearDecryptHandle(handle);
return DRM_NO_ERROR;
}
@@ -1512,8 +1511,8 @@
const int uniqueId = data.readInt32();
- DecryptHandle handle;
- readDecryptHandleFromParcelData(&handle, data);
+ sp<DecryptHandle> handle = new DecryptHandle();
+ readDecryptHandleFromParcelData(handle, data);
const uint32_t numBytes = data.readInt32();
if (numBytes > MAX_BINDER_TRANSACTION_SIZE) {
@@ -1524,13 +1523,13 @@
const off64_t offset = data.readInt64();
- ssize_t result = pread(uniqueId, &handle, buffer, numBytes, offset);
+ ssize_t result = pread(uniqueId, handle, buffer, numBytes, offset);
reply->writeInt32(result);
if (0 < result) {
reply->write(buffer, result);
}
- clearDecryptHandle(&handle);
+ clearDecryptHandle(handle);
delete [] buffer, buffer = NULL;
return DRM_NO_ERROR;
}
diff --git a/drm/common/include/DrmEngineBase.h b/drm/common/include/DrmEngineBase.h
index 417107f..73f11a4 100644
--- a/drm/common/include/DrmEngineBase.h
+++ b/drm/common/include/DrmEngineBase.h
@@ -59,10 +59,11 @@
int checkRightsStatus(int uniqueId, const String8& path, int action);
- status_t consumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
+ status_t consumeRights(int uniqueId, sp<DecryptHandle>& decryptHandle, int action,
+ bool reserve);
status_t setPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position);
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position);
bool validateAction(
int uniqueId, const String8& path, int action, const ActionDescription& description);
@@ -80,27 +81,28 @@
DrmSupportInfo* getSupportInfo(int uniqueId);
status_t openDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle,
+ int uniqueId, sp<DecryptHandle>& decryptHandle,
int fd, off64_t offset, off64_t length, const char* mime);
status_t openDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle,
+ int uniqueId, sp<DecryptHandle>& decryptHandle,
const char* uri, const char* mime);
- status_t openDecryptSession(int uniqueId, DecryptHandle* decryptHandle,
+ status_t openDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle,
const DrmBuffer& buf, const String8& mimeType);
- status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
+ status_t closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle);
- status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
+ status_t initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo);
- status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ status_t decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
- status_t finalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
+ status_t finalizeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
+ int decryptUnitId);
- ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
+ ssize_t pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
void* buffer, ssize_t numBytes, off64_t offset);
protected:
@@ -265,7 +267,7 @@
* @return status_t
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
- virtual status_t onConsumeRights(int uniqueId, DecryptHandle* decryptHandle,
+ virtual status_t onConsumeRights(int uniqueId, sp<DecryptHandle>& decryptHandle,
int action, bool reserve) = 0;
/**
@@ -280,7 +282,8 @@
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
virtual status_t onSetPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) = 0;
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus,
+ int64_t position) = 0;
/**
* Validates whether an action on the DRM content is allowed or not.
@@ -381,7 +384,7 @@
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
virtual status_t onOpenDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle,
+ int uniqueId, sp<DecryptHandle>& decryptHandle,
int fd, off64_t offset, off64_t length) = 0;
/**
@@ -398,7 +401,7 @@
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
virtual status_t onOpenDecryptSession(
- int /* uniqueId */, DecryptHandle* /* decryptHandle */,
+ int /* uniqueId */, sp<DecryptHandle>& /* decryptHandle */,
int /* fd */, off64_t /* offset */, off64_t /* length */,
const char* /* mime */) {
@@ -415,7 +418,7 @@
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
virtual status_t onOpenDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle,
+ int uniqueId, sp<DecryptHandle>& decryptHandle,
const char* uri) = 0;
/**
@@ -430,7 +433,7 @@
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
virtual status_t onOpenDecryptSession(
- int /* uniqueId */, DecryptHandle* /* decryptHandle */,
+ int /* uniqueId */, sp<DecryptHandle>& /* decryptHandle */,
const char* /* uri */, const char* /* mime */) {
return DRM_ERROR_CANNOT_HANDLE;
@@ -447,7 +450,7 @@
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
virtual status_t onOpenDecryptSession(int /* uniqueId */,
- DecryptHandle* /* decryptHandle */,
+ sp<DecryptHandle>& /* decryptHandle */,
const DrmBuffer& /* buf */,
const String8& /* mimeType */) {
return DRM_ERROR_CANNOT_HANDLE;
@@ -461,7 +464,7 @@
* @return status_t
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
- virtual status_t onCloseDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
+ virtual status_t onCloseDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) = 0;
/**
* Initialize decryption for the given unit of the protected content
@@ -473,7 +476,7 @@
* @return status_t
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
- virtual status_t onInitializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
+ virtual status_t onInitializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo) = 0;
/**
@@ -493,7 +496,7 @@
* DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED,
* DRM_ERROR_DECRYPT for failure.
*/
- virtual status_t onDecrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ virtual status_t onDecrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
/**
@@ -506,7 +509,7 @@
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
virtual status_t onFinalizeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId) = 0;
/**
* Reads the specified number of bytes from an open DRM file.
@@ -519,7 +522,7 @@
*
* @return Number of bytes read. Returns -1 for Failure.
*/
- virtual ssize_t onPread(int uniqueId, DecryptHandle* decryptHandle,
+ virtual ssize_t onPread(int uniqueId, sp<DecryptHandle>& decryptHandle,
void* buffer, ssize_t numBytes, off64_t offset) = 0;
};
diff --git a/drm/common/include/IDrmEngine.h b/drm/common/include/IDrmEngine.h
index acc8ed9..1837a11 100644
--- a/drm/common/include/IDrmEngine.h
+++ b/drm/common/include/IDrmEngine.h
@@ -210,7 +210,7 @@
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
virtual status_t consumeRights(
- int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) = 0;
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int action, bool reserve) = 0;
/**
* Informs the DRM Engine about the playback actions performed on the DRM files.
@@ -223,7 +223,7 @@
* @return status_t
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
- virtual status_t setPlaybackStatus(int uniqueId, DecryptHandle* decryptHandle,
+ virtual status_t setPlaybackStatus(int uniqueId, sp<DecryptHandle>& decryptHandle,
int playbackStatus, int64_t position) = 0;
/**
@@ -327,7 +327,7 @@
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
virtual status_t openDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle,
+ int uniqueId, sp<DecryptHandle>& decryptHandle,
int fd, off64_t offset, off64_t length, const char* mime) = 0;
/**
@@ -342,7 +342,7 @@
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
virtual status_t openDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle,
+ int uniqueId, sp<DecryptHandle>& decryptHandle,
const char* uri, const char* mime) = 0;
/**
@@ -355,7 +355,7 @@
* @return
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
- virtual status_t openDecryptSession(int uniqueId, DecryptHandle* decryptHandle,
+ virtual status_t openDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle,
const DrmBuffer& buf, const String8& mimeType) = 0;
/**
@@ -366,7 +366,7 @@
* @return status_t
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
- virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
+ virtual status_t closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) = 0;
/**
* Initialize decryption for the given unit of the protected content
@@ -378,7 +378,7 @@
* @return status_t
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
- virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
+ virtual status_t initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo) = 0;
/**
@@ -398,7 +398,7 @@
* DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED,
* DRM_ERROR_DECRYPT for failure.
*/
- virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ virtual status_t decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
/**
@@ -411,7 +411,7 @@
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
virtual status_t finalizeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId) = 0;
/**
* Reads the specified number of bytes from an open DRM file.
@@ -424,7 +424,7 @@
*
* @return Number of bytes read. Returns -1 for Failure.
*/
- virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
+ virtual ssize_t pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
void* buffer, ssize_t numBytes, off64_t offset) = 0;
};
diff --git a/drm/common/include/IDrmManagerService.h b/drm/common/include/IDrmManagerService.h
index 0376b49..836ae0a 100644
--- a/drm/common/include/IDrmManagerService.h
+++ b/drm/common/include/IDrmManagerService.h
@@ -115,10 +115,11 @@
virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0;
virtual status_t consumeRights(
- int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) = 0;
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int action, bool reserve) = 0;
virtual status_t setPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) = 0;
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus,
+ int64_t position) = 0;
virtual bool validateAction(
int uniqueId, const String8& path,
@@ -138,28 +139,28 @@
virtual status_t getAllSupportInfo(
int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) = 0;
- virtual DecryptHandle* openDecryptSession(
+ virtual sp<DecryptHandle> openDecryptSession(
int uniqueId, int fd, off64_t offset,
off64_t length, const char* mime) = 0;
- virtual DecryptHandle* openDecryptSession(
+ virtual sp<DecryptHandle> openDecryptSession(
int uniqueId, const char* uri, const char* mime) = 0;
- virtual DecryptHandle* openDecryptSession(
+ virtual sp<DecryptHandle> openDecryptSession(
int uniqueId, const DrmBuffer& buf, const String8& mimeType) = 0;
- virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
+ virtual status_t closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) = 0;
- virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
+ virtual status_t initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo) = 0;
- virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ virtual status_t decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
virtual status_t finalizeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId) = 0;
- virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
+ virtual ssize_t pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
void* buffer, ssize_t numBytes,off64_t offset) = 0;
};
@@ -203,10 +204,10 @@
virtual int checkRightsStatus(int uniqueId, const String8& path, int action);
virtual status_t consumeRights(
- int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int action, bool reserve);
virtual status_t setPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position);
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position);
virtual bool validateAction(
int uniqueId, const String8& path, int action, const ActionDescription& description);
@@ -225,28 +226,28 @@
virtual status_t getAllSupportInfo(
int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
- virtual DecryptHandle* openDecryptSession(
+ virtual sp<DecryptHandle> openDecryptSession(
int uniqueId, int fd, off64_t offset, off64_t length,
const char* mime);
- virtual DecryptHandle* openDecryptSession(
+ virtual sp<DecryptHandle> openDecryptSession(
int uniqueId, const char* uri, const char* mime);
- virtual DecryptHandle* openDecryptSession(
+ virtual sp<DecryptHandle> openDecryptSession(
int uniqueId, const DrmBuffer& buf, const String8& mimeType);
- virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
+ virtual status_t closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle);
- virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
+ virtual status_t initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo);
- virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ virtual status_t decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
virtual status_t finalizeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId);
- virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
+ virtual ssize_t pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
void* buffer, ssize_t numBytes, off64_t offset);
};
diff --git a/drm/drmserver/DrmManager.cpp b/drm/drmserver/DrmManager.cpp
index bf04a89..afbcb39 100644
--- a/drm/drmserver/DrmManager.cpp
+++ b/drm/drmserver/DrmManager.cpp
@@ -267,7 +267,7 @@
}
status_t DrmManager::consumeRights(
- int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int action, bool reserve) {
status_t result = DRM_ERROR_UNKNOWN;
Mutex::Autolock _l(mDecryptLock);
if (mDecryptSessionMap.indexOfKey(decryptHandle->decryptId) != NAME_NOT_FOUND) {
@@ -278,7 +278,7 @@
}
status_t DrmManager::setPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position) {
status_t result = DRM_ERROR_UNKNOWN;
Mutex::Autolock _l(mDecryptLock);
if (mDecryptSessionMap.indexOfKey(decryptHandle->decryptId) != NAME_NOT_FOUND) {
@@ -396,15 +396,15 @@
return DRM_NO_ERROR;
}
-DecryptHandle* DrmManager::openDecryptSession(
+sp<DecryptHandle> DrmManager::openDecryptSession(
int uniqueId, int fd, off64_t offset, off64_t length, const char* mime) {
Mutex::Autolock _l(mDecryptLock);
status_t result = DRM_ERROR_CANNOT_HANDLE;
Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList();
- DecryptHandle* handle = new DecryptHandle();
- if (NULL != handle) {
+ sp<DecryptHandle> handle = new DecryptHandle();
+ if (NULL != handle.get()) {
handle->decryptId = mDecryptSessionId + 1;
for (size_t index = 0; index < plugInIdList.size(); index++) {
@@ -420,19 +420,19 @@
}
}
if (DRM_NO_ERROR != result) {
- delete handle; handle = NULL;
+ handle.clear();
}
return handle;
}
-DecryptHandle* DrmManager::openDecryptSession(
+sp<DecryptHandle> DrmManager::openDecryptSession(
int uniqueId, const char* uri, const char* mime) {
Mutex::Autolock _l(mDecryptLock);
status_t result = DRM_ERROR_CANNOT_HANDLE;
Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList();
- DecryptHandle* handle = new DecryptHandle();
- if (NULL != handle) {
+ sp<DecryptHandle> handle = new DecryptHandle();
+ if (NULL != handle.get()) {
handle->decryptId = mDecryptSessionId + 1;
for (size_t index = 0; index < plugInIdList.size(); index++) {
@@ -448,20 +448,20 @@
}
}
if (DRM_NO_ERROR != result) {
- delete handle; handle = NULL;
+ handle.clear();
ALOGV("DrmManager::openDecryptSession: no capable plug-in found");
}
return handle;
}
-DecryptHandle* DrmManager::openDecryptSession(
+sp<DecryptHandle> DrmManager::openDecryptSession(
int uniqueId, const DrmBuffer& buf, const String8& mimeType) {
Mutex::Autolock _l(mDecryptLock);
status_t result = DRM_ERROR_CANNOT_HANDLE;
Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList();
- DecryptHandle* handle = new DecryptHandle();
- if (NULL != handle) {
+ sp<DecryptHandle> handle = new DecryptHandle();
+ if (NULL != handle.get()) {
handle->decryptId = mDecryptSessionId + 1;
for (size_t index = 0; index < plugInIdList.size(); index++) {
@@ -477,20 +477,19 @@
}
}
if (DRM_NO_ERROR != result) {
- delete handle;
- handle = NULL;
+ handle.clear();
ALOGV("DrmManager::openDecryptSession: no capable plug-in found");
}
return handle;
}
-status_t DrmManager::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) {
+status_t DrmManager::closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) {
Mutex::Autolock _l(mDecryptLock);
status_t result = DRM_ERROR_UNKNOWN;
if (mDecryptSessionMap.indexOfKey(decryptHandle->decryptId) != NAME_NOT_FOUND) {
IDrmEngine* drmEngine = mDecryptSessionMap.valueFor(decryptHandle->decryptId);
result = drmEngine->closeDecryptSession(uniqueId, decryptHandle);
- if (DRM_NO_ERROR == result) {
+ if (DRM_NO_ERROR == result && NULL != decryptHandle.get()) {
mDecryptSessionMap.removeItem(decryptHandle->decryptId);
}
}
@@ -498,7 +497,8 @@
}
status_t DrmManager::initializeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, const DrmBuffer* headerInfo) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
+ const DrmBuffer* headerInfo) {
status_t result = DRM_ERROR_UNKNOWN;
Mutex::Autolock _l(mDecryptLock);
if (mDecryptSessionMap.indexOfKey(decryptHandle->decryptId) != NAME_NOT_FOUND) {
@@ -508,7 +508,7 @@
return result;
}
-status_t DrmManager::decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+status_t DrmManager::decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) {
status_t result = DRM_ERROR_UNKNOWN;
@@ -522,7 +522,7 @@
}
status_t DrmManager::finalizeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId) {
status_t result = DRM_ERROR_UNKNOWN;
Mutex::Autolock _l(mDecryptLock);
if (mDecryptSessionMap.indexOfKey(decryptHandle->decryptId) != NAME_NOT_FOUND) {
@@ -532,7 +532,7 @@
return result;
}
-ssize_t DrmManager::pread(int uniqueId, DecryptHandle* decryptHandle,
+ssize_t DrmManager::pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
void* buffer, ssize_t numBytes, off64_t offset) {
ssize_t result = DECRYPT_FILE_ERROR;
diff --git a/drm/drmserver/DrmManager.h b/drm/drmserver/DrmManager.h
index e7cdd36..26222bc 100644
--- a/drm/drmserver/DrmManager.h
+++ b/drm/drmserver/DrmManager.h
@@ -89,10 +89,11 @@
int checkRightsStatus(int uniqueId, const String8& path, int action);
- status_t consumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
+ status_t consumeRights(int uniqueId, sp<DecryptHandle>& decryptHandle, int action,
+ bool reserve);
status_t setPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position);
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position);
bool validateAction(
int uniqueId, const String8& path, int action, const ActionDescription& description);
@@ -109,25 +110,26 @@
status_t getAllSupportInfo(int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
- DecryptHandle* openDecryptSession(
+ sp<DecryptHandle> openDecryptSession(
int uniqueId, int fd, off64_t offset, off64_t length, const char* mime);
- DecryptHandle* openDecryptSession(int uniqueId, const char* uri, const char* mime);
+ sp<DecryptHandle> openDecryptSession(int uniqueId, const char* uri, const char* mime);
- DecryptHandle* openDecryptSession(int uniqueId, const DrmBuffer& buf,
+ sp<DecryptHandle> openDecryptSession(int uniqueId, const DrmBuffer& buf,
const String8& mimeType);
- status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
+ status_t closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle);
- status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
+ status_t initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo);
- status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ status_t decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
- status_t finalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
+ status_t finalizeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
+ int decryptUnitId);
- ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
+ ssize_t pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
void* buffer, ssize_t numBytes, off64_t offset);
void onInfo(const DrmInfoEvent& event);
diff --git a/drm/drmserver/DrmManagerService.cpp b/drm/drmserver/DrmManagerService.cpp
index dad599b..2532275 100644
--- a/drm/drmserver/DrmManagerService.cpp
+++ b/drm/drmserver/DrmManagerService.cpp
@@ -206,7 +206,7 @@
}
status_t DrmManagerService::consumeRights(
- int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int action, bool reserve) {
ALOGV("Entering consumeRights");
if (!isProtectedCallAllowed(CONSUME_RIGHTS)) {
return DRM_ERROR_NO_PERMISSION;
@@ -215,7 +215,7 @@
}
status_t DrmManagerService::setPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position) {
ALOGV("Entering setPlaybackStatus");
if (!isProtectedCallAllowed(SET_PLAYBACK_STATUS)) {
return DRM_ERROR_NO_PERMISSION;
@@ -262,7 +262,7 @@
return mDrmManager->getAllSupportInfo(uniqueId, length, drmSupportInfoArray);
}
-DecryptHandle* DrmManagerService::openDecryptSession(
+sp<DecryptHandle> DrmManagerService::openDecryptSession(
int uniqueId, int fd, off64_t offset, off64_t length, const char* mime) {
ALOGV("Entering DrmManagerService::openDecryptSession");
if (isProtectedCallAllowed(OPEN_DECRYPT_SESSION)) {
@@ -272,7 +272,7 @@
return NULL;
}
-DecryptHandle* DrmManagerService::openDecryptSession(
+sp<DecryptHandle> DrmManagerService::openDecryptSession(
int uniqueId, const char* uri, const char* mime) {
ALOGV("Entering DrmManagerService::openDecryptSession with uri");
if (isProtectedCallAllowed(OPEN_DECRYPT_SESSION)) {
@@ -282,7 +282,7 @@
return NULL;
}
-DecryptHandle* DrmManagerService::openDecryptSession(
+sp<DecryptHandle> DrmManagerService::openDecryptSession(
int uniqueId, const DrmBuffer& buf, const String8& mimeType) {
ALOGV("Entering DrmManagerService::openDecryptSession for streaming");
if (isProtectedCallAllowed(OPEN_DECRYPT_SESSION)) {
@@ -292,7 +292,7 @@
return NULL;
}
-status_t DrmManagerService::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) {
+status_t DrmManagerService::closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) {
ALOGV("Entering closeDecryptSession");
if (!isProtectedCallAllowed(CLOSE_DECRYPT_SESSION)) {
return DRM_ERROR_NO_PERMISSION;
@@ -300,7 +300,7 @@
return mDrmManager->closeDecryptSession(uniqueId, decryptHandle);
}
-status_t DrmManagerService::initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
+status_t DrmManagerService::initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo) {
ALOGV("Entering initializeDecryptUnit");
if (!isProtectedCallAllowed(INITIALIZE_DECRYPT_UNIT)) {
@@ -310,7 +310,7 @@
}
status_t DrmManagerService::decrypt(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) {
ALOGV("Entering decrypt");
if (!isProtectedCallAllowed(DECRYPT)) {
@@ -320,7 +320,7 @@
}
status_t DrmManagerService::finalizeDecryptUnit(
- int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId) {
ALOGV("Entering finalizeDecryptUnit");
if (!isProtectedCallAllowed(FINALIZE_DECRYPT_UNIT)) {
return DRM_ERROR_NO_PERMISSION;
@@ -328,7 +328,7 @@
return mDrmManager->finalizeDecryptUnit(uniqueId, decryptHandle, decryptUnitId);
}
-ssize_t DrmManagerService::pread(int uniqueId, DecryptHandle* decryptHandle,
+ssize_t DrmManagerService::pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
void* buffer, ssize_t numBytes, off64_t offset) {
ALOGV("Entering pread");
if (!isProtectedCallAllowed(PREAD)) {
diff --git a/drm/drmserver/DrmManagerService.h b/drm/drmserver/DrmManagerService.h
index 45cee2e..7aaeab5 100644
--- a/drm/drmserver/DrmManagerService.h
+++ b/drm/drmserver/DrmManagerService.h
@@ -95,10 +95,11 @@
int checkRightsStatus(int uniqueId, const String8& path,int action);
- status_t consumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
+ status_t consumeRights(int uniqueId, sp<DecryptHandle>& decryptHandle, int action,
+ bool reserve);
status_t setPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position);
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position);
bool validateAction(int uniqueId, const String8& path,
int action, const ActionDescription& description);
@@ -115,26 +116,27 @@
status_t getAllSupportInfo(int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
- DecryptHandle* openDecryptSession(
+ sp<DecryptHandle> openDecryptSession(
int uniqueId, int fd, off64_t offset, off64_t length, const char *mime);
- DecryptHandle* openDecryptSession(
+ sp<DecryptHandle> openDecryptSession(
int uniqueId, const char* uri, const char* mime);
- DecryptHandle* openDecryptSession(int uniqueId, const DrmBuffer& buf,
+ sp<DecryptHandle> openDecryptSession(int uniqueId, const DrmBuffer& buf,
const String8& mimeType);
- status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
+ status_t closeDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle);
- status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
+ status_t initializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo);
- status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ status_t decrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
- status_t finalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
+ status_t finalizeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
+ int decryptUnitId);
- ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
+ ssize_t pread(int uniqueId, sp<DecryptHandle>& decryptHandle,
void* buffer, ssize_t numBytes, off64_t offset);
virtual status_t dump(int fd, const Vector<String16>& args);
diff --git a/drm/libdrmframework/DrmManagerClientImpl.cpp b/drm/libdrmframework/DrmManagerClientImpl.cpp
index c047eb1..b0a441b 100644
--- a/drm/libdrmframework/DrmManagerClientImpl.cpp
+++ b/drm/libdrmframework/DrmManagerClientImpl.cpp
@@ -183,7 +183,7 @@
status_t status = DRM_ERROR_UNKNOWN;
if (NULL != decryptHandle.get()) {
status = getDrmManagerService()->consumeRights(
- uniqueId, decryptHandle.get(), action, reserve);
+ uniqueId, decryptHandle, action, reserve);
}
return status;
}
@@ -194,7 +194,7 @@
status_t status = DRM_ERROR_UNKNOWN;
if (NULL != decryptHandle.get()) {
status = getDrmManagerService()->setPlaybackStatus(
- uniqueId, decryptHandle.get(), playbackStatus, position);
+ uniqueId, decryptHandle, playbackStatus, position);
}
return status;
}
@@ -267,7 +267,7 @@
sp<DecryptHandle> DrmManagerClientImpl::openDecryptSession(
int uniqueId, const char* uri, const char* mime) {
- DecryptHandle* handle = NULL;
+ sp<DecryptHandle> handle;
if (NULL != uri) {
handle = getDrmManagerService()->openDecryptSession(uniqueId, uri, mime);
}
@@ -284,7 +284,7 @@
status_t status = DRM_ERROR_UNKNOWN;
if (NULL != decryptHandle.get()) {
status = getDrmManagerService()->closeDecryptSession(
- uniqueId, decryptHandle.get());
+ uniqueId, decryptHandle);
}
return status;
}
@@ -295,7 +295,7 @@
status_t status = DRM_ERROR_UNKNOWN;
if ((NULL != decryptHandle.get()) && (NULL != headerInfo)) {
status = getDrmManagerService()->initializeDecryptUnit(
- uniqueId, decryptHandle.get(), decryptUnitId, headerInfo);
+ uniqueId, decryptHandle, decryptUnitId, headerInfo);
}
return status;
}
@@ -308,7 +308,7 @@
if ((NULL != decryptHandle.get()) && (NULL != encBuffer)
&& (NULL != decBuffer) && (NULL != *decBuffer)) {
status = getDrmManagerService()->decrypt(
- uniqueId, decryptHandle.get(), decryptUnitId,
+ uniqueId, decryptHandle, decryptUnitId,
encBuffer, decBuffer, IV);
}
return status;
@@ -319,7 +319,7 @@
status_t status = DRM_ERROR_UNKNOWN;
if (NULL != decryptHandle.get()) {
status = getDrmManagerService()->finalizeDecryptUnit(
- uniqueId, decryptHandle.get(), decryptUnitId);
+ uniqueId, decryptHandle, decryptUnitId);
}
return status;
}
@@ -329,7 +329,7 @@
ssize_t retCode = INVALID_VALUE;
if ((NULL != decryptHandle.get()) && (NULL != buffer) && (0 < numBytes)) {
retCode = getDrmManagerService()->pread(
- uniqueId, decryptHandle.get(), buffer, numBytes, offset);
+ uniqueId, decryptHandle, buffer, numBytes, offset);
}
return retCode;
}
diff --git a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/include/FwdLockEngine.h b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/include/FwdLockEngine.h
index a571b3a..b62ddb9 100644
--- a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/include/FwdLockEngine.h
+++ b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/include/FwdLockEngine.h
@@ -198,7 +198,7 @@
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
status_t onConsumeRights(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
int action,
bool reserve);
@@ -215,12 +215,12 @@
*/
#ifdef USE_64BIT_DRM_API
status_t onSetPlaybackStatus(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
int playbackStatus,
int64_t position);
#else
status_t onSetPlaybackStatus(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
int playbackStatus,
int position);
#endif
@@ -330,11 +330,11 @@
*/
#ifdef USE_64BIT_DRM_API
status_t onOpenDecryptSession(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
int fd, off64_t offset, off64_t length);
#else
status_t onOpenDecryptSession(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
int fd, int offset, int length);
#endif
@@ -348,7 +348,7 @@
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
status_t onOpenDecryptSession(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
const char* uri);
/**
@@ -360,7 +360,7 @@
* Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
*/
status_t onCloseDecryptSession(int uniqueId,
- DecryptHandle* decryptHandle);
+ sp<DecryptHandle>& decryptHandle);
/**
* Initialize decryption for the given unit of the protected content.
@@ -373,7 +373,7 @@
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
status_t onInitializeDecryptUnit(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
int decryptUnitId,
const DrmBuffer* headerInfo);
@@ -394,7 +394,7 @@
* DRM_ERROR_DECRYPT for failure.
*/
status_t onDecrypt(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
int decryptUnitId,
const DrmBuffer* encBuffer,
DrmBuffer** decBuffer);
@@ -416,7 +416,7 @@
* DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED,
* DRM_ERROR_DECRYPT for failure.
*/
-status_t onDecrypt(int uniqueId, DecryptHandle* decryptHandle,
+status_t onDecrypt(int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* encBuffer,
DrmBuffer** decBuffer, DrmBuffer* IV);
@@ -430,7 +430,7 @@
* DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
*/
status_t onFinalizeDecryptUnit(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
int decryptUnitId);
/**
@@ -445,7 +445,7 @@
* @retval -1 Failure.
*/
ssize_t onRead(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
void* pBuffer,
int numBytes);
@@ -463,12 +463,12 @@
*/
#ifdef USE_64BIT_DRM_API
off64_t onLseek(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
off64_t offset,
int whence);
#else
off_t onLseek(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
off_t offset,
int whence);
#endif
@@ -486,13 +486,13 @@
*/
#ifdef USE_64BIT_DRM_API
ssize_t onPread(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
void* buffer,
ssize_t numBytes,
off64_t offset);
#else
ssize_t onPread(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
void* buffer,
ssize_t numBytes,
off_t offset);
diff --git a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
index 73eea89..769de0c 100644
--- a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
+++ b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
@@ -294,7 +294,7 @@
}
status_t FwdLockEngine::onConsumeRights(int /* uniqueId */,
- DecryptHandle* /* decryptHandle */,
+ sp<DecryptHandle>& /* decryptHandle */,
int /* action */,
bool /* reserve */) {
// No rights consumption
@@ -372,11 +372,13 @@
}
#ifdef USE_64BIT_DRM_API
-status_t FwdLockEngine::onSetPlaybackStatus(int /* uniqueId */, DecryptHandle* /* decryptHandle */,
- int /* playbackStatus */, int64_t /* position */) {
+status_t FwdLockEngine::onSetPlaybackStatus(int /* uniqueId */,
+ sp<DecryptHandle>& /* decryptHandle */, int /* playbackStatus */,
+ int64_t /* position */) {
#else
-status_t FwdLockEngine::onSetPlaybackStatus(int /* uniqueId */, DecryptHandle* /* decryptHandle */,
- int /* playbackStatus */, int /* position */) {
+status_t FwdLockEngine::onSetPlaybackStatus(int /* uniqueId */,
+ sp<DecryptHandle>& /* decryptHandle */,
+ int /* playbackStatus */, int /* position */) {
#endif
// Not used
LOG_VERBOSE("FwdLockEngine::onSetPlaybackStatus");
@@ -470,13 +472,13 @@
#ifdef USE_64BIT_DRM_API
status_t FwdLockEngine::onOpenDecryptSession(int /* uniqueId */,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
int fd,
off64_t offset,
off64_t /* length */) {
#else
status_t FwdLockEngine::onOpenDecryptSession(int /* uniqueId */,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
int fd,
int offset,
int /* length */) {
@@ -487,7 +489,7 @@
LOG_VERBOSE("FwdLockEngine::onOpenDecryptSession");
if ((-1 < fd) &&
- (NULL != decryptHandle) &&
+ (NULL != decryptHandle.get()) &&
(!decodeSessionMap.isCreated(decryptHandle->decryptId))) {
fileDesc = dup(fd);
} else {
@@ -533,12 +535,12 @@
}
status_t FwdLockEngine::onOpenDecryptSession(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
const char* uri) {
status_t result = DRM_ERROR_CANNOT_HANDLE;
const char fileTag [] = "file://";
- if (NULL != decryptHandle && NULL != uri && strlen(uri) > sizeof(fileTag)) {
+ if (NULL != decryptHandle.get() && NULL != uri && strlen(uri) > sizeof(fileTag)) {
String8 uriTag = String8(uri);
uriTag.toLower();
@@ -562,11 +564,11 @@
}
status_t FwdLockEngine::onCloseDecryptSession(int /* uniqueId */,
- DecryptHandle* decryptHandle) {
+ sp<DecryptHandle>& decryptHandle) {
status_t result = DRM_ERROR_UNKNOWN;
LOG_VERBOSE("FwdLockEngine::onCloseDecryptSession");
- if (NULL != decryptHandle && decodeSessionMap.isCreated(decryptHandle->decryptId)) {
+ if (NULL != decryptHandle.get() && decodeSessionMap.isCreated(decryptHandle->decryptId)) {
DecodeSession* session = decodeSessionMap.getValue(decryptHandle->decryptId);
if (NULL != session && session->fileDesc > -1) {
FwdLockFile_detach(session->fileDesc);
@@ -576,7 +578,7 @@
}
}
- if (NULL != decryptHandle) {
+ if (NULL != decryptHandle.get()) {
if (NULL != decryptHandle->decryptInfo) {
delete decryptHandle->decryptInfo;
decryptHandle->decryptInfo = NULL;
@@ -584,9 +586,7 @@
decryptHandle->copyControlVector.clear();
decryptHandle->extendedData.clear();
-
- delete decryptHandle;
- decryptHandle = NULL;
+ decryptHandle.clear();
}
LOG_VERBOSE("FwdLockEngine::onCloseDecryptSession Exit");
@@ -594,7 +594,7 @@
}
status_t FwdLockEngine::onInitializeDecryptUnit(int /* uniqueId */,
- DecryptHandle* /* decryptHandle */,
+ sp<DecryptHandle>& /* decryptHandle */,
int /* decryptUnitId */,
const DrmBuffer* /* headerInfo */) {
ALOGE("FwdLockEngine::onInitializeDecryptUnit is not supported for this DRM scheme");
@@ -603,7 +603,7 @@
status_t FwdLockEngine::onDecrypt(
int /* uniqueId */,
- DecryptHandle* /* decryptHandle */,
+ sp<DecryptHandle>& /* decryptHandle */,
int /* decryptUnitId */,
const DrmBuffer* /* encBuffer */,
DrmBuffer** /* decBuffer */,
@@ -613,7 +613,7 @@
}
status_t FwdLockEngine::onDecrypt(int /* uniqueId */,
- DecryptHandle* /* decryptHandle */,
+ sp<DecryptHandle>& /* decryptHandle */,
int /* decryptUnitId */,
const DrmBuffer* /* encBuffer */,
DrmBuffer** /* decBuffer */) {
@@ -622,19 +622,19 @@
}
status_t FwdLockEngine::onFinalizeDecryptUnit(int /* uniqueId */,
- DecryptHandle* /* decryptHandle */,
+ sp<DecryptHandle>& /* decryptHandle */,
int /* decryptUnitId */) {
ALOGE("FwdLockEngine::onFinalizeDecryptUnit is not supported for this DRM scheme");
return DRM_ERROR_UNKNOWN;
}
ssize_t FwdLockEngine::onRead(int /* uniqueId */,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
void* buffer,
int numBytes) {
ssize_t size = -1;
- if (NULL != decryptHandle &&
+ if (NULL != decryptHandle.get() &&
decodeSessionMap.isCreated(decryptHandle->decryptId) &&
NULL != buffer &&
numBytes > -1) {
@@ -654,15 +654,15 @@
}
#ifdef USE_64BIT_DRM_API
-off64_t FwdLockEngine::onLseek(int /* uniqueId */, DecryptHandle* decryptHandle,
+off64_t FwdLockEngine::onLseek(int /* uniqueId */, sp<DecryptHandle>& decryptHandle,
off64_t offset, int whence) {
#else
-off_t FwdLockEngine::onLseek(int /* uniqueId */, DecryptHandle* decryptHandle,
+off_t FwdLockEngine::onLseek(int /* uniqueId */, sp<DecryptHandle>& decryptHandle,
off_t offset, int whence) {
#endif
off_t offval = -1;
- if (NULL != decryptHandle && decodeSessionMap.isCreated(decryptHandle->decryptId)) {
+ if (NULL != decryptHandle.get() && decodeSessionMap.isCreated(decryptHandle->decryptId)) {
DecodeSession* session = decodeSessionMap.getValue(decryptHandle->decryptId);
if (NULL != session && session->fileDesc > -1) {
offval = FwdLockFile_lseek(session->fileDesc, offset, whence);
@@ -675,13 +675,13 @@
#ifdef USE_64BIT_DRM_API
ssize_t FwdLockEngine::onPread(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
void* buffer,
ssize_t numBytes,
off64_t offset) {
#else
ssize_t FwdLockEngine::onPread(int uniqueId,
- DecryptHandle* decryptHandle,
+ sp<DecryptHandle>& decryptHandle,
void* buffer,
ssize_t numBytes,
off_t offset) {
@@ -690,7 +690,7 @@
DecodeSession* decoderSession = NULL;
- if ((NULL != decryptHandle) &&
+ if ((NULL != decryptHandle.get()) &&
(NULL != (decoderSession = decodeSessionMap.getValue(decryptHandle->decryptId))) &&
(NULL != buffer) &&
(numBytes > -1) &&
diff --git a/drm/libdrmframework/plugins/passthru/include/DrmPassthruPlugIn.h b/drm/libdrmframework/plugins/passthru/include/DrmPassthruPlugIn.h
index 7b66dc7..4ab5272 100644
--- a/drm/libdrmframework/plugins/passthru/include/DrmPassthruPlugIn.h
+++ b/drm/libdrmframework/plugins/passthru/include/DrmPassthruPlugIn.h
@@ -53,10 +53,11 @@
int onCheckRightsStatus(int uniqueId, const String8& path, int action);
- status_t onConsumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
+ status_t onConsumeRights(int uniqueId, sp<DecryptHandle>& decryptHandle,
+ int action, bool reserve);
status_t onSetPlaybackStatus(
- int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position);
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int playbackStatus, int64_t position);
bool onValidateAction(
int uniqueId, const String8& path, int action, const ActionDescription& description);
@@ -74,26 +75,25 @@
DrmSupportInfo* onGetSupportInfo(int uniqueId);
status_t onOpenDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle, int fd, off64_t offset, off64_t length);
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int fd, off64_t offset,
+ off64_t length);
status_t onOpenDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle, const char* uri);
+ int uniqueId, sp<DecryptHandle>& decryptHandle, const char* uri);
- status_t onCloseDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
+ status_t onCloseDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle);
- status_t onInitializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
+ status_t onInitializeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo);
- status_t onDecrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
+ status_t onDecrypt(int uniqueId, sp<DecryptHandle>& decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
- status_t onFinalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
+ status_t onFinalizeDecryptUnit(int uniqueId, sp<DecryptHandle>& decryptHandle,
+ int decryptUnitId);
- ssize_t onPread(int uniqueId, DecryptHandle* decryptHandle,
+ ssize_t onPread(int uniqueId, sp<DecryptHandle>& decryptHandle,
void* buffer, ssize_t numBytes, off64_t offset);
-
-private:
- DecryptHandle* openDecryptSessionImpl();
};
};
diff --git a/drm/libdrmframework/plugins/passthru/src/DrmPassthruPlugIn.cpp b/drm/libdrmframework/plugins/passthru/src/DrmPassthruPlugIn.cpp
index d7f2d28..0fa3478 100644
--- a/drm/libdrmframework/plugins/passthru/src/DrmPassthruPlugIn.cpp
+++ b/drm/libdrmframework/plugins/passthru/src/DrmPassthruPlugIn.cpp
@@ -183,13 +183,13 @@
}
status_t DrmPassthruPlugIn::onConsumeRights(int uniqueId,
- DecryptHandle* /*decryptHandle*/, int /*action*/, bool /*reserve*/) {
+ sp<DecryptHandle>& /*decryptHandle*/, int /*action*/, bool /*reserve*/) {
ALOGV("DrmPassthruPlugIn::onConsumeRights() : %d", uniqueId);
return DRM_NO_ERROR;
}
status_t DrmPassthruPlugIn::onSetPlaybackStatus(int uniqueId,
- DecryptHandle* /*decryptHandle*/, int /*playbackStatus*/, int64_t /*position*/) {
+ sp<DecryptHandle>& /*decryptHandle*/, int /*playbackStatus*/, int64_t /*position*/) {
ALOGV("DrmPassthruPlugIn::onSetPlaybackStatus() : %d", uniqueId);
return DRM_NO_ERROR;
}
@@ -236,7 +236,8 @@
}
status_t DrmPassthruPlugIn::onOpenDecryptSession(
- int uniqueId, DecryptHandle* decryptHandle, int /*fd*/, off64_t /*offset*/, off64_t /*length*/) {
+ int uniqueId, sp<DecryptHandle>& decryptHandle, int /*fd*/, off64_t /*offset*/,
+ off64_t /*length*/) {
ALOGV("DrmPassthruPlugIn::onOpenDecryptSession() : %d", uniqueId);
#ifdef ENABLE_PASSTHRU_DECRYPTION
@@ -246,36 +247,38 @@
decryptHandle->decryptInfo = NULL;
return DRM_NO_ERROR;
#else
- (void)(decryptHandle); // unused
+ (void)(decryptHandle.get()); // unused
#endif
return DRM_ERROR_CANNOT_HANDLE;
}
status_t DrmPassthruPlugIn::onOpenDecryptSession(
- int /*uniqueId*/, DecryptHandle* /*decryptHandle*/, const char* /*uri*/) {
+ int /*uniqueId*/, sp<DecryptHandle>& /*decryptHandle*/, const char* /*uri*/) {
return DRM_ERROR_CANNOT_HANDLE;
}
-status_t DrmPassthruPlugIn::onCloseDecryptSession(int uniqueId, DecryptHandle* decryptHandle) {
+status_t DrmPassthruPlugIn::onCloseDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) {
ALOGV("DrmPassthruPlugIn::onCloseDecryptSession() : %d", uniqueId);
- if (NULL != decryptHandle) {
+ if (NULL != decryptHandle.get()) {
if (NULL != decryptHandle->decryptInfo) {
delete decryptHandle->decryptInfo; decryptHandle->decryptInfo = NULL;
}
- delete decryptHandle; decryptHandle = NULL;
+ decryptHandle.clear();
}
return DRM_NO_ERROR;
}
-status_t DrmPassthruPlugIn::onInitializeDecryptUnit(int uniqueId, DecryptHandle* /*decryptHandle*/,
- int /*decryptUnitId*/, const DrmBuffer* /*headerInfo*/) {
+status_t DrmPassthruPlugIn::onInitializeDecryptUnit(int uniqueId,
+ sp<DecryptHandle>& /*decryptHandle*/,
+ int /*decryptUnitId*/, const DrmBuffer* /*headerInfo*/) {
ALOGV("DrmPassthruPlugIn::onInitializeDecryptUnit() : %d", uniqueId);
return DRM_NO_ERROR;
}
-status_t DrmPassthruPlugIn::onDecrypt(int uniqueId, DecryptHandle* /*decryptHandle*/,
- int /*decryptUnitId*/, const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* /*IV*/) {
+status_t DrmPassthruPlugIn::onDecrypt(int uniqueId, sp<DecryptHandle>& /*decryptHandle*/,
+ int /*decryptUnitId*/, const DrmBuffer* encBuffer, DrmBuffer** decBuffer,
+ DrmBuffer* /*IV*/) {
ALOGV("DrmPassthruPlugIn::onDecrypt() : %d", uniqueId);
/**
* As a workaround implementation passthru would copy the given
@@ -296,12 +299,12 @@
}
status_t DrmPassthruPlugIn::onFinalizeDecryptUnit(
- int uniqueId, DecryptHandle* /*decryptHandle*/, int /*decryptUnitId*/) {
+ int uniqueId, sp<DecryptHandle>& /*decryptHandle*/, int /*decryptUnitId*/) {
ALOGV("DrmPassthruPlugIn::onFinalizeDecryptUnit() : %d", uniqueId);
return DRM_NO_ERROR;
}
-ssize_t DrmPassthruPlugIn::onPread(int uniqueId, DecryptHandle* /*decryptHandle*/,
+ssize_t DrmPassthruPlugIn::onPread(int uniqueId, sp<DecryptHandle>& /*decryptHandle*/,
void* /*buffer*/, ssize_t /*numBytes*/, off64_t /*offset*/) {
ALOGV("DrmPassthruPlugIn::onPread() : %d", uniqueId);
return 0;
diff --git a/media/libmedia/OMXBuffer.cpp b/media/libmedia/OMXBuffer.cpp
index 6d54a13..30dc22d 100644
--- a/media/libmedia/OMXBuffer.cpp
+++ b/media/libmedia/OMXBuffer.cpp
@@ -172,7 +172,7 @@
return OK;
}
-OMXBuffer& OMXBuffer::operator=(OMXBuffer&& source) {
+OMXBuffer& OMXBuffer::operator=(OMXBuffer&& source) noexcept {
mBufferType = std::move(source.mBufferType);
mRangeOffset = std::move(source.mRangeOffset);
mRangeLength = std::move(source.mRangeLength);
diff --git a/media/libmedia/include/media/OMXBuffer.h b/media/libmedia/include/media/OMXBuffer.h
index 9c9f5e7..4abe9e6 100644
--- a/media/libmedia/include/media/OMXBuffer.h
+++ b/media/libmedia/include/media/OMXBuffer.h
@@ -137,7 +137,7 @@
hidl_memory mHidlMemory;
// Move assignment
- OMXBuffer &operator=(OMXBuffer&&);
+ OMXBuffer &operator=(OMXBuffer&&) noexcept;
// Deleted copy constructor and assignment.
OMXBuffer(const OMXBuffer&) = delete;
diff --git a/media/libstagefright/foundation/include/media/stagefright/foundation/AData.h b/media/libstagefright/foundation/include/media/stagefright/foundation/AData.h
index 85e4378..c6c12ff 100644
--- a/media/libstagefright/foundation/include/media/stagefright/foundation/AData.h
+++ b/media/libstagefright/foundation/include/media/stagefright/foundation/AData.h
@@ -774,7 +774,7 @@
/**
* Move assignment operator.
*/
- Custom& operator=(Custom &&o) {
+ Custom& operator=(Custom &&o) noexcept {
if (&o != this) {
if (this->used() && !this->clear()) {
__builtin_trap();
@@ -795,7 +795,7 @@
/**
* Move constructor.
*/
- Custom(Custom &&o) : Custom() {
+ Custom(Custom &&o) noexcept : Custom() {
*this = std::move(o);
}
diff --git a/media/libstagefright/foundation/include/media/stagefright/foundation/Mutexed.h b/media/libstagefright/foundation/include/media/stagefright/foundation/Mutexed.h
index 143b140..03720fd 100644
--- a/media/libstagefright/foundation/include/media/stagefright/foundation/Mutexed.h
+++ b/media/libstagefright/foundation/include/media/stagefright/foundation/Mutexed.h
@@ -103,7 +103,7 @@
class Locked {
public:
inline Locked(Mutexed<T> &mParent);
- inline Locked(Locked &&from) :
+ inline Locked(Locked &&from) noexcept :
mLock(from.mLock),
mTreasure(from.mTreasure),
mLocked(from.mLocked) {}
diff --git a/media/ndk/NdkMediaFormat.cpp b/media/ndk/NdkMediaFormat.cpp
index 249c76e..503f726 100644
--- a/media/ndk/NdkMediaFormat.cpp
+++ b/media/ndk/NdkMediaFormat.cpp
@@ -59,6 +59,9 @@
EXPORT
media_status_t AMediaFormat_copy(AMediaFormat *to, AMediaFormat *from) {
+ if (!to || !from) {
+ return AMEDIA_ERROR_INVALID_PARAMETER;
+ }
to->mFormat->clear();
to->mFormat->extend(from->mFormat);
return AMEDIA_OK;
diff --git a/packages/MediaComponents/src/com/android/widget/VideoView2Impl.java b/packages/MediaComponents/src/com/android/widget/VideoView2Impl.java
index 54ef719..7f16289 100644
--- a/packages/MediaComponents/src/com/android/widget/VideoView2Impl.java
+++ b/packages/MediaComponents/src/com/android/widget/VideoView2Impl.java
@@ -715,13 +715,14 @@
}
try {
+ final Context context = mInstance.getContext();
+
Log.d(TAG, "openVideo(): creating new MediaPlayer2 instance.");
- mMediaPlayer = new MediaPlayer2Impl();
+ mMediaPlayer = new MediaPlayer2Impl(context);
mSurfaceView.setMediaPlayer(mMediaPlayer);
mTextureView.setMediaPlayer(mMediaPlayer);
mCurrentView.assignSurfaceToMediaPlayer(mMediaPlayer);
- final Context context = mInstance.getContext();
// TODO: Add timely firing logic for more accurate sync between CC and video frame
mSubtitleController = new SubtitleController(context);
mSubtitleController.registerRenderer(new ClosedCaptionRenderer(context));
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioCollections.h b/services/audiopolicy/common/managerdefinitions/include/AudioCollections.h
index f86e75a..a948ea9 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioCollections.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioCollections.h
@@ -38,7 +38,7 @@
class AudioRouteVector : public Vector<sp<AudioRoute> >
{
public:
- status_t dump(int fd, int spaces) const;
+ void dump(String8 *dst, int spaces) const;
};
} // namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioGain.h b/services/audiopolicy/common/managerdefinitions/include/AudioGain.h
index 4ac508f..996347b 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioGain.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioGain.h
@@ -18,6 +18,7 @@
#include <utils/Errors.h>
#include <utils/RefBase.h>
+#include <utils/String8.h>
#include <system/audio.h>
namespace android {
@@ -53,7 +54,7 @@
int getMaxRampInMs() const { return mGain.max_ramp_ms; }
// TODO: remove dump from here (split serialization)
- void dump(int fd, int spaces, int index) const;
+ void dump(String8 *dst, int spaces, int index) const;
void getDefaultConfig(struct audio_gain_config *config);
status_t checkConfig(const struct audio_gain_config *config);
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h
index df3b41e..6e4c044 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h
@@ -41,7 +41,7 @@
audio_port_handle_t getId() const;
audio_module_handle_t getModuleHandle() const;
- status_t dump(int fd);
+ void dump(String8 *dst) const override;
audio_io_handle_t mIoHandle = AUDIO_IO_HANDLE_NONE; // input handle
audio_devices_t mDevice = AUDIO_DEVICE_NONE; // current device this input is routed to
@@ -127,7 +127,7 @@
sp<AudioInputDescriptor> getInputForClient(audio_port_handle_t portId);
- status_t dump(int fd) const;
+ void dump(String8 *dst) const;
};
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h
index 257209a..ed995e0 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h
@@ -44,7 +44,7 @@
AudioPolicyClientInterface *clientInterface);
virtual ~AudioOutputDescriptor() {}
- status_t dump(int fd);
+ void dump(String8 *dst) const override;
void log(const char* indent);
audio_port_handle_t getId() const;
@@ -150,8 +150,7 @@
AudioPolicyClientInterface *clientInterface);
virtual ~SwAudioOutputDescriptor() {}
- status_t dump(int fd);
-
+ void dump(String8 *dst) const override;
virtual audio_devices_t device() const;
virtual bool sharesHwModuleWith(const sp<AudioOutputDescriptor>& outputDesc);
virtual audio_devices_t supportedDevices();
@@ -207,7 +206,7 @@
AudioPolicyClientInterface *clientInterface);
virtual ~HwAudioOutputDescriptor() {}
- status_t dump(int fd);
+ void dump(String8 *dst) const override;
virtual audio_devices_t supportedDevices();
virtual bool setVolume(float volume,
@@ -276,7 +275,7 @@
sp<SwAudioOutputDescriptor> getOutputForClient(audio_port_handle_t portId);
- status_t dump(int fd) const;
+ void dump(String8 *dst) const;
};
class HwAudioOutputCollection :
@@ -290,7 +289,7 @@
*/
bool isAnyOutputActive(audio_stream_type_t streamToIgnore) const;
- status_t dump(int fd) const;
+ void dump(String8 *dst) const;
};
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioPatch.h b/services/audiopolicy/common/managerdefinitions/include/AudioPatch.h
index c1c3f3c..0843fea 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioPatch.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioPatch.h
@@ -22,6 +22,7 @@
#include <utils/RefBase.h>
#include <utils/Errors.h>
#include <utils/KeyedVector.h>
+#include <utils/String8.h>
namespace android {
@@ -30,7 +31,7 @@
public:
AudioPatch(const struct audio_patch *patch, uid_t uid);
- status_t dump(int fd, int spaces, int index) const;
+ void dump(String8 *dst, int spaces, int index) const;
audio_patch_handle_t mHandle;
struct audio_patch mPatch;
@@ -47,7 +48,7 @@
status_t listAudioPatches(unsigned int *num_patches, struct audio_patch *patches) const;
- status_t dump(int fd) const;
+ void dump(String8 *dst) const;
};
} // namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioPolicyMix.h b/services/audiopolicy/common/managerdefinitions/include/AudioPolicyMix.h
index 8fc6fe9..96c00ea 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioPolicyMix.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioPolicyMix.h
@@ -43,7 +43,7 @@
void setMix(AudioMix &mix);
- status_t dump(int fd, int spaces, int index) const;
+ void dump(String8 *dst, int spaces, int index) const;
private:
AudioMix mMix; // Audio policy mix descriptor
@@ -80,7 +80,7 @@
status_t getInputMixForAttr(audio_attributes_t attr, AudioMix **policyMix);
- status_t dump(int fd) const;
+ void dump(String8 *dst) const;
};
} // namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioPort.h b/services/audiopolicy/common/managerdefinitions/include/AudioPort.h
index bd7517f..ebb9352 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioPort.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioPort.h
@@ -132,7 +132,8 @@
void addRoute(const sp<AudioRoute> &route) { mRoutes.add(route); }
const AudioRouteVector &getRoutes() const { return mRoutes; }
- void dump(int fd, int spaces, bool verbose = true) const;
+ void dump(String8 *dst, int spaces, bool verbose = true) const;
+
void log(const char* indent) const;
AudioGainCollection mGains; // gain controllers
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioProfile.h b/services/audiopolicy/common/managerdefinitions/include/AudioProfile.h
index a1ee708..b588d57 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioProfile.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioProfile.h
@@ -112,7 +112,7 @@
bool isDynamic() { return mIsDynamicFormat || mIsDynamicChannels || mIsDynamicRate; }
- void dump(int fd, int spaces) const;
+ void dump(String8 *dst, int spaces) const;
private:
String8 mName;
@@ -165,7 +165,7 @@
// One audio profile will be added for each format supported by Audio HAL
void setFormats(const FormatVector &formats);
- void dump(int fd, int spaces) const;
+ void dump(String8 *dst, int spaces) const;
private:
sp<AudioProfile> getProfileFor(audio_format_t format) const;
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioRoute.h b/services/audiopolicy/common/managerdefinitions/include/AudioRoute.h
index 6b24fde..330f1d4 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioRoute.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioRoute.h
@@ -46,7 +46,7 @@
audio_route_type_t getType() const { return mType; }
- void dump(int fd, int spaces) const;
+ void dump(String8 *dst, int spaces) const;
private:
AudioPortVector mSources;
diff --git a/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h
index 8d7914b..030bf4b 100644
--- a/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h
+++ b/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h
@@ -45,8 +45,7 @@
mConfig(config), mPreferredDeviceId(preferredDeviceId), mActive(false) {}
~ClientDescriptor() override = default;
- status_t dump(int fd, int spaces, int index);
- virtual status_t dump(String8& dst, int spaces, int index);
+ virtual void dump(String8 *dst, int spaces, int index) const;
virtual std::string toShortString() const;
audio_port_handle_t portId() const { return mPortId; }
@@ -72,10 +71,6 @@
const audio_config_base_t mConfig;
audio_port_handle_t mPreferredDeviceId; // selected input device port ID
bool mActive;
-
-protected:
- // FIXME: use until other descriptor classes have a dump to String8 method
- int mDumpFd;
};
class TrackClientDescriptor: public ClientDescriptor
@@ -90,7 +85,7 @@
~TrackClientDescriptor() override = default;
using ClientDescriptor::dump;
- status_t dump(String8& dst, int spaces, int index) override;
+ void dump(String8 *dst, int spaces, int index) const override;
std::string toShortString() const override;
audio_output_flags_t flags() const { return mFlags; }
@@ -115,7 +110,7 @@
~RecordClientDescriptor() override = default;
using ClientDescriptor::dump;
- status_t dump(String8& dst, int spaces, int index) override;
+ void dump(String8 *dst, int spaces, int index) const override;
audio_source_t source() const { return mSource; }
audio_input_flags_t flags() const { return mFlags; }
@@ -146,7 +141,7 @@
void setHwOutput(const sp<HwAudioOutputDescriptor>& hwOutput);
using ClientDescriptor::dump;
- status_t dump(String8& dst, int spaces, int index) override;
+ void dump(String8 *dst, int spaces, int index) const override;
private:
const sp<AudioPatch> mPatchDesc;
@@ -159,7 +154,7 @@
public DefaultKeyedVector< audio_port_handle_t, sp<SourceClientDescriptor> >
{
public:
- status_t dump(int fd) const;
+ void dump(String8 *dst) const;
};
typedef std::vector< sp<TrackClientDescriptor> > TrackClientVector;
@@ -185,19 +180,21 @@
return it->second;
}
virtual void removeClient(audio_port_handle_t portId) {
- LOG_ALWAYS_FATAL_IF(mClients.erase(portId) == 0,
+ auto it = mClients.find(portId);
+ LOG_ALWAYS_FATAL_IF(it == mClients.end(),
"%s(%d): client does not exist", __func__, portId);
+ LOG_ALWAYS_FATAL_IF(it->second->active(),
+ "%s(%d): removing client still active!", __func__, portId);
+ (void)mClients.erase(it);
}
size_t getClientCount() const {
return mClients.size();
}
- String8 dump() const {
- String8 result;
+ virtual void dump(String8 *dst) const {
size_t index = 0;
for (const auto& client: getClientIterable()) {
- client->dump(result, 2, index++);
+ client->dump(dst, 2, index++);
}
- return result;
}
// helper types
diff --git a/services/audiopolicy/common/managerdefinitions/include/DeviceDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/DeviceDescriptor.h
index c08e752..83fb10c 100644
--- a/services/audiopolicy/common/managerdefinitions/include/DeviceDescriptor.h
+++ b/services/audiopolicy/common/managerdefinitions/include/DeviceDescriptor.h
@@ -51,7 +51,7 @@
virtual void importAudioPort(const sp<AudioPort>& port, bool force = false);
audio_port_handle_t getId() const;
- status_t dump(int fd, int spaces, int index, bool verbose = true) const;
+ void dump(String8 *dst, int spaces, int index, bool verbose = true) const;
void log() const;
String8 mAddress;
@@ -85,7 +85,7 @@
DeviceVector getDevicesFromHwModule(audio_module_handle_t moduleHandle) const;
audio_devices_t getDeviceTypesFromHwModule(audio_module_handle_t moduleHandle) const;
- status_t dump(int fd, const String8 &tag, int spaces = 0, bool verbose = true) const;
+ void dump(String8 *dst, const String8 &tag, int spaces = 0, bool verbose = true) const;
private:
void refreshTypes();
diff --git a/services/audiopolicy/common/managerdefinitions/include/EffectDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/EffectDescriptor.h
index 04831c6..9fa7486 100644
--- a/services/audiopolicy/common/managerdefinitions/include/EffectDescriptor.h
+++ b/services/audiopolicy/common/managerdefinitions/include/EffectDescriptor.h
@@ -21,6 +21,7 @@
#include <utils/KeyedVector.h>
#include <utils/RefBase.h>
#include <utils/Errors.h>
+#include <utils/String8.h>
namespace android {
@@ -28,7 +29,7 @@
class EffectDescriptor : public RefBase
{
public:
- status_t dump(int fd);
+ void dump(String8 *dst) const;
int mIo; // io the effect is attached to
routing_strategy mStrategy; // routing strategy the effect is associated to
@@ -50,7 +51,7 @@
uint32_t getMaxEffectsMemory() const;
bool isNonOffloadableEffectEnabled();
- status_t dump(int fd);
+ void dump(String8 *dst) const;
private:
status_t setEffectEnabled(const sp<EffectDescriptor> &effectDesc, bool enabled);
diff --git a/services/audiopolicy/common/managerdefinitions/include/HwModule.h b/services/audiopolicy/common/managerdefinitions/include/HwModule.h
index 05cfc31..6560431 100644
--- a/services/audiopolicy/common/managerdefinitions/include/HwModule.h
+++ b/services/audiopolicy/common/managerdefinitions/include/HwModule.h
@@ -82,7 +82,7 @@
}
// TODO remove from here (split serialization)
- void dump(int fd);
+ void dump(String8 *dst) const;
private:
void refreshSupportedDevices();
@@ -109,7 +109,7 @@
const char *device_name,
bool matchAddress = true) const;
- status_t dump(int fd) const;
+ void dump(String8 *dst) const;
};
} // namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/include/IOProfile.h b/services/audiopolicy/common/managerdefinitions/include/IOProfile.h
index 67ac9bc..eb32959 100644
--- a/services/audiopolicy/common/managerdefinitions/include/IOProfile.h
+++ b/services/audiopolicy/common/managerdefinitions/include/IOProfile.h
@@ -73,7 +73,7 @@
uint32_t flags,
bool exactMatchRequiredForInputFlags = false) const;
- void dump(int fd);
+ void dump(String8 *dst) const;
void log();
bool hasSupportedDevices() const { return !mSupportedDevices.isEmpty(); }
diff --git a/services/audiopolicy/common/managerdefinitions/include/IVolumeCurvesCollection.h b/services/audiopolicy/common/managerdefinitions/include/IVolumeCurvesCollection.h
index e1f6b08..750da55 100644
--- a/services/audiopolicy/common/managerdefinitions/include/IVolumeCurvesCollection.h
+++ b/services/audiopolicy/common/managerdefinitions/include/IVolumeCurvesCollection.h
@@ -19,6 +19,7 @@
#include <system/audio.h>
#include <Volume.h>
#include <utils/Errors.h>
+#include <utils/String8.h>
namespace android {
@@ -47,7 +48,7 @@
virtual bool hasVolumeIndexForDevice(audio_stream_type_t stream,
audio_devices_t device) const = 0;
- virtual status_t dump(int fd) const = 0;
+ virtual void dump(String8 *dst) const = 0;
};
} // namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/include/VolumeCurve.h b/services/audiopolicy/common/managerdefinitions/include/VolumeCurve.h
index 3e6b2b4..76ec198 100644
--- a/services/audiopolicy/common/managerdefinitions/include/VolumeCurve.h
+++ b/services/audiopolicy/common/managerdefinitions/include/VolumeCurve.h
@@ -59,7 +59,7 @@
float volIndexToDb(int indexInUi, int volIndexMin, int volIndexMax) const;
- void dump(int fd) const;
+ void dump(String8 *result) const;
private:
SortedVector<CurvePoint> mCurvePoints;
@@ -144,7 +144,7 @@
}
}
- void dump(int fd, int spaces, bool curvePoints = false) const;
+ void dump(String8 *dst, int spaces, bool curvePoints = false) const;
private:
KeyedVector<device_category, sp<VolumeCurve> > mOriginVolumeCurves;
@@ -217,7 +217,7 @@
return getCurvesFor(stream).hasVolumeIndexForDevice(device);
}
- virtual status_t dump(int fd) const;
+ void dump(String8 *dst) const override;
ssize_t add(const sp<VolumeCurve> &volumeCurve)
{
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioCollections.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioCollections.cpp
index ca67b87..c90a582 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioCollections.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioCollections.cpp
@@ -35,22 +35,16 @@
return nullptr;
}
-status_t AudioRouteVector::dump(int fd, int spaces) const
+void AudioRouteVector::dump(String8 *dst, int spaces) const
{
if (isEmpty()) {
- return NO_ERROR;
+ return;
}
- const size_t SIZE = 256;
- char buffer[SIZE];
-
- snprintf(buffer, SIZE, "\n%*sAudio Routes (%zu):\n", spaces, "", size());
- write(fd, buffer, strlen(buffer));
+ dst->appendFormat("\n%*sAudio Routes (%zu):\n", spaces, "", size());
for (size_t i = 0; i < size(); i++) {
- snprintf(buffer, SIZE, "%*s- Route %zu:\n", spaces, "", i + 1);
- write(fd, buffer, strlen(buffer));
- itemAt(i)->dump(fd, 4);
+ dst->appendFormat("%*s- Route %zu:\n", spaces, "", i + 1);
+ itemAt(i)->dump(dst, 4);
}
- return NO_ERROR;
}
} // namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioGain.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioGain.cpp
index 193d4a6..2725870 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioGain.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioGain.cpp
@@ -98,32 +98,17 @@
return NO_ERROR;
}
-void AudioGain::dump(int fd, int spaces, int index) const
+void AudioGain::dump(String8 *dst, int spaces, int index) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- snprintf(buffer, SIZE, "%*sGain %d:\n", spaces, "", index+1);
- result.append(buffer);
- snprintf(buffer, SIZE, "%*s- mode: %08x\n", spaces, "", mGain.mode);
- result.append(buffer);
- snprintf(buffer, SIZE, "%*s- channel_mask: %08x\n", spaces, "", mGain.channel_mask);
- result.append(buffer);
- snprintf(buffer, SIZE, "%*s- min_value: %d mB\n", spaces, "", mGain.min_value);
- result.append(buffer);
- snprintf(buffer, SIZE, "%*s- max_value: %d mB\n", spaces, "", mGain.max_value);
- result.append(buffer);
- snprintf(buffer, SIZE, "%*s- default_value: %d mB\n", spaces, "", mGain.default_value);
- result.append(buffer);
- snprintf(buffer, SIZE, "%*s- step_value: %d mB\n", spaces, "", mGain.step_value);
- result.append(buffer);
- snprintf(buffer, SIZE, "%*s- min_ramp_ms: %d ms\n", spaces, "", mGain.min_ramp_ms);
- result.append(buffer);
- snprintf(buffer, SIZE, "%*s- max_ramp_ms: %d ms\n", spaces, "", mGain.max_ramp_ms);
- result.append(buffer);
-
- write(fd, result.string(), result.size());
+ dst->appendFormat("%*sGain %d:\n", spaces, "", index+1);
+ dst->appendFormat("%*s- mode: %08x\n", spaces, "", mGain.mode);
+ dst->appendFormat("%*s- channel_mask: %08x\n", spaces, "", mGain.channel_mask);
+ dst->appendFormat("%*s- min_value: %d mB\n", spaces, "", mGain.min_value);
+ dst->appendFormat("%*s- max_value: %d mB\n", spaces, "", mGain.max_value);
+ dst->appendFormat("%*s- default_value: %d mB\n", spaces, "", mGain.default_value);
+ dst->appendFormat("%*s- step_value: %d mB\n", spaces, "", mGain.step_value);
+ dst->appendFormat("%*s- min_ramp_ms: %d ms\n", spaces, "", mGain.min_ramp_ms);
+ dst->appendFormat("%*s- max_ramp_ms: %d ms\n", spaces, "", mGain.max_ramp_ms);
}
} // namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp
index 8ef7707..1f29874 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp
@@ -257,6 +257,9 @@
mProfile->curActiveCount--;
}
mProfile->curOpenCount--;
+ LOG_ALWAYS_FATAL_IF(mProfile->curOpenCount < mProfile->curActiveCount,
+ "%s(%d): mProfile->curOpenCount %d < mProfile->curActiveCount %d.",
+ __func__, mId, mProfile->curOpenCount, mProfile->curActiveCount);
mIoHandle = AUDIO_IO_HANDLE_NONE;
}
}
@@ -272,8 +275,9 @@
// Handle non-client-specific activity ref count
int32_t oldGlobalActiveCount = mGlobalActiveCount;
if (!active && mGlobalActiveCount < 1) {
- ALOGW("%s invalid deactivation with globalRefCount %d", __FUNCTION__, mGlobalActiveCount);
- mGlobalActiveCount = 1;
+ LOG_ALWAYS_FATAL("%s(%d) invalid deactivation with globalActiveCount %d",
+ __func__, client->portId(), mGlobalActiveCount);
+ // mGlobalActiveCount = 1;
}
const int delta = active ? 1 : -1;
mGlobalActiveCount += delta;
@@ -336,20 +340,16 @@
return clients;
}
-status_t AudioInputDescriptor::dump(int fd)
+void AudioInputDescriptor::dump(String8 *dst) const
{
- String8 result;
-
- result.appendFormat(" ID: %d\n", getId());
- result.appendFormat(" Sampling rate: %d\n", mSamplingRate);
- result.appendFormat(" Format: %d\n", mFormat);
- result.appendFormat(" Channels: %08x\n", mChannelMask);
- result.appendFormat(" Devices %08x\n", mDevice);
- result.append(" AudioRecord Clients:\n");
- result.append(ClientMapHandler<RecordClientDescriptor>::dump());
- result.append("\n");
- write(fd, result.string(), result.size());
- return NO_ERROR;
+ dst->appendFormat(" ID: %d\n", getId());
+ dst->appendFormat(" Sampling rate: %d\n", mSamplingRate);
+ dst->appendFormat(" Format: %d\n", mFormat);
+ dst->appendFormat(" Channels: %08x\n", mChannelMask);
+ dst->appendFormat(" Devices %08x\n", mDevice);
+ dst->append(" AudioRecord Clients:\n");
+ ClientMapHandler<RecordClientDescriptor>::dump(dst);
+ dst->append("\n");
}
bool AudioInputCollection::isSourceActive(audio_source_t source) const
@@ -421,20 +421,13 @@
return 0;
}
-status_t AudioInputCollection::dump(int fd) const
+void AudioInputCollection::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
-
- snprintf(buffer, SIZE, "\nInputs dump:\n");
- write(fd, buffer, strlen(buffer));
+ dst->append("\nInputs dump:\n");
for (size_t i = 0; i < size(); i++) {
- snprintf(buffer, SIZE, "- Input %d dump:\n", keyAt(i));
- write(fd, buffer, strlen(buffer));
- valueAt(i)->dump(fd);
+ dst->appendFormat("- Input %d dump:\n", keyAt(i));
+ valueAt(i)->dump(dst);
}
-
- return NO_ERROR;
}
}; //namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp
index 03685ab..4ce6b08 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp
@@ -276,36 +276,31 @@
return clients;
}
-status_t AudioOutputDescriptor::dump(int fd)
+void AudioOutputDescriptor::dump(String8 *dst) const
{
- String8 result;
-
- result.appendFormat(" ID: %d\n", mId);
- result.appendFormat(" Sampling rate: %d\n", mSamplingRate);
- result.appendFormat(" Format: %08x\n", mFormat);
- result.appendFormat(" Channels: %08x\n", mChannelMask);
- result.appendFormat(" Devices: %08x\n", device());
- result.appendFormat(" Global active count: %u\n", mGlobalActiveCount);
- result.append(" Stream volume activeCount muteCount\n");
+ dst->appendFormat(" ID: %d\n", mId);
+ dst->appendFormat(" Sampling rate: %d\n", mSamplingRate);
+ dst->appendFormat(" Format: %08x\n", mFormat);
+ dst->appendFormat(" Channels: %08x\n", mChannelMask);
+ dst->appendFormat(" Devices: %08x\n", device());
+ dst->appendFormat(" Global active count: %u\n", mGlobalActiveCount);
+ dst->append(" Stream volume activeCount muteCount\n");
for (int i = 0; i < (int)AUDIO_STREAM_CNT; i++) {
- result.appendFormat(" %02d %.03f %02d %02d\n",
+ dst->appendFormat(" %02d %.03f %02d %02d\n",
i, mCurVolume[i], streamActiveCount((audio_stream_type_t)i), mMuteCount[i]);
}
- result.append(" AudioTrack Clients:\n");
- result.append(ClientMapHandler<TrackClientDescriptor>::dump());
- result.append("\n");
+ dst->append(" AudioTrack Clients:\n");
+ ClientMapHandler<TrackClientDescriptor>::dump(dst);
+ dst->append("\n");
if (mActiveClients.size() > 0) {
- result.append(" AudioTrack active (stream) clients:\n");
+ dst->append(" AudioTrack active (stream) clients:\n");
size_t index = 0;
for (const auto& clientPair : mActiveClients) {
- result.appendFormat(" Refcount: %zu", clientPair.second);
- clientPair.first->dump(result, 2, index++);
+ dst->appendFormat(" Refcount: %zu", clientPair.second);
+ clientPair.first->dump(dst, 2, index++);
}
- result.append(" \n");
+ dst->append(" \n");
}
- write(fd, result.string(), result.size());
-
- return NO_ERROR;
}
void AudioOutputDescriptor::log(const char* indent)
@@ -328,17 +323,11 @@
}
}
-status_t SwAudioOutputDescriptor::dump(int fd)
+void SwAudioOutputDescriptor::dump(String8 *dst) const
{
- String8 result;
-
- result.appendFormat(" Latency: %d\n", mLatency);
- result.appendFormat(" Flags %08x\n", mFlags);
- write(fd, result.string(), result.size());
-
- AudioOutputDescriptor::dump(fd);
-
- return NO_ERROR;
+ dst->appendFormat(" Latency: %d\n", mLatency);
+ dst->appendFormat(" Flags %08x\n", mFlags);
+ AudioOutputDescriptor::dump(dst);
}
audio_devices_t SwAudioOutputDescriptor::device() const
@@ -609,20 +598,11 @@
{
}
-status_t HwAudioOutputDescriptor::dump(int fd)
+void HwAudioOutputDescriptor::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- AudioOutputDescriptor::dump(fd);
-
- snprintf(buffer, SIZE, "Source:\n");
- result.append(buffer);
- write(fd, result.string(), result.size());
- mSource->dump(fd, 0, 0);
-
- return NO_ERROR;
+ AudioOutputDescriptor::dump(dst);
+ dst->append("Source:\n");
+ mSource->dump(dst, 0, 0);
}
audio_devices_t HwAudioOutputDescriptor::supportedDevices()
@@ -792,20 +772,13 @@
return 0;
}
-status_t SwAudioOutputCollection::dump(int fd) const
+void SwAudioOutputCollection::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
-
- snprintf(buffer, SIZE, "\nOutputs dump:\n");
- write(fd, buffer, strlen(buffer));
+ dst->append("\nOutputs dump:\n");
for (size_t i = 0; i < size(); i++) {
- snprintf(buffer, SIZE, "- Output %d dump:\n", keyAt(i));
- write(fd, buffer, strlen(buffer));
- valueAt(i)->dump(fd);
+ dst->appendFormat("- Output %d dump:\n", keyAt(i));
+ valueAt(i)->dump(dst);
}
-
- return NO_ERROR;
}
// HwAudioOutputCollection implementation
@@ -837,20 +810,13 @@
return false;
}
-status_t HwAudioOutputCollection::dump(int fd) const
+void HwAudioOutputCollection::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
-
- snprintf(buffer, SIZE, "\nOutputs dump:\n");
- write(fd, buffer, strlen(buffer));
+ dst->append("\nOutputs dump:\n");
for (size_t i = 0; i < size(); i++) {
- snprintf(buffer, SIZE, "- Output %d dump:\n", keyAt(i));
- write(fd, buffer, strlen(buffer));
- valueAt(i)->dump(fd);
+ dst->appendFormat("- Output %d dump:\n", keyAt(i));
+ valueAt(i)->dump(dst);
}
-
- return NO_ERROR;
}
}; //namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioPatch.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioPatch.cpp
index e78e121..cd1c2f2 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioPatch.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioPatch.cpp
@@ -34,34 +34,29 @@
{
}
-static String8 dumpPatchEndpoints(
- int spaces, const char *prefix, int count, const audio_port_config *cfgs)
+static void dumpPatchEndpoints(
+ String8 *dst, int spaces, const char *prefix, int count, const audio_port_config *cfgs)
{
- String8 result;
for (int i = 0; i < count; ++i) {
const audio_port_config &cfg = cfgs[i];
- result.appendFormat("%*s [%s %d] ", spaces, "", prefix, i + 1);
+ dst->appendFormat("%*s [%s %d] ", spaces, "", prefix, i + 1);
if (cfg.type == AUDIO_PORT_TYPE_DEVICE) {
std::string device;
deviceToString(cfg.ext.device.type, device);
- result.appendFormat("Device ID %d %s", cfg.id, device.c_str());
+ dst->appendFormat("Device ID %d %s", cfg.id, device.c_str());
} else {
- result.appendFormat("Mix ID %d I/O handle %d", cfg.id, cfg.ext.mix.handle);
+ dst->appendFormat("Mix ID %d I/O handle %d", cfg.id, cfg.ext.mix.handle);
}
- result.append("\n");
+ dst->append("\n");
}
- return result;
}
-status_t AudioPatch::dump(int fd, int spaces, int index) const
+void AudioPatch::dump(String8 *dst, int spaces, int index) const
{
- String8 result;
- result.appendFormat("%*sPatch %d: owner uid %4d, handle %2d, af handle %2d\n",
+ dst->appendFormat("%*sPatch %d: owner uid %4d, handle %2d, af handle %2d\n",
spaces, "", index + 1, mUid, mHandle, mAfPatchHandle);
- result.append(dumpPatchEndpoints(spaces, "src ", mPatch.num_sources, mPatch.sources));
- result.append(dumpPatchEndpoints(spaces, "sink", mPatch.num_sinks, mPatch.sinks));
- write(fd, result.string(), result.size());
- return NO_ERROR;
+ dumpPatchEndpoints(dst, spaces, "src ", mPatch.num_sources, mPatch.sources);
+ dumpPatchEndpoints(dst, spaces, "sink", mPatch.num_sinks, mPatch.sinks);
}
status_t AudioPatchCollection::addAudioPatch(audio_patch_handle_t handle,
@@ -142,16 +137,12 @@
return NO_ERROR;
}
-status_t AudioPatchCollection::dump(int fd) const
+void AudioPatchCollection::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- snprintf(buffer, SIZE, "\nAudio Patches:\n");
- write(fd, buffer, strlen(buffer));
+ dst->append("\nAudio Patches:\n");
for (size_t i = 0; i < size(); i++) {
- valueAt(i)->dump(fd, 2, i);
+ valueAt(i)->dump(dst, 2, i);
}
- return NO_ERROR;
}
} // namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp
index 08930f1..3cf8014 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioPolicyMix.cpp
@@ -52,64 +52,55 @@
return &mMix;
}
-status_t AudioPolicyMix::dump(int fd, int spaces, int index) const
+void AudioPolicyMix::dump(String8 *dst, int spaces, int index) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- snprintf(buffer, SIZE, "%*sAudio Policy Mix %d:\n", spaces, "", index+1);
- result.append(buffer);
+ dst->appendFormat("%*sAudio Policy Mix %d:\n", spaces, "", index + 1);
std::string mixTypeLiteral;
if (!MixTypeConverter::toString(mMix.mMixType, mixTypeLiteral)) {
ALOGE("%s: failed to convert mix type %d", __FUNCTION__, mMix.mMixType);
- return BAD_VALUE;
+ return;
}
- snprintf(buffer, SIZE, "%*s- mix type: %s\n", spaces, "", mixTypeLiteral.c_str());
- result.append(buffer);
+ dst->appendFormat("%*s- mix type: %s\n", spaces, "", mixTypeLiteral.c_str());
+
std::string routeFlagLiteral;
RouteFlagTypeConverter::maskToString(mMix.mRouteFlags, routeFlagLiteral);
- snprintf(buffer, SIZE, "%*s- Route Flags: %s\n", spaces, "", routeFlagLiteral.c_str());
- result.append(buffer);
+ dst->appendFormat("%*s- Route Flags: %s\n", spaces, "", routeFlagLiteral.c_str());
+
std::string deviceLiteral;
deviceToString(mMix.mDeviceType, deviceLiteral);
- snprintf(buffer, SIZE, "%*s- device type: %s\n", spaces, "", deviceLiteral.c_str());
- result.append(buffer);
- snprintf(buffer, SIZE, "%*s- device address: %s\n", spaces, "", mMix.mDeviceAddress.string());
- result.append(buffer);
+ dst->appendFormat("%*s- device type: %s\n", spaces, "", deviceLiteral.c_str());
+
+ dst->appendFormat("%*s- device address: %s\n", spaces, "", mMix.mDeviceAddress.string());
int indexCriterion = 0;
for (const auto &criterion : mMix.mCriteria) {
- snprintf(buffer, SIZE, "%*s- Criterion %d:\n", spaces + 2, "", indexCriterion++);
- result.append(buffer);
+ dst->appendFormat("%*s- Criterion %d:\n", spaces + 2, "", indexCriterion++);
+
std::string usageLiteral;
if (!UsageTypeConverter::toString(criterion.mValue.mUsage, usageLiteral)) {
ALOGE("%s: failed to convert usage %d", __FUNCTION__, criterion.mValue.mUsage);
- return BAD_VALUE;
+ return;
}
- snprintf(buffer, SIZE, "%*s- Usage:%s\n", spaces + 4, "", usageLiteral.c_str());
- result.append(buffer);
+ dst->appendFormat("%*s- Usage:%s\n", spaces + 4, "", usageLiteral.c_str());
+
if (mMix.mMixType == MIX_TYPE_RECORDERS) {
std::string sourceLiteral;
if (!SourceTypeConverter::toString(criterion.mValue.mSource, sourceLiteral)) {
ALOGE("%s: failed to convert source %d", __FUNCTION__, criterion.mValue.mSource);
- return BAD_VALUE;
+ return;
}
- snprintf(buffer, SIZE, "%*s- Source:%s\n", spaces + 4, "", sourceLiteral.c_str());
- result.append(buffer);
+ dst->appendFormat("%*s- Source:%s\n", spaces + 4, "", sourceLiteral.c_str());
+
}
- snprintf(buffer, SIZE, "%*s- Uid:%d\n", spaces + 4, "", criterion.mValue.mUid);
- result.append(buffer);
+ dst->appendFormat("%*s- Uid:%d\n", spaces + 4, "", criterion.mValue.mUid);
+
std::string ruleLiteral;
if (!RuleTypeConverter::toString(criterion.mRule, ruleLiteral)) {
ALOGE("%s: failed to convert source %d", __FUNCTION__,criterion.mRule);
- return BAD_VALUE;
+ return;
}
- snprintf(buffer, SIZE, "%*s- Rule:%s\n", spaces + 4, "", ruleLiteral.c_str());
- result.append(buffer);
+ dst->appendFormat("%*s- Rule:%s\n", spaces + 4, "", ruleLiteral.c_str());
}
- write(fd, result.string(), result.size());
- return NO_ERROR;
}
status_t AudioPolicyMixCollection::registerMix(const String8& address, AudioMix mix,
@@ -349,14 +340,12 @@
return NO_ERROR;
}
-status_t AudioPolicyMixCollection::dump(int fd) const
+void AudioPolicyMixCollection::dump(String8 *dst) const
{
- std::string log("\nAudio Policy Mix:\n");
- write(fd, log.c_str(), log.size());
+ dst->append("\nAudio Policy Mix:\n");
for (size_t i = 0; i < size(); i++) {
- valueAt(i)->dump(fd, 2, i);
+ valueAt(i)->dump(dst, 2, i);
}
- return NO_ERROR;
}
}; //namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp
index 3fe37ab..19dde6a 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp
@@ -354,26 +354,18 @@
return mGains[index]->checkConfig(gainConfig);
}
-void AudioPort::dump(int fd, int spaces, bool verbose) const
+void AudioPort::dump(String8 *dst, int spaces, bool verbose) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
if (!mName.isEmpty()) {
- snprintf(buffer, SIZE, "%*s- name: %s\n", spaces, "", mName.string());
- result.append(buffer);
- write(fd, result.string(), result.size());
+ dst->appendFormat("%*s- name: %s\n", spaces, "", mName.string());
}
if (verbose) {
- mProfiles.dump(fd, spaces);
+ mProfiles.dump(dst, spaces);
if (mGains.size() != 0) {
- snprintf(buffer, SIZE, "%*s- gains:\n", spaces, "");
- result = buffer;
- write(fd, result.string(), result.size());
+ dst->appendFormat("%*s- gains:\n", spaces, "");
for (size_t i = 0; i < mGains.size(); i++) {
- mGains[i]->dump(fd, spaces + 2, i);
+ mGains[i]->dump(dst, spaces + 2, i);
}
}
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioProfile.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioProfile.cpp
index d04beec..a645e02 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioProfile.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioProfile.cpp
@@ -253,47 +253,35 @@
return bestMatch > 0 ? NO_ERROR : BAD_VALUE;
}
-void AudioProfile::dump(int fd, int spaces) const
+void AudioProfile::dump(String8 *dst, int spaces) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- snprintf(buffer, SIZE, "%s%s%s\n", mIsDynamicFormat ? "[dynamic format]" : "",
+ dst->appendFormat("%s%s%s\n", mIsDynamicFormat ? "[dynamic format]" : "",
mIsDynamicChannels ? "[dynamic channels]" : "",
mIsDynamicRate ? "[dynamic rates]" : "");
- result.append(buffer);
if (mName.length() != 0) {
- snprintf(buffer, SIZE, "%*s- name: %s\n", spaces, "", mName.string());
- result.append(buffer);
+ dst->appendFormat("%*s- name: %s\n", spaces, "", mName.string());
}
std::string formatLiteral;
if (FormatConverter::toString(mFormat, formatLiteral)) {
- snprintf(buffer, SIZE, "%*s- format: %s\n", spaces, "", formatLiteral.c_str());
- result.append(buffer);
+ dst->appendFormat("%*s- format: %s\n", spaces, "", formatLiteral.c_str());
}
if (!mSamplingRates.isEmpty()) {
- snprintf(buffer, SIZE, "%*s- sampling rates:", spaces, "");
- result.append(buffer);
+ dst->appendFormat("%*s- sampling rates:", spaces, "");
for (size_t i = 0; i < mSamplingRates.size(); i++) {
- snprintf(buffer, SIZE, "%d", mSamplingRates[i]);
- result.append(buffer);
- result.append(i == (mSamplingRates.size() - 1) ? "" : ", ");
+ dst->appendFormat("%d", mSamplingRates[i]);
+ dst->append(i == (mSamplingRates.size() - 1) ? "" : ", ");
}
- result.append("\n");
+ dst->append("\n");
}
if (!mChannelMasks.isEmpty()) {
- snprintf(buffer, SIZE, "%*s- channel masks:", spaces, "");
- result.append(buffer);
+ dst->appendFormat("%*s- channel masks:", spaces, "");
for (size_t i = 0; i < mChannelMasks.size(); i++) {
- snprintf(buffer, SIZE, "0x%04x", mChannelMasks[i]);
- result.append(buffer);
- result.append(i == (mChannelMasks.size() - 1) ? "" : ", ");
+ dst->appendFormat("0x%04x", mChannelMasks[i]);
+ dst->append(i == (mChannelMasks.size() - 1) ? "" : ", ");
}
- result.append("\n");
+ dst->append("\n");
}
- write(fd, result.string(), result.size());
}
ssize_t AudioProfileVector::add(const sp<AudioProfile> &profile)
@@ -559,17 +547,12 @@
}
}
-void AudioProfileVector::dump(int fd, int spaces) const
+void AudioProfileVector::dump(String8 *dst, int spaces) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
-
- snprintf(buffer, SIZE, "%*s- Profiles:\n", spaces, "");
- write(fd, buffer, strlen(buffer));
+ dst->appendFormat("%*s- Profiles:\n", spaces, "");
for (size_t i = 0; i < size(); i++) {
- snprintf(buffer, SIZE, "%*sProfile %zu:", spaces + 4, "", i);
- write(fd, buffer, strlen(buffer));
- itemAt(i)->dump(fd, spaces + 8);
+ dst->appendFormat("%*sProfile %zu:", spaces + 4, "", i);
+ itemAt(i)->dump(dst, spaces + 8);
}
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioRoute.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioRoute.cpp
index 79ad1f7..c1fe5b0 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioRoute.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioRoute.cpp
@@ -24,29 +24,17 @@
namespace android
{
-void AudioRoute::dump(int fd, int spaces) const
+void AudioRoute::dump(String8 *dst, int spaces) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- snprintf(buffer, SIZE, "%*s- Type: %s\n", spaces, "", mType == AUDIO_ROUTE_MUX ? "Mux" : "Mix");
- result.append(buffer);
-
- snprintf(buffer, SIZE, "%*s- Sink: %s\n", spaces, "", mSink->getTagName().string());
- result.append(buffer);
-
+ dst->appendFormat("%*s- Type: %s\n", spaces, "", mType == AUDIO_ROUTE_MUX ? "Mux" : "Mix");
+ dst->appendFormat("%*s- Sink: %s\n", spaces, "", mSink->getTagName().string());
if (mSources.size() != 0) {
- snprintf(buffer, SIZE, "%*s- Sources: \n", spaces, "");
- result.append(buffer);
+ dst->appendFormat("%*s- Sources: \n", spaces, "");
for (size_t i = 0; i < mSources.size(); i++) {
- snprintf(buffer, SIZE, "%*s%s \n", spaces + 4, "", mSources[i]->getTagName().string());
- result.append(buffer);
+ dst->appendFormat("%*s%s \n", spaces + 4, "", mSources[i]->getTagName().string());
}
}
- result.append("\n");
-
- write(fd, result.string(), result.size());
+ dst->append("\n");
}
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/ClientDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/ClientDescriptor.cpp
index c237cef..815612d 100644
--- a/services/audiopolicy/common/managerdefinitions/src/ClientDescriptor.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/ClientDescriptor.cpp
@@ -30,21 +30,6 @@
namespace android {
-status_t ClientDescriptor::dump(int fd, int spaces, int index)
-{
- String8 out;
-
- // FIXME: use until other descriptor classes have a dump to String8 method
- mDumpFd = fd;
-
- status_t status = dump(out, spaces, index);
- if (status == NO_ERROR) {
- write(fd, out.string(), out.size());
- }
-
- return status;
-}
-
std::string ClientDescriptor::toShortString() const
{
std::stringstream ss;
@@ -53,25 +38,21 @@
return ss.str();
}
-status_t ClientDescriptor::dump(String8& out, int spaces, int index)
+void ClientDescriptor::dump(String8 *dst, int spaces, int index) const
{
- out.appendFormat("%*sClient %d:\n", spaces, "", index+1);
- out.appendFormat("%*s- Port Id: %d Session Id: %d UID: %d\n", spaces, "",
+ dst->appendFormat("%*sClient %d:\n", spaces, "", index+1);
+ dst->appendFormat("%*s- Port Id: %d Session Id: %d UID: %d\n", spaces, "",
mPortId, mSessionId, mUid);
- out.appendFormat("%*s- Format: %08x Sampling rate: %d Channels: %08x\n", spaces, "",
+ dst->appendFormat("%*s- Format: %08x Sampling rate: %d Channels: %08x\n", spaces, "",
mConfig.format, mConfig.sample_rate, mConfig.channel_mask);
- out.appendFormat("%*s- Preferred Device Id: %08x\n", spaces, "", mPreferredDeviceId);
- out.appendFormat("%*s- State: %s\n", spaces, "", mActive ? "Active" : "Inactive");
- return NO_ERROR;
+ dst->appendFormat("%*s- Preferred Device Id: %08x\n", spaces, "", mPreferredDeviceId);
+ dst->appendFormat("%*s- State: %s\n", spaces, "", mActive ? "Active" : "Inactive");
}
-status_t TrackClientDescriptor::dump(String8& out, int spaces, int index)
+void TrackClientDescriptor::dump(String8 *dst, int spaces, int index) const
{
- ClientDescriptor::dump(out, spaces, index);
-
- out.appendFormat("%*s- Stream: %d flags: %08x\n", spaces, "", mStream, mFlags);
-
- return NO_ERROR;
+ ClientDescriptor::dump(dst, spaces, index);
+ dst->appendFormat("%*s- Stream: %d flags: %08x\n", spaces, "", mStream, mFlags);
}
std::string TrackClientDescriptor::toShortString() const
@@ -82,13 +63,10 @@
return ss.str();
}
-status_t RecordClientDescriptor::dump(String8& out, int spaces, int index)
+void RecordClientDescriptor::dump(String8 *dst, int spaces, int index) const
{
- ClientDescriptor::dump(out, spaces, index);
-
- out.appendFormat("%*s- Source: %d flags: %08x\n", spaces, "", mSource, mFlags);
-
- return NO_ERROR;
+ ClientDescriptor::dump(dst, spaces, index);
+ dst->appendFormat("%*s- Source: %d flags: %08x\n", spaces, "", mSource, mFlags);
}
SourceClientDescriptor::SourceClientDescriptor(audio_port_handle_t portId, uid_t uid,
@@ -112,31 +90,19 @@
mHwOutput = hwOutput;
}
-status_t SourceClientDescriptor::dump(String8& out, int spaces, int index)
+void SourceClientDescriptor::dump(String8 *dst, int spaces, int index) const
{
- TrackClientDescriptor::dump(out, spaces, index);
-
- if (mDumpFd >= 0) {
- out.appendFormat("%*s- Device:\n", spaces, "");
- write(mDumpFd, out.string(), out.size());
-
- mSrcDevice->dump(mDumpFd, 2, 0);
- mDumpFd = -1;
- }
-
- return NO_ERROR;
+ TrackClientDescriptor::dump(dst, spaces, index);
+ dst->appendFormat("%*s- Device:\n", spaces, "");
+ mSrcDevice->dump(dst, 2, 0);
}
-status_t SourceClientCollection::dump(int fd) const
+void SourceClientCollection::dump(String8 *dst) const
{
- String8 out;
- out.append("\nAudio sources:\n");
- write(fd, out.string(), out.size());
+ dst->append("\nAudio sources:\n");
for (size_t i = 0; i < size(); i++) {
- valueAt(i)->dump(fd, 2, i);
+ valueAt(i)->dump(dst, 2, i);
}
-
- return NO_ERROR;
}
}; //namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp
index 1638645..a9f7220 100644
--- a/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp
@@ -199,20 +199,15 @@
return nullptr;
}
-status_t DeviceVector::dump(int fd, const String8 &tag, int spaces, bool verbose) const
+void DeviceVector::dump(String8 *dst, const String8 &tag, int spaces, bool verbose) const
{
if (isEmpty()) {
- return NO_ERROR;
+ return;
}
- const size_t SIZE = 256;
- char buffer[SIZE];
-
- snprintf(buffer, SIZE, "%*s- %s devices:\n", spaces, "", tag.string());
- write(fd, buffer, strlen(buffer));
+ dst->appendFormat("%*s- %s devices:\n", spaces, "", tag.string());
for (size_t i = 0; i < size(); i++) {
- itemAt(i)->dump(fd, spaces + 2, i, verbose);
+ itemAt(i)->dump(dst, spaces + 2, i, verbose);
}
- return NO_ERROR;
}
void DeviceDescriptor::toAudioPortConfig(struct audio_port_config *dstConfig,
@@ -269,35 +264,23 @@
port->pickAudioProfile(mSamplingRate, mChannelMask, mFormat);
}
-status_t DeviceDescriptor::dump(int fd, int spaces, int index, bool verbose) const
+void DeviceDescriptor::dump(String8 *dst, int spaces, int index, bool verbose) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- snprintf(buffer, SIZE, "%*sDevice %d:\n", spaces, "", index+1);
- result.append(buffer);
+ dst->appendFormat("%*sDevice %d:\n", spaces, "", index + 1);
if (mId != 0) {
- snprintf(buffer, SIZE, "%*s- id: %2d\n", spaces, "", mId);
- result.append(buffer);
+ dst->appendFormat("%*s- id: %2d\n", spaces, "", mId);
}
if (!mTagName.isEmpty()) {
- snprintf(buffer, SIZE, "%*s- tag name: %s\n", spaces, "", mTagName.string());
- result.append(buffer);
+ dst->appendFormat("%*s- tag name: %s\n", spaces, "", mTagName.string());
}
std::string deviceLiteral;
if (deviceToString(mDeviceType, deviceLiteral)) {
- snprintf(buffer, SIZE, "%*s- type: %-48s\n", spaces, "", deviceLiteral.c_str());
- result.append(buffer);
+ dst->appendFormat("%*s- type: %-48s\n", spaces, "", deviceLiteral.c_str());
}
if (mAddress.size() != 0) {
- snprintf(buffer, SIZE, "%*s- address: %-32s\n", spaces, "", mAddress.string());
- result.append(buffer);
+ dst->appendFormat("%*s- address: %-32s\n", spaces, "", mAddress.string());
}
- write(fd, result.string(), result.size());
- AudioPort::dump(fd, spaces, verbose);
-
- return NO_ERROR;
+ AudioPort::dump(dst, spaces, verbose);
}
void DeviceDescriptor::log() const
diff --git a/services/audiopolicy/common/managerdefinitions/src/EffectDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/EffectDescriptor.cpp
index 7b2341e..8bbb798 100644
--- a/services/audiopolicy/common/managerdefinitions/src/EffectDescriptor.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/EffectDescriptor.cpp
@@ -22,25 +22,13 @@
namespace android {
-status_t EffectDescriptor::dump(int fd)
+void EffectDescriptor::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- snprintf(buffer, SIZE, " I/O: %d\n", mIo);
- result.append(buffer);
- snprintf(buffer, SIZE, " Strategy: %d\n", mStrategy);
- result.append(buffer);
- snprintf(buffer, SIZE, " Session: %d\n", mSession);
- result.append(buffer);
- snprintf(buffer, SIZE, " Name: %s\n", mDesc.name);
- result.append(buffer);
- snprintf(buffer, SIZE, " %s\n", mEnabled ? "Enabled" : "Disabled");
- result.append(buffer);
- write(fd, result.string(), result.size());
-
- return NO_ERROR;
+ dst->appendFormat(" I/O: %d\n", mIo);
+ dst->appendFormat(" Strategy: %d\n", mStrategy);
+ dst->appendFormat(" Session: %d\n", mSession);
+ dst->appendFormat(" Name: %s\n", mDesc.name);
+ dst->appendFormat(" %s\n", mEnabled ? "Enabled" : "Disabled");
}
EffectDescriptorCollection::EffectDescriptorCollection() :
@@ -174,24 +162,16 @@
return MAX_EFFECTS_MEMORY;
}
-status_t EffectDescriptorCollection::dump(int fd)
+void EffectDescriptorCollection::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
-
- snprintf(buffer, SIZE,
+ dst->appendFormat(
"\nTotal Effects CPU: %f MIPS, Total Effects memory: %d KB, Max memory used: %d KB\n",
(float)mTotalEffectsCpuLoad/10, mTotalEffectsMemory, mTotalEffectsMemoryMaxUsed);
- write(fd, buffer, strlen(buffer));
-
- snprintf(buffer, SIZE, "Registered effects:\n");
- write(fd, buffer, strlen(buffer));
+ dst->append("Registered effects:\n");
for (size_t i = 0; i < size(); i++) {
- snprintf(buffer, SIZE, "- Effect %d dump:\n", keyAt(i));
- write(fd, buffer, strlen(buffer));
- valueAt(i)->dump(fd);
+ dst->appendFormat("- Effect %d dump:\n", keyAt(i));
+ valueAt(i)->dump(dst);
}
- return NO_ERROR;
}
}; //namespace android
diff --git a/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp b/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
index dcc0ec8..92bc595 100644
--- a/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
@@ -218,37 +218,27 @@
mHandle = handle;
}
-void HwModule::dump(int fd)
+void HwModule::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- snprintf(buffer, SIZE, " - name: %s\n", getName());
- result.append(buffer);
- snprintf(buffer, SIZE, " - handle: %d\n", mHandle);
- result.append(buffer);
- snprintf(buffer, SIZE, " - version: %u.%u\n", getHalVersionMajor(), getHalVersionMinor());
- result.append(buffer);
- write(fd, result.string(), result.size());
+ dst->appendFormat(" - name: %s\n", getName());
+ dst->appendFormat(" - handle: %d\n", mHandle);
+ dst->appendFormat(" - version: %u.%u\n", getHalVersionMajor(), getHalVersionMinor());
if (mOutputProfiles.size()) {
- write(fd, " - outputs:\n", strlen(" - outputs:\n"));
+ dst->append(" - outputs:\n");
for (size_t i = 0; i < mOutputProfiles.size(); i++) {
- snprintf(buffer, SIZE, " output %zu:\n", i);
- write(fd, buffer, strlen(buffer));
- mOutputProfiles[i]->dump(fd);
+ dst->appendFormat(" output %zu:\n", i);
+ mOutputProfiles[i]->dump(dst);
}
}
if (mInputProfiles.size()) {
- write(fd, " - inputs:\n", strlen(" - inputs:\n"));
+ dst->append(" - inputs:\n");
for (size_t i = 0; i < mInputProfiles.size(); i++) {
- snprintf(buffer, SIZE, " input %zu:\n", i);
- write(fd, buffer, strlen(buffer));
- mInputProfiles[i]->dump(fd);
+ dst->appendFormat(" input %zu:\n", i);
+ mInputProfiles[i]->dump(dst);
}
}
- mDeclaredDevices.dump(fd, String8("Declared"), 2, true);
- mRoutes.dump(fd, 2);
+ mDeclaredDevices.dump(dst, String8("Declared"), 2, true);
+ mRoutes.dump(dst, 2);
}
sp <HwModule> HwModuleCollection::getModuleFromName(const char *name) const
@@ -301,19 +291,13 @@
return devDesc;
}
-status_t HwModuleCollection::dump(int fd) const
+void HwModuleCollection::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
-
- snprintf(buffer, SIZE, "\nHW Modules dump:\n");
- write(fd, buffer, strlen(buffer));
+ dst->append("\nHW Modules dump:\n");
for (size_t i = 0; i < size(); i++) {
- snprintf(buffer, SIZE, "- HW Module %zu:\n", i + 1);
- write(fd, buffer, strlen(buffer));
- itemAt(i)->dump(fd);
+ dst->appendFormat("- HW Module %zu:\n", i + 1);
+ itemAt(i)->dump(dst);
}
- return NO_ERROR;
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/IOProfile.cpp b/services/audiopolicy/common/managerdefinitions/src/IOProfile.cpp
index fbc2384..8660624 100644
--- a/services/audiopolicy/common/managerdefinitions/src/IOProfile.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/IOProfile.cpp
@@ -108,16 +108,11 @@
return true;
}
-void IOProfile::dump(int fd)
+void IOProfile::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
+ AudioPort::dump(dst, 4);
- AudioPort::dump(fd, 4);
-
- snprintf(buffer, SIZE, " - flags: 0x%04x", getFlags());
- result.append(buffer);
+ dst->appendFormat(" - flags: 0x%04x", getFlags());
std::string flagsLiteral;
if (getRole() == AUDIO_PORT_ROLE_SINK) {
InputFlagConverter::maskToString(getFlags(), flagsLiteral);
@@ -125,21 +120,14 @@
OutputFlagConverter::maskToString(getFlags(), flagsLiteral);
}
if (!flagsLiteral.empty()) {
- result.appendFormat(" (%s)", flagsLiteral.c_str());
+ dst->appendFormat(" (%s)", flagsLiteral.c_str());
}
- result.append("\n");
- write(fd, result.string(), result.size());
- mSupportedDevices.dump(fd, String8("Supported"), 4, false);
-
- result.clear();
- snprintf(buffer, SIZE, "\n - maxOpenCount: %u - curOpenCount: %u\n",
+ dst->append("\n");
+ mSupportedDevices.dump(dst, String8("Supported"), 4, false);
+ dst->appendFormat("\n - maxOpenCount: %u - curOpenCount: %u\n",
maxOpenCount, curOpenCount);
- result.append(buffer);
- snprintf(buffer, SIZE, " - maxActiveCount: %u - curActiveCount: %u\n",
+ dst->appendFormat(" - maxActiveCount: %u - curActiveCount: %u\n",
maxActiveCount, curActiveCount);
- result.append(buffer);
-
- write(fd, result.string(), result.size());
}
void IOProfile::log()
diff --git a/services/audiopolicy/common/managerdefinitions/src/VolumeCurve.cpp b/services/audiopolicy/common/managerdefinitions/src/VolumeCurve.cpp
index ac3f1bc..620f361 100644
--- a/services/audiopolicy/common/managerdefinitions/src/VolumeCurve.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/VolumeCurve.cpp
@@ -68,81 +68,56 @@
return decibels;
}
-void VolumeCurve::dump(int fd) const
+void VolumeCurve::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
- snprintf(buffer, SIZE, " {");
- result.append(buffer);
+ dst->append(" {");
for (size_t i = 0; i < mCurvePoints.size(); i++) {
- snprintf(buffer, SIZE, "(%3d, %5d)",
+ dst->appendFormat("(%3d, %5d)",
mCurvePoints[i].mIndex, mCurvePoints[i].mAttenuationInMb);
- result.append(buffer);
- result.append(i == (mCurvePoints.size() - 1) ? " }\n" : ", ");
+ dst->append(i == (mCurvePoints.size() - 1) ? " }\n" : ", ");
}
- write(fd, result.string(), result.size());
}
-void VolumeCurvesForStream::dump(int fd, int spaces = 0, bool curvePoints) const
+void VolumeCurvesForStream::dump(String8 *dst, int spaces = 0, bool curvePoints) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
if (!curvePoints) {
- snprintf(buffer, SIZE, "%s %02d %02d ",
+ dst->appendFormat("%s %02d %02d ",
mCanBeMuted ? "true " : "false", mIndexMin, mIndexMax);
- result.append(buffer);
for (size_t i = 0; i < mIndexCur.size(); i++) {
- snprintf(buffer, SIZE, "%04x : %02d, ", mIndexCur.keyAt(i), mIndexCur.valueAt(i));
- result.append(buffer);
+ dst->appendFormat("%04x : %02d, ", mIndexCur.keyAt(i), mIndexCur.valueAt(i));
}
- result.append("\n");
- write(fd, result.string(), result.size());
+ dst->append("\n");
return;
}
for (size_t i = 0; i < size(); i++) {
std::string deviceCatLiteral;
DeviceCategoryConverter::toString(keyAt(i), deviceCatLiteral);
- snprintf(buffer, SIZE, "%*s %s :",
+ dst->appendFormat("%*s %s :",
spaces, "", deviceCatLiteral.c_str());
- write(fd, buffer, strlen(buffer));
- valueAt(i)->dump(fd);
+ valueAt(i)->dump(dst);
}
- result.append("\n");
- write(fd, result.string(), result.size());
+ dst->append("\n");
}
-status_t VolumeCurvesCollection::dump(int fd) const
+void VolumeCurvesCollection::dump(String8 *dst) const
{
- const size_t SIZE = 256;
- char buffer[SIZE];
-
- snprintf(buffer, SIZE, "\nStreams dump:\n");
- write(fd, buffer, strlen(buffer));
- snprintf(buffer, SIZE,
+ dst->append("\nStreams dump:\n");
+ dst->append(
" Stream Can be muted Index Min Index Max Index Cur [device : index]...\n");
- write(fd, buffer, strlen(buffer));
for (size_t i = 0; i < size(); i++) {
- snprintf(buffer, SIZE, " %02zu ", i);
- write(fd, buffer, strlen(buffer));
- valueAt(i).dump(fd);
+ dst->appendFormat(" %02zu ", i);
+ valueAt(i).dump(dst);
}
- snprintf(buffer, SIZE, "\nVolume Curves for Use Cases (aka Stream types) dump:\n");
- write(fd, buffer, strlen(buffer));
+ dst->append("\nVolume Curves for Use Cases (aka Stream types) dump:\n");
for (size_t i = 0; i < size(); i++) {
std::string streamTypeLiteral;
StreamTypeConverter::toString(keyAt(i), streamTypeLiteral);
- snprintf(buffer, SIZE,
+ dst->appendFormat(
" %s (%02zu): Curve points for device category (index, attenuation in millibel)\n",
streamTypeLiteral.c_str(), i);
- write(fd, buffer, strlen(buffer));
- valueAt(i).dump(fd, 2, true);
+ valueAt(i).dump(dst, 2, true);
}
-
- return NO_ERROR;
}
} // namespace android
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index e28ab68..2ffad0c 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -2666,53 +2666,53 @@
return res;
}
-
-status_t AudioPolicyManager::dump(int fd)
+void AudioPolicyManager::dump(String8 *dst) const
{
- String8 result;
- result.appendFormat("\nAudioPolicyManager Dump: %p\n", this);
- result.appendFormat(" Primary Output: %d\n",
+ dst->appendFormat("\nAudioPolicyManager Dump: %p\n", this);
+ dst->appendFormat(" Primary Output: %d\n",
hasPrimaryOutput() ? mPrimaryOutput->mIoHandle : AUDIO_IO_HANDLE_NONE);
std::string stateLiteral;
AudioModeConverter::toString(mEngine->getPhoneState(), stateLiteral);
- result.appendFormat(" Phone state: %s\n", stateLiteral.c_str());
+ dst->appendFormat(" Phone state: %s\n", stateLiteral.c_str());
const char* forceUses[AUDIO_POLICY_FORCE_USE_CNT] = {
"communications", "media", "record", "dock", "system",
"HDMI system audio", "encoded surround output", "vibrate ringing" };
for (audio_policy_force_use_t i = AUDIO_POLICY_FORCE_FOR_COMMUNICATION;
i < AUDIO_POLICY_FORCE_USE_CNT; i = (audio_policy_force_use_t)((int)i + 1)) {
- result.appendFormat(" Force use for %s: %d\n",
+ dst->appendFormat(" Force use for %s: %d\n",
forceUses[i], mEngine->getForceUse(i));
}
- result.appendFormat(" TTS output %savailable\n", mTtsOutputAvailable ? "" : "not ");
- result.appendFormat(" Master mono: %s\n", mMasterMono ? "on" : "off");
- result.appendFormat(" Config source: %s\n", getConfig().getSource().c_str());
- write(fd, result.string(), result.size());
-
- mAvailableOutputDevices.dump(fd, String8("Available output"));
- mAvailableInputDevices.dump(fd, String8("Available input"));
- mHwModulesAll.dump(fd);
- mOutputs.dump(fd);
- mInputs.dump(fd);
- mVolumeCurves->dump(fd);
- mEffects.dump(fd);
- mAudioPatches.dump(fd);
- mPolicyMixes.dump(fd);
- mAudioSources.dump(fd);
-
+ dst->appendFormat(" TTS output %savailable\n", mTtsOutputAvailable ? "" : "not ");
+ dst->appendFormat(" Master mono: %s\n", mMasterMono ? "on" : "off");
+ dst->appendFormat(" Config source: %s\n", mConfig.getSource().c_str()); // getConfig not const
+ mAvailableOutputDevices.dump(dst, String8("Available output"));
+ mAvailableInputDevices.dump(dst, String8("Available input"));
+ mHwModulesAll.dump(dst);
+ mOutputs.dump(dst);
+ mInputs.dump(dst);
+ mVolumeCurves->dump(dst);
+ mEffects.dump(dst);
+ mAudioPatches.dump(dst);
+ mPolicyMixes.dump(dst);
+ mAudioSources.dump(dst);
if (!mSurroundFormats.empty()) {
- result = String8("\nEnabled Surround Formats:\n");
+ dst->append("\nEnabled Surround Formats:\n");
size_t i = 0;
for (const auto& fmt : mSurroundFormats) {
- result.append(i++ == 0 ? " " : ", ");
+ dst->append(i++ == 0 ? " " : ", ");
std::string sfmt;
FormatConverter::toString(fmt, sfmt);
- result.appendFormat("%s", sfmt.c_str());
+ dst->append(sfmt.c_str());
}
- result.append("\n");
- write(fd, result.string(), result.size());
+ dst->append("\n");
}
+}
+status_t AudioPolicyManager::dump(int fd)
+{
+ String8 result;
+ dump(&result);
+ write(fd, result.string(), result.size());
return NO_ERROR;
}
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h
index fcb9d25..f559b7f 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.h
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h
@@ -186,7 +186,9 @@
virtual bool isSourceActive(audio_source_t source) const;
- virtual status_t dump(int fd);
+ void dump(String8 *dst) const; // helper for dump(int fd)
+
+ status_t dump(int fd) override;
virtual bool isOffloadSupported(const audio_offload_info_t& offloadInfo);