diff --git a/media/ndk/NdkMediaCodec.cpp b/media/ndk/NdkMediaCodec.cpp index c23f19b9d2..e041533586 100644 --- a/media/ndk/NdkMediaCodec.cpp +++ b/media/ndk/NdkMediaCodec.cpp @@ -221,7 +221,13 @@ void CodecHandler::onMessageReceived(const sp &msg) { break; } - AMediaFormat *aMediaFormat = AMediaFormat_fromMsg(&format); + // Here format is MediaCodec's internal copy of output format. + // Make a copy since the client might modify it. + sp copy; + if (format != nullptr) { + copy = format->dup(); + } + AMediaFormat *aMediaFormat = AMediaFormat_fromMsg(©); Mutex::Autolock _l(mCodec->mAsyncCallbackLock); if (mCodec->mAsyncCallbackUserData != NULL diff --git a/services/camera/libcameraservice/api2/HeicCompositeStream.cpp b/services/camera/libcameraservice/api2/HeicCompositeStream.cpp index b980de0568..410fd2c252 100644 --- a/services/camera/libcameraservice/api2/HeicCompositeStream.cpp +++ b/services/camera/libcameraservice/api2/HeicCompositeStream.cpp @@ -1671,8 +1671,13 @@ void HeicCompositeStream::CodecCallbackHandler::onMessageReceived(const sponHeicFormatChanged(format); + // Here format is MediaCodec's internal copy of output format. + // Make a copy since onHeicFormatChanged() might modify it. + sp formatCopy; + if (format != nullptr) { + formatCopy = format->dup(); + } + parent->onHeicFormatChanged(formatCopy); break; }