Merge "Use vintf_fragments for media.c2/software" into qt-dev
diff --git a/apex/TEST_MAPPING b/apex/TEST_MAPPING
new file mode 100644
index 0000000..a2e98cc
--- /dev/null
+++ b/apex/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+ "imports": [
+ {
+ "path": "system/apex/tests"
+ }
+ ]
+}
diff --git a/apex/testing/test_manifest.json b/apex/testing/test_manifest.json
index 9f81f9f..ddd642e 100644
--- a/apex/testing/test_manifest.json
+++ b/apex/testing/test_manifest.json
@@ -1,4 +1,4 @@
{
"name": "com.android.media",
- "version": 2
+ "version": 300000000
}
diff --git a/apex/testing/test_manifest_codec.json b/apex/testing/test_manifest_codec.json
index c956454..2320fd7 100644
--- a/apex/testing/test_manifest_codec.json
+++ b/apex/testing/test_manifest_codec.json
@@ -1,4 +1,4 @@
{
"name": "com.android.media.swcodec",
- "version": 2
+ "version": 300000000
}
diff --git a/camera/ndk/impl/ACameraMetadata.cpp b/camera/ndk/impl/ACameraMetadata.cpp
index d832deb..77dcd48 100644
--- a/camera/ndk/impl/ACameraMetadata.cpp
+++ b/camera/ndk/impl/ACameraMetadata.cpp
@@ -47,24 +47,14 @@
bool
ACameraMetadata::isNdkSupportedCapability(int32_t capability) {
switch (capability) {
- case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE:
- case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR:
- case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING:
- case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_RAW:
- case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS:
- case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE:
- case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT:
- case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA:
- return true;
case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING:
case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING:
case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO:
return false;
default:
- // Newly defined capabilities will be unsupported by default (blacklist)
- // TODO: Should we do whitelist or blacklist here?
- ALOGE("%s: Unknonwn capability %d", __FUNCTION__, capability);
- return false;
+ // Assuming every capability passed to this function is actually a
+ // valid capability.
+ return true;
}
}
diff --git a/camera/ndk/impl/ACameraMetadata.h b/camera/ndk/impl/ACameraMetadata.h
index 3d895cb..97f7f48 100644
--- a/camera/ndk/impl/ACameraMetadata.h
+++ b/camera/ndk/impl/ACameraMetadata.h
@@ -70,6 +70,8 @@
private:
+ // This function does not check whether the capability passed to it is valid.
+ // The caller must make sure that it is.
bool isNdkSupportedCapability(const int32_t capability);
static inline bool isVendorTag(const uint32_t tag);
static bool isCaptureRequestTag(const uint32_t tag);
diff --git a/media/codec2/components/base/SimpleC2Component.cpp b/media/codec2/components/base/SimpleC2Component.cpp
index 44f1fe0..fb3fbd0 100644
--- a/media/codec2/components/base/SimpleC2Component.cpp
+++ b/media/codec2/components/base/SimpleC2Component.cpp
@@ -272,12 +272,9 @@
flushedWork->push_back(std::move(work));
}
}
- }
- {
- Mutexed<PendingWork>::Locked pending(mPendingWork);
- while (!pending->empty()) {
- flushedWork->push_back(std::move(pending->begin()->second));
- pending->erase(pending->begin());
+ while (!queue->pending().empty()) {
+ flushedWork->push_back(std::move(queue->pending().begin()->second));
+ queue->pending().erase(queue->pending().begin());
}
}
@@ -342,10 +339,7 @@
{
Mutexed<WorkQueue>::Locked queue(mWorkQueue);
queue->clear();
- }
- {
- Mutexed<PendingWork>::Locked pending(mPendingWork);
- pending->clear();
+ queue->pending().clear();
}
sp<AMessage> reply;
(new AMessage(WorkHandler::kWhatStop, mHandler))->postAndAwaitResponse(&reply);
@@ -366,10 +360,7 @@
{
Mutexed<WorkQueue>::Locked queue(mWorkQueue);
queue->clear();
- }
- {
- Mutexed<PendingWork>::Locked pending(mPendingWork);
- pending->clear();
+ queue->pending().clear();
}
sp<AMessage> reply;
(new AMessage(WorkHandler::kWhatReset, mHandler))->postAndAwaitResponse(&reply);
@@ -401,13 +392,13 @@
uint64_t frameIndex, std::function<void(const std::unique_ptr<C2Work> &)> fillWork) {
std::unique_ptr<C2Work> work;
{
- Mutexed<PendingWork>::Locked pending(mPendingWork);
- if (pending->count(frameIndex) == 0) {
+ Mutexed<WorkQueue>::Locked queue(mWorkQueue);
+ if (queue->pending().count(frameIndex) == 0) {
ALOGW("unknown frame index: %" PRIu64, frameIndex);
return;
}
- work = std::move(pending->at(frameIndex));
- pending->erase(frameIndex);
+ work = std::move(queue->pending().at(frameIndex));
+ queue->pending().erase(frameIndex);
}
if (work) {
fillWork(work);
@@ -426,13 +417,13 @@
work->input.flags = currentWork->input.flags;
work->input.ordinal = currentWork->input.ordinal;
} else {
- Mutexed<PendingWork>::Locked pending(mPendingWork);
- if (pending->count(frameIndex) == 0) {
+ Mutexed<WorkQueue>::Locked queue(mWorkQueue);
+ if (queue->pending().count(frameIndex) == 0) {
ALOGW("unknown frame index: %" PRIu64, frameIndex);
return;
}
- work->input.flags = pending->at(frameIndex)->input.flags;
- work->input.ordinal = pending->at(frameIndex)->input.ordinal;
+ work->input.flags = queue->pending().at(frameIndex)->input.flags;
+ work->input.ordinal = queue->pending().at(frameIndex)->input.ordinal;
}
work->worklets.emplace_back(new C2Worklet);
if (work) {
@@ -552,24 +543,21 @@
}
process(work, mOutputBlockPool);
ALOGV("processed frame #%" PRIu64, work->input.ordinal.frameIndex.peeku());
- {
- Mutexed<WorkQueue>::Locked queue(mWorkQueue);
- if (queue->generation() != generation) {
- ALOGD("work form old generation: was %" PRIu64 " now %" PRIu64,
- queue->generation(), generation);
- work->result = C2_NOT_FOUND;
- queue.unlock();
- {
- Mutexed<ExecState>::Locked state(mExecState);
- std::shared_ptr<C2Component::Listener> listener = state->mListener;
- state.unlock();
- listener->onWorkDone_nb(shared_from_this(), vec(work));
- }
- queue.lock();
- return hasQueuedWork;
- }
+ Mutexed<WorkQueue>::Locked queue(mWorkQueue);
+ if (queue->generation() != generation) {
+ ALOGD("work form old generation: was %" PRIu64 " now %" PRIu64,
+ queue->generation(), generation);
+ work->result = C2_NOT_FOUND;
+ queue.unlock();
+
+ Mutexed<ExecState>::Locked state(mExecState);
+ std::shared_ptr<C2Component::Listener> listener = state->mListener;
+ state.unlock();
+ listener->onWorkDone_nb(shared_from_this(), vec(work));
+ return hasQueuedWork;
}
if (work->workletsProcessed != 0u) {
+ queue.unlock();
Mutexed<ExecState>::Locked state(mExecState);
ALOGV("returning this work");
std::shared_ptr<C2Component::Listener> listener = state->mListener;
@@ -579,15 +567,15 @@
ALOGV("queue pending work");
work->input.buffers.clear();
std::unique_ptr<C2Work> unexpected;
- {
- Mutexed<PendingWork>::Locked pending(mPendingWork);
- uint64_t frameIndex = work->input.ordinal.frameIndex.peeku();
- if (pending->count(frameIndex) != 0) {
- unexpected = std::move(pending->at(frameIndex));
- pending->erase(frameIndex);
- }
- (void)pending->insert({ frameIndex, std::move(work) });
+
+ uint64_t frameIndex = work->input.ordinal.frameIndex.peeku();
+ if (queue->pending().count(frameIndex) != 0) {
+ unexpected = std::move(queue->pending().at(frameIndex));
+ queue->pending().erase(frameIndex);
}
+ (void)queue->pending().insert({ frameIndex, std::move(work) });
+
+ queue.unlock();
if (unexpected) {
ALOGD("unexpected pending work");
unexpected->result = C2_CORRUPTED;
diff --git a/media/codec2/components/base/include/SimpleC2Component.h b/media/codec2/components/base/include/SimpleC2Component.h
index 43029a9..22d5714 100644
--- a/media/codec2/components/base/include/SimpleC2Component.h
+++ b/media/codec2/components/base/include/SimpleC2Component.h
@@ -202,6 +202,8 @@
class WorkQueue {
public:
+ typedef std::unordered_map<uint64_t, std::unique_ptr<C2Work>> PendingWork;
+
inline WorkQueue() : mFlush(false), mGeneration(0ul) {}
inline uint64_t generation() const { return mGeneration; }
@@ -218,6 +220,7 @@
return flush;
}
void clear();
+ PendingWork &pending() { return mPendingWork; }
private:
struct Entry {
@@ -228,12 +231,10 @@
bool mFlush;
uint64_t mGeneration;
std::list<Entry> mQueue;
+ PendingWork mPendingWork;
};
Mutexed<WorkQueue> mWorkQueue;
- typedef std::unordered_map<uint64_t, std::unique_ptr<C2Work>> PendingWork;
- Mutexed<PendingWork> mPendingWork;
-
class BlockingBlockPool;
std::shared_ptr<BlockingBlockPool> mOutputBlockPool;
diff --git a/media/libaudioclient/AudioProductStrategy.cpp b/media/libaudioclient/AudioProductStrategy.cpp
index 1da1114..0e1dfac 100644
--- a/media/libaudioclient/AudioProductStrategy.cpp
+++ b/media/libaudioclient/AudioProductStrategy.cpp
@@ -86,7 +86,7 @@
(clientAttritubes.content_type == refAttributes.content_type)) &&
((refAttributes.flags == AUDIO_FLAG_NONE) ||
(clientAttritubes.flags != AUDIO_FLAG_NONE &&
- (clientAttritubes.flags & refAttributes.flags) == clientAttritubes.flags)) &&
+ (clientAttritubes.flags & refAttributes.flags) == refAttributes.flags)) &&
((strlen(refAttributes.tags) == 0) ||
(std::strcmp(clientAttritubes.tags, refAttributes.tags) == 0));
}
diff --git a/media/libmediaplayer2/nuplayer2/NuPlayer2Renderer.cpp b/media/libmediaplayer2/nuplayer2/NuPlayer2Renderer.cpp
index a8c9932..fd459df 100644
--- a/media/libmediaplayer2/nuplayer2/NuPlayer2Renderer.cpp
+++ b/media/libmediaplayer2/nuplayer2/NuPlayer2Renderer.cpp
@@ -76,6 +76,10 @@
static const int64_t kMinimumAudioClockUpdatePeriodUs = 20 /* msec */ * 1000;
+// Default video frame display duration when only video exists.
+// Used to set max media time in MediaClock.
+static const int64_t kDefaultVideoFrameIntervalUs = 100000LL;
+
// static
const NuPlayer2::Renderer::PcmInfo NuPlayer2::Renderer::AUDIO_PCMINFO_INITIALIZER = {
AUDIO_CHANNEL_NONE,
@@ -305,11 +309,11 @@
mNotifyCompleteVideo |= notifyComplete;
++mVideoQueueGeneration;
++mVideoDrainGeneration;
+ mNextVideoTimeMediaUs = -1;
}
mMediaClock->clearAnchor();
mVideoLateByUs = 0;
- mNextVideoTimeMediaUs = -1;
mSyncQueues = false;
}
@@ -1288,7 +1292,7 @@
mNextVideoTimeMediaUs = mediaTimeUs;
if (!mHasAudio) {
// smooth out videos >= 10fps
- mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
+ mMediaClock->updateMaxTimeMedia(mediaTimeUs + kDefaultVideoFrameIntervalUs);
}
if (!mVideoSampleReceived || mediaTimeUs < mAudioFirstAnchorTimeMediaUs) {
@@ -1355,7 +1359,7 @@
&& mediaTimeUs > mLastAudioMediaTimeUs) {
// If audio ends before video, video continues to drive media clock.
// Also smooth out videos >= 10fps.
- mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
+ mMediaClock->updateMaxTimeMedia(mediaTimeUs + kDefaultVideoFrameIntervalUs);
}
}
} else {
@@ -1430,7 +1434,8 @@
}
} else {
mMediaClock->updateAnchor(
- mNextVideoTimeMediaUs, nowUs, mNextVideoTimeMediaUs + 100000);
+ mNextVideoTimeMediaUs, nowUs,
+ mNextVideoTimeMediaUs + kDefaultVideoFrameIntervalUs);
}
}
}
@@ -1583,6 +1588,14 @@
notifyComplete = mNotifyCompleteAudio;
mNotifyCompleteAudio = false;
mLastAudioMediaTimeUs = -1;
+
+ mHasAudio = false;
+ if (mNextVideoTimeMediaUs >= 0) {
+ int64_t nowUs = ALooper::GetNowUs();
+ mMediaClock->updateAnchor(
+ mNextVideoTimeMediaUs, nowUs,
+ mNextVideoTimeMediaUs + kDefaultVideoFrameIntervalUs);
+ }
} else {
notifyComplete = mNotifyCompleteVideo;
mNotifyCompleteVideo = false;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index 65d6d61..39be40d 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -77,6 +77,10 @@
static const int64_t kMinimumAudioClockUpdatePeriodUs = 20 /* msec */ * 1000;
+// Default video frame display duration when only video exists.
+// Used to set max media time in MediaClock.
+static const int64_t kDefaultVideoFrameIntervalUs = 100000LL;
+
// static
const NuPlayer::Renderer::PcmInfo NuPlayer::Renderer::AUDIO_PCMINFO_INITIALIZER = {
AUDIO_CHANNEL_NONE,
@@ -314,11 +318,11 @@
mNotifyCompleteVideo |= notifyComplete;
++mVideoQueueGeneration;
++mVideoDrainGeneration;
+ mNextVideoTimeMediaUs = -1;
}
mMediaClock->clearAnchor();
mVideoLateByUs = 0;
- mNextVideoTimeMediaUs = -1;
mSyncQueues = false;
}
@@ -1302,7 +1306,7 @@
mNextVideoTimeMediaUs = mediaTimeUs;
if (!mHasAudio) {
// smooth out videos >= 10fps
- mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
+ mMediaClock->updateMaxTimeMedia(mediaTimeUs + kDefaultVideoFrameIntervalUs);
}
if (!mVideoSampleReceived || mediaTimeUs < mAudioFirstAnchorTimeMediaUs) {
@@ -1369,7 +1373,7 @@
&& mediaTimeUs > mLastAudioMediaTimeUs) {
// If audio ends before video, video continues to drive media clock.
// Also smooth out videos >= 10fps.
- mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
+ mMediaClock->updateMaxTimeMedia(mediaTimeUs + kDefaultVideoFrameIntervalUs);
}
}
} else {
@@ -1444,7 +1448,8 @@
}
} else {
mMediaClock->updateAnchor(
- mNextVideoTimeMediaUs, nowUs, mNextVideoTimeMediaUs + 100000);
+ mNextVideoTimeMediaUs, nowUs,
+ mNextVideoTimeMediaUs + kDefaultVideoFrameIntervalUs);
}
}
}
@@ -1597,6 +1602,14 @@
notifyComplete = mNotifyCompleteAudio;
mNotifyCompleteAudio = false;
mLastAudioMediaTimeUs = -1;
+
+ mHasAudio = false;
+ if (mNextVideoTimeMediaUs >= 0) {
+ int64_t nowUs = ALooper::GetNowUs();
+ mMediaClock->updateAnchor(
+ mNextVideoTimeMediaUs, nowUs,
+ mNextVideoTimeMediaUs + kDefaultVideoFrameIntervalUs);
+ }
} else {
notifyComplete = mNotifyCompleteVideo;
mNotifyCompleteVideo = false;
diff --git a/media/libstagefright/codecs/aacdec/Android.bp b/media/libstagefright/codecs/aacdec/Android.bp
index e0bb5cd..46b3b8f 100644
--- a/media/libstagefright/codecs/aacdec/Android.bp
+++ b/media/libstagefright/codecs/aacdec/Android.bp
@@ -1,22 +1,12 @@
cc_library_shared {
name: "libstagefright_soft_aacdec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: [
"SoftAAC2.cpp",
"DrcPresModeWrap.cpp",
],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -29,10 +19,7 @@
static_libs: ["libFraunhoferAAC"],
- defaults: ["omx_soft_libs"],
-
shared_libs: [
"libcutils",
],
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/aacenc/Android.bp b/media/libstagefright/codecs/aacenc/Android.bp
index 0d677fe..bf789c4 100644
--- a/media/libstagefright/codecs/aacenc/Android.bp
+++ b/media/libstagefright/codecs/aacenc/Android.bp
@@ -1,19 +1,9 @@
cc_library_shared {
name: "libstagefright_soft_aacenc",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftAACEncoder2.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -25,8 +15,4 @@
},
static_libs: ["libFraunhoferAAC"],
-
- defaults: ["omx_soft_libs"],
-
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/amrnb/dec/Android.bp b/media/libstagefright/codecs/amrnb/dec/Android.bp
index f3b272b..e18117e 100644
--- a/media/libstagefright/codecs/amrnb/dec/Android.bp
+++ b/media/libstagefright/codecs/amrnb/dec/Android.bp
@@ -40,7 +40,6 @@
"src/wmf_to_ets.cpp",
],
- include_dirs: ["frameworks/av/media/libstagefright/include"],
export_include_dirs: ["src"],
cflags: [
@@ -68,23 +67,14 @@
cc_library_shared {
name: "libstagefright_soft_amrdec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftAMR.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/av/media/libstagefright/codecs/amrwb/src",
- "frameworks/native/include/media/openmax",
- ],
local_include_dirs: ["src"],
cflags: [
"-DOSCL_IMPORT_REF=",
- "-Werror",
],
version_script: "exports.lds",
@@ -101,13 +91,11 @@
"libstagefright_amrwbdec",
],
- defaults: ["omx_soft_libs"],
-
shared_libs: [
"libstagefright_amrnb_common",
],
- compile_multilib: "32",
}
+
//###############################################################################
cc_test {
name: "libstagefright_amrnbdec_test",
diff --git a/media/libstagefright/codecs/amrnb/enc/Android.bp b/media/libstagefright/codecs/amrnb/enc/Android.bp
index 1c8b511..438ed04 100644
--- a/media/libstagefright/codecs/amrnb/enc/Android.bp
+++ b/media/libstagefright/codecs/amrnb/enc/Android.bp
@@ -62,7 +62,7 @@
"src/ton_stab.cpp",
],
- include_dirs: ["frameworks/av/media/libstagefright/include"],
+ header_libs: ["libstagefright_headers"],
export_include_dirs: ["src"],
cflags: [
@@ -86,21 +86,12 @@
cc_library_shared {
name: "libstagefright_soft_amrnbenc",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftAMRNBEncoder.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
local_include_dirs: ["src"],
- cflags: ["-Werror"],
-
//addressing b/25409744
//sanitize: {
// misc_undefined: [
@@ -110,12 +101,9 @@
static_libs: ["libstagefright_amrnbenc"],
- defaults: ["omx_soft_libs"],
-
shared_libs: [
"libstagefright_amrnb_common",
],
- compile_multilib: "32",
}
//###############################################################################
diff --git a/media/libstagefright/codecs/amrwb/Android.bp b/media/libstagefright/codecs/amrwb/Android.bp
index 9fefd81..88cf7f2 100644
--- a/media/libstagefright/codecs/amrwb/Android.bp
+++ b/media/libstagefright/codecs/amrwb/Android.bp
@@ -44,7 +44,7 @@
"src/weight_amrwb_lpc.cpp",
],
- include_dirs: ["frameworks/av/media/libstagefright/include"],
+ header_libs: ["libstagefright_headers"],
export_include_dirs: [
"src",
diff --git a/media/libstagefright/codecs/amrwbenc/Android.bp b/media/libstagefright/codecs/amrwbenc/Android.bp
index 262962f..3beed66 100644
--- a/media/libstagefright/codecs/amrwbenc/Android.bp
+++ b/media/libstagefright/codecs/amrwbenc/Android.bp
@@ -142,20 +142,10 @@
cc_library_shared {
name: "libstagefright_soft_amrwbenc",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftAMRWBEncoder.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -167,11 +157,8 @@
static_libs: ["libstagefright_amrwbenc"],
- defaults: ["omx_soft_libs"],
-
shared_libs: [
"libstagefright_enc_common",
],
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/avcdec/Android.bp b/media/libstagefright/codecs/avcdec/Android.bp
index 567bcca..0bb6bb0 100644
--- a/media/libstagefright/codecs/avcdec/Android.bp
+++ b/media/libstagefright/codecs/avcdec/Android.bp
@@ -1,29 +1,16 @@
cc_library_shared {
name: "libstagefright_soft_avcdec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
static_libs: ["libavcdec"],
srcs: ["SoftAVCDec.cpp"],
cflags: [
"-Wall",
- "-Werror",
],
version_script: "exports.lds",
- include_dirs: [
- "external/libavc/decoder",
- "external/libavc/common",
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
- defaults: ["omx_soft_libs"],
-
sanitize: {
misc_undefined: [
"signed-integer-overflow",
@@ -32,5 +19,4 @@
},
ldflags: ["-Wl,-Bsymbolic"],
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/avcenc/Android.bp b/media/libstagefright/codecs/avcenc/Android.bp
index 0cd39e1..980261c 100644
--- a/media/libstagefright/codecs/avcenc/Android.bp
+++ b/media/libstagefright/codecs/avcenc/Android.bp
@@ -1,23 +1,10 @@
cc_library_shared {
name: "libstagefright_soft_avcenc",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
static_libs: ["libavcenc"],
srcs: ["SoftAVCEnc.cpp"],
- include_dirs: [
- "external/libavc/encoder",
- "external/libavc/common",
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/hardware",
- "frameworks/native/include/media/openmax",
- ],
-
- defaults: ["omx_soft_libs"],
-
sanitize: {
misc_undefined: [
"signed-integer-overflow",
@@ -27,12 +14,9 @@
cflags: [
"-Wall",
- "-Werror",
"-Wno-unused-variable",
],
ldflags: ["-Wl,-Bsymbolic"],
version_script: "exports.lds",
-
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/avcenc/SoftAVCEnc.cpp b/media/libstagefright/codecs/avcenc/SoftAVCEnc.cpp
index e0f2683..9db6465 100644
--- a/media/libstagefright/codecs/avcenc/SoftAVCEnc.cpp
+++ b/media/libstagefright/codecs/avcenc/SoftAVCEnc.cpp
@@ -21,8 +21,8 @@
#include "OMX_Video.h"
-#include <HardwareAPI.h>
-#include <MetadataBufferType.h>
+#include <media/hardware/HardwareAPI.h>
+#include <media/hardware/MetadataBufferType.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
diff --git a/media/libstagefright/codecs/flac/dec/Android.bp b/media/libstagefright/codecs/flac/dec/Android.bp
index 18a3f6b..4064751 100644
--- a/media/libstagefright/codecs/flac/dec/Android.bp
+++ b/media/libstagefright/codecs/flac/dec/Android.bp
@@ -1,23 +1,11 @@
cc_library_shared {
name: "libstagefright_soft_flacdec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: [
"SoftFlacDecoder.cpp",
],
- include_dirs: [
- "external/flac/include",
- "frameworks/av/media/libstagefright/flac/dec",
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -28,10 +16,7 @@
cfi: true,
},
- defaults: ["omx_soft_libs"],
-
shared_libs: [
"libstagefright_flacdec",
],
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/flac/enc/Android.bp b/media/libstagefright/codecs/flac/enc/Android.bp
index 4149ccd..d7d871a 100644
--- a/media/libstagefright/codecs/flac/enc/Android.bp
+++ b/media/libstagefright/codecs/flac/enc/Android.bp
@@ -1,15 +1,9 @@
cc_library_shared {
+ name: "libstagefright_soft_flacenc",
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftFlacEncoder.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- "external/flac/include",
- ],
-
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -19,19 +13,10 @@
],
cfi: true,
},
- defaults: ["omx_soft_libs"],
header_libs: ["libbase_headers"],
static_libs: [
"libaudioutils",
"libFLAC",
],
-
- name: "libstagefright_soft_flacenc",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
-
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/g711/dec/Android.bp b/media/libstagefright/codecs/g711/dec/Android.bp
index c273179..f5357f4 100644
--- a/media/libstagefright/codecs/g711/dec/Android.bp
+++ b/media/libstagefright/codecs/g711/dec/Android.bp
@@ -1,21 +1,9 @@
cc_library_shared {
name: "libstagefright_soft_g711dec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftG711.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
- defaults: ["omx_soft_libs"],
-
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -25,5 +13,4 @@
],
cfi: true,
},
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/gsm/dec/Android.bp b/media/libstagefright/codecs/gsm/dec/Android.bp
index 3c5ebfe..5672d89 100644
--- a/media/libstagefright/codecs/gsm/dec/Android.bp
+++ b/media/libstagefright/codecs/gsm/dec/Android.bp
@@ -1,20 +1,9 @@
cc_library_shared {
name: "libstagefright_soft_gsmdec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftGSM.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- "external/libgsm/inc",
- ],
-
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -25,8 +14,5 @@
cfi: true,
},
- defaults: ["omx_soft_libs"],
-
static_libs: ["libgsm"],
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/hevcdec/Android.bp b/media/libstagefright/codecs/hevcdec/Android.bp
index cc91d53..ec436ce 100644
--- a/media/libstagefright/codecs/hevcdec/Android.bp
+++ b/media/libstagefright/codecs/hevcdec/Android.bp
@@ -1,28 +1,17 @@
cc_library_shared {
name: "libstagefright_soft_hevcdec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
static_libs: ["libhevcdec"],
srcs: ["SoftHEVC.cpp"],
cflags: [
"-Wall",
- "-Werror",
"-Wno-unused-variable",
],
version_script: "exports.lds",
- include_dirs: [
- "external/libhevc/decoder",
- "external/libhevc/common",
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
sanitize: {
misc_undefined: [
"signed-integer-overflow",
@@ -30,11 +19,8 @@
cfi: true,
},
- defaults: ["omx_soft_libs"],
-
// We need this because the current asm generates the following link error:
// requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC
// Bug: 16853291
ldflags: ["-Wl,-Bsymbolic"],
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/m4v_h263/dec/Android.bp b/media/libstagefright/codecs/m4v_h263/dec/Android.bp
index 0523143..6b45ea2 100644
--- a/media/libstagefright/codecs/m4v_h263/dec/Android.bp
+++ b/media/libstagefright/codecs/m4v_h263/dec/Android.bp
@@ -38,9 +38,9 @@
"src/zigzag_tab.cpp",
],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
+ header_libs: [
+ "media_plugin_headers",
+ "libstagefright_headers"
],
local_include_dirs: ["src"],
@@ -67,37 +67,23 @@
cc_library_shared {
name: "libstagefright_soft_mpeg4dec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftMPEG4.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
local_include_dirs: ["src"],
- export_include_dirs: ["include"],
cflags: [
"-DOSCL_EXPORT_REF=",
"-DOSCL_IMPORT_REF=",
-
- "-Werror",
],
static_libs: ["libstagefright_m4vh263dec"],
- defaults: ["omx_soft_libs"],
-
sanitize: {
misc_undefined: [
"signed-integer-overflow",
],
cfi: true,
},
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/m4v_h263/enc/Android.bp b/media/libstagefright/codecs/m4v_h263/enc/Android.bp
index d38f4b1..2738187 100644
--- a/media/libstagefright/codecs/m4v_h263/enc/Android.bp
+++ b/media/libstagefright/codecs/m4v_h263/enc/Android.bp
@@ -32,10 +32,6 @@
version_script: "exports.lds",
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
local_include_dirs: ["src"],
export_include_dirs: ["include"],
@@ -51,41 +47,27 @@
cc_library_shared {
name: "libstagefright_soft_mpeg4enc",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftMPEG4Encoder.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- "frameworks/native/include/media/hardware",
- ],
local_include_dirs: ["src"],
- export_include_dirs: ["include"],
cflags: [
"-DBX_RC",
"-DOSCL_IMPORT_REF=",
"-DOSCL_UNUSED_ARG(x)=(void)(x)",
"-DOSCL_EXPORT_REF=",
-
- "-Werror",
],
static_libs: ["libstagefright_m4vh263enc"],
- defaults: ["omx_soft_libs"],
-
sanitize: {
misc_undefined: [
"signed-integer-overflow",
],
cfi: true,
},
- compile_multilib: "32",
}
//###############################################################################
diff --git a/media/libstagefright/codecs/m4v_h263/enc/SoftMPEG4Encoder.cpp b/media/libstagefright/codecs/m4v_h263/enc/SoftMPEG4Encoder.cpp
index f6a7b0e..fa7db81 100644
--- a/media/libstagefright/codecs/m4v_h263/enc/SoftMPEG4Encoder.cpp
+++ b/media/libstagefright/codecs/m4v_h263/enc/SoftMPEG4Encoder.cpp
@@ -22,8 +22,8 @@
#include "mp4enc_api.h"
#include "OMX_Video.h"
-#include <HardwareAPI.h>
-#include <MetadataBufferType.h>
+#include <media/hardware/HardwareAPI.h>
+#include <media/hardware/MetadataBufferType.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AUtils.h>
#include <media/stagefright/MediaDefs.h>
diff --git a/media/libstagefright/codecs/mp3dec/Android.bp b/media/libstagefright/codecs/mp3dec/Android.bp
index 9173ed6..b630524 100644
--- a/media/libstagefright/codecs/mp3dec/Android.bp
+++ b/media/libstagefright/codecs/mp3dec/Android.bp
@@ -78,24 +78,15 @@
cc_library_shared {
name: "libstagefright_soft_mp3dec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftMP3.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
local_include_dirs: [
"src",
"include",
],
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -105,10 +96,7 @@
cfi: true,
},
- defaults: ["omx_soft_libs"],
-
static_libs: ["libstagefright_mp3dec"],
- compile_multilib: "32",
}
//###############################################################################
diff --git a/media/libstagefright/codecs/mpeg2dec/Android.bp b/media/libstagefright/codecs/mpeg2dec/Android.bp
index 26e786e..e849410 100644
--- a/media/libstagefright/codecs/mpeg2dec/Android.bp
+++ b/media/libstagefright/codecs/mpeg2dec/Android.bp
@@ -1,27 +1,17 @@
cc_library_shared {
name: "libstagefright_soft_mpeg2dec",
- vendor_available: true,
+ defaults: ["libstagefright_softomx-defaults"],
static_libs: ["libmpeg2dec"],
srcs: ["SoftMPEG2.cpp"],
cflags: [
"-Wall",
- "-Werror",
"-Wno-unused-variable",
],
version_script: "exports.lds",
- include_dirs: [
- "external/libmpeg2/decoder",
- "external/libmpeg2/common",
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
- defaults: ["omx_soft_libs"],
-
ldflags: ["-Wl,-Bsymbolic"],
sanitize: {
@@ -30,5 +20,4 @@
],
cfi: true,
},
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/on2/dec/Android.bp b/media/libstagefright/codecs/on2/dec/Android.bp
index abd21d7..577231c 100644
--- a/media/libstagefright/codecs/on2/dec/Android.bp
+++ b/media/libstagefright/codecs/on2/dec/Android.bp
@@ -1,23 +1,11 @@
cc_library_shared {
name: "libstagefright_soft_vpxdec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftVPX.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
static_libs: ["libvpx"],
- defaults: ["omx_soft_libs"],
-
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -27,5 +15,4 @@
],
cfi: true,
},
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/on2/enc/Android.bp b/media/libstagefright/codecs/on2/enc/Android.bp
index ea46bad..82c215e 100644
--- a/media/libstagefright/codecs/on2/enc/Android.bp
+++ b/media/libstagefright/codecs/on2/enc/Android.bp
@@ -1,9 +1,6 @@
cc_library_shared {
name: "libstagefright_soft_vpxenc",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: [
"SoftVPXEncoder.cpp",
@@ -11,15 +8,10 @@
"SoftVP9Encoder.cpp",
],
- cflags: ["-Wall", "-Werror"],
+ cflags: ["-Wall"],
version_script: "exports.lds",
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
sanitize: {
misc_undefined: [
"signed-integer-overflow",
@@ -29,8 +21,4 @@
},
static_libs: ["libvpx"],
-
- defaults: ["omx_soft_libs"],
-
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/opus/dec/Android.bp b/media/libstagefright/codecs/opus/dec/Android.bp
index bfcae07..71a2a0d 100644
--- a/media/libstagefright/codecs/opus/dec/Android.bp
+++ b/media/libstagefright/codecs/opus/dec/Android.bp
@@ -1,25 +1,13 @@
cc_library_shared {
name: "libstagefright_soft_opusdec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftOpus.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
- defaults: ["omx_soft_libs"],
-
shared_libs: [
"libopus",
],
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -29,5 +17,4 @@
],
cfi: true,
},
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/raw/Android.bp b/media/libstagefright/codecs/raw/Android.bp
index 1c23bad..fcc7a0a 100644
--- a/media/libstagefright/codecs/raw/Android.bp
+++ b/media/libstagefright/codecs/raw/Android.bp
@@ -1,19 +1,9 @@
cc_library_shared {
name: "libstagefright_soft_rawdec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftRaw.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -23,8 +13,4 @@
],
cfi: true,
},
-
- defaults: ["omx_soft_libs"],
-
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/vorbis/dec/Android.bp b/media/libstagefright/codecs/vorbis/dec/Android.bp
index 2d1a922..3efb952 100644
--- a/media/libstagefright/codecs/vorbis/dec/Android.bp
+++ b/media/libstagefright/codecs/vorbis/dec/Android.bp
@@ -1,25 +1,13 @@
cc_library_shared {
name: "libstagefright_soft_vorbisdec",
- vendor_available: true,
- vndk: {
- enabled: true,
- },
+ defaults: ["libstagefright_softomx-defaults"],
srcs: ["SoftVorbis.cpp"],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
- defaults: ["omx_soft_libs"],
-
shared_libs: [
"libvorbisidec",
],
- cflags: ["-Werror"],
-
version_script: "exports.lds",
sanitize: {
@@ -28,5 +16,4 @@
"unsigned-integer-overflow",
],
},
- compile_multilib: "32",
}
diff --git a/media/libstagefright/codecs/xaacdec/Android.bp b/media/libstagefright/codecs/xaacdec/Android.bp
index e49eb8f..5385dbc 100644
--- a/media/libstagefright/codecs/xaacdec/Android.bp
+++ b/media/libstagefright/codecs/xaacdec/Android.bp
@@ -1,18 +1,12 @@
cc_library_shared {
name: "libstagefright_soft_xaacdec",
- vendor_available: true,
+ defaults: ["libstagefright_softomx-defaults"],
srcs: [
"SoftXAAC.cpp",
],
- include_dirs: [
- "frameworks/av/media/libstagefright/include",
- "frameworks/native/include/media/openmax",
- ],
-
cflags: [
- "-Werror",
"-DENABLE_MPEG_D_DRC"
],
@@ -24,11 +18,7 @@
static_libs: ["libxaacdec"],
- defaults: ["omx_soft_libs"],
-
shared_libs: [
"libcutils",
],
-
- compile_multilib: "32",
}
diff --git a/media/libstagefright/flac/dec/Android.bp b/media/libstagefright/flac/dec/Android.bp
index 307c9b0..b270808 100644
--- a/media/libstagefright/flac/dec/Android.bp
+++ b/media/libstagefright/flac/dec/Android.bp
@@ -11,11 +11,6 @@
export_include_dirs: [ "." ],
- include_dirs: [
- "external/flac/include",
- "frameworks/av/media/libstagefright/include",
- ],
-
cflags: ["-Werror"],
sanitize: {
@@ -38,10 +33,17 @@
"libFLAC",
"libaudioutils",
],
+ export_static_lib_headers: [
+ "libFLAC",
+ ],
},
shared_libs: [
"liblog",
],
- header_libs: ["libmedia_headers"],
+
+ header_libs: [
+ "libmedia_headers",
+ "libFLAC-headers",
+ ],
}
diff --git a/media/libstagefright/httplive/PlaylistFetcher.cpp b/media/libstagefright/httplive/PlaylistFetcher.cpp
index c62c2cd..635ecfe 100644
--- a/media/libstagefright/httplive/PlaylistFetcher.cpp
+++ b/media/libstagefright/httplive/PlaylistFetcher.cpp
@@ -160,6 +160,7 @@
mPlaylistTimeUs(-1LL),
mSeqNumber(-1),
mNumRetries(0),
+ mNumRetriesForMonitorQueue(0),
mStartup(true),
mIDRFound(false),
mSeekMode(LiveSession::kSeekModeExactPosition),
@@ -849,7 +850,17 @@
// in the middle of an unfinished download, delay
// playlist refresh as it'll change seq numbers
if (!mDownloadState->hasSavedState()) {
- refreshPlaylist();
+ status_t err = refreshPlaylist();
+ if (err != OK) {
+ if (mNumRetriesForMonitorQueue < kMaxNumRetries) {
+ ++mNumRetriesForMonitorQueue;
+ } else {
+ notifyError(err);
+ }
+ return;
+ } else {
+ mNumRetriesForMonitorQueue = 0;
+ }
}
int64_t targetDurationUs = kMinBufferedDurationUs;
diff --git a/media/libstagefright/httplive/PlaylistFetcher.h b/media/libstagefright/httplive/PlaylistFetcher.h
index d7db54a..5d3f9c1 100644
--- a/media/libstagefright/httplive/PlaylistFetcher.h
+++ b/media/libstagefright/httplive/PlaylistFetcher.h
@@ -145,6 +145,7 @@
sp<M3UParser> mPlaylist;
int32_t mSeqNumber;
int32_t mNumRetries;
+ int32_t mNumRetriesForMonitorQueue;
bool mStartup;
bool mIDRFound;
int32_t mSeekMode;
diff --git a/media/libstagefright/omx/Android.bp b/media/libstagefright/omx/Android.bp
index c06aca5..15952e3 100644
--- a/media/libstagefright/omx/Android.bp
+++ b/media/libstagefright/omx/Android.bp
@@ -43,6 +43,7 @@
"libcutils",
"libstagefright_foundation",
"libstagefright_bufferqueue_helper",
+ "libstagefright_softomx",
"libstagefright_xmlparser",
"libdl",
"libhidlbase",
@@ -51,7 +52,6 @@
"libvndksupport",
"android.hardware.media.omx@1.0",
"android.hardware.graphics.bufferqueue@1.0",
- "libstagefright_omx_soft",
],
export_shared_lib_headers: [
@@ -75,20 +75,12 @@
],
cfi: true,
},
-}
-cc_defaults {
- name: "omx_soft_libs",
- shared_libs: [
- "libutils",
- "liblog",
- "libstagefright_foundation",
- "libstagefright_omx_soft",
- ],
+ compile_multilib: "32",
}
cc_library_shared {
- name: "libstagefright_omx_soft",
+ name: "libstagefright_softomx",
vendor_available: true,
vndk: {
enabled: true,
@@ -106,17 +98,19 @@
"include",
],
- shared_libs: [
- "libutils",
- "liblog",
- "libui",
- "libstagefright_foundation",
+ header_libs: [
+ "media_plugin_headers",
],
- export_shared_lib_headers: [
+ export_header_lib_headers: [
+ "media_plugin_headers",
+ ],
+
+ shared_libs: [
"libstagefright_foundation",
- "libutils",
"liblog",
+ "libui",
+ "libutils",
],
cflags: [
@@ -135,6 +129,36 @@
},
}
+cc_defaults {
+ name: "libstagefright_softomx-defaults",
+ vendor_available: true,
+
+ cflags: [
+ "-Werror",
+ ],
+
+ header_libs: [
+ "media_plugin_headers"
+ ],
+
+ shared_libs: [
+ "libstagefright_softomx",
+ "libstagefright_foundation",
+ "libutils",
+ "liblog",
+ ],
+
+ sanitize: {
+ misc_undefined: [
+ "signed-integer-overflow",
+ "unsigned-integer-overflow",
+ ],
+ cfi: true,
+ },
+
+ compile_multilib: "32",
+}
+
cc_library_shared {
name: "libstagefright_omx_utils",
vendor_available: true,
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 04d62fa..0b203c4 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -7125,24 +7125,6 @@
ALOG_ASSERT(framesRead > 0);
mFramesRead += framesRead;
- if (audio_has_proportional_frames(mFormat)
- && loopCount == lastLoopCountRead + 1) {
- const int64_t readPeriodNs = lastIoEndNs - mLastIoEndNs;
- const double jitterMs =
- TimestampVerifier<int64_t, int64_t>::computeJitterMs(
- {framesRead, readPeriodNs},
- {0, 0} /* lastTimestamp */, mSampleRate);
- const double processMs = (lastIoBeginNs - mLastIoEndNs) * 1e-6;
-
- Mutex::Autolock _l(mLock);
- mIoJitterMs.add(jitterMs);
- mProcessTimeMs.add(processMs);
- }
- // update timing info.
- mLastIoBeginNs = lastIoBeginNs;
- mLastIoEndNs = lastIoEndNs;
- lastLoopCountRead = loopCount;
-
#ifdef TEE_SINK
(void)mTee.write((uint8_t*)mRsmpInBuffer + rear * mFrameSize, framesRead);
#endif
@@ -7302,6 +7284,23 @@
// enable changes in effect chain
unlockEffectChains(effectChains);
// effectChains doesn't need to be cleared, since it is cleared by destructor at scope end
+ if (audio_has_proportional_frames(mFormat)
+ && loopCount == lastLoopCountRead + 1) {
+ const int64_t readPeriodNs = lastIoEndNs - mLastIoEndNs;
+ const double jitterMs =
+ TimestampVerifier<int64_t, int64_t>::computeJitterMs(
+ {framesRead, readPeriodNs},
+ {0, 0} /* lastTimestamp */, mSampleRate);
+ const double processMs = (lastIoBeginNs - mLastIoEndNs) * 1e-6;
+
+ Mutex::Autolock _l(mLock);
+ mIoJitterMs.add(jitterMs);
+ mProcessTimeMs.add(processMs);
+ }
+ // update timing info.
+ mLastIoBeginNs = lastIoBeginNs;
+ mLastIoEndNs = lastIoEndNs;
+ lastLoopCountRead = loopCount;
}
standbyIfNotAlreadyInStandby();
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index 8113c3f..8354ed5 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -858,6 +858,25 @@
}
}
+static status_t getUidForPackage(String16 packageName, int userId, /*inout*/uid_t& uid, int err) {
+ PermissionController pc;
+ uid = pc.getPackageUid(packageName, 0);
+ if (uid <= 0) {
+ ALOGE("Unknown package: '%s'", String8(packageName).string());
+ dprintf(err, "Unknown package: '%s'\n", String8(packageName).string());
+ return BAD_VALUE;
+ }
+
+ if (userId < 0) {
+ ALOGE("Invalid user: %d", userId);
+ dprintf(err, "Invalid user: %d\n", userId);
+ return BAD_VALUE;
+ }
+
+ uid = multiuser_get_uid(userId, uid);
+ return NO_ERROR;
+}
+
Status CameraService::validateConnectLocked(const String8& cameraId,
const String8& clientName8, /*inout*/int& clientUid, /*inout*/int& clientPid,
/*out*/int& originalClientPid) const {
@@ -3315,11 +3334,11 @@
if (in == BAD_TYPE || out == BAD_TYPE || err == BAD_TYPE) {
return BAD_VALUE;
}
- if (args.size() == 3 && args[0] == String16("set-uid-state")) {
+ if (args.size() >= 3 && args[0] == String16("set-uid-state")) {
return handleSetUidState(args, err);
- } else if (args.size() == 2 && args[0] == String16("reset-uid-state")) {
+ } else if (args.size() >= 2 && args[0] == String16("reset-uid-state")) {
return handleResetUidState(args, err);
- } else if (args.size() == 2 && args[0] == String16("get-uid-state")) {
+ } else if (args.size() >= 2 && args[0] == String16("get-uid-state")) {
return handleGetUidState(args, out, err);
} else if (args.size() == 1 && args[0] == String16("help")) {
printHelp(out);
@@ -3330,13 +3349,8 @@
}
status_t CameraService::handleSetUidState(const Vector<String16>& args, int err) {
- PermissionController pc;
- int uid = pc.getPackageUid(args[1], 0);
- if (uid <= 0) {
- ALOGE("Unknown package: '%s'", String8(args[1]).string());
- dprintf(err, "Unknown package: '%s'\n", String8(args[1]).string());
- return BAD_VALUE;
- }
+ String16 packageName = args[1];
+
bool active = false;
if (args[2] == String16("active")) {
active = true;
@@ -3344,31 +3358,52 @@
ALOGE("Expected active or idle but got: '%s'", String8(args[2]).string());
return BAD_VALUE;
}
- mUidPolicy->addOverrideUid(uid, args[1], active);
+
+ int userId = 0;
+ if (args.size() >= 5 && args[3] == String16("--user")) {
+ userId = atoi(String8(args[4]));
+ }
+
+ uid_t uid;
+ if (getUidForPackage(packageName, userId, uid, err) == BAD_VALUE) {
+ return BAD_VALUE;
+ }
+
+ mUidPolicy->addOverrideUid(uid, packageName, active);
return NO_ERROR;
}
status_t CameraService::handleResetUidState(const Vector<String16>& args, int err) {
- PermissionController pc;
- int uid = pc.getPackageUid(args[1], 0);
- if (uid < 0) {
- ALOGE("Unknown package: '%s'", String8(args[1]).string());
- dprintf(err, "Unknown package: '%s'\n", String8(args[1]).string());
+ String16 packageName = args[1];
+
+ int userId = 0;
+ if (args.size() >= 4 && args[2] == String16("--user")) {
+ userId = atoi(String8(args[3]));
+ }
+
+ uid_t uid;
+ if (getUidForPackage(packageName, userId, uid, err) == BAD_VALUE) {
return BAD_VALUE;
}
- mUidPolicy->removeOverrideUid(uid, args[1]);
+
+ mUidPolicy->removeOverrideUid(uid, packageName);
return NO_ERROR;
}
status_t CameraService::handleGetUidState(const Vector<String16>& args, int out, int err) {
- PermissionController pc;
- int uid = pc.getPackageUid(args[1], 0);
- if (uid <= 0) {
- ALOGE("Unknown package: '%s'", String8(args[1]).string());
- dprintf(err, "Unknown package: '%s'\n", String8(args[1]).string());
+ String16 packageName = args[1];
+
+ int userId = 0;
+ if (args.size() >= 4 && args[2] == String16("--user")) {
+ userId = atoi(String8(args[3]));
+ }
+
+ uid_t uid;
+ if (getUidForPackage(packageName, userId, uid, err) == BAD_VALUE) {
return BAD_VALUE;
}
- if (mUidPolicy->isUidActive(uid, args[1])) {
+
+ if (mUidPolicy->isUidActive(uid, packageName)) {
return dprintf(out, "active\n");
} else {
return dprintf(out, "idle\n");
@@ -3377,9 +3412,9 @@
status_t CameraService::printHelp(int out) {
return dprintf(out, "Camera service commands:\n"
- " get-uid-state <PACKAGE> gets the uid state\n"
- " set-uid-state <PACKAGE> <active|idle> overrides the uid state\n"
- " reset-uid-state <PACKAGE> clears the uid state override\n"
+ " get-uid-state <PACKAGE> [--user USER_ID] gets the uid state\n"
+ " set-uid-state <PACKAGE> <active|idle> [--user USER_ID] overrides the uid state\n"
+ " reset-uid-state <PACKAGE> [--user USER_ID] clears the uid state override\n"
" help print this message\n");
}