Merge "Make BufferQueue based block pool non-blocking" into qt-dev am: d3757001b9
am: d57f333d6f
Change-Id: I9f63948cf2120b17cb8520c41d5d70b6cb89617e
diff --git a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
index 3fbbc09..c19fcf6 100644
--- a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+++ b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
@@ -2702,7 +2702,7 @@
name[*pValueSize - 1] = 0;
*pValueSize = strlen(name) + 1;
ALOGVV("%s EQ_PARAM_GET_PRESET_NAME preset %d, name %s len %d",
- __func__, preset, gEqualizerPresets[preset].name, *pValueSize);
+ __func__, preset, name, *pValueSize);
} break;
diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp
index 83b87d9..86486db 100644
--- a/media/libstagefright/NuMediaExtractor.cpp
+++ b/media/libstagefright/NuMediaExtractor.cpp
@@ -430,18 +430,6 @@
return OK;
}
-void NuMediaExtractor::releaseOneSample(TrackInfo *info) {
- if (info == NULL || info->mSamples.empty()) {
- return;
- }
-
- auto it = info->mSamples.begin();
- if (it->mBuffer != NULL) {
- it->mBuffer->release();
- }
- info->mSamples.erase(it);
-}
-
void NuMediaExtractor::releaseTrackSamples(TrackInfo *info) {
if (info == NULL) {
return;
@@ -472,7 +460,7 @@
fetchTrackSamples(info, seekTimeUs, mode);
status_t err = info->mFinalResult;
- if (err != OK && err != ERROR_END_OF_STREAM) {
+ if (err != OK && err != ERROR_END_OF_STREAM && info->mSamples.empty()) {
return err;
}
@@ -527,14 +515,6 @@
info->mFinalResult = err;
if (err != OK && err != ERROR_END_OF_STREAM) {
ALOGW("read on track %zu failed with error %d", info->mTrackIndex, err);
- size_t count = mediaBuffers.size();
- for (size_t id = 0; id < count; ++id) {
- MediaBufferBase *mbuf = mediaBuffers[id];
- if (mbuf != NULL) {
- mbuf->release();
- }
- }
- return;
}
size_t count = mediaBuffers.size();
@@ -584,8 +564,26 @@
TrackInfo *info = &mSelectedTracks.editItemAt(minIndex);
- releaseOneSample(info);
+ if (info == NULL || info->mSamples.empty()) {
+ return ERROR_END_OF_STREAM;
+ }
+ auto it = info->mSamples.begin();
+ if (it->mBuffer != NULL) {
+ it->mBuffer->release();
+ }
+ info->mSamples.erase(it);
+
+ if (info->mSamples.empty()) {
+ minIndex = fetchAllTrackSamples();
+ if (minIndex < 0) {
+ return ERROR_END_OF_STREAM;
+ }
+ info = &mSelectedTracks.editItemAt(minIndex);
+ if (info == NULL || info->mSamples.empty()) {
+ return ERROR_END_OF_STREAM;
+ }
+ }
return OK;
}
diff --git a/media/libstagefright/VideoFrameSchedulerBase.cpp b/media/libstagefright/VideoFrameSchedulerBase.cpp
index 77107ff..912dcf3 100644
--- a/media/libstagefright/VideoFrameSchedulerBase.cpp
+++ b/media/libstagefright/VideoFrameSchedulerBase.cpp
@@ -115,6 +115,7 @@
#endif
+__attribute__((no_sanitize("integer")))
bool VideoFrameSchedulerBase::PLL::fit(
nsecs_t phase, nsecs_t period, size_t numSamplesToUse,
int64_t *a, int64_t *b, int64_t *err) {
diff --git a/media/libstagefright/include/media/stagefright/NuMediaExtractor.h b/media/libstagefright/include/media/stagefright/NuMediaExtractor.h
index f34f9b6..4307110 100644
--- a/media/libstagefright/include/media/stagefright/NuMediaExtractor.h
+++ b/media/libstagefright/include/media/stagefright/NuMediaExtractor.h
@@ -149,7 +149,6 @@
MediaSource::ReadOptions::SeekMode mode =
MediaSource::ReadOptions::SEEK_CLOSEST_SYNC);
- void releaseOneSample(TrackInfo *info);
void releaseTrackSamples(TrackInfo *info);
void releaseAllTrackSamples();
diff --git a/media/libstagefright/rtsp/ASessionDescription.cpp b/media/libstagefright/rtsp/ASessionDescription.cpp
index 9263565..2b42040 100644
--- a/media/libstagefright/rtsp/ASessionDescription.cpp
+++ b/media/libstagefright/rtsp/ASessionDescription.cpp
@@ -141,6 +141,12 @@
AString key, value;
ssize_t equalPos = line.find("=");
+ /* The condition 'if (line.size() < 2 || line.c_str()[1] != '=')' a few lines above
+ * ensures '=' is at position 1. However for robustness we do the following check.
+ */
+ if (equalPos < 0) {
+ return false;
+ }
key = AString(line, 0, equalPos + 1);
value = AString(line, equalPos + 1, line.size() - equalPos - 1);
diff --git a/services/mediaextractor/Android.mk b/services/mediaextractor/Android.mk
index 9db6ed1..e8a59df 100644
--- a/services/mediaextractor/Android.mk
+++ b/services/mediaextractor/Android.mk
@@ -25,7 +25,7 @@
LOCAL_SHARED_LIBRARIES := libc_scudo
endif
LOCAL_SHARED_LIBRARIES += libmedia libmediaextractorservice libbinder libutils \
- liblog libandroidicu libavservices_minijail
+ liblog libavservices_minijail
LOCAL_MODULE:= mediaextractor
LOCAL_INIT_RC := mediaextractor.rc
LOCAL_C_INCLUDES := frameworks/av/media/libmedia
diff --git a/services/mediaextractor/main_extractorservice.cpp b/services/mediaextractor/main_extractorservice.cpp
index bb9a56b..4a85140 100644
--- a/services/mediaextractor/main_extractorservice.cpp
+++ b/services/mediaextractor/main_extractorservice.cpp
@@ -15,7 +15,6 @@
** limitations under the License.
*/
-#include <aicu/AIcu.h>
#include <fcntl.h>
#include <sys/prctl.h>
#include <sys/wait.h>
@@ -58,8 +57,6 @@
SetUpMinijail(kSystemSeccompPolicyPath, kVendorSeccompPolicyPath);
- AIcu_initializeIcuOrDie();
-
strcpy(argv[0], "media.extractor");
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();