diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-05-09 01:25:49 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-05-09 01:25:49 +0000 |
commit | b98bef5089353246729ed4a0cb7eb4f243bdf57c (patch) | |
tree | 3022b31fef3cd99e8f9110ac7a21c81a15b01920 | |
parent | c56d5b6bdf0e6a7a7f800ffadda0f2c5cf0de45f (diff) | |
parent | 7b54ea4a5a43ee47c62ce26850d95a796310bac8 (diff) | |
download | av-sdk-release.tar.gz |
Merge "Snap for 11819063 from 591bc3abbf385a1094ae4e37c7f82e10c3e36227 to sdk-release" into sdk-releasesdk-release
-rw-r--r-- | media/aconfig/codec_fwk.aconfig | 10 | ||||
-rw-r--r-- | media/codec2/sfplugin/CCodec.cpp | 25 | ||||
-rw-r--r-- | media/libaudioclient/aidl/fuzzer/Android.bp | 2 | ||||
-rw-r--r-- | services/camera/virtualcamera/VirtualCameraStream.cc | 44 |
4 files changed, 42 insertions, 39 deletions
diff --git a/media/aconfig/codec_fwk.aconfig b/media/aconfig/codec_fwk.aconfig index 6d934eedbf..9f64a2881a 100644 --- a/media/aconfig/codec_fwk.aconfig +++ b/media/aconfig/codec_fwk.aconfig @@ -108,6 +108,16 @@ flag { } flag { + name: "stop_hal_before_surface" + namespace: "codec_fwk" + description: "Bugfix flag for setting state early to avoid a race condition" + bug: "339247977" + metadata { + purpose: PURPOSE_BUGFIX + } +} + +flag { name: "teamfood" namespace: "codec_fwk" description: "Feature flag to track teamfood population" diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp index 463b63fc7b..20b6d7f719 100644 --- a/media/codec2/sfplugin/CCodec.cpp +++ b/media/codec2/sfplugin/CCodec.cpp @@ -2227,8 +2227,17 @@ void CCodec::stop(bool pushBlankBuffer) { // So we reverse their order for stopUseOutputSurface() to notify C2Fence waiters // prior to comp->stop(). // See also b/300350761. - mChannel->stopUseOutputSurface(pushBlankBuffer); - status_t err = comp->stop(); + // + // The workaround is no longer needed with fetchGraphicBlock & C2Fence changes. + // so we are reverting back to the logical sequence of the operations. + status_t err = C2_OK; + if (android::media::codec::provider_->stop_hal_before_surface()) { + err = comp->stop(); + mChannel->stopUseOutputSurface(pushBlankBuffer); + } else { + mChannel->stopUseOutputSurface(pushBlankBuffer); + err = comp->stop(); + } if (err != C2_OK) { // TODO: convert err into status_t mCallback->onError(UNKNOWN_ERROR, ACTION_CODE_FATAL); @@ -2323,8 +2332,16 @@ void CCodec::release(bool sendCallback, bool pushBlankBuffer) { // So we reverse their order for stopUseOutputSurface() to notify C2Fence waiters // prior to comp->release(). // See also b/300350761. - mChannel->stopUseOutputSurface(pushBlankBuffer); - comp->release(); + // + // The workaround is no longer needed with fetchGraphicBlock & C2Fence changes. + // so we are reverting back to the logical sequence of the operations. + if (android::media::codec::provider_->stop_hal_before_surface()) { + comp->release(); + mChannel->stopUseOutputSurface(pushBlankBuffer); + } else { + mChannel->stopUseOutputSurface(pushBlankBuffer); + comp->release(); + } { Mutexed<State>::Locked state(mState); diff --git a/media/libaudioclient/aidl/fuzzer/Android.bp b/media/libaudioclient/aidl/fuzzer/Android.bp index 02c865d0d0..1071beb542 100644 --- a/media/libaudioclient/aidl/fuzzer/Android.bp +++ b/media/libaudioclient/aidl/fuzzer/Android.bp @@ -74,7 +74,7 @@ cc_defaults { ], fuzz_config: { cc: [ - "android-media-fuzzing-reports@google.com", + "android-audio-fuzzing-reports@google.com", ], componentid: 155276, hotlists: ["4593311"], diff --git a/services/camera/virtualcamera/VirtualCameraStream.cc b/services/camera/virtualcamera/VirtualCameraStream.cc index 03da1716e0..fad6cac2f7 100644 --- a/services/camera/virtualcamera/VirtualCameraStream.cc +++ b/services/camera/virtualcamera/VirtualCameraStream.cc @@ -26,8 +26,6 @@ #include "EGL/egl.h" #include "aidl/android/hardware/camera/device/Stream.h" -#include "aidl/android/hardware/camera/device/StreamBuffer.h" -#include "aidl/android/hardware/graphics/common/PixelFormat.h" #include "aidlcommonsupport/NativeHandle.h" #include "android/hardware_buffer.h" #include "cutils/native_handle.h" @@ -39,52 +37,33 @@ namespace companion { namespace virtualcamera { using ::aidl::android::hardware::camera::device::Stream; -using ::aidl::android::hardware::camera::device::StreamBuffer; using ::aidl::android::hardware::common::NativeHandle; -using ::aidl::android::hardware::graphics::common::PixelFormat; namespace { -sp<GraphicBuffer> createBlobGraphicBuffer(GraphicBufferMapper& mapper, - buffer_handle_t bufferHandle) { - uint64_t allocationSize; - uint64_t usage; - uint64_t layerCount; - if (mapper.getAllocationSize(bufferHandle, &allocationSize) != NO_ERROR || - mapper.getUsage(bufferHandle, &usage) != NO_ERROR || - mapper.getLayerCount(bufferHandle, &layerCount) != NO_ERROR) { - ALOGE("Error fetching metadata for the imported BLOB buffer handle."); - return nullptr; - } - - return sp<GraphicBuffer>::make( - bufferHandle, GraphicBuffer::HandleWrapMethod::TAKE_HANDLE, - allocationSize, /*height=*/1, static_cast<int>(ui::PixelFormat::BLOB), - layerCount, usage, 0); -} - -sp<GraphicBuffer> createYCbCr420GraphicBuffer(GraphicBufferMapper& mapper, - buffer_handle_t bufferHandle) { +sp<GraphicBuffer> createGraphicBuffer(GraphicBufferMapper& mapper, + const buffer_handle_t bufferHandle) { uint64_t width; uint64_t height; uint64_t usage; uint64_t layerCount; + ui::PixelFormat pixelFormat; if (mapper.getWidth(bufferHandle, &width) != NO_ERROR || mapper.getHeight(bufferHandle, &height) != NO_ERROR || mapper.getUsage(bufferHandle, &usage) != NO_ERROR || - mapper.getLayerCount(bufferHandle, &layerCount) != NO_ERROR) { + mapper.getLayerCount(bufferHandle, &layerCount) != NO_ERROR || + mapper.getPixelFormatRequested(bufferHandle, &pixelFormat) != NO_ERROR) { ALOGE("Error fetching metadata for the imported YCbCr420 buffer handle."); return nullptr; } return sp<GraphicBuffer>::make( bufferHandle, GraphicBuffer::HandleWrapMethod::TAKE_HANDLE, width, height, - static_cast<int>(ui::PixelFormat::YCBCR_420_888), /*layers=*/1, usage, - width); + static_cast<int>(pixelFormat), layerCount, usage, width); } std::shared_ptr<AHardwareBuffer> importBufferInternal( - const NativeHandle& aidlHandle, const Stream& streamConfig) { + const NativeHandle& aidlHandle) { if (aidlHandle.fds.empty()) { ALOGE("Empty handle - nothing to import"); return nullptr; @@ -103,12 +82,9 @@ std::shared_ptr<AHardwareBuffer> importBufferInternal( return nullptr; } - sp<GraphicBuffer> buf = - streamConfig.format == PixelFormat::BLOB - ? createBlobGraphicBuffer(mapper, bufferHandle) - : createYCbCr420GraphicBuffer(mapper, bufferHandle); + sp<GraphicBuffer> buf = createGraphicBuffer(mapper, bufferHandle); - if (buf->initCheck() != NO_ERROR) { + if (buf == nullptr || buf->initCheck() != NO_ERROR) { ALOGE("Imported graphic buffer is not correcly initialized."); return nullptr; } @@ -128,7 +104,7 @@ VirtualCameraStream::VirtualCameraStream(const Stream& stream) std::shared_ptr<AHardwareBuffer> VirtualCameraStream::importBuffer( const ::aidl::android::hardware::camera::device::StreamBuffer& buffer) { - auto hwBufferPtr = importBufferInternal(buffer.buffer, mStreamConfig); + auto hwBufferPtr = importBufferInternal(buffer.buffer); if (hwBufferPtr != nullptr) { std::lock_guard<std::mutex> lock(mLock); mBuffers.emplace(std::piecewise_construct, |