Merge "Fix logic error in SkipCutBuffer.cpp"
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 10a6896..a2aefc0 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -1854,9 +1854,11 @@
{
Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig);
const std::unique_ptr<Config> &config = *configLocked;
+ sp<ANativeWindow> nativeWindow = static_cast<ANativeWindow *>(surface.get());
+ status_t err = OK;
+
if (config->mTunneled && config->mSidebandHandle != nullptr) {
- sp<ANativeWindow> nativeWindow = static_cast<ANativeWindow *>(surface.get());
- status_t err = native_window_set_sideband_stream(
+ err = native_window_set_sideband_stream(
nativeWindow.get(),
const_cast<native_handle_t *>(config->mSidebandHandle->handle()));
if (err != OK) {
@@ -1864,6 +1866,15 @@
nativeWindow.get(), config->mSidebandHandle->handle(), err);
return err;
}
+ } else {
+ // Explicitly reset the sideband handle of the window for
+ // non-tunneled video in case the window was previously used
+ // for a tunneled video playback.
+ err = native_window_set_sideband_stream(nativeWindow.get(), nullptr);
+ if (err != OK) {
+ ALOGE("native_window_set_sideband_stream(nullptr) failed! (err %d).", err);
+ return err;
+ }
}
}
return mChannel->setSurface(surface);
diff --git a/media/libmediaplayerservice/Android.bp b/media/libmediaplayerservice/Android.bp
index c5d3c1d..e21f408 100644
--- a/media/libmediaplayerservice/Android.bp
+++ b/media/libmediaplayerservice/Android.bp
@@ -62,6 +62,7 @@
"libstagefright_foundation",
"libstagefright_httplive",
"libutils",
+ "packagemanager_aidl-cpp",
],
header_libs: [
@@ -75,7 +76,10 @@
"libstagefright_timedtext",
],
- export_shared_lib_headers: ["libmedia"],
+ export_shared_lib_headers: [
+ "libmedia",
+ "packagemanager_aidl-cpp",
+ ],
include_dirs: [
"frameworks/av/media/libstagefright/rtsp",
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 4cd8996..5b82542 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -5399,6 +5399,7 @@
notify->setInt32("channel-count", params.nChannels);
notify->setInt32("sample-rate", params.nSampleRate);
notify->setInt32("bitrate", params.nBitRate);
+ notify->setInt32("aac-profile", params.eAACProfile);
break;
}
@@ -9158,4 +9159,19 @@
return OK;
}
+status_t ACodec::querySupportedParameters(std::vector<std::string> *names) {
+ if (!names) {
+ return BAD_VALUE;
+ }
+ return OK;
+}
+
+status_t ACodec::subscribeToParameters([[maybe_unused]] const std::vector<std::string> &names) {
+ return OK;
+}
+
+status_t ACodec::unsubscribeFromParameters([[maybe_unused]] const std::vector<std::string> &names) {
+ return OK;
+}
+
} // namespace android
diff --git a/media/libstagefright/Android.bp b/media/libstagefright/Android.bp
index 5d959cb..8f3eb3a 100644
--- a/media/libstagefright/Android.bp
+++ b/media/libstagefright/Android.bp
@@ -337,6 +337,7 @@
"android.hardware.cas.native@1.0",
"android.hardware.drm@1.0",
"android.hardware.media.omx@1.0",
+ "packagemanager_aidl-cpp",
],
static_libs: [
@@ -363,6 +364,7 @@
"libhidlmemory",
"libmedia",
"android.hidl.allocator@1.0",
+ "packagemanager_aidl-cpp",
],
export_include_dirs: [
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp
index 6fda263..896f94e 100644
--- a/media/libstagefright/MediaCodec.cpp
+++ b/media/libstagefright/MediaCodec.cpp
@@ -2824,6 +2824,20 @@
case kWhatDrainThisBuffer:
{
+ if ((mFlags & kFlagUseBlockModel) == 0 && mTunneled) {
+ sp<RefBase> obj;
+ CHECK(msg->findObject("buffer", &obj));
+ sp<MediaCodecBuffer> buffer = static_cast<MediaCodecBuffer *>(obj.get());
+ if (mFlags & kFlagIsAsync) {
+ // In asynchronous mode, output format change is processed immediately.
+ handleOutputFormatChangeIfNeeded(buffer);
+ } else {
+ postActivityNotificationIfPossible();
+ }
+ mBufferChannel->discardBuffer(buffer);
+ break;
+ }
+
/* size_t index = */updateBuffers(kPortIndexOutput, msg);
if (mState == FLUSHING
diff --git a/media/libstagefright/include/media/stagefright/ACodec.h b/media/libstagefright/include/media/stagefright/ACodec.h
index 4c97b4d..fada573 100644
--- a/media/libstagefright/include/media/stagefright/ACodec.h
+++ b/media/libstagefright/include/media/stagefright/ACodec.h
@@ -69,6 +69,9 @@
virtual void initiateSetInputSurface(const sp<PersistentSurface> &surface);
virtual void initiateStart();
virtual void initiateShutdown(bool keepComponentAllocated = false);
+ virtual status_t querySupportedParameters(std::vector<std::string> *names) override;
+ virtual status_t subscribeToParameters(const std::vector<std::string> &names) override;
+ virtual status_t unsubscribeFromParameters(const std::vector<std::string> &names) override;
status_t queryCapabilities(
const char* owner, const char* name,
diff --git a/media/libstagefright/rtsp/JitterCalculator.cpp b/media/libstagefright/rtsp/JitterCalculator.cpp
index 93b5a83..7e60be2 100644
--- a/media/libstagefright/rtsp/JitterCalculator.cpp
+++ b/media/libstagefright/rtsp/JitterCalculator.cpp
@@ -38,14 +38,13 @@
mInterArrivalJitterUs = inter;
}
-void JitterCalc::putBaseData(int64_t rtpTime, int64_t arrivalTimeUs) {
- // A RTP time wraps around after UINT32_MAX. We must consider this case.
- const int64_t UINT32_MSB = 0x80000000;
- int64_t overflowMask = (mFirstTimeStamp & UINT32_MSB & ~rtpTime) << 1;
- int64_t tempRtpTime = overflowMask | rtpTime;
+void JitterCalc::putBaseData(uint32_t rtpTime, int64_t arrivalTimeUs) {
+ // A RTP time wraps around after UINT32_MAX. Overflow can present.
+ uint32_t diff = 0;
+ __builtin_usub_overflow(rtpTime, mFirstTimeStamp, &diff);
// Base jitter implementation can be various
- int64_t scheduledTimeUs = (tempRtpTime - (int64_t)mFirstTimeStamp) * 1000000ll / mClockRate;
+ int64_t scheduledTimeUs = ((int32_t)diff) * 1000000ll / mClockRate;
int64_t elapsedTimeUs = arrivalTimeUs - mFirstArrivalTimeUs;
int64_t correctionTimeUs = elapsedTimeUs - scheduledTimeUs; // additional propagation delay;
mBaseJitterUs = (mBaseJitterUs * 15 + correctionTimeUs) / 16;
@@ -53,18 +52,13 @@
(long long)mBaseJitterUs, (long long)correctionTimeUs);
}
-void JitterCalc::putInterArrivalData(int64_t rtpTime, int64_t arrivalTimeUs) {
- const int64_t UINT32_MSB = 0x80000000;
- int64_t tempRtpTime = rtpTime;
- int64_t tempLastTimeStamp = mLastTimeStamp;
-
- // A RTP time wraps around after UINT32_MAX. We must consider this case.
- int64_t overflowMask = (mLastTimeStamp ^ rtpTime) & UINT32_MSB;
- tempRtpTime |= ((overflowMask & ~rtpTime) << 1);
- tempLastTimeStamp |= ((overflowMask & ~mLastTimeStamp) << 1);
+void JitterCalc::putInterArrivalData(uint32_t rtpTime, int64_t arrivalTimeUs) {
+ // A RTP time wraps around after UINT32_MAX. Overflow can present.
+ uint32_t diff = 0;
+ __builtin_usub_overflow(rtpTime, mLastTimeStamp, &diff);
// 6.4.1 of RFC3550 defines this interarrival jitter value.
- int64_t diffTimeStampUs = abs(tempRtpTime - tempLastTimeStamp) * 1000000ll / mClockRate;
+ int64_t diffTimeStampUs = abs((int32_t)diff) * 1000000ll / mClockRate;
int64_t diffArrivalUs = arrivalTimeUs - mLastArrivalTimeUs; // Can't be minus
ALOGV("diffTimeStampUs %lld \t\t diffArrivalUs %lld",
(long long)diffTimeStampUs, (long long)diffArrivalUs);
@@ -72,7 +66,7 @@
int64_t varianceUs = diffArrivalUs - diffTimeStampUs;
mInterArrivalJitterUs = (mInterArrivalJitterUs * 15 + abs(varianceUs)) / 16;
- mLastTimeStamp = (uint32_t)rtpTime;
+ mLastTimeStamp = rtpTime;
mLastArrivalTimeUs = arrivalTimeUs;
}
diff --git a/media/libstagefright/rtsp/JitterCalculator.h b/media/libstagefright/rtsp/JitterCalculator.h
index ff36f1f..4f3b761 100644
--- a/media/libstagefright/rtsp/JitterCalculator.h
+++ b/media/libstagefright/rtsp/JitterCalculator.h
@@ -40,8 +40,8 @@
JitterCalc(int32_t clockRate);
void init(uint32_t rtpTime, int64_t arrivalTimeUs, int32_t base, int32_t inter);
- void putInterArrivalData(int64_t rtpTime, int64_t arrivalTime);
- void putBaseData(int64_t rtpTime, int64_t arrivalTimeUs);
+ void putInterArrivalData(uint32_t rtpTime, int64_t arrivalTime);
+ void putBaseData(uint32_t rtpTime, int64_t arrivalTimeUs);
int32_t getBaseJitterMs();
int32_t getInterArrivalJitterMs();
};
diff --git a/media/utils/Android.bp b/media/utils/Android.bp
index 59c2e65..2b1d07e 100644
--- a/media/utils/Android.bp
+++ b/media/utils/Android.bp
@@ -50,6 +50,7 @@
"libhidlbase",
"android.hardware.graphics.bufferqueue@1.0",
"android.hidl.token@1.0-utils",
+ "packagemanager_aidl-cpp",
],
export_static_lib_headers: [
"libbatterystats_aidl",
@@ -68,6 +69,10 @@
"libmedia_headers",
],
+ export_shared_lib_headers: [
+ "packagemanager_aidl-cpp",
+ ],
+
include_dirs: [
// For DEBUGGER_SIGNAL
"system/core/debuggerd/include",
diff --git a/services/audioflinger/Android.bp b/services/audioflinger/Android.bp
index ff3bfd2..324df83 100644
--- a/services/audioflinger/Android.bp
+++ b/services/audioflinger/Android.bp
@@ -75,6 +75,7 @@
"libmemunreachable",
"libmedia_helper",
"libvibrator",
+ "packagemanager_aidl-cpp",
],
static_libs: [
@@ -89,6 +90,7 @@
export_shared_lib_headers: [
"libpermission",
+ "packagemanager_aidl-cpp",
],
cflags: [
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index ae7e05c..721af95 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -1953,6 +1953,11 @@
id.string());
errorCode = ERROR_ILLEGAL_ARGUMENT;
break;
+ case -EBUSY:
+ msg = String8::format("Camera \"%s\" is in use",
+ id.string());
+ errorCode = ERROR_CAMERA_IN_USE;
+ break;
default:
msg = String8::format(
"Setting torch mode of camera \"%s\" to %d failed: %s (%d)",
diff --git a/services/mediacodec/seccomp_policy/mediaswcodec-arm.policy b/services/mediacodec/seccomp_policy/mediaswcodec-arm.policy
index 9058f10..41efce0 100644
--- a/services/mediacodec/seccomp_policy/mediaswcodec-arm.policy
+++ b/services/mediacodec/seccomp_policy/mediaswcodec-arm.policy
@@ -84,5 +84,6 @@
getgid32: 1
getegid32: 1
getgroups32: 1
+sysinfo: 1
@include /apex/com.android.media.swcodec/etc/seccomp_policy/code_coverage.arm.policy
diff --git a/services/mediacodec/seccomp_policy/mediaswcodec-arm64.policy b/services/mediacodec/seccomp_policy/mediaswcodec-arm64.policy
index 4c51a9c..e151a06 100644
--- a/services/mediacodec/seccomp_policy/mediaswcodec-arm64.policy
+++ b/services/mediacodec/seccomp_policy/mediaswcodec-arm64.policy
@@ -78,5 +78,6 @@
getgid: 1
getegid: 1
getgroups: 1
+sysinfo: 1
@include /apex/com.android.media.swcodec/etc/seccomp_policy/code_coverage.arm64.policy
diff --git a/services/mediametrics/Android.bp b/services/mediametrics/Android.bp
index f13ca74..38e2630 100644
--- a/services/mediametrics/Android.bp
+++ b/services/mediametrics/Android.bp
@@ -166,6 +166,11 @@
"libprotobuf-cpp-lite",
"libstatslog",
"libutils",
+ "packagemanager_aidl-cpp",
+ ],
+
+ export_shared_lib_headers: [
+ "packagemanager_aidl-cpp",
],
static_libs: [