Merge "NdkMediaCodec: add AMediaCodec_getBufferFormat"
diff --git a/camera/ndk/impl/ACameraDevice.cpp b/camera/ndk/impl/ACameraDevice.cpp
index 3ae208a..af977b8 100644
--- a/camera/ndk/impl/ACameraDevice.cpp
+++ b/camera/ndk/impl/ACameraDevice.cpp
@@ -941,7 +941,6 @@
ACaptureRequest* request = allocateACaptureRequest(requestSp);
(*onFail)(context, session.get(), request, failure);
freeACaptureRequest(request);
- delete failure;
break;
}
case kWhatCaptureSeqEnd:
diff --git a/camera/ndk/impl/ACameraDevice.h b/camera/ndk/impl/ACameraDevice.h
index 855efe1..78a7891 100644
--- a/camera/ndk/impl/ACameraDevice.h
+++ b/camera/ndk/impl/ACameraDevice.h
@@ -41,7 +41,7 @@
namespace android {
-// Wrap ACameraCaptureFailure so it can be ref-counter
+// Wrap ACameraCaptureFailure so it can be ref-counted
struct CameraCaptureFailure : public RefBase, public ACameraCaptureFailure {};
class CameraDevice final : public RefBase {
diff --git a/camera/tests/CameraZSLTests.cpp b/camera/tests/CameraZSLTests.cpp
index ecca354..02c6e2a 100644
--- a/camera/tests/CameraZSLTests.cpp
+++ b/camera/tests/CameraZSLTests.cpp
@@ -256,10 +256,10 @@
ASSERT_TRUE(nullptr != surfaceControl.get());
ASSERT_TRUE(surfaceControl->isValid());
- SurfaceComposerClient::openGlobalTransaction();
- ASSERT_EQ(NO_ERROR, surfaceControl->setLayer(0x7fffffff));
- ASSERT_EQ(NO_ERROR, surfaceControl->show());
- SurfaceComposerClient::closeGlobalTransaction();
+ SurfaceComposerClient::Transaction{}
+ .setLayer(surfaceControl, 0x7fffffff)
+ .show(surfaceControl)
+ .apply();
previewSurface = surfaceControl->getSurface();
ASSERT_TRUE(previewSurface != NULL);
diff --git a/cmds/screenrecord/Android.mk b/cmds/screenrecord/Android.mk
index 7aa684a..fa9466c 100644
--- a/cmds/screenrecord/Android.mk
+++ b/cmds/screenrecord/Android.mk
@@ -26,7 +26,7 @@
LOCAL_SHARED_LIBRARIES := \
libstagefright libmedia libutils libbinder libstagefright_foundation \
- libjpeg libgui libcutils liblog libEGL libGLESv2
+ libjpeg libui libgui libcutils liblog libEGL libGLESv2
LOCAL_C_INCLUDES := \
frameworks/av/media/libstagefright \
diff --git a/cmds/screenrecord/screenrecord.cpp b/cmds/screenrecord/screenrecord.cpp
index bc32bbe..f9e4639 100644
--- a/cmds/screenrecord/screenrecord.cpp
+++ b/cmds/screenrecord/screenrecord.cpp
@@ -213,7 +213,9 @@
* Sets the display projection, based on the display dimensions, video size,
* and device orientation.
*/
-static status_t setDisplayProjection(const sp<IBinder>& dpy,
+static status_t setDisplayProjection(
+ SurfaceComposerClient::Transaction& t,
+ const sp<IBinder>& dpy,
const DisplayInfo& mainDpyInfo) {
// Set the region of the layer stack we're interested in, which in our
@@ -279,7 +281,7 @@
}
}
- SurfaceComposerClient::setDisplayProjection(dpy,
+ t.setDisplayProjection(dpy,
gRotate ? DISPLAY_ORIENTATION_90 : DISPLAY_ORIENTATION_0,
layerStackRect, displayRect);
return NO_ERROR;
@@ -295,11 +297,11 @@
sp<IBinder> dpy = SurfaceComposerClient::createDisplay(
String8("ScreenRecorder"), false /*secure*/);
- SurfaceComposerClient::openGlobalTransaction();
- SurfaceComposerClient::setDisplaySurface(dpy, bufferProducer);
- setDisplayProjection(dpy, mainDpyInfo);
- SurfaceComposerClient::setDisplayLayerStack(dpy, 0); // default stack
- SurfaceComposerClient::closeGlobalTransaction();
+ SurfaceComposerClient::Transaction t;
+ t.setDisplaySurface(dpy, bufferProducer);
+ setDisplayProjection(t, dpy, mainDpyInfo);
+ t.setDisplayLayerStack(dpy, 0); // default stack
+ t.apply();
*pDisplayHandle = dpy;
@@ -379,9 +381,9 @@
ALOGW("getDisplayInfo(main) failed: %d", err);
} else if (orientation != mainDpyInfo.orientation) {
ALOGD("orientation changed, now %d", mainDpyInfo.orientation);
- SurfaceComposerClient::openGlobalTransaction();
- setDisplayProjection(virtualDpy, mainDpyInfo);
- SurfaceComposerClient::closeGlobalTransaction();
+ SurfaceComposerClient::Transaction t;
+ setDisplayProjection(t, virtualDpy, mainDpyInfo);
+ t.apply();
orientation = mainDpyInfo.orientation;
}
}
diff --git a/cmds/stagefright/Android.mk b/cmds/stagefright/Android.mk
index f647ffd..51eef59 100644
--- a/cmds/stagefright/Android.mk
+++ b/cmds/stagefright/Android.mk
@@ -9,7 +9,7 @@
LOCAL_SHARED_LIBRARIES := \
libstagefright libmedia libutils libbinder libstagefright_foundation \
- libjpeg libgui libcutils liblog \
+ libjpeg libui libgui libcutils liblog \
libhidlmemory \
android.hardware.media.omx@1.0 \
@@ -107,7 +107,7 @@
stream.cpp \
LOCAL_SHARED_LIBRARIES := \
- libstagefright liblog libutils libbinder libgui \
+ libstagefright liblog libutils libbinder libui libgui \
libstagefright_foundation libmedia libcutils
LOCAL_C_INCLUDES:= \
@@ -132,7 +132,7 @@
LOCAL_SHARED_LIBRARIES := \
libstagefright liblog libutils libbinder libstagefright_foundation \
- libmedia libaudioclient libgui libcutils
+ libmedia libaudioclient libui libgui libcutils
LOCAL_C_INCLUDES:= \
frameworks/av/media/libstagefright \
@@ -163,6 +163,7 @@
libbinder \
libstagefright_foundation \
libmedia \
+ libui \
libgui \
libcutils \
libRScpp \
diff --git a/cmds/stagefright/codec.cpp b/cmds/stagefright/codec.cpp
index 3108a67..6a58467 100644
--- a/cmds/stagefright/codec.cpp
+++ b/cmds/stagefright/codec.cpp
@@ -430,10 +430,10 @@
CHECK(control != NULL);
CHECK(control->isValid());
- SurfaceComposerClient::openGlobalTransaction();
- CHECK_EQ(control->setLayer(INT_MAX), (status_t)OK);
- CHECK_EQ(control->show(), (status_t)OK);
- SurfaceComposerClient::closeGlobalTransaction();
+ SurfaceComposerClient::Transaction{}
+ .setLayer(control, INT_MAX)
+ .show(control)
+ .apply();
surface = control->getSurface();
CHECK(surface != NULL);
diff --git a/cmds/stagefright/mediafilter.cpp b/cmds/stagefright/mediafilter.cpp
index f219e69..f24d2dd 100644
--- a/cmds/stagefright/mediafilter.cpp
+++ b/cmds/stagefright/mediafilter.cpp
@@ -764,10 +764,10 @@
CHECK(control != NULL);
CHECK(control->isValid());
- SurfaceComposerClient::openGlobalTransaction();
- CHECK_EQ((status_t)OK, control->setLayer(INT_MAX));
- CHECK_EQ((status_t)OK, control->show());
- SurfaceComposerClient::closeGlobalTransaction();
+ SurfaceComposerClient::Transaction{}
+ .setLayer(control, INT_MAX)
+ .show(control)
+ .apply();
surface = control->getSurface();
CHECK(surface != NULL);
diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp
index 7a5d129..0090c55 100644
--- a/cmds/stagefright/stagefright.cpp
+++ b/cmds/stagefright/stagefright.cpp
@@ -960,10 +960,10 @@
CHECK(control != NULL);
CHECK(control->isValid());
- SurfaceComposerClient::openGlobalTransaction();
- CHECK_EQ(control->setLayer(INT_MAX), (status_t)OK);
- CHECK_EQ(control->show(), (status_t)OK);
- SurfaceComposerClient::closeGlobalTransaction();
+ SurfaceComposerClient::Transaction{}
+ .setLayer(control, INT_MAX)
+ .show(control)
+ .apply();
gSurface = control->getSurface();
CHECK(gSurface != NULL);
diff --git a/cmds/stagefright/stream.cpp b/cmds/stagefright/stream.cpp
index 3b7a0e0..dd8b997 100644
--- a/cmds/stagefright/stream.cpp
+++ b/cmds/stagefright/stream.cpp
@@ -335,10 +335,10 @@
CHECK(control != NULL);
CHECK(control->isValid());
- SurfaceComposerClient::openGlobalTransaction();
- CHECK_EQ(control->setLayer(INT_MAX), (status_t)OK);
- CHECK_EQ(control->show(), (status_t)OK);
- SurfaceComposerClient::closeGlobalTransaction();
+ SurfaceComposerClient::Transaction{}
+ .setLayer(control, INT_MAX)
+ .show(control)
+ .apply();
sp<Surface> surface = control->getSurface();
CHECK(surface != NULL);
diff --git a/media/extractors/mp4/ItemTable.cpp b/media/extractors/mp4/ItemTable.cpp
index eef0fcd..b476c75 100644
--- a/media/extractors/mp4/ItemTable.cpp
+++ b/media/extractors/mp4/ItemTable.cpp
@@ -18,13 +18,13 @@
#define LOG_TAG "ItemTable"
#include <ItemTable.h>
-#include <media/MediaDefs.h>
#include <media/stagefright/DataSource.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ByteUtils.h>
#include <media/stagefright/foundation/hexdump.h>
+#include <media/stagefright/foundation/MediaDefs.h>
#include <utils/Log.h>
namespace android {
@@ -470,41 +470,7 @@
uint32_t itemId() { return mItemId; }
- void apply(KeyedVector<uint32_t, ImageItem> &itemIdToImageMap) const {
- ssize_t imageIndex = itemIdToImageMap.indexOfKey(mItemId);
-
- // ignore non-image items
- if (imageIndex < 0) {
- return;
- }
-
- ALOGV("attach reference type 0x%x to item id %d)", type(), mItemId);
-
- if (type() == FOURCC('d', 'i', 'm', 'g')) {
- ImageItem &image = itemIdToImageMap.editValueAt(imageIndex);
- if (!image.dimgRefs.empty()) {
- ALOGW("dimgRefs if not clean!");
- }
- image.dimgRefs.appendVector(mRefs);
- } else if (type() == FOURCC('t', 'h', 'm', 'b')) {
- for (size_t i = 0; i < mRefs.size(); i++) {
- imageIndex = itemIdToImageMap.indexOfKey(mRefs[i]);
-
- // ignore non-image items
- if (imageIndex < 0) {
- continue;
- }
- ALOGV("Image item id %d uses thumbnail item id %d", mRefs[i], mItemId);
- ImageItem &image = itemIdToImageMap.editValueAt(imageIndex);
- if (!image.thumbnails.empty()) {
- ALOGW("already has thumbnails!");
- }
- image.thumbnails.push_back(mItemId);
- }
- } else {
- ALOGW("ignoring unsupported ref type 0x%x", type());
- }
- }
+ void apply(KeyedVector<uint32_t, ImageItem> &itemIdToItemMap) const;
private:
uint32_t mItemId;
@@ -514,6 +480,42 @@
DISALLOW_EVIL_CONSTRUCTORS(ItemReference);
};
+void ItemReference::apply(KeyedVector<uint32_t, ImageItem> &itemIdToItemMap) const {
+ ssize_t itemIndex = itemIdToItemMap.indexOfKey(mItemId);
+
+ // ignore non-image items
+ if (itemIndex < 0) {
+ return;
+ }
+
+ ALOGV("attach reference type 0x%x to item id %d)", type(), mItemId);
+
+ if (type() == FOURCC('d', 'i', 'm', 'g')) {
+ ImageItem &derivedImage = itemIdToItemMap.editValueAt(itemIndex);
+ if (!derivedImage.dimgRefs.empty()) {
+ ALOGW("dimgRefs if not clean!");
+ }
+ derivedImage.dimgRefs.appendVector(mRefs);
+ } else if (type() == FOURCC('t', 'h', 'm', 'b')) {
+ for (size_t i = 0; i < mRefs.size(); i++) {
+ itemIndex = itemIdToItemMap.indexOfKey(mRefs[i]);
+
+ // ignore non-image items
+ if (itemIndex < 0) {
+ continue;
+ }
+ ALOGV("Image item id %d uses thumbnail item id %d", mRefs[i], mItemId);
+ ImageItem &masterImage = itemIdToItemMap.editValueAt(itemIndex);
+ if (!masterImage.thumbnails.empty()) {
+ ALOGW("already has thumbnails!");
+ }
+ masterImage.thumbnails.push_back(mItemId);
+ }
+ } else {
+ ALOGW("ignoring unsupported ref type 0x%x", type());
+ }
+}
+
status_t ItemReference::parse(off64_t offset, size_t size) {
if (size < mRefIdSize + 2) {
return ERROR_MALFORMED;
@@ -985,45 +987,7 @@
}
if (version() == 0 || version() == 1) {
- if (size < 4) {
- return ERROR_MALFORMED;
- }
- uint16_t item_id;
- if (!source()->getUInt16(offset, &item_id)) {
- return ERROR_IO;
- }
- ALOGV("item_id %d", item_id);
- uint16_t item_protection_index;
- if (!source()->getUInt16(offset + 2, &item_protection_index)) {
- return ERROR_IO;
- }
- offset += 4;
- size -= 4;
-
- String8 item_name;
- if (!parseNullTerminatedString(&offset, &size, &item_name)) {
- return ERROR_MALFORMED;
- }
-
- String8 content_type;
- if (!parseNullTerminatedString(&offset, &size, &content_type)) {
- return ERROR_MALFORMED;
- }
-
- String8 content_encoding;
- if (!parseNullTerminatedString(&offset, &size, &content_encoding)) {
- return ERROR_MALFORMED;
- }
-
- if (version() == 1) {
- uint32_t extension_type;
- if (!source()->getUInt32(offset, &extension_type)) {
- return ERROR_IO;
- }
- offset++;
- size--;
- // TODO: handle this case
- }
+ return ERROR_UNSUPPORTED;
} else { // version >= 2
uint32_t item_id;
size_t itemIdSize = (version() == 2) ? 2 : 4;
@@ -1140,11 +1104,10 @@
InfeBox infeBox(source());
ItemInfo itemInfo;
status_t err = infeBox.parse(offset, size, &itemInfo);
- if (err != OK) {
- return err;
+ if (err == OK) {
+ mItemInfos->push_back(itemInfo);
+ mHasGrids |= (itemInfo.itemType == FOURCC('g', 'r', 'i', 'd'));
}
- mItemInfos->push_back(itemInfo);
- mHasGrids |= (itemInfo.itemType == FOURCC('g', 'r', 'i', 'd'));
return OK;
}
@@ -1156,7 +1119,7 @@
mIdatOffset(0),
mIdatSize(0),
mImageItemsValid(false),
- mCurrentImageIndex(0) {
+ mCurrentItemIndex(0) {
mRequiredBoxes.insert('iprp');
mRequiredBoxes.insert('iloc');
mRequiredBoxes.insert('pitm');
@@ -1311,8 +1274,8 @@
continue;
}
- ssize_t imageIndex = mItemIdToImageMap.indexOfKey(info.itemId);
- if (imageIndex >= 0) {
+ ssize_t itemIndex = mItemIdToItemMap.indexOfKey(info.itemId);
+ if (itemIndex >= 0) {
ALOGW("ignoring duplicate image item id %d", info.itemId);
continue;
}
@@ -1351,7 +1314,7 @@
image.offset = offset;
image.size = size;
}
- mItemIdToImageMap.add(info.itemId, image);
+ mItemIdToItemMap.add(info.itemId, image);
}
for (size_t i = 0; i < mAssociations.size(); i++) {
@@ -1359,7 +1322,7 @@
}
for (size_t i = 0; i < mItemReferences.size(); i++) {
- mItemReferences[i]->apply(mItemIdToImageMap);
+ mItemReferences[i]->apply(mItemIdToItemMap);
}
mImageItemsValid = true;
@@ -1367,10 +1330,10 @@
}
void ItemTable::attachProperty(const AssociationEntry &association) {
- ssize_t imageIndex = mItemIdToImageMap.indexOfKey(association.itemId);
+ ssize_t itemIndex = mItemIdToItemMap.indexOfKey(association.itemId);
// ignore non-image items
- if (imageIndex < 0) {
+ if (itemIndex < 0) {
return;
}
@@ -1384,7 +1347,7 @@
propertyIndex, association.itemId);
mItemProperties[propertyIndex]->attachTo(
- mItemIdToImageMap.editValueAt(imageIndex));
+ mItemIdToItemMap.editValueAt(itemIndex));
}
sp<MetaData> ItemTable::getImageMeta() {
@@ -1392,15 +1355,15 @@
return NULL;
}
- ssize_t imageIndex = mItemIdToImageMap.indexOfKey(mPrimaryItemId);
- if (imageIndex < 0) {
+ ssize_t itemIndex = mItemIdToItemMap.indexOfKey(mPrimaryItemId);
+ if (itemIndex < 0) {
ALOGE("Primary item id %d not found!", mPrimaryItemId);
return NULL;
}
- ALOGV("primary image index %zu", imageIndex);
+ ALOGV("primary item index %zu", itemIndex);
- const ImageItem *image = &mItemIdToImageMap[imageIndex];
+ const ImageItem *image = &mItemIdToItemMap[itemIndex];
sp<MetaData> meta = new MetaData;
meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_HEVC);
@@ -1421,24 +1384,24 @@
meta->setInt32(kKeyMaxInputSize, image->width * image->height * 1.5);
if (!image->thumbnails.empty()) {
- ssize_t thumbnailIndex = mItemIdToImageMap.indexOfKey(image->thumbnails[0]);
- if (thumbnailIndex >= 0) {
- const ImageItem &thumbnail = mItemIdToImageMap[thumbnailIndex];
+ ssize_t thumbItemIndex = mItemIdToItemMap.indexOfKey(image->thumbnails[0]);
+ if (thumbItemIndex >= 0) {
+ const ImageItem &thumbnail = mItemIdToItemMap[thumbItemIndex];
meta->setInt32(kKeyThumbnailWidth, thumbnail.width);
meta->setInt32(kKeyThumbnailHeight, thumbnail.height);
meta->setData(kKeyThumbnailHVCC, kTypeHVCC,
thumbnail.hvcc->data(), thumbnail.hvcc->size());
- ALOGV("thumbnail meta: %dx%d, index %zd",
- thumbnail.width, thumbnail.height, thumbnailIndex);
+ ALOGV("thumbnail meta: %dx%d, item index %zd",
+ thumbnail.width, thumbnail.height, thumbItemIndex);
} else {
- ALOGW("Referenced thumbnail does not exist!");
+ ALOGW("%s: Referenced thumbnail does not exist!", __FUNCTION__);
}
}
if (image->isGrid()) {
- ssize_t tileIndex = mItemIdToImageMap.indexOfKey(image->dimgRefs[0]);
- if (tileIndex < 0) {
+ ssize_t tileItemIndex = mItemIdToItemMap.indexOfKey(image->dimgRefs[0]);
+ if (tileItemIndex < 0) {
return NULL;
}
// when there are tiles, (kKeyWidth, kKeyHeight) is the full tiled area,
@@ -1448,7 +1411,7 @@
int32_t gridRows = image->rows, gridCols = image->columns;
// point image to the first tile for grid size and HVCC
- image = &mItemIdToImageMap.editValueAt(tileIndex);
+ image = &mItemIdToItemMap.editValueAt(tileItemIndex);
meta->setInt32(kKeyWidth, image->width * gridCols);
meta->setInt32(kKeyHeight, image->height * gridRows);
meta->setInt32(kKeyGridWidth, image->width);
@@ -1457,7 +1420,7 @@
}
if (image->hvcc == NULL) {
- ALOGE("hvcc is missing!");
+ ALOGE("%s: hvcc is missing for item index %zd!", __FUNCTION__, itemIndex);
return NULL;
}
meta->setData(kKeyHVCC, kTypeHVCC, image->hvcc->data(), image->hvcc->size());
@@ -1469,87 +1432,88 @@
}
uint32_t ItemTable::countImages() const {
- return mImageItemsValid ? mItemIdToImageMap.size() : 0;
+ return mImageItemsValid ? mItemIdToItemMap.size() : 0;
}
-status_t ItemTable::findPrimaryImage(uint32_t *imageIndex) {
+status_t ItemTable::findPrimaryImage(uint32_t *itemIndex) {
if (!mImageItemsValid) {
return INVALID_OPERATION;
}
- ssize_t index = mItemIdToImageMap.indexOfKey(mPrimaryItemId);
+ ssize_t index = mItemIdToItemMap.indexOfKey(mPrimaryItemId);
if (index < 0) {
return ERROR_MALFORMED;
}
- *imageIndex = index;
+ *itemIndex = index;
return OK;
}
-status_t ItemTable::findThumbnail(uint32_t *imageIndex) {
+status_t ItemTable::findThumbnail(uint32_t *itemIndex) {
if (!mImageItemsValid) {
return INVALID_OPERATION;
}
- ssize_t primaryIndex = mItemIdToImageMap.indexOfKey(mPrimaryItemId);
- if (primaryIndex < 0) {
- ALOGE("Primary item id %d not found!", mPrimaryItemId);
+ ssize_t primaryItemIndex = mItemIdToItemMap.indexOfKey(mPrimaryItemId);
+ if (primaryItemIndex < 0) {
+ ALOGE("%s: Primary item id %d not found!", __FUNCTION__, mPrimaryItemId);
return ERROR_MALFORMED;
}
- const ImageItem &primaryImage = mItemIdToImageMap[primaryIndex];
+ const ImageItem &primaryImage = mItemIdToItemMap[primaryItemIndex];
if (primaryImage.thumbnails.empty()) {
- ALOGW("Using primary in place of thumbnail.");
- *imageIndex = primaryIndex;
+ ALOGW("%s: Using primary in place of thumbnail.", __FUNCTION__);
+ *itemIndex = primaryItemIndex;
return OK;
}
- ssize_t thumbnailIndex = mItemIdToImageMap.indexOfKey(
+ ssize_t thumbItemIndex = mItemIdToItemMap.indexOfKey(
primaryImage.thumbnails[0]);
- if (thumbnailIndex < 0) {
- ALOGE("Thumbnail item id %d not found!", primaryImage.thumbnails[0]);
+ if (thumbItemIndex < 0) {
+ ALOGE("%s: Thumbnail item id %d not found!",
+ __FUNCTION__, primaryImage.thumbnails[0]);
return ERROR_MALFORMED;
}
- *imageIndex = thumbnailIndex;
+ *itemIndex = thumbItemIndex;
return OK;
}
status_t ItemTable::getImageOffsetAndSize(
- uint32_t *imageIndex, off64_t *offset, size_t *size) {
+ uint32_t *itemIndex, off64_t *offset, size_t *size) {
if (!mImageItemsValid) {
return INVALID_OPERATION;
}
- if (imageIndex != NULL) {
- if (*imageIndex >= mItemIdToImageMap.size()) {
- ALOGE("Bad image index!");
+ if (itemIndex != NULL) {
+ if (*itemIndex >= mItemIdToItemMap.size()) {
+ ALOGE("%s: Bad item index!", __FUNCTION__);
return BAD_VALUE;
}
- mCurrentImageIndex = *imageIndex;
+ mCurrentItemIndex = *itemIndex;
}
- ImageItem &image = mItemIdToImageMap.editValueAt(mCurrentImageIndex);
+ ImageItem &image = mItemIdToItemMap.editValueAt(mCurrentItemIndex);
if (image.isGrid()) {
uint32_t tileItemId;
- status_t err = image.getNextTileItemId(&tileItemId, imageIndex != NULL);
+ status_t err = image.getNextTileItemId(&tileItemId, itemIndex != NULL);
if (err != OK) {
return err;
}
- ssize_t tileImageIndex = mItemIdToImageMap.indexOfKey(tileItemId);
- if (tileImageIndex < 0) {
+ ssize_t tileItemIndex = mItemIdToItemMap.indexOfKey(tileItemId);
+ if (tileItemIndex < 0) {
return ERROR_END_OF_STREAM;
}
- *offset = mItemIdToImageMap[tileImageIndex].offset;
- *size = mItemIdToImageMap[tileImageIndex].size;
+ *offset = mItemIdToItemMap[tileItemIndex].offset;
+ *size = mItemIdToItemMap[tileItemIndex].size;
} else {
- if (imageIndex == NULL) {
+ if (itemIndex == NULL) {
// For single images, we only allow it to be read once, after that
- // it's EOS. New image index must be requested each time.
+ // it's EOS. New item index must be requested each time.
return ERROR_END_OF_STREAM;
}
- *offset = mItemIdToImageMap[mCurrentImageIndex].offset;
- *size = mItemIdToImageMap[mCurrentImageIndex].size;
+ *offset = mItemIdToItemMap[mCurrentItemIndex].offset;
+ *size = mItemIdToItemMap[mCurrentItemIndex].size;
}
return OK;
diff --git a/media/extractors/mp4/ItemTable.h b/media/extractors/mp4/ItemTable.h
index 5a6af5e..6591271 100644
--- a/media/extractors/mp4/ItemTable.h
+++ b/media/extractors/mp4/ItemTable.h
@@ -76,8 +76,8 @@
std::set<uint32_t> mBoxesSeen;
bool mImageItemsValid;
- uint32_t mCurrentImageIndex;
- KeyedVector<uint32_t, ImageItem> mItemIdToImageMap;
+ uint32_t mCurrentItemIndex;
+ KeyedVector<uint32_t, ImageItem> mItemIdToItemMap;
status_t parseIlocBox(off64_t offset, size_t size);
status_t parseIinfBox(off64_t offset, size_t size);
diff --git a/media/libaaudio/examples/loopback/src/loopback.cpp b/media/libaaudio/examples/loopback/src/loopback.cpp
index df0df04..be833e6 100644
--- a/media/libaaudio/examples/loopback/src/loopback.cpp
+++ b/media/libaaudio/examples/loopback/src/loopback.cpp
@@ -19,9 +19,12 @@
#include <algorithm>
#include <assert.h>
#include <cctype>
+#include <errno.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#include <aaudio/AAudio.h>
diff --git a/media/libaaudio/examples/utils/AAudioExampleUtils.h b/media/libaaudio/examples/utils/AAudioExampleUtils.h
index c179ce6..d817664 100644
--- a/media/libaaudio/examples/utils/AAudioExampleUtils.h
+++ b/media/libaaudio/examples/utils/AAudioExampleUtils.h
@@ -18,8 +18,10 @@
#define AAUDIO_EXAMPLE_UTILS_H
#include <atomic>
+#include <errno.h>
#include <linux/futex.h>
#include <sched.h>
+#include <string.h>
#include <sys/syscall.h>
#include <unistd.h>
diff --git a/media/libaaudio/src/utility/AudioClock.h b/media/libaaudio/src/utility/AudioClock.h
index 43b71b0..d5d4ef4 100644
--- a/media/libaaudio/src/utility/AudioClock.h
+++ b/media/libaaudio/src/utility/AudioClock.h
@@ -17,6 +17,7 @@
#ifndef UTILITY_AUDIO_CLOCK_H
#define UTILITY_AUDIO_CLOCK_H
+#include <errno.h>
#include <stdint.h>
#include <time.h>
diff --git a/media/libmedia/Android.bp b/media/libmedia/Android.bp
index 58ce17b..80280ae 100644
--- a/media/libmedia/Android.bp
+++ b/media/libmedia/Android.bp
@@ -48,7 +48,6 @@
"IOMXStore.cpp",
"MediaCodecBuffer.cpp",
"MediaCodecInfo.cpp",
- "MediaDefs.cpp",
"OMXBuffer.cpp",
"omx/1.0/WGraphicBufferSource.cpp",
"omx/1.0/WOmx.cpp",
diff --git a/media/libmedia/IMediaPlayerService.cpp b/media/libmedia/IMediaPlayerService.cpp
index d135878..aca7ad9 100644
--- a/media/libmedia/IMediaPlayerService.cpp
+++ b/media/libmedia/IMediaPlayerService.cpp
@@ -38,7 +38,6 @@
CREATE = IBinder::FIRST_CALL_TRANSACTION,
CREATE_MEDIA_RECORDER,
CREATE_METADATA_RETRIEVER,
- GET_OMX,
ADD_BATTERY_DATA,
PULL_BATTERY_DATA,
LISTEN_FOR_REMOTE_DISPLAY,
@@ -81,13 +80,6 @@
return interface_cast<IMediaRecorder>(reply.readStrongBinder());
}
- virtual sp<IOMX> getOMX() {
- Parcel data, reply;
- data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor());
- remote()->transact(GET_OMX, data, &reply);
- return interface_cast<IOMX>(reply.readStrongBinder());
- }
-
virtual void addBatteryData(uint32_t params) {
Parcel data, reply;
data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor());
@@ -151,12 +143,6 @@
reply->writeStrongBinder(IInterface::asBinder(retriever));
return NO_ERROR;
} break;
- case GET_OMX: {
- CHECK_INTERFACE(IMediaPlayerService, data, reply);
- sp<IOMX> omx = getOMX();
- reply->writeStrongBinder(IInterface::asBinder(omx));
- return NO_ERROR;
- } break;
case ADD_BATTERY_DATA: {
CHECK_INTERFACE(IMediaPlayerService, data, reply);
uint32_t params = data.readInt32();
diff --git a/media/libmedia/include/media/IMediaPlayerService.h b/media/libmedia/include/media/IMediaPlayerService.h
index 398a8c7..217de14 100644
--- a/media/libmedia/include/media/IMediaPlayerService.h
+++ b/media/libmedia/include/media/IMediaPlayerService.h
@@ -48,7 +48,6 @@
virtual sp<IMediaMetadataRetriever> createMetadataRetriever() = 0;
virtual sp<IMediaPlayer> create(const sp<IMediaPlayerClient>& client,
audio_session_t audioSessionId = AUDIO_SESSION_ALLOCATE) = 0;
- virtual sp<IOMX> getOMX() = 0;
virtual sp<IMediaCodecList> getCodecList() const = 0;
// Connects to a remote display.
diff --git a/media/libmediaplayerservice/Android.bp b/media/libmediaplayerservice/Android.bp
new file mode 100644
index 0000000..fee3df6
--- /dev/null
+++ b/media/libmediaplayerservice/Android.bp
@@ -0,0 +1,76 @@
+cc_library_shared {
+
+ srcs: [
+ "ActivityManager.cpp",
+ "MediaPlayerFactory.cpp",
+ "MediaPlayerService.cpp",
+ "MediaRecorderClient.cpp",
+ "MetadataRetrieverClient.cpp",
+ "StagefrightRecorder.cpp",
+ "TestPlayerStub.cpp",
+ ],
+
+ shared_libs: [
+ "android.hardware.media.omx@1.0",
+ "libaudioclient",
+ "libbinder",
+ "libcamera_client",
+ "libcrypto",
+ "libcutils",
+ "libdl",
+ "libgui",
+ "libhidlbase",
+ "libhidlmemory",
+ "liblog",
+ "libmedia",
+ "libmediadrm",
+ "libmediametrics",
+ "libmediautils",
+ "libmemunreachable",
+ "libpowermanager",
+ "libstagefright",
+ "libstagefright_foundation",
+ "libstagefright_httplive",
+ "libutils",
+ ],
+
+ header_libs: [
+ "media_plugin_headers",
+ ],
+
+ static_libs: [
+ "libstagefright_nuplayer",
+ "libstagefright_rtsp",
+ "libstagefright_timedtext",
+ ],
+
+ export_shared_lib_headers: ["libmedia"],
+
+ include_dirs: [
+ "frameworks/av/media/libstagefright/rtsp",
+ "frameworks/av/media/libstagefright/webm",
+ ],
+
+ local_include_dirs: ["include"],
+
+ cflags: [
+ "-Werror",
+ "-Wno-error=deprecated-declarations",
+ "-Wall",
+ ],
+
+ name: "libmediaplayerservice",
+
+ compile_multilib: "32",
+
+ sanitize: {
+ cfi: true,
+ diag: {
+ cfi: true,
+ },
+ },
+
+}
+
+subdirs = ["*"]
+
diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk
deleted file mode 100644
index 630f601..0000000
--- a/media/libmediaplayerservice/Android.mk
+++ /dev/null
@@ -1,69 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-#
-# libmediaplayerservice
-#
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- ActivityManager.cpp \
- MediaPlayerFactory.cpp \
- MediaPlayerService.cpp \
- MediaRecorderClient.cpp \
- MetadataRetrieverClient.cpp \
- StagefrightRecorder.cpp \
- TestPlayerStub.cpp \
-
-LOCAL_SHARED_LIBRARIES := \
- libbinder \
- libcrypto \
- libcutils \
- liblog \
- libdl \
- libgui \
- libaudioclient \
- libmedia \
- libmediametrics \
- libmediadrm \
- libmediautils \
- libmemunreachable \
- libpowermanager \
- libstagefright \
- libstagefright_foundation \
- libstagefright_httplive \
- libstagefright_omx \
- libutils \
- libhidlbase \
- libhidlmemory \
- android.hardware.media.omx@1.0 \
-
-LOCAL_STATIC_LIBRARIES := \
- libstagefright_nuplayer \
- libstagefright_rtsp \
- libstagefright_timedtext \
-
-LOCAL_EXPORT_SHARED_LIBRARY_HEADERS := libmedia
-
-LOCAL_C_INCLUDES := \
- frameworks/av/media/libstagefright/include \
- frameworks/av/media/libstagefright/rtsp \
- frameworks/av/media/libstagefright/webm \
- $(LOCAL_PATH)/include/media \
- frameworks/av/include/camera \
- frameworks/native/include/media/openmax \
- frameworks/native/include/media/hardware \
- external/tremolo/Tremolo \
-
-LOCAL_CFLAGS += -Werror -Wno-error=deprecated-declarations -Wall
-
-LOCAL_MODULE:= libmediaplayerservice
-
-LOCAL_32_BIT_ONLY := true
-
-LOCAL_SANITIZE := cfi integer_overflow
-LOCAL_SANITIZE_DIAG := cfi
-
-include $(BUILD_SHARED_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 44ab5da..07dff50 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -77,8 +77,6 @@
#include "TestPlayerStub.h"
#include "nuplayer/NuPlayerDriver.h"
-#include <media/stagefright/omx/OMX.h>
-
#include "HTTPBase.h"
static const int kDumpLockRetries = 50;
@@ -336,17 +334,6 @@
return MediaCodecList::getLocalInstance();
}
-sp<IOMX> MediaPlayerService::getOMX() {
- ALOGI("MediaPlayerService::getOMX");
- Mutex::Autolock autoLock(mLock);
-
- if (mOMX.get() == NULL) {
- mOMX = new OMX;
- }
-
- return mOMX;
-}
-
sp<IRemoteDisplay> MediaPlayerService::listenForRemoteDisplay(
const String16 &/*opPackageName*/,
const sp<IRemoteDisplayClient>& /*client*/,
diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h
index d62dd52..f1d43a2 100644
--- a/media/libmediaplayerservice/MediaPlayerService.h
+++ b/media/libmediaplayerservice/MediaPlayerService.h
@@ -228,7 +228,6 @@
audio_session_t audioSessionId);
virtual sp<IMediaCodecList> getCodecList() const;
- virtual sp<IOMX> getOMX();
virtual sp<IRemoteDisplay> listenForRemoteDisplay(const String16 &opPackageName,
const sp<IRemoteDisplayClient>& client, const String8& iface);
@@ -481,7 +480,6 @@
SortedVector< wp<Client> > mClients;
SortedVector< wp<MediaRecorderClient> > mMediaRecorderClients;
int32_t mNextConnId;
- sp<IOMX> mOMX;
};
// ----------------------------------------------------------------------------
diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h
index 9a6c4da..5111c8e 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.h
+++ b/media/libmediaplayerservice/StagefrightRecorder.h
@@ -25,7 +25,7 @@
#include <system/audio.h>
-#include <MetadataBufferType.h>
+#include <media/hardware/MetadataBufferType.h>
namespace android {
diff --git a/media/libmediaplayerservice/nuplayer/Android.bp b/media/libmediaplayerservice/nuplayer/Android.bp
new file mode 100644
index 0000000..645bb7a
--- /dev/null
+++ b/media/libmediaplayerservice/nuplayer/Android.bp
@@ -0,0 +1,66 @@
+cc_library_static {
+
+ srcs: [
+ "AWakeLock.cpp",
+ "GenericSource.cpp",
+ "HTTPLiveSource.cpp",
+ "NuPlayer.cpp",
+ "NuPlayerCCDecoder.cpp",
+ "NuPlayerDecoder.cpp",
+ "NuPlayerDecoderBase.cpp",
+ "NuPlayerDecoderPassThrough.cpp",
+ "NuPlayerDriver.cpp",
+ "NuPlayerDrm.cpp",
+ "NuPlayerRenderer.cpp",
+ "NuPlayerStreamListener.cpp",
+ "RTSPSource.cpp",
+ "StreamingSource.cpp",
+ ],
+
+ header_libs: [
+ "media_plugin_headers",
+ ],
+
+ include_dirs: [
+ "frameworks/av/media/libstagefright",
+ "frameworks/av/media/libstagefright/httplive",
+ "frameworks/av/media/libstagefright/include",
+ "frameworks/av/media/libstagefright/mpeg2ts",
+ "frameworks/av/media/libstagefright/rtsp",
+ "frameworks/av/media/libstagefright/timedtext",
+ ],
+
+ cflags: [
+ "-Werror",
+ "-Wall",
+ ],
+
+ product_variables: {
+ debuggable: {
+ cflags: [
+ "-DENABLE_STAGEFRIGHT_EXPERIMENTS",
+ ],
+ }
+ },
+
+ shared_libs: [
+ "libbinder",
+ "libui",
+ "libgui",
+ "libmedia",
+ "libmediadrm",
+ "libpowermanager",
+ ],
+
+ name: "libstagefright_nuplayer",
+
+ tags: ["eng"],
+
+ sanitize: {
+ cfi: true,
+ diag: {
+ cfi: true,
+ },
+ },
+
+}
diff --git a/media/libmediaplayerservice/nuplayer/Android.mk b/media/libmediaplayerservice/nuplayer/Android.mk
deleted file mode 100644
index b7978e1..0000000
--- a/media/libmediaplayerservice/nuplayer/Android.mk
+++ /dev/null
@@ -1,51 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- AWakeLock.cpp \
- GenericSource.cpp \
- HTTPLiveSource.cpp \
- NuPlayer.cpp \
- NuPlayerCCDecoder.cpp \
- NuPlayerDecoder.cpp \
- NuPlayerDecoderBase.cpp \
- NuPlayerDecoderPassThrough.cpp \
- NuPlayerDriver.cpp \
- NuPlayerDrm.cpp \
- NuPlayerRenderer.cpp \
- NuPlayerStreamListener.cpp \
- RTSPSource.cpp \
- StreamingSource.cpp \
-
-LOCAL_C_INCLUDES := \
- frameworks/av/media/libstagefright \
- frameworks/av/media/libstagefright/httplive \
- frameworks/av/media/libstagefright/include \
- frameworks/av/media/libstagefright/mpeg2ts \
- frameworks/av/media/libstagefright/rtsp \
- frameworks/av/media/libstagefright/timedtext \
- frameworks/av/media/libmediaplayerservice \
- frameworks/native/include/media/openmax
-
-LOCAL_CFLAGS += -Werror -Wall
-
-# enable experiments only in userdebug and eng builds
-ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
-LOCAL_CFLAGS += -DENABLE_STAGEFRIGHT_EXPERIMENTS
-endif
-
-LOCAL_SHARED_LIBRARIES := \
- libbinder \
- libui \
- libgui \
- libmedia \
- libmediadrm \
-
-LOCAL_MODULE:= libstagefright_nuplayer
-
-LOCAL_MODULE_TAGS := eng
-
-LOCAL_SANITIZE := cfi
-LOCAL_SANITIZE_DIAG := cfi
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/media/libmediaplayerservice/tests/Android.bp b/media/libmediaplayerservice/tests/Android.bp
new file mode 100644
index 0000000..d6c1d27
--- /dev/null
+++ b/media/libmediaplayerservice/tests/Android.bp
@@ -0,0 +1,24 @@
+cc_test {
+
+ name: "DrmSessionManager_test",
+
+ tags: ["tests"],
+
+ srcs: ["DrmSessionManager_test.cpp"],
+
+ shared_libs: [
+ "liblog",
+ "libmediaplayerservice",
+ "libmediadrm",
+ "libutils",
+ "android.hardware.drm@1.0",
+ ],
+
+ compile_multilib: "32",
+
+ cflags: [
+ "-Werror",
+ "-Wall",
+ ],
+
+}
diff --git a/media/libmediaplayerservice/tests/Android.mk b/media/libmediaplayerservice/tests/Android.mk
deleted file mode 100644
index 0b9b85f..0000000
--- a/media/libmediaplayerservice/tests/Android.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-# Build the unit tests.
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := DrmSessionManager_test
-
-LOCAL_MODULE_TAGS := tests
-
-LOCAL_SRC_FILES := \
- DrmSessionManager_test.cpp \
-
-LOCAL_SHARED_LIBRARIES := \
- liblog \
- libmediaplayerservice \
- libmediadrm \
- libutils \
- android.hardware.drm@1.0 \
-
-LOCAL_C_INCLUDES := \
- frameworks/av/include \
- frameworks/av/media/libmediaplayerservice \
-
-LOCAL_CFLAGS += -Werror -Wall
-
-LOCAL_32_BIT_ONLY := true
-
-include $(BUILD_NATIVE_TEST)
-
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index c44e868..a2eb9a8 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -5298,8 +5298,9 @@
CHECK(mOutputFormat->findInt32("channel-count", &channelCount));
CHECK(mOutputFormat->findInt32("sample-rate", &sampleRate));
if (mSampleRate != 0 && sampleRate != 0) {
- mEncoderDelay = mEncoderDelay * sampleRate / mSampleRate;
- mEncoderPadding = mEncoderPadding * sampleRate / mSampleRate;
+ // avoiding 32-bit overflows in intermediate values
+ mEncoderDelay = (int32_t)((((int64_t)mEncoderDelay) * sampleRate) / mSampleRate);
+ mEncoderPadding = (int32_t)((((int64_t)mEncoderPadding) * sampleRate) / mSampleRate);
mSampleRate = sampleRate;
}
if (mSkipCutBuffer != NULL) {
diff --git a/media/libstagefright/MediaCodecList.cpp b/media/libstagefright/MediaCodecList.cpp
index 32a9f0a..4feba37 100644
--- a/media/libstagefright/MediaCodecList.cpp
+++ b/media/libstagefright/MediaCodecList.cpp
@@ -26,10 +26,10 @@
#include <media/IMediaPlayerService.h>
#include <media/IMediaCodecService.h>
#include <media/MediaCodecInfo.h>
-#include <media/MediaDefs.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
+#include <media/stagefright/foundation/MediaDefs.h>
#include <media/stagefright/MediaCodecList.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/OmxInfoBuilder.h>
diff --git a/media/libstagefright/OmxInfoBuilder.cpp b/media/libstagefright/OmxInfoBuilder.cpp
index 8717a79..063d13e 100644
--- a/media/libstagefright/OmxInfoBuilder.cpp
+++ b/media/libstagefright/OmxInfoBuilder.cpp
@@ -26,6 +26,7 @@
#include <binder/IServiceManager.h>
#include <media/IMediaCodecService.h>
+#include <media/stagefright/foundation/MediaDefs.h>
#include <media/stagefright/OmxInfoBuilder.h>
#include <media/stagefright/ACodec.h>
@@ -36,7 +37,6 @@
#include <media/IOMXStore.h>
#include <media/IOMX.h>
-#include <media/MediaDefs.h>
#include <media/omx/1.0/WOmx.h>
#include <media/openmax/OMX_Index.h>
diff --git a/media/libstagefright/codec2/include/C2Buffer.h b/media/libstagefright/codec2/include/C2Buffer.h
index 020fa09..9580449 100644
--- a/media/libstagefright/codec2/include/C2Buffer.h
+++ b/media/libstagefright/codec2/include/C2Buffer.h
@@ -1236,7 +1236,7 @@
* \retval C2_NOT_FOUND the notification was not found
* \retval C2_CORRUPTED an unknown error prevented the registration (unexpected)
*/
- C2Error unregisterOnDestroyNotify(OnDestroyNotify onDestroyNotify);
+ C2Error unregisterOnDestroyNotify(OnDestroyNotify onDestroyNotify, void *arg = nullptr);
///@}
diff --git a/media/libstagefright/codec2/tests/vndk/C2BufferTest.cpp b/media/libstagefright/codec2/tests/vndk/C2BufferTest.cpp
index 97c4a7d..18d0841 100644
--- a/media/libstagefright/codec2/tests/vndk/C2BufferTest.cpp
+++ b/media/libstagefright/codec2/tests/vndk/C2BufferTest.cpp
@@ -475,9 +475,10 @@
destroyed = false;
ASSERT_EQ(C2_OK, buffer->registerOnDestroyNotify(&DestroyCallback, &arg));
EXPECT_FALSE(destroyed);
- ASSERT_EQ(C2_OK, buffer->unregisterOnDestroyNotify(&DestroyCallback));
+ ASSERT_EQ(C2_NOT_FOUND, buffer->unregisterOnDestroyNotify(&DestroyCallback, nullptr));
+ ASSERT_EQ(C2_OK, buffer->unregisterOnDestroyNotify(&DestroyCallback, &arg));
EXPECT_FALSE(destroyed);
- ASSERT_EQ(C2_NOT_FOUND, buffer->unregisterOnDestroyNotify(&DestroyCallback));
+ ASSERT_EQ(C2_NOT_FOUND, buffer->unregisterOnDestroyNotify(&DestroyCallback, &arg));
buffer.reset();
EXPECT_FALSE(destroyed);
diff --git a/media/libstagefright/codec2/vndk/C2Buffer.cpp b/media/libstagefright/codec2/vndk/C2Buffer.cpp
index 1a0b55c..92ccfd1 100644
--- a/media/libstagefright/codec2/vndk/C2Buffer.cpp
+++ b/media/libstagefright/codec2/vndk/C2Buffer.cpp
@@ -1344,7 +1344,7 @@
const C2BufferData &data() const { return mData; }
- C2Error registerOnDestroyNotify(OnDestroyNotify onDestroyNotify, void *arg = nullptr) {
+ C2Error registerOnDestroyNotify(OnDestroyNotify onDestroyNotify, void *arg) {
auto it = std::find_if(
mNotify.begin(), mNotify.end(),
[onDestroyNotify, arg] (const auto &pair) {
@@ -1357,11 +1357,11 @@
return C2_OK;
}
- C2Error unregisterOnDestroyNotify(OnDestroyNotify onDestroyNotify) {
+ C2Error unregisterOnDestroyNotify(OnDestroyNotify onDestroyNotify, void *arg) {
auto it = std::find_if(
mNotify.begin(), mNotify.end(),
- [onDestroyNotify] (const auto &pair) {
- return pair.first == onDestroyNotify;
+ [onDestroyNotify, arg] (const auto &pair) {
+ return pair.first == onDestroyNotify && pair.second == arg;
});
if (it == mNotify.end()) {
return C2_NOT_FOUND;
@@ -1418,8 +1418,8 @@
return mImpl->registerOnDestroyNotify(onDestroyNotify, arg);
}
-C2Error C2Buffer::unregisterOnDestroyNotify(OnDestroyNotify onDestroyNotify) {
- return mImpl->unregisterOnDestroyNotify(onDestroyNotify);
+C2Error C2Buffer::unregisterOnDestroyNotify(OnDestroyNotify onDestroyNotify, void *arg) {
+ return mImpl->unregisterOnDestroyNotify(onDestroyNotify, arg);
}
const std::list<std::shared_ptr<const C2Info>> C2Buffer::infos() const {
diff --git a/media/libstagefright/codecs/avcdec/Android.bp b/media/libstagefright/codecs/avcdec/Android.bp
index 44c882c..44f5e4f 100644
--- a/media/libstagefright/codecs/avcdec/Android.bp
+++ b/media/libstagefright/codecs/avcdec/Android.bp
@@ -16,7 +16,6 @@
],
shared_libs: [
- "libmedia_omx",
"libstagefright_omx",
"libstagefright_foundation",
"libutils",
diff --git a/media/libstagefright/codecs/avcenc/Android.bp b/media/libstagefright/codecs/avcenc/Android.bp
index 66507a7..7a8e1b7 100644
--- a/media/libstagefright/codecs/avcenc/Android.bp
+++ b/media/libstagefright/codecs/avcenc/Android.bp
@@ -17,7 +17,7 @@
],
shared_libs: [
- "libmedia_omx",
+ "libstagefright_foundation",
"libstagefright_omx",
"libutils",
"liblog",
diff --git a/media/libstagefright/codecs/cmds/codec2.cpp b/media/libstagefright/codecs/cmds/codec2.cpp
index ad4da9b..f64887d 100644
--- a/media/libstagefright/codecs/cmds/codec2.cpp
+++ b/media/libstagefright/codecs/cmds/codec2.cpp
@@ -154,10 +154,10 @@
CHECK(mControl != NULL);
CHECK(mControl->isValid());
- SurfaceComposerClient::openGlobalTransaction();
- CHECK_EQ(mControl->setLayer(INT_MAX), (status_t)OK);
- CHECK_EQ(mControl->show(), (status_t)OK);
- SurfaceComposerClient::closeGlobalTransaction();
+ SurfaceComposerClient::Transaction{}
+ .setLayer(mControl, INT_MAX)
+ .show(mControl)
+ .apply();
mSurface = mControl->getSurface();
CHECK(mSurface != NULL);
diff --git a/media/libstagefright/codecs/flac/enc/Android.bp b/media/libstagefright/codecs/flac/enc/Android.bp
index 066917b..854f7ce 100644
--- a/media/libstagefright/codecs/flac/enc/Android.bp
+++ b/media/libstagefright/codecs/flac/enc/Android.bp
@@ -22,7 +22,6 @@
},
shared_libs: [
- "libmedia_omx",
"libstagefright_omx",
"libstagefright_foundation",
"libutils",
diff --git a/media/libstagefright/codecs/g711/dec/Android.bp b/media/libstagefright/codecs/g711/dec/Android.bp
index fff72a8..07e5052 100644
--- a/media/libstagefright/codecs/g711/dec/Android.bp
+++ b/media/libstagefright/codecs/g711/dec/Android.bp
@@ -13,7 +13,7 @@
],
shared_libs: [
- "libmedia_omx",
+ "libstagefright_foundation",
"libstagefright_omx",
"libutils",
"liblog",
diff --git a/media/libstagefright/codecs/gsm/dec/Android.bp b/media/libstagefright/codecs/gsm/dec/Android.bp
index 753eeef..0739ad4 100644
--- a/media/libstagefright/codecs/gsm/dec/Android.bp
+++ b/media/libstagefright/codecs/gsm/dec/Android.bp
@@ -27,7 +27,7 @@
},
shared_libs: [
- "libmedia_omx",
+ "libstagefright_foundation",
"libstagefright_omx",
"libutils",
"liblog",
diff --git a/media/libstagefright/codecs/hevcdec/Android.bp b/media/libstagefright/codecs/hevcdec/Android.bp
index 7fa74d4..e63a2f8 100644
--- a/media/libstagefright/codecs/hevcdec/Android.bp
+++ b/media/libstagefright/codecs/hevcdec/Android.bp
@@ -26,7 +26,6 @@
},
shared_libs: [
- "libmedia_omx",
"libstagefright_omx",
"libstagefright_foundation",
"libutils",
diff --git a/media/libstagefright/codecs/m4v_h263/dec/Android.bp b/media/libstagefright/codecs/m4v_h263/dec/Android.bp
index 1216ae5..e57bb78 100644
--- a/media/libstagefright/codecs/m4v_h263/dec/Android.bp
+++ b/media/libstagefright/codecs/m4v_h263/dec/Android.bp
@@ -93,7 +93,6 @@
static_libs: ["libstagefright_m4vh263dec"],
shared_libs: [
- "libmedia_omx",
"libstagefright_omx",
"libstagefright_foundation",
"libutils",
diff --git a/media/libstagefright/codecs/m4v_h263/enc/Android.bp b/media/libstagefright/codecs/m4v_h263/enc/Android.bp
index 640718d..7c5c61c 100644
--- a/media/libstagefright/codecs/m4v_h263/enc/Android.bp
+++ b/media/libstagefright/codecs/m4v_h263/enc/Android.bp
@@ -4,8 +4,7 @@
srcs: [
"src/bitstream_io.cpp",
- "src/combined_encode.cpp",
- "src/datapart_encode.cpp",
+ "src/combined_encode.cpp", "src/datapart_encode.cpp",
"src/dct.cpp",
"src/findhalfpel.cpp",
"src/fastcodemb.cpp",
@@ -80,7 +79,7 @@
static_libs: ["libstagefright_m4vh263enc"],
shared_libs: [
- "libmedia_omx",
+ "libstagefright_foundation",
"libstagefright_omx",
"libutils",
"liblog",
diff --git a/media/libstagefright/codecs/mp3dec/Android.bp b/media/libstagefright/codecs/mp3dec/Android.bp
index 273fa31..32c0753 100644
--- a/media/libstagefright/codecs/mp3dec/Android.bp
+++ b/media/libstagefright/codecs/mp3dec/Android.bp
@@ -107,7 +107,6 @@
},
shared_libs: [
- "libmedia_omx",
"libstagefright_omx",
"libstagefright_foundation",
"libutils",
diff --git a/media/libstagefright/codecs/mpeg2dec/Android.bp b/media/libstagefright/codecs/mpeg2dec/Android.bp
index 15fdde7..0520559 100644
--- a/media/libstagefright/codecs/mpeg2dec/Android.bp
+++ b/media/libstagefright/codecs/mpeg2dec/Android.bp
@@ -16,7 +16,6 @@
],
shared_libs: [
- "libmedia_omx",
"libstagefright_omx",
"libstagefright_foundation",
"libutils",
diff --git a/media/libstagefright/codecs/on2/dec/Android.bp b/media/libstagefright/codecs/on2/dec/Android.bp
index 59c1f5d..a4eed8c 100644
--- a/media/libstagefright/codecs/on2/dec/Android.bp
+++ b/media/libstagefright/codecs/on2/dec/Android.bp
@@ -15,7 +15,6 @@
static_libs: ["libvpx"],
shared_libs: [
- "libmedia_omx",
"libstagefright_omx",
"libstagefright_foundation",
"libutils",
diff --git a/media/libstagefright/codecs/on2/enc/Android.bp b/media/libstagefright/codecs/on2/enc/Android.bp
index 741774c..5c9872a 100644
--- a/media/libstagefright/codecs/on2/enc/Android.bp
+++ b/media/libstagefright/codecs/on2/enc/Android.bp
@@ -30,7 +30,6 @@
static_libs: ["libvpx"],
shared_libs: [
- "libmedia_omx",
"libstagefright_omx",
"libstagefright_foundation",
"libutils",
diff --git a/media/libstagefright/codecs/opus/dec/Android.bp b/media/libstagefright/codecs/opus/dec/Android.bp
index 88d6ec4..32a4f32 100644
--- a/media/libstagefright/codecs/opus/dec/Android.bp
+++ b/media/libstagefright/codecs/opus/dec/Android.bp
@@ -14,7 +14,6 @@
shared_libs: [
"libopus",
- "libmedia_omx",
"libstagefright_omx",
"libstagefright_foundation",
"libutils",
diff --git a/media/libstagefright/codecs/tests/Android.mk b/media/libstagefright/codecs/tests/Android.mk
index dcb86ba..ea188ea 100644
--- a/media/libstagefright/codecs/tests/Android.mk
+++ b/media/libstagefright/codecs/tests/Android.mk
@@ -24,8 +24,8 @@
LOCAL_SHARED_LIBRARIES := \
libcutils \
- libmedia \
libstagefright_codec2 \
+ libstagefright_foundation \
libstagefright_soft_c2avcdec \
liblog \
diff --git a/media/libstagefright/codecs/tests/C2SoftAvcDec_test.cpp b/media/libstagefright/codecs/tests/C2SoftAvcDec_test.cpp
index e59c03e..d5ccb8d 100644
--- a/media/libstagefright/codecs/tests/C2SoftAvcDec_test.cpp
+++ b/media/libstagefright/codecs/tests/C2SoftAvcDec_test.cpp
@@ -20,7 +20,7 @@
#include <gtest/gtest.h>
-#include <media/MediaDefs.h>
+#include <media/stagefright/foundation/MediaDefs.h>
#include "C2SoftAvcDec.h"
diff --git a/media/libstagefright/codecs/vorbis/dec/Android.bp b/media/libstagefright/codecs/vorbis/dec/Android.bp
index 628b36c..b7a6c1c 100644
--- a/media/libstagefright/codecs/vorbis/dec/Android.bp
+++ b/media/libstagefright/codecs/vorbis/dec/Android.bp
@@ -14,7 +14,6 @@
shared_libs: [
"libvorbisidec",
- "libmedia_omx",
"libstagefright_omx",
"libstagefright_foundation",
"libutils",
diff --git a/media/libstagefright/foundation/Android.bp b/media/libstagefright/foundation/Android.bp
index 28297fd..6ae9a95 100644
--- a/media/libstagefright/foundation/Android.bp
+++ b/media/libstagefright/foundation/Android.bp
@@ -64,6 +64,7 @@
"ColorUtils.cpp",
"MediaBuffer.cpp",
"MediaBufferGroup.cpp",
+ "MediaDefs.cpp",
"MetaData.cpp",
"ParsedMessage.cpp",
"base64.cpp",
diff --git a/media/libmedia/MediaDefs.cpp b/media/libstagefright/foundation/MediaDefs.cpp
similarity index 97%
rename from media/libmedia/MediaDefs.cpp
rename to media/libstagefright/foundation/MediaDefs.cpp
index 544a6ae..7caebc6 100644
--- a/media/libmedia/MediaDefs.cpp
+++ b/media/libstagefright/foundation/MediaDefs.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include <media/MediaDefs.h>
+#include <media/stagefright/foundation/MediaDefs.h>
namespace android {
diff --git a/media/libmedia/include/media/MediaDefs.h b/media/libstagefright/foundation/include/media/stagefright/foundation/MediaDefs.h
similarity index 100%
rename from media/libmedia/include/media/MediaDefs.h
rename to media/libstagefright/foundation/include/media/stagefright/foundation/MediaDefs.h
diff --git a/media/libstagefright/include/media/stagefright/MediaDefs.h b/media/libstagefright/include/media/stagefright/MediaDefs.h
index 359fb69..d20c5da 100644
--- a/media/libstagefright/include/media/stagefright/MediaDefs.h
+++ b/media/libstagefright/include/media/stagefright/MediaDefs.h
@@ -26,6 +26,6 @@
*
*/
-#include <media/MediaDefs.h>
+#include <media/stagefright/foundation/MediaDefs.h>
#endif // STAGEFRIGHT_MEDIA_DEFS_H_
diff --git a/media/libstagefright/include/media/stagefright/OMXClient.h b/media/libstagefright/include/media/stagefright/OMXClient.h
index 2f159b0..b1864b8 100644
--- a/media/libstagefright/include/media/stagefright/OMXClient.h
+++ b/media/libstagefright/include/media/stagefright/OMXClient.h
@@ -18,9 +18,9 @@
#define OMX_CLIENT_H_
-namespace android {
+#include <media/IOMX.h>
-class IOMX;
+namespace android {
class OMXClient {
public:
diff --git a/media/libstagefright/omx/Android.bp b/media/libstagefright/omx/Android.bp
index 0d6c696..a464681 100644
--- a/media/libstagefright/omx/Android.bp
+++ b/media/libstagefright/omx/Android.bp
@@ -105,6 +105,7 @@
],
shared_libs: [
"libmedia_omx",
+ "libstagefright_foundation",
"liblog",
],
export_shared_lib_headers: [
diff --git a/media/libstagefright/omx/OMXUtils.cpp b/media/libstagefright/omx/OMXUtils.cpp
index 5894837..e032985 100644
--- a/media/libstagefright/omx/OMXUtils.cpp
+++ b/media/libstagefright/omx/OMXUtils.cpp
@@ -22,9 +22,9 @@
#include <media/stagefright/omx/OMXUtils.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AUtils.h>
+#include <media/stagefright/foundation/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
#include <media/hardware/HardwareAPI.h>
-#include <media/MediaDefs.h>
#include <system/graphics-base.h>
namespace android {
diff --git a/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp b/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp
index cb811a0..8e92539 100644
--- a/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp
+++ b/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp
@@ -26,8 +26,8 @@
#include <media/stagefright/foundation/ALooper.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/foundation/AUtils.h>
+#include <media/stagefright/foundation/MediaDefs.h>
#include <media/hardware/HardwareAPI.h>
-#include <media/MediaDefs.h>
namespace android {
diff --git a/media/libstagefright/omx/SoftVideoEncoderOMXComponent.cpp b/media/libstagefright/omx/SoftVideoEncoderOMXComponent.cpp
index f33bdc0..fa15ab3 100644
--- a/media/libstagefright/omx/SoftVideoEncoderOMXComponent.cpp
+++ b/media/libstagefright/omx/SoftVideoEncoderOMXComponent.cpp
@@ -26,9 +26,9 @@
#include <media/stagefright/foundation/ALooper.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/foundation/AUtils.h>
+#include <media/stagefright/foundation/MediaDefs.h>
#include <media/hardware/HardwareAPI.h>
#include <media/openmax/OMX_IndexExt.h>
-#include <media/MediaDefs.h>
#include <ui/Fence.h>
#include <ui/GraphicBufferMapper.h>
diff --git a/media/libstagefright/tests/SurfaceMediaSource_test.cpp b/media/libstagefright/tests/SurfaceMediaSource_test.cpp
index 7c464ff..051108f 100644
--- a/media/libstagefright/tests/SurfaceMediaSource_test.cpp
+++ b/media/libstagefright/tests/SurfaceMediaSource_test.cpp
@@ -94,10 +94,10 @@
ASSERT_TRUE(mSurfaceControl != NULL);
ASSERT_TRUE(mSurfaceControl->isValid());
- SurfaceComposerClient::openGlobalTransaction();
- ASSERT_EQ(NO_ERROR, mSurfaceControl->setLayer(0x7FFFFFFF));
- ASSERT_EQ(NO_ERROR, mSurfaceControl->show());
- SurfaceComposerClient::closeGlobalTransaction();
+ SurfaceComposerClient::Transaction{}
+ .setLayer(mSurfaceControl, 0x7FFFFFFF)
+ .show(mSurfaceControl)
+ .apply();
sp<ANativeWindow> window = mSurfaceControl->getSurface();
mEglSurface = eglCreateWindowSurface(mEglDisplay, mGlConfig,
diff --git a/media/ndk/include/media/NdkImage.h b/media/ndk/include/media/NdkImage.h
index 1931496..99cf5d5 100644
--- a/media/ndk/include/media/NdkImage.h
+++ b/media/ndk/include/media/NdkImage.h
@@ -44,11 +44,7 @@
#include <android/hardware_buffer.h>
#endif /* __ANDROID_API__ >= 26 */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if __ANDROID_API__ >= 24
+__BEGIN_DECLS
/**
* AImage is an opaque type that provides access to image generated by {@link AImageReader}.
@@ -519,6 +515,8 @@
int32_t bottom;
} AImageCropRect;
+#if __ANDROID_API__ >= 24
+
/**
* Return the image back the the system and delete the AImage object from memory.
*
@@ -764,9 +762,7 @@
#endif /* __ANDROID_API__ >= 26 */
-#ifdef __cplusplus
-} // extern "C"
-#endif
+__END_DECLS
#endif //_NDK_IMAGE_H
diff --git a/media/ndk/include/media/NdkImageReader.h b/media/ndk/include/media/NdkImageReader.h
index 7a0c17b..a8667c9 100644
--- a/media/ndk/include/media/NdkImageReader.h
+++ b/media/ndk/include/media/NdkImageReader.h
@@ -42,11 +42,7 @@
#include "NdkMediaError.h"
#include "NdkImage.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if __ANDROID_API__ >= 24
+__BEGIN_DECLS
/**
* AImage is an opaque type that allows direct application access to image data rendered into a
@@ -54,6 +50,8 @@
*/
typedef struct AImageReader AImageReader;
+#if __ANDROID_API__ >= 24
+
/**
* Create a new reader for images of the desired size and format.
*
@@ -465,10 +463,7 @@
#endif /* __ANDROID_API__ >= 26 */
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
+__END_DECLS
#endif //_NDK_IMAGE_READER_H
diff --git a/media/ndk/include/media/NdkMediaCodec.h b/media/ndk/include/media/NdkMediaCodec.h
index c2ca55e..b15de38 100644
--- a/media/ndk/include/media/NdkMediaCodec.h
+++ b/media/ndk/include/media/NdkMediaCodec.h
@@ -34,14 +34,11 @@
#include "NdkMediaError.h"
#include "NdkMediaFormat.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
+__BEGIN_DECLS
struct ANativeWindow;
typedef struct ANativeWindow ANativeWindow;
-#if __ANDROID_API__ >= 21
struct AMediaCodec;
typedef struct AMediaCodec AMediaCodec;
@@ -63,6 +60,8 @@
AMEDIACODEC_INFO_TRY_AGAIN_LATER = -1
};
+#if __ANDROID_API__ >= 21
+
/**
* Create codec by name. Use this if you know the exact codec you want to use.
* When configuring, you will need to specify whether to use the codec as an
@@ -370,8 +369,6 @@
#endif /* __ANDROID_API__ >= 21 */
-#ifdef __cplusplus
-} // extern "C"
-#endif
+__END_DECLS
#endif //_NDK_MEDIA_CODEC_H
diff --git a/media/ndk/include/media/NdkMediaCrypto.h b/media/ndk/include/media/NdkMediaCrypto.h
index 9236765..d31dbdc 100644
--- a/media/ndk/include/media/NdkMediaCrypto.h
+++ b/media/ndk/include/media/NdkMediaCrypto.h
@@ -32,17 +32,15 @@
#include <sys/types.h>
#include <stdbool.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if __ANDROID_API__ >= 21
+__BEGIN_DECLS
struct AMediaCrypto;
typedef struct AMediaCrypto AMediaCrypto;
typedef uint8_t AMediaUUID[16];
+#if __ANDROID_API__ >= 21
+
bool AMediaCrypto_isCryptoSchemeSupported(const AMediaUUID uuid);
bool AMediaCrypto_requiresSecureDecoderComponent(const char *mime);
@@ -53,8 +51,6 @@
#endif /* __ANDROID_API__ >= 21 */
-#ifdef __cplusplus
-} // extern "C"
-#endif
+__END_DECLS
#endif // _NDK_MEDIA_CRYPTO_H
diff --git a/media/ndk/include/media/NdkMediaDrm.h b/media/ndk/include/media/NdkMediaDrm.h
index cba4380..9e9f4c3 100644
--- a/media/ndk/include/media/NdkMediaDrm.h
+++ b/media/ndk/include/media/NdkMediaDrm.h
@@ -33,11 +33,7 @@
#include "NdkMediaError.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if __ANDROID_API__ >= 21
+__BEGIN_DECLS
struct AMediaDrm;
typedef struct AMediaDrm AMediaDrm;
@@ -52,7 +48,6 @@
typedef AMediaDrmByteArray AMediaDrmKeySetId;
typedef AMediaDrmByteArray AMediaDrmSecureStop;
-
typedef enum AMediaDrmEventType {
/**
* This event type indicates that the app needs to request a certificate from
@@ -83,6 +78,7 @@
typedef void (*AMediaDrmEventListener)(AMediaDrm *, const AMediaDrmSessionId *sessionId,
AMediaDrmEventType eventType, int extra, const uint8_t *data, size_t dataSize);
+#if __ANDROID_API__ >= 21
/**
* Query if the given scheme identified by its UUID is supported on this device, and
@@ -452,8 +448,6 @@
#endif /* __ANDROID_API__ >= 21 */
-#ifdef __cplusplus
-} // extern "C"
-#endif
+__END_DECLS
#endif //_NDK_MEDIA_DRM_H
diff --git a/media/ndk/include/media/NdkMediaError.h b/media/ndk/include/media/NdkMediaError.h
index 1b51364..da61b64 100644
--- a/media/ndk/include/media/NdkMediaError.h
+++ b/media/ndk/include/media/NdkMediaError.h
@@ -30,11 +30,7 @@
#include <sys/cdefs.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if __ANDROID_API__ >= 21
+__BEGIN_DECLS
typedef enum {
AMEDIA_OK = 0,
@@ -67,10 +63,6 @@
} media_status_t;
-#endif /* __ANDROID_API__ >= 21 */
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
+__END_DECLS
#endif // _NDK_MEDIA_ERROR_H
diff --git a/media/ndk/include/media/NdkMediaExtractor.h b/media/ndk/include/media/NdkMediaExtractor.h
index c3180dc..bf0e46d 100644
--- a/media/ndk/include/media/NdkMediaExtractor.h
+++ b/media/ndk/include/media/NdkMediaExtractor.h
@@ -35,15 +35,12 @@
#include "NdkMediaFormat.h"
#include "NdkMediaCrypto.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if __ANDROID_API__ >= 21
+__BEGIN_DECLS
struct AMediaExtractor;
typedef struct AMediaExtractor AMediaExtractor;
+#if __ANDROID_API__ >= 21
/**
* Create new media extractor
@@ -163,8 +160,6 @@
#endif /* __ANDROID_API__ >= 21 */
-#ifdef __cplusplus
-} // extern "C"
-#endif
+__END_DECLS
#endif // _NDK_MEDIA_EXTRACTOR_H
diff --git a/media/ndk/include/media/NdkMediaFormat.h b/media/ndk/include/media/NdkMediaFormat.h
index a2a21d2..018ab76 100644
--- a/media/ndk/include/media/NdkMediaFormat.h
+++ b/media/ndk/include/media/NdkMediaFormat.h
@@ -32,15 +32,13 @@
#include "NdkMediaError.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if __ANDROID_API__ >= 21
+__BEGIN_DECLS
struct AMediaFormat;
typedef struct AMediaFormat AMediaFormat;
+#if __ANDROID_API__ >= 21
+
AMediaFormat *AMediaFormat_new();
media_status_t AMediaFormat_delete(AMediaFormat*);
@@ -109,8 +107,6 @@
#endif /* __ANDROID_API__ >= 21 */
-#ifdef __cplusplus
-} // extern "C"
-#endif
+__END_DECLS
#endif // _NDK_MEDIA_FORMAT_H
diff --git a/media/ndk/include/media/NdkMediaMuxer.h b/media/ndk/include/media/NdkMediaMuxer.h
index 25987a2..1ecd1ca 100644
--- a/media/ndk/include/media/NdkMediaMuxer.h
+++ b/media/ndk/include/media/NdkMediaMuxer.h
@@ -35,11 +35,7 @@
#include "NdkMediaError.h"
#include "NdkMediaFormat.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if __ANDROID_API__ >= 21
+__BEGIN_DECLS
struct AMediaMuxer;
typedef struct AMediaMuxer AMediaMuxer;
@@ -49,6 +45,8 @@
AMEDIAMUXER_OUTPUT_FORMAT_WEBM = 1,
} OutputFormat;
+#if __ANDROID_API__ >= 21
+
/**
* Create new media muxer
*/
@@ -117,8 +115,6 @@
#endif /* __ANDROID_API__ >= 21 */
-#ifdef __cplusplus
-} // extern "C"
-#endif
+__END_DECLS
#endif // _NDK_MEDIA_MUXER_H
diff --git a/services/oboeservice/SharedMemoryProxy.cpp b/services/oboeservice/SharedMemoryProxy.cpp
index c31557e..fb991bb 100644
--- a/services/oboeservice/SharedMemoryProxy.cpp
+++ b/services/oboeservice/SharedMemoryProxy.cpp
@@ -18,6 +18,9 @@
//#define LOG_NDEBUG 0
#include <log/log.h>
+#include <errno.h>
+#include <string.h>
+
#include <aaudio/AAudio.h>
#include "SharedMemoryProxy.h"